AudioAlpha

Financial podcast intelligence platform — sentiment, narrative, and asset signals from 100+ podcasts

我该使用它吗

质量与安全性

A
描述质量
98%
模式完整度
93%
命名质量
100%
投毒风险
80%
权限匹配度
100%
协议合规性
100%

发现(2)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains suspicious base64-like encoded string在 get_ticker_leaderboard 中

基于对工具定义和协议合规性的自动分析。

上下文开销

~5,271token 数(工具定义)
~2.1 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 4.12%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "mcp": {
      "url": "https://www.audioalpha.io/api/mcp"
    }
  }
}

远程端点

https://www.audioalpha.io/api/mcpstreamable-http

它能做什么

工具清单

工具(23)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢get_market_snapshot(date, snapshot_type, version_number, version_info)

Get the overall crypto market daily snapshot (daily narrative insight report) for a given date. Returns daily headline, delta narrative, regime + justification, α-sentiment OHLC scores (0-10 scale), α-sentiment z-scores (-3 to +3), narrative summary, narrative intesity score, market psychology, consensus score, key tensions, surprise mentions (ticker + why + impact score), episode volume score, and wordcloud.

输入模式

{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "description": "Date in YYYY-MM-DD format. Omit for latest."
    },
    "snapshot_type": {
      "type": "string",
      "description": "Asset universe to draw the snapshot from. Currently only \"crypto\" is available; \"tradfi\" is reserved for a future release. Defaults to \"crypto\".",
      "default": "crypto",
      "enum": [
        "crypto",
        "tradfi"
      ]
    },
    "version_number": {
      "type": "integer",
      "description": "Which revision of the snapshot to return. Each snapshot date can be re-generated multiple times (version 1, 2, 3, …). Use -1 (the default) to always get the latest authoritative version (is_latest = true). If you request a specific version that does not exist for the given date + snapshot_type, the latest version is returned instead.",
      "default": -1,
      "minimum": -1
    },
    "version_info": {
      "type": "boolean",
      "description": "When true, include version metadata in the response: both version_num (the revision number) and version_label (a human-readable label like \"eod_utc\" for the initial end-of-day build, or \"revised\" when a later-indexed podcast triggered a regeneration). When false (the default), neither field is included. Note: the snapshot generation \"status\" field is ALWAYS returned regardless of this flag.",
      "default": false
    }
  },
  "required": []
}
🟢get_market_themes(date, snapshot_type, version_number, version_info)

Get narrative themes dominating the crypto podcast space on a given date. Each theme includes title, summary, podcast coverage count, fragility score, novelty score and counterfactual narrative.

输入模式

{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "description": "Date in YYYY-MM-DD format. Omit for latest."
    },
    "snapshot_type": {
      "type": "string",
      "description": "Asset universe to draw the snapshot from. Currently only \"crypto\" is available; \"tradfi\" is reserved for a future release. Defaults to \"crypto\".",
      "default": "crypto",
      "enum": [
        "crypto",
        "tradfi"
      ]
    },
    "version_number": {
      "type": "integer",
      "description": "Which revision of the snapshot to return. Each snapshot date can be re-generated multiple times (version 1, 2, 3, …). Use -1 (the default) to always get the latest authoritative version (is_latest = true). If you request a specific version that does not exist for the given date + snapshot_type, the latest version is returned instead.",
      "default": -1,
      "minimum": -1
    },
    "version_info": {
      "type": "boolean",
      "description": "When true, include version metadata in the response: both version_num (the revision number) and version_label (a human-readable label like \"eod_utc\" for the initial end-of-day build, or \"revised\" when a later-indexed podcast triggered a regeneration). When false (the default), neither field is included. Note: the snapshot generation \"status\" field is ALWAYS returned regardless of this flag.",
      "default": false
    }
  },
  "required": []
}
🟢get_market_signals(date, snapshot_type, version_number, version_info)

Get scenario strategic signals across all assets for a given date. Each signal includes signal type, horizon, scenario description, trigger conditions, confidence score and invalidating conditions. (Not financial advice.)

输入模式

