SuperAPI AI 工具集

apple-podcasts-mcp

apple-podcasts-mcp 是一个只读的 MCP 服务器,用于让 AI 智能体访问 Apple Podcasts Connect Reporter 的节目分析数据,包括播放次数、独立听众、深度听众、关注者数量以及单集收听情况。这些数据属于节目所有者一侧,Apple 的公开目录 API 并不提供。使用该服务器需要拥有 Apple Podcasters Program 会员资格,因为 Reporter 通过 vendor number 识别用户,而 vendor number 是会员注册后获得的。该服务器不查询公开目录、不获取评分评论、不涉及订阅和收入数据,也不提供下载次数。它通过显式日期范围和调用上限来限制 Reporter 请求,避免上下文窗口被大量原始数据占用。项目已发布在 npm 上,可通过 npx 运行,并支持在 Claude Code、Codex 等 MCP 客户端中配置。注意:该实现基于 Apple 的 Reporter 文档和手工编写的测试夹具,尚未在真实 Apple 账户上验证过。

访问官网

工具介绍

用途

apple-podcasts-mcp 是一个 MCP(Model Context Protocol)服务器,用于让 AI 智能体读取 Apple Podcasts Connect Reporter 中属于节目所有者的分析数据。它提供播放次数、独立听众、深度听众、关注者数量以及单集收听情况等指标。这些数据位于 Apple Podcasts Connect 和 Reporter 服务之后,不在 Apple 的公开目录 API 中。

该服务器是只读的。Reporter 本身只读取数据,因此该服务器无法更改节目、单集或账户。

主要能力

  • 通过 MCP 工具提供 Apple Podcasts 所有者侧分析数据。
  • 支持按日期范围查询,并限制单次工具调用的 Reporter 请求数量(硬上限 31)。
  • 提供摘要、单集列表和关注者数据等工具。
  • 每个指标通过别名表解析列名,并在响应中报告 resolvedColumns 和 unmappedColumns。
  • 处理 Reporter 的数值错误码,将其映射为类型化错误。
  • 支持可选的 APPLE_PODCASTS_ACCOUNT_ID 环境变量,用于多账户场景。

使用方式

前置条件

使用该服务器需要 Apple Podcasters Program 会员资格。Reporter 通过 vendor number 识别用户,而 vendor number 是会员注册后获得的。标准的免费 Podcasts Connect 账户没有 vendor number,其 Account → Details 页面显示的是 account UUID,这是不同的标识符,无法用于此处。会员注册需要支付年费,并要求具有税务和银行详细信息的法律实体。

如果未注册会员,则无需配置,该服务器无法提供帮助,应直接在 Podcasts Connect 的 Analytics 部分查看数据。

获取 vendor number 和访问令牌

两者均来自 Apple Podcasts 的 Reporter 侧,需要 Apple Podcasters Program 会员资格。已注册账户通过 Apple 的 Reporter 工具获取 vendor number 和访问令牌,具体记录在 Reporter User Guide 中。Reporter 的 generateToken 命令签发访问令牌;viewToken 显示当前令牌及其到期时间。

Apple 文档中有两个约束需要注意:

  • 每个 Apple Account 只能有一个活动令牌。生成新令牌会立即使之前的令牌过期。如果账户上还有其他东西使用 Reporter,生成令牌会静默破坏它,且故障看起来与过期完全相同。
  • 令牌管理不应自动化。Apple 声明这些命令“不适用于自动化使用,访问可能受到速率限制”,因此不要编写轮换脚本。

配置 MCP 客户端

该服务器已发布在 npm 上。配置块使用 npx,首次运行时会自动获取,无需克隆。

添加到 .mcp.json:

{
  "mcpServers": {
    "apple-podcasts": {
      "command": "npx",
      "args": ["-y", "apple-podcasts-mcp"],
      "env": {
        "APPLE_PODCASTS_VENDOR_NUMBER": "你的vendor number",
        "APPLE_PODCASTS_ACCESS_TOKEN": "你的访问令牌"
      }
    }
  }
}

添加到 ~/.codex/config.toml:

[mcp_servers.apple-podcasts]
command = "npx"
args = ["-y", "apple-podcasts-mcp"]

