关于 app-store-connect-mcp
app-store-connect-mcp 将 Claude 连接到 App Store Connect,可处理应用、TestFlight、评论、销售与财务报告及团队用户操作。写入操作设有确认步骤,并需要 App Store Connect API 密钥。
主要功能
- 01浏览应用与版本
- 02管理构建版本和 TestFlight 测试者
- 03查看并回复评论
- 04下载销售与财务报告
- 05查看和邀请团队用户
- 06确认写入操作
适用场景
- 01查看近期应用构建版本
- 02邀请或管理 Beta 测试者
- 03查看评分并回复用户
- 04获取销售或财务报告
MCP 相关
将 App Store Connect 操作作为 MCP 工具提供给 Claude。发送写入操作前需要确认。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @chrischall/app-store-connect-mcpAPP_STORE_CONNECT_KEY_ID密钥10-character App Store Connect API Key ID (e.g. ABC1234567).APP_STORE_CONNECT_ISSUER_IDTeam Issuer ID (UUID) from App Store Connect → Users and Access → Integrations.APP_STORE_CONNECT_PRIVATE_KEY_PATH密钥Absolute path to your downloaded .p8 private key file. Either this or APP_STORE_CONNECT_PRIVATE_KEY is required.APP_STORE_CONNECT_PRIVATE_KEY密钥PEM contents of your .p8 private key. Either this or APP_STORE_CONNECT_PRIVATE_KEY_PATH is required.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
22收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 否 | 精确匹配的应用名称筛选条件 |
| limit | integer | 否 | 最多返回的应用数(默认值为 50)。不启用 auto_paginate 时,最多返回一页 API 结果(200 条);启用时,表示跨页返回的总数。 |
| bundleId | string | 否 | 精确匹配的 bundle ID 筛选条件(例如,com.example.MyApp) |
| auto_paginate | boolean | 否 | 沿 links.next 翻页,直到达到 limit(默认值为 false)。请检查结果中的分页块,查看 has_more。 |
详细介绍
App Store Connect MCP
一个 Model Context Protocol 服务,可将 Claude 连接到 App Store Connect,让你通过自然语言访问自己的 App、构建版本、TestFlight Beta 群组和测试人员、客户评价、销售/财务报告以及团队用户。
警告
由 AI 开发的项目。 此代码库完全由 Claude Code 构建并积极维护。没有人审查过其实现。使用前请检查所有代码和工具权限。
你可以做什么
你可以向 Claude 提出这类请求:
- “列出我的 App”
- “显示 App 1234567890 的最新构建版本”
- “谁还没有接受 TestFlight 邀请?”
- “邀请 [email protected] 加入 External Beta 群组”
- “提交构建版本 9876 以进行 Beta 审核”
- “我们这个月在日本的平均评分是多少?”
- “针对那条 1 星评价回复并致歉”
- “获取供应商 80012345 昨日的每日销售报告”
- “邀请一位具有 App Manager 角色的新开发者”
要求
- Claude Desktop 或 Claude Code
- Node.js 22 或更高版本
- App Store Connect API 密钥(
.p8文件、Key ID 和 Issuer ID)——创建密钥需要管理员或更高权限
安装
选项 A — npm
npx -y @chrischall/app-store-connect-mcp
添加到你的 Claude 配置(.mcp.json 或 Claude Desktop 配置):
{
"mcpServers": {
"app-store-connect": {
"command": "npx",
"args": ["-y", "@chrischall/app-store-connect-mcp"],
"env": {
"APP_STORE_CONNECT_KEY_ID": "ABC1234567",
"APP_STORE_CONNECT_ISSUER_ID": "57246542-96fe-1a63-e053-0824d011072a",
"APP_STORE_CONNECT_PRIVATE_KEY_PATH": "/absolute/path/to/AuthKey_ABC1234567.p8"
}
}
}
}
选项 B — 从源代码安装
git clone https://github.com/chrischall/app-store-connect-mcp.git
cd app-store-connect-mcp
npm install
npm run build
添加到 Claude Desktop 配置:
- Mac:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"app-store-connect": {
"command": "node",
"args": ["/absolute/path/to/app-store-connect-mcp/dist/bundle.js"],
"env": {
"APP_STORE_CONNECT_KEY_ID": "ABC1234567",
"APP_STORE_CONNECT_ISSUER_ID": "57246542-96fe-1a63-e053-0824d011072a",
"APP_STORE_CONNECT_PRIVATE_KEY_PATH": "/absolute/path/to/AuthKey_ABC1234567.p8"
}
}
}
}
获取 API 密钥
- 登录 App Store Connect → 用户与访问 → 集成 → App Store Connect API。
- 点击 + 生成密钥。选择适合你希望 Claude 执行的操作的角色——只读浏览使用
Developer即可;管理 TestFlight 使用App Manager;邀请用户和执行大多数写入操作则需要Admin。 - 下载
.p8文件(只能下载一次),并记下 Key ID 和 Issuer ID。 - 将
APP_STORE_CONNECT_PRIVATE_KEY_PATH指向已保存的.p8文件,或者将 PEM 内容粘贴到APP_STORE_CONNECT_PRIVATE_KEY中(使用转义换行符也可以)。
该密钥会按需签署有效期较短(20 分钟)的 ES256 JWT。不会在外部存储令牌;除 Apple 外,不会向任何人发送数据。
工具
| 工具 | 功能 |
|---|---|
list_apps | 列出账户中的 App(按 bundleId/name 筛选) |
get_app | 按 ID 获取单个 App |
list_app_store_versions | 列出某个 App 的 App Store 版本 |
get_app_infos | 获取某个 App 的年龄分级和商店状态信息 |
list_builds | 列出最近的构建(最新的排在前面),可按 App/状态/版本筛选 |
get_build | 获取单个构建的详细信息 |
list_beta_groups | 列出 TestFlight 内部/外部 Beta 组 |
list_beta_testers | 列出 Beta 测试人员,可按 App/组/邮箱筛选 |
invite_beta_tester | 添加新的测试人员,可选择将其加入组/构建 |
delete_beta_tester | 从团队中移除测试人员 |
add_testers_to_beta_group | 将现有测试人员加入某个组 |
remove_testers_from_beta_group | 从某个组中移除测试人员 |
submit_build_for_beta_review | 提交构建以供 TestFlight Beta 审核 |
list_customer_reviews | 列出 App Store 评论,可按评分/地区筛选 |
get_customer_review | 获取单条评论及开发者回复 |
respond_to_review | 发布或更新开发者回复 |
download_sales_report | 下载每日/每周/每月/每年的销量和销售额 TSV 报告 |
download_finance_report | 下载地区财务/收益 TSV 报告;Total_* 汇总行单独放在 summary 中 |
list_users | 列出 App Store Connect 团队用户 |
list_user_invitations | 列出待处理的团队邀请 |
invite_user | 邀请新团队成员并分配角色;必须明确设置 App 可见范围(allAppsVisible: true 或非空的 visibleAppIds,不会默认显示所有 App) |
asc_healthcheck | 验证凭据和上游连接状态;将故障作为数据报告,而非抛出异常 |
环境
| 变量 | 必需 | 说明 |
|---|---|---|
APP_STORE_CONNECT_KEY_ID | 是 | 10 个字符的 Key ID(例如 ABC1234567) |
APP_STORE_CONNECT_ISSUER_ID | 是 | 团队 Issuer ID(UUID) |
APP_STORE_CONNECT_PRIVATE_KEY | 二选一 | .p8 文件的完整 PEM 内容。支持换行转义符(\n)。 |
APP_STORE_CONNECT_PRIVATE_KEY_PATH | 二选一 | .p8 文件的绝对路径 |
确认
每项写入操作(invite_beta_tester、delete_beta_tester、add_testers_to_beta_group、remove_testers_from_beta_group、submit_build_for_beta_review、respond_to_review、invite_user)都会在发送任何内容前要求你确认。能够显示确认提示词的客户端(Claude Code)会显示包含确切请求内容的提示。对于无法显示确认提示词的客户端,首次调用不会发送任何内容,而是返回预览,其中包含将要发送的 method、path 和 JSON 正文,以及一个 confirmToken;只有使用相同参数和该令牌再次调用,才会执行写入操作。令牌只能使用一次,会过期;如果预览后有任何参数发生变化,令牌将被拒绝。
| 变量 | 默认值 | |
|---|---|---|
MCP_CONFIRM_MODE | ask-user | 对于无法显示确认提示词的客户端(claude.ai、Claude Desktop),写入操作的处理方式。ask-user:分两步进行——首次调用不执行任何操作,而是返回预览和令牌;模型必须先在聊天中获得你的批准,然后才能携带令牌再次调用。auto:同样分两步进行,但模型查看预览后可以自行使用令牌。refuse:此类客户端的写入操作会被拒绝。能够显示提示的客户端(Claude Code)始终会收到实际提示,除非 MCP_CONFIRM_ELICITATION=off。无法识别的值将按 refuse 处理。 |
MCP_CONFIRM_ELICITATION | on | off 表示不发送确认提示,因此所有客户端都会采用 MCP_CONFIRM_MODE 指定的流程。如果客户端声明能够显示提示但实际上从不显示,请设置此项(受控调用会一直挂起——opencode 2.0.x)。任何其他值都会保持 on,并在 stderr 中发出警告。 |
MCP_CONFIRM_TTL_SECONDS | 600 | 令牌的有效时长。 |
MCP_CONFIRM_SECRET | 每个进程随机生成 | 签名密钥;仅当令牌需要在服务重启后继续有效时才设置。 |
开发
npm install
npm test # vitest run
npm run test:watch # watch mode
npm run build # tsc + esbuild bundle
npm run dev # node --env-file=.env dist/index.js
测试会模拟 client.request / client.requestRaw;不会发起任何真实的 App Store Connect 调用。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。