{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "description": "Date in YYYY-MM-DD format. Omit for latest."
    },
    "snapshot_type": {
      "type": "string",
      "description": "Asset universe to draw the snapshot from. Currently only \"crypto\" is available; \"tradfi\" is reserved for a future release. Defaults to \"crypto\".",
      "default": "crypto",
      "enum": [
        "crypto",
        "tradfi"
      ]
    },
    "version_number": {
      "type": "integer",
      "description": "Which revision of the snapshot to return. Each snapshot date can be re-generated multiple times (version 1, 2, 3, …). Use -1 (the default) to always get the latest authoritative version (is_latest = true). If you request a specific version that does not exist for the given date + snapshot_type, the latest version is returned instead.",
      "default": -1,
      "minimum": -1
    },
    "version_info": {
      "type": "boolean",
      "description": "When true, include version metadata in the response: both version_num (the revision number) and version_label (a human-readable label like \"eod_utc\" for the initial end-of-day build, or \"revised\" when a later-indexed podcast triggered a regeneration). When false (the default), neither field is included. Note: the snapshot generation \"status\" field is ALWAYS returned regardless of this flag.",
      "default": false
    }
  },
  "required": []
}
🟢get_market_featured_quotes(date, snapshot_type, version_number, version_info)

Get the top featured quotes from crypto podcasts for a given date, ranked by relevance score.

输入模式

{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "description": "Date in YYYY-MM-DD format. Omit for latest."
    },
    "snapshot_type": {
      "type": "string",
      "description": "Asset universe to draw the snapshot from. Currently only \"crypto\" is available; \"tradfi\" is reserved for a future release. Defaults to \"crypto\".",
      "default": "crypto",
      "enum": [
        "crypto",
        "tradfi"
      ]
    },
    "version_number": {
      "type": "integer",
      "description": "Which revision of the snapshot to return. Each snapshot date can be re-generated multiple times (version 1, 2, 3, …). Use -1 (the default) to always get the latest authoritative version (is_latest = true). If you request a specific version that does not exist for the given date + snapshot_type, the latest version is returned instead.",
      "default": -1,
      "minimum": -1
    },
    "version_info": {
      "type": "boolean",
      "description": "When true, include version metadata in the response: both version_num (the revision number) and version_label (a human-readable label like \"eod_utc\" for the initial end-of-day build, or \"revised\" when a later-indexed podcast triggered a regeneration). When false (the default), neither field is included. Note: the snapshot generation \"status\" field is ALWAYS returned regardless of this flag.",
      "default": false
    }
  },
  "required": []
}
🟢get_market_episodes(date)

Get all crypto podcast episodes published on a given date, including podcast name, α-sentiment score (0-10 scale), and transcript summary.

输入模式

{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "description": "Date in YYYY-MM-DD format. Omit for latest."
    }
  },
  "required": []
}
🟢get_market_history(days, date, snapshot_type, version_info)

Fetch a historical time series of daily market-level snapshots (overall market sentiment, not a single ticker). Call this when the user asks how the overall market mood/regime has trended over time, wants to chart market α-sentiment / z-score over a window, or needs a range of daily market snapshots to compute averages or momentum. Optional: `days` (1-1000, default 30; tier may cap lower). For a single ticker's history use get_ticker_history instead. Tier caps on `days`: free=7, alpha=365, pro=730, enterprise=1000. The `date` parameter (end-date anchor) is only honored for enterprise tier — for all other tiers it is silently ignored and the window always ends at the most recent available snapshot. Returns: array of daily market snapshots (oldest first), each with snapshot_date plus all standard MarketSnapshot fields. Response also reports tier_cap, effective_days, start_date, end_date and date_param_honored.

输入模式