[mcp_servers.apple-podcasts.env]
APPLE_PODCASTS_VENDOR_NUMBER = "你的vendor number"
APPLE_PODCASTS_ACCESS_TOKEN = "你的访问令牌"

Claude Desktop 的 claude_desktop_config.json 使用与 Claude Code 相同的配置块。

服务器在没有凭据的情况下也能启动,以便客户端列出其工具。每次工具调用随后会失败,并提示缺少哪个变量。

APPLE_PODCASTS_ACCOUNT_ID 是可选的,大多数设置不需要它。当 Reporter 返回代码 214(“此令牌可访问多个账户;请指定账户号码”)时设置它。Reporter 不会自动选择账户,因此每次调用都会失败,直到指定账户。

验证访问

向助手提问:“Check my Apple Podcasts access.” 这会运行 apple_podcasts_check_access,证明令牌有效,并显示 vendor number 是否可被令牌读取。

令牌轮换

Apple Reporter 访问令牌在生成后 180 天过期。这是会破坏设置的问题,且会静默发生:服务器继续启动,工具继续列出,但每次调用开始失败。

当令牌过期时,工具返回错误。使用 Reporter 的 generateToken 签发新令牌。旧令牌在新令牌存在的那一刻停止工作,因此请在能同时更新配置时执行此操作。替换 APPLE_PODCASTS_ACCESS_TOKEN 并重启 MCP 客户端。

轮换是账户范围的,不是按应用程序的。Apple 允许每个 Apple Account 一个活动令牌。账户上其他与 Reporter 通信的东西会在轮换时开始失败,并报告相同的代码 123。如果多个东西需要 Reporter 访问,它们必须共享一个令牌并一起轮换。

建议设置时运行 apple_podcasts_check_access 并记录 tokenExpires 日期(如果 Apple 返回)。并非所有账户都会从 Sales.viewToken 获得到期时间;如果没有,响应会说明,应自行跟踪日期。在 170 天设置日历提醒。

适用场景

  • 播客所有者希望让 AI 智能体分析其 Apple Podcasts 收听数据。
  • 需要了解单集播放次数、深度听众和关注者趋势。
  • 希望将 Apple Podcasts 分析与其他数据源结合进行综合分析。

限制

  • 需要 Apple Podcasters Program 会员资格,免费账户无法使用。
  • 只读,无法更改任何数据。
  • 不查询公开目录、不获取评分评论、不涉及订阅和收入数据。
  • 不提供下载次数,Apple 报告的是播放和听众,不是下载。
  • 数据有 1-2 天的发布延迟,日期范围默认结束于两天前。
  • 没有“获取原始报告”工具,所有工具都要求显式日期范围和行数上限。
  • 实现基于 Apple 的 Reporter 文档和手工编写的测试夹具,尚未在真实 Apple 账户上验证。
  • 令牌每 180 天过期,且轮换是账户范围的。
  • 列名不硬编码,通过别名表解析,Apple 可能重命名列。
  • Reporter 不是 REST,大多数失败在 HTTP 200 下返回数值代码,服务器检查响应体。

技术细节

Reporter 接受 HTTP POST,包含单个表单编码字段 jsonRequest,其中包含令牌和带括号命令的 JSON 文档。版本 2.2 很重要:基于令牌的认证需要 Reporter 2.2 或更高版本。成功的报告以 gzip 压缩(Content-Type: application/a-gzip)的制表符分隔文本返回,有一行标题且无引号。

当设置 APPLE_PODCASTS_ACCOUNT_ID 时,account 字段加入同一 JSON 文档。未设置时省略:Reporter 将空账户视为错误而非“无偏好”。

Apple 自己的客户端是 Java jar。该服务器直接重新实现线协议,因此依赖树中没有 JVM。

测试使用存根 fetch 并针对 src/tests/fixtures/ 中手工构建的夹具运行。没有测试接触 Apple。夹具固定了解析、聚合、日期和错误路径。

.github/workflows/publish.yml 在版本升级时使用 npm Trusted Publishing 发布。首次发布必须手动完成或使用细粒度访问令牌。

贡献

欢迎问题和拉取请求。特别有用的三件事:来自真实账户的任何反馈;来自真实账户的列名;服务器映射不当的 Reporter 代码。保持只读契约,保持新工具有界——显式范围和行数上限,无原始转储。