{
  "type": "object",
  "properties": {
    "days": {
      "type": "integer",
      "description": "Number of historical days to return, counting back from the anchor date. Tier-capped: free=7, alpha=365, pro=730, enterprise=1000. Requests above the cap are silently capped.",
      "default": 30,
      "maximum": 1000
    },
    "date": {
      "type": "string",
      "description": "Date in YYYY-MM-DD format. Omit for latest."
    },
    "snapshot_type": {
      "type": "string",
      "description": "Asset universe to draw the snapshot from. Currently only \"crypto\" is available; \"tradfi\" is reserved for a future release. Defaults to \"crypto\".",
      "default": "crypto",
      "enum": [
        "crypto",
        "tradfi"
      ]
    },
    "version_info": {
      "type": "boolean",
      "description": "When true, include version metadata in the response: both version_num (the revision number) and version_label (a human-readable label like \"eod_utc\" for the initial end-of-day build, or \"revised\" when a later-indexed podcast triggered a regeneration). When false (the default), neither field is included. Note: the snapshot generation \"status\" field is ALWAYS returned regardless of this flag.",
      "default": false
    }
  },
  "required": []
}
🟢get_ticker_snapshot(ticker, date, snapshot_type, version_number, version_info)

Get detailed daily insights snapshot for a specific crypto asset. Returns daily asset summary, α-index (0-1), α-pulse (0-1), episode count, attention share (0-1), α-sentiment OHLC and 1-7 day delta (0-10 scale), bull/bear/neutral ratios (0-1), consensus score (0-1), novelty score (0-1), momentum, narrative intensity, narrative summary.

输入模式

{
  "type": "object",
  "properties": {
    "ticker": {
      "type": "string",
      "description": "Asset ticker symbol. IMPORTANT: all crypto tickers MUST be suffixed with \"-USD\" — e.g. BTC-USD, ETH-USD, SOL-USD. Bare symbols like \"BTC\" will not match and will return an empty / 404 response."
    },
    "date": {
      "type": "string",
      "description": "Date in YYYY-MM-DD format. Omit for latest."
    },
    "snapshot_type": {
      "type": "string",
      "description": "Asset universe to draw the snapshot from. Currently only \"crypto\" is available; \"tradfi\" is reserved for a future release. Defaults to \"crypto\".",
      "default": "crypto",
      "enum": [
        "crypto",
        "tradfi"
      ]
    },
    "version_number": {
      "type": "integer",
      "description": "Which revision of the snapshot to return. Each snapshot date can be re-generated multiple times (version 1, 2, 3, …). Use -1 (the default) to always get the latest authoritative version (is_latest = true). If you request a specific version that does not exist for the given date + snapshot_type, the latest version is returned instead.",
      "default": -1,
      "minimum": -1
    },
    "version_info": {
      "type": "boolean",
      "description": "When true, include version metadata in the response: both version_num (the revision number) and version_label (a human-readable label like \"eod_utc\" for the initial end-of-day build, or \"revised\" when a later-indexed podcast triggered a regeneration). When false (the default), neither field is included. Note: the snapshot generation \"status\" field is ALWAYS returned regardless of this flag.",
      "default": false
    }
  },
  "required": [
    "ticker"
  ]
}
🟢get_ticker_signals(ticker, date, snapshot_type, version_number, version_info)

Get scenario signals for a specific crypto asset. Returns signal type, time horizon, scenario description, trigger conditions, confidence score and invalidating conditions. (Not financial advice.)

输入模式

{
  "type": "object",
  "properties": {
    "ticker": {
      "type": "string",
      "description": "Asset ticker symbol. IMPORTANT: all crypto tickers MUST be suffixed with \"-USD\" — e.g. BTC-USD, ETH-USD, SOL-USD. Bare symbols like \"BTC\" will not match and will return an empty / 404 response."
    },
    "date": {
      "type": "string",
      "description": "Date in YYYY-MM-DD format. Omit for latest."
    },
    "snapshot_type": {
      "type": "string",
      "description": "Asset universe to draw the snapshot from. Currently only \"crypto\" is available; \"tradfi\" is reserved for a future release. Defaults to \"crypto\".",
      "default": "crypto",
      "enum": [
        "crypto",
        "tradfi"
      ]
    },
    "version_number": {
      "type": "integer",
      "description": "Which revision of the snapshot to return. Each snapshot date can be re-generated multiple times (version 1, 2, 3, …). Use -1 (the default) to always get the latest authoritative version (is_latest = true). If you request a specific version that does not exist for the given date + snapshot_type, the latest version is returned instead.",
      "default": -1,
      "minimum": -1
    },
    "version_info": {
      "type": "boolean",
      "description": "When true, include version metadata in the response: both version_num (the revision number) and version_label (a human-readable label like \"eod_utc\" for the initial end-of-day build, or \"revised\" when a later-indexed podcast triggered a regeneration). When false (the default), neither field is included. Note: the snapshot generation \"status\" field is ALWAYS returned regardless of this flag.",
      "default": false
    }
  },
  "required": [
    "ticker"
  ]
}
🟢get_ticker_featured_quotes(ticker, date, snapshot_type, version_number, version_info)

Get featured podcast quotes for a specific crypto asset on a given date, with α-sentiment scores (0-10 scale), ranked by selection score.

输入模式

{
  "type": "object",
  "properties": {
    "ticker": {
      "type": "string",
      "description": "Asset ticker symbol. IMPORTANT: all crypto tickers MUST be suffixed with \"-USD\" — e.g. BTC-USD, ETH-USD, SOL-USD. Bare symbols like \"BTC\" will not match and will return an empty / 404 response."
    },
    "date": {
      "type": "string",
      "description": "Date in YYYY-MM-DD format. Omit for latest."
    },
    "snapshot_type": {
      "type": "string",
      "description": "Asset universe to draw the snapshot from. Currently only \"crypto\" is available; \"tradfi\" is reserved for a future release. Defaults to \"crypto\".",
      "default": "crypto",
      "enum": [
        "crypto",
        "tradfi"
      ]
    },
    "version_number": {
      "type": "integer",
      "description": "Which revision of the snapshot to return. Each snapshot date can be re-generated multiple times (version 1, 2, 3, …). Use -1 (the default) to always get the latest authoritative version (is_latest = true). If you request a specific version that does not exist for the given date + snapshot_type, the latest version is returned instead.",
      "default": -1,
      "minimum": -1
    },
    "version_info": {
      "type": "boolean",
      "description": "When true, include version metadata in the response: both version_num (the revision number) and version_label (a human-readable label like \"eod_utc\" for the initial end-of-day build, or \"revised\" when a later-indexed podcast triggered a regeneration). When false (the default), neither field is included. Note: the snapshot generation \"status\" field is ALWAYS returned regardless of this flag.",
      "default": false
    }
  },
  "required": [
    "ticker"
  ]
}
🟢get_ticker_history(ticker, days, date, snapshot_type, version_info)

Fetch a historical time series of daily snapshots for one crypto ticker. Call this when the user asks about a ticker's recent trend, wants to chart or plot α-sentiment / α-index / α-pulse over time, asks "how has X changed over the last N days", or needs a window of data to compute averages, momentum, or volatility. Required: `ticker` — MUST be suffixed with "-USD" (e.g. "BTC-USD", "ETH-USD", "SOL-USD"). Bare symbols like "BTC" will not match. Optional: `days` (1-1000, default 30; tier may cap lower). Tier caps on `days`: free=7, alpha=365, pro=730, enterprise=1000. The `date` parameter (end-date anchor) is only honored for enterprise tier — for all other tiers it is silently ignored and the window always ends at the most recent available snapshot. This is by design to prevent back-testing on arbitrary historical periods on lower tiers. Returns: array of daily snapshots (oldest first), each with snapshot_date plus all standard AssetSnapshot fields. Response also reports tier_cap, effective_days, start_date, end_date and date_param_honored.

输入模式

{
  "type": "object",
  "properties": {
    "ticker": {
      "type": "string",
      "description": "Asset ticker symbol. IMPORTANT: all crypto tickers MUST be suffixed with \"-USD\" — e.g. BTC-USD, ETH-USD, SOL-USD. Bare symbols like \"BTC\" will not match and will return an empty / 404 response."
    },
    "days": {
      "type": "integer",
      "description": "Number of historical days to return, counting back from the anchor date. Tier-capped: free=7, alpha=365, pro=730, enterprise=1000. Requests above the cap are silently capped.",
      "default": 30,
      "maximum": 1000
    },
    "date": {
      "type": "string",
      "description": "Date in YYYY-MM-DD format. Omit for latest."
    },
    "snapshot_type": {
      "type": "string",
      "description": "Asset universe to draw the snapshot from. Currently only \"crypto\" is available; \"tradfi\" is reserved for a future release. Defaults to \"crypto\".",
      "default": "crypto",
      "enum": [
        "crypto",
        "tradfi"
      ]
    },
    "version_info": {
      "type": "boolean",
      "description": "When true, include version metadata in the response: both version_num (the revision number) and version_label (a human-readable label like \"eod_utc\" for the initial end-of-day build, or \"revised\" when a later-indexed podcast triggered a regeneration). When false (the default), neither field is included. Note: the snapshot generation \"status\" field is ALWAYS returned regardless of this flag.",
      "default": false
    }
  },
  "required": [
    "ticker"
  ]
}
🟢get_ticker_leaderboard(date, category, limit, snapshot_type, version_info)

Get ticker leaderboard for a given date. Without category param, returns highlights object that includes assetSnapshot of top_alpha_index, top_alpha_pulse, top_riser, top_dropper, most_mentioned, most_surprising. With category param (alpha_index/alpha_pulse/risers/droppers/mentioned/surprising), returns array of LeaderboardEntry.

输入模式

{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "description": "Date in YYYY-MM-DD format. Omit for latest."
    },
    "category": {
      "type": "string",
      "description": "Leaderboard category: alpha_index, alpha_pulse, risers, droppers, mentioned, or surprising. Omit for highlights (top 1 from each)."
    },
    "limit": {
      "type": "integer",
      "description": "Number of episodes to return (max 20, default 5)",
      "default": 5,
      "maximum": 20
    },
    "snapshot_type": {
      "type": "string",
      "description": "Asset universe to draw the snapshot from. Currently only \"crypto\" is available; \"tradfi\" is reserved for a future release. Defaults to \"crypto\".",
      "default": "crypto",
      "enum": [
        "crypto",
        "tradfi"
      ]
    },
    "version_info": {
      "type": "boolean",
      "description": "When true, include version metadata in the response: both version_num (the revision number) and version_label (a human-readable label like \"eod_utc\" for the initial end-of-day build, or \"revised\" when a later-indexed podcast triggered a regeneration). When false (the default), neither field is included. Note: the snapshot generation \"status\" field is ALWAYS returned regardless of this flag.",
      "default": false
    }
  },
  "required": []
}
🟢search_podcasts(q)

Search for crypto podcasts by name. Returns podcast ID, name, artist, language, x-handle, and artwork.

输入模式

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "description": "Podcast name search query e.g. unchained, bankless, chopping block"
    }
  },
  "required": [
    "q"
  ]
}
🟢get_podcast_episodes(podcast_id, limit)

Get recent episodes for a specific podcast by podcast ID.

输入模式

{
  "type": "object",
  "properties": {
    "podcast_id": {
      "type": "string",
      "description": "Podcast ID from search_podcasts"
    },
    "limit": {
      "type": "integer",
      "description": "Number of episodes to return (max 20, default 5)",
      "default": 5,
      "maximum": 20
    }
  },
  "required": [
    "podcast_id"
  ]
}
🟢get_podcast_latest(podcast_id)

Get the latest episode for a specific podcast, including title, episode_id, transcript summary, episode artwork, α-sentiment (crypto markets), and traditional markets sentiment.

输入模式

{
  "type": "object",
  "properties": {
    "podcast_id": {
      "type": "string",
      "description": "Podcast ID from search_podcasts"
    }
  },
  "required": [
    "podcast_id"
  ]
}
🟢get_podcast_latest_full(podcast_id)

Get the latest episode for a podcast with full details including quotes and asset mentions.

输入模式

{
  "type": "object",
  "properties": {
    "podcast_id": {
      "type": "string",
      "description": "Podcast ID from search_podcasts"
    }
  },
  "required": [
    "podcast_id"
  ]
}
🟡get_episode_details(episode_id)

Get metadata for a specific episode including title, publish date, duration, α-sentiment score (crypto) (0-10 scale), traditional markets sentiment (0-10), and podcast info.

输入模式

{
  "type": "object",
  "properties": {
    "episode_id": {
      "type": "string",
      "description": "Episode ID"
    }
  },
  "required": [
    "episode_id"
  ]
}
🟢get_episode_summary(episode_id)

Get the transcript summary for a specific episode, including assets mentioned and their α-sentiment (0-10 scale).

输入模式

{
  "type": "object",
  "properties": {
    "episode_id": {
      "type": "string",
      "description": "Episode ID"
    }
  },
  "required": [
    "episode_id"
  ]
}
🟢get_episode_quotes(episode_id)

Get all quotes extracted from a specific episode, with speaker, α-sentiment score (0-10 scale) and associated ticker.

输入模式

{
  "type": "object",
  "properties": {
    "episode_id": {
      "type": "string",
      "description": "Episode ID"
    }
  },
  "required": [
    "episode_id"
  ]
}
🟢get_episode_transcript(episode_id)

Get the full transcript for a specific episode including speaker diarization and speaker name mapping. Pro and Enterprise plans only.

输入模式

{
  "type": "object",
  "properties": {
    "episode_id": {
      "type": "string",
      "description": "Episode ID"
    }
  },
  "required": [
    "episode_id"
  ]
}
🟢get_episode_full(episode_id)

Get full episode data in one call — details, summary, quotes and asset mentions.

输入模式

{
  "type": "object",
  "properties": {
    "episode_id": {
      "type": "string",
      "description": "Episode ID"
    }
  },
  "required": [
    "episode_id"
  ]
}
🟢get_my_favorite_assets(snapshot_type, version_info)

Get the list of crypto assets the authenticated user has favorited on AudioAlpha. Always returns the latest authoritative snapshot (is_latest) per asset.

输入模式

{
  "type": "object",
  "properties": {
    "snapshot_type": {
      "type": "string",
      "description": "Asset universe to draw the snapshot from. Currently only \"crypto\" is available; \"tradfi\" is reserved for a future release. Defaults to \"crypto\".",
      "default": "crypto",
      "enum": [
        "crypto",
        "tradfi"
      ]
    },
    "version_info": {
      "type": "boolean",
      "description": "When true, include version metadata in the response: both version_num (the revision number) and version_label (a human-readable label like \"eod_utc\" for the initial end-of-day build, or \"revised\" when a later-indexed podcast triggered a regeneration). When false (the default), neither field is included. Note: the snapshot generation \"status\" field is ALWAYS returned regardless of this flag.",
      "default": false
    }
  },
  "required": []
}
🟢get_my_favorite_podcasts

Get the list of podcasts the authenticated user follows on AudioAlpha.

输入模式

{
  "type": "object",
  "properties": {},
  "required": []
}
🟢get_my_feed(episodes_lookback, snapshot_type, version_info)

Get a personalized feed based on the user's favorite assets and followed podcasts. Always uses the latest authoritative snapshot (is_latest). Returns snapshot_date and an array of assets, each containing: ticker, daily snapshot (sentiment, attention, consensus, momentum, summary), trading signals (with horizon, scenario, trigger, confidence, invalidating condition), and curated quotes (ranked with selection reason).

输入模式

{
  "type": "object",
  "properties": {
    "episodes_lookback": {
      "type": "integer",
      "description": "Number of recent episodes per followed podcast (max 10, default 3)",
      "default": 3,
      "maximum": 10
    },
    "snapshot_type": {
      "type": "string",
      "description": "Asset universe to draw the snapshot from. Currently only \"crypto\" is available; \"tradfi\" is reserved for a future release. Defaults to \"crypto\".",
      "default": "crypto",
      "enum": [
        "crypto",
        "tradfi"
      ]
    },
    "version_info": {
      "type": "boolean",
      "description": "When true, include version metadata in the response: both version_num (the revision number) and version_label (a human-readable label like \"eod_utc\" for the initial end-of-day build, or \"revised\" when a later-indexed podcast triggered a regeneration). When false (the default), neither field is included. Note: the snapshot generation \"status\" field is ALWAYS returned regardless of this flag.",
      "default": false
    }
  },
  "required": []
}

社区

评价此服务器

证据

最近观测

已验证未记录版本23 个工具
已验证未记录版本23 个工具