关于 App Store Connect MCP Server
这是面向 Apple 应用开发者的 Swift 本地 MCP 服务,可从 macOS 客户端自动处理 App Store Connect 发布与账户工作流。它覆盖应用管理、测试、变现、分析和配置,并提供变更防护。
主要功能
- 01管理应用与发布元数据
- 02管理 TestFlight 和构建交付
- 03管理内购、订阅与定价
- 04处理评论、截图和分析
- 05管理团队账户与配置
- 06只读模式与变更防护
适用场景
- 01准备应用版本和审核提交
- 02管理 TestFlight 测试者与构建
- 03更新订阅和应用内购买
- 04查看客户反馈与应用指标
MCP 相关
该服务通过 stdio 在本地运行,并将 App Store Connect API 操作作为工具提供给 MCP 客户端。客户端需在兼容的 Mac 上启动服务。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
App Store Connect MCP 服务
一个用于 App Store Connect API 的本地模型上下文协议服务。
可在 macOS 上通过 Codex、Claude 和其他 MCP 客户端管理应用、构建版本、TestFlight、审核等。
概述
asc-mcp 是一个基于 Swift 的 MCP 服务,可将本地 macOS MCP 客户端连接到 App Store Connect API。它提供覆盖 34 个 App Store 工具领域和 2 个核心领域的 514 个工具,让你能够通过自然语言自动化 iOS 和 macOS 发布工作流。
其中包含适用于 Codex、Claude Code、Claude Desktop、Gemini CLI、VS Code with GitHub Copilot、Continue、Cursor 和 Devin Desktop(原名 Windsurf)的配置示例。文档介绍了客户端配置;发布 CI 会在 macOS 上验证安装、MCP 初始化和工具发现,而不会启动每个第三方客户端。
初次使用?请参阅快速入门。其余章节是有关高级配置、工具选择和贡献者的参考资料。
主要功能
- 发布和元数据 — 版本、本地化内容、构建版本、审核提交、分阶段发布和 Xcode Cloud
- TestFlight 和上传 — 测试版群组、测试人员、反馈、招募、构建版本交付、处理和出口合规
- 变现 — App 内购买项目、订阅、定价、供应情况、优惠代码和促销优惠
- 营销 — 屏幕截图、预览、自定产品页面、产品页面优化和推广购买
- 账户和配置 — 多个 App Store Connect 团队、用户、Bundle ID、设备、证书、描述文件和功能
- 反馈和运营 — 客户评价、Webhook、无障碍声明、分析、指标和诊断
- 更安全的自动化 — 只读模式、确认保护、严格分页和变更恢复指南
- 可审计的 API 覆盖范围 — 版本化的 Apple OpenAPI 合约和发布时偏差检查
源代码树正在准备 4.2.0;下方的安装示例仍固定在上一个稳定版本,直到候选版本获批并由维护者发布。有关单独的资源库工作流,请参阅迁移指南。
平台支持
asc-mcp 是一个本地 stdio 服务:MCP 客户端会在同一台电脑上启动它。客户端可在 Linux 或 Windows 上使用,并不意味着这个 Swift 服务支持跨平台。
| 环境 | 状态 | 说明 |
|---|---|---|
| macOS 15.6+,搭配 Xcode 26.x | 推荐 | 发布 CI 专门使用 GitHub 的 macOS 15 运行器和 Xcode 26.2 |
| macOS 14.0-15.5 | 仅声明了部署目标 | 尚未验证构建和运行;可能需要单独安装 Swift 6.2+ 工具链 |
| Linux | 暂不支持 | 移植工作和 Linux CI 尚未完成 |
| Windows | 不支持 | 当前源代码依赖项和 Swift MCP stdio 传输不兼容 Windows |
请参阅 Apple 的 Xcode 系统要求,了解各个 Xcode 版本支持的 macOS 版本。
Web 和云端会话不会自动继承本地 MCP 配置。请在兼容的 Mac 上本地运行 MCP 客户端,或使用明确将执行保留在该 Mac 上的客户端功能。
快速开始
建议将 App Store Connect 凭据一次性保存在本地私密文件中。之后,MCP 客户端只需配置 asc-mcp 可执行文件的路径。
1. 安装 asc-mcp
brew install mint
mint install zelentsov-dev/[email protected]
~/.mint/bin/asc-mcp --version
2. 创建 App Store Connect API 密钥
- 打开 App Store Connect → 用户与访问 → 集成 → 团队密钥。
- 生成一个权限尽可能小、但足以满足工作流需求的密钥。只有在相应操作需要时,才需要 App Manager 或 Admin 角色。
- 下载
.p8文件。Apple 只允许下载一次。 - 复制 Key ID 和 Issuer ID。
3. 在本地保存凭据
创建私密配置目录,然后将下载的 .p8 文件移至 ~/.keys/。替换第二条命令中的源路径和文件名:
mkdir -p ~/.config/asc-mcp ~/.keys
chmod 700 ~/.config/asc-mcp ~/.keys
mv /path/to/downloaded/AuthKey_XXXXXXXXXX.p8 ~/.keys/
创建 ~/.config/asc-mcp/companies.json:
{
"companies": [
{
"id": "my-company",
"name": "My Company",
"key_id": "XXXXXXXXXX",
"issuer_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"key_path": "/Users/you/.keys/AuthKey_XXXXXXXXXX.p8"
}
]
}
将 /Users/you 替换为你的实际主目录路径。将这两个文件保存在仓库之外,并限制访问权限:
chmod 600 ~/.config/asc-mcp/companies.json
chmod 600 /Users/you/.keys/AuthKey_XXXXXXXXXX.p8
注意
切勿将
companies.json、.p8密钥或原始凭据提交到 Git。如果密钥泄露,请立即撤销 App Store Connect 密钥。
4. 连接 MCP 客户端
选择一个客户端即可,无需配置所有客户端。
Codex
codex mcp add asc-mcp -- ~/.mint/bin/asc-mcp
codex mcp list
Claude Code
claude mcp add \
--transport stdio \
--scope user \
asc-mcp \
-- ~/.mint/bin/asc-mcp
claude mcp get asc-mcp
claude mcp list
对于 Claude Desktop、Gemini CLI、VS Code、Continue、Cursor 和 Devin Desktop,请使用 MCP 客户端设置中的可直接复制示例。
5. 试用
更改配置后,重启图形界面客户端,打开其 MCP 工具列表,然后询问:
List my App Store Connect apps.
如果连接或请求失败,请参阅故障排除。
安装
在 macOS 上使用 Mint(推荐)
Mint 会从源代码安装指定版本的发布版本,并将可执行文件保存在 ~/.mint/bin/asc-mcp。
brew install mint
mint install zelentsov-dev/[email protected]
更新或重新安装指定版本的发布版本:
mint install zelentsov-dev/[email protected] --force
稳定版用户应安装版本标签。安装 main 或 develop 仅适用于维护者和预发布测试。
从源代码构建
请在兼容的 macOS 版本上使用 Xcode 26.x,或安装独立的 Swift 6.2+ 工具链。
git clone https://github.com/zelentsov-dev/asc-mcp.git
cd asc-mcp
swift build -c release
可执行文件位于 .build/release/asc-mcp。如果将它复制到其他位置,也请一并复制旁边的资源包:
cp .build/release/asc-mcp /usr/local/bin/asc-mcp
cp -R .build/release/asc-mcp_asc-mcp.bundle /usr/local/bin/
该资源包包含发布检查使用的、带版本的 OpenAPI 操作契约。
从旧版本升级
从 v4.0.x 升级
4.1 版保留所有现有工具名称、必需输入、投影键和数组结构。Xcode Cloud 读取工具现在会拒绝未记录的参数,并更严格地验证返回的链接、分页、关系沿袭和包含的资源。新的 *Present 投影字段可区分 Apple 省略的数组和存在的空数组,而旧版数组字段仍保持为数组。新暴露的嵌套 *_limit 输入必须与其匹配的 include 值配对使用,续传调用必须原样重复原始请求范围。新的产品和 workflow 删除工具默认采用安全预览,并要求提供最新的预览回执以及精确的清单确认,才能执行永久删除。
从 v3.18.x 升级
4 版保留所有现有工具名称和 worker 过滤器,但破坏性的 Marketing 和评论附件调用现在必须在任何 Apple 请求之前提供精确的确认 ID:
| 现有工具 | 新增必需确认 |
|---|---|
custom_pages_delete | confirm_page_id |
ppo_delete_experiment | confirm_experiment_id |
promoted_delete | confirm_promoted_purchase_id |
review_attachments_delete | confirm_attachment_id |
screenshots_delete_set, screenshots_delete_preview_set | confirm_set_id |
screenshots_delete | confirm_screenshot_id |
screenshots_delete_preview | confirm_preview_id |
当提供 state 时,ppo_update_experiment 还需要 confirm_experiment_id。仅更新名称或流量比例的调用保持不变。在出现 unknown 或 committed_unverified 变更结果后,请先使用返回的检查操作,然后再重试。
从现有 Marketing 和评论附件调用中移除未记录的顶级参数。4 版会在任何网络请求之前拒绝未知键,而不是静默忽略它们。
配置
凭据
推荐使用快速开始中展示的默认 ~/.config/asc-mcp/companies.json 文件,因为它对终端和 GUI 客户端都能一致地工作,而无需在每个客户端配置中重复存放密钥。
对于多个公司,请添加更多条目:
{
"companies": [
{
"id": "my-company",
"name": "My Company",
"key_id": "XXXXXXXXXX",
"issuer_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"key_path": "/Users/you/.keys/AuthKey_XXXXXXXXXX.p8",
"vendor_number": "YOUR_VENDOR_NUMBER"
},
{
"id": "client-company",
"name": "Client Company",
"key_id": "YYYYYYYYYY",
"issuer_id": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
"key_path": "/Users/you/.keys/AuthKey_YYYYYYYYYY.p8"
}
]
}
vendor_number 仅对 analytics_sales_report、analytics_financial_report 和 analytics_app_summary 为必需。可在 App Store Connect → Sales and Trends → Reports 中找到它。
环境变量替代方案
环境变量对自动化很有用,但从 Finder 启动的 GUI 应用可能不会继承你的 shell 环境。对大多数用户来说,上面的基于文件的设置更简单。
单个公司:
export ASC_KEY_ID=XXXXXXXXXX
export ASC_ISSUER_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
export ASC_PRIVATE_KEY_PATH=/Users/you/.keys/AuthKey_XXXXXXXXXX.p8
export ASC_COMPANY_NAME="My Company" # optional
export ASC_VENDOR_NUMBER=YOUR_VENDOR_NUMBER # optional, analytics only
多个公司:
export ASC_COMPANY_1_NAME="My Company"
export ASC_COMPANY_1_KEY_ID=XXXXXXXXXX
export ASC_COMPANY_1_ISSUER_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
export ASC_COMPANY_1_KEY_PATH=/Users/you/.keys/AuthKey_XXXXXXXXXX.p8
export ASC_COMPANY_2_NAME="Client Company"
export ASC_COMPANY_2_KEY_ID=YYYYYYYYYY
export ASC_COMPANY_2_ISSUER_ID=yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
export ASC_COMPANY_2_KEY_PATH=/Users/you/.keys/AuthKey_YYYYYYYYYY.p8
编号从 1 开始。每个连续条目都必须同时提供 ASC_COMPANY_{N}_KEY_ID 和 ASC_COMPANY_{N}_ISSUER_ID;扫描会在第一对缺失处停止。
配置解析顺序
服务按以下顺序解析凭据:
--companies /absolute/path/to/companies.json- 用于编程式嵌入的构造函数参数
ASC_MCP_COMPANIES=/absolute/path/to/companies.json- 默认配置文件位置,包括
~/.config/asc-mcp/companies.json ASC_COMPANY_1_KEY_ID以及其他带编号的多公司变量ASC_KEY_ID、ASC_ISSUER_ID以及用于单个公司的私钥变量
MCP 客户端设置
以下所有示例均假设使用 Mint 安装以及推荐的 companies.json 凭据文件。请将 /Users/you 替换为你实际的用户主目录路径。GUI 客户端通常需要绝对可执行文件路径。
| 客户端 | 配置范围 | 说明 |
|---|---|---|
| Codex | 通过命令行配置用户级配置;可选受信任项目配置 | 由同一台 Mac 上的本地 Codex 客户端共享 |
| Claude Code | user、local 或 project 范围 | 对于个人 App Store 工具,user 最简单 |
| Claude Desktop | 用户级桌面配置 | 编辑后重启 |
| Gemini CLI | 用户设置 | 本地 stdio 服务 |
| VS Code with GitHub Copilot | 用户配置文件或 .vscode/mcp.json | 首次启动时确认服务信任 |
| Continue | 工作区 .continue/mcpServers/ | 与 VS Code 原生 MCP 配置相互独立 |
| Cursor | 用户或项目 mcp.json | 使用绝对命令路径 |
| Devin Desktop (formerly Windsurf) | 用户 MCP 配置 | 保持活跃工具不超过 100 个 |
Codex CLI、IDE 扩展和桌面客户端
推荐的命令行注册方式:
codex mcp add asc-mcp -- ~/.mint/bin/asc-mcp
codex mcp list
codex mcp get asc-mcp --json
同一台 Mac 上的 Codex 客户端共享相同的本地 MCP 配置。用户配置为 $CODEX_HOME/config.toml,默认为 ~/.codex/config.toml:
[mcp_servers.asc-mcp]
command = "/Users/you/.mint/bin/asc-mcp"
startup_timeout_sec = 20
tool_timeout_sec = 60
enabled = true
如需项目专属设置,将同一张表放入 .codex/config.toml;Codex 仅在项目被信任后才会加载项目配置。如果你使用 shell 凭据而非 companies.json,请显式转发它们:
env_vars = ["ASC_KEY_ID", "ASC_ISSUER_ID", "ASC_PRIVATE_KEY_PATH"]
更改配置后重启 GUI 客户端,然后使用其 MCP 视图或 /mcp 确认 asc-mcp 已激活。参见 Codex MCP 官方文档。
Claude Code
为所有本地项目注册一次:
claude mcp add \
--transport stdio \
--scope user \
asc-mcp \
-- ~/.mint/bin/asc-mcp
claude mcp get asc-mcp
claude mcp list
使用 --scope local 仅限当前项目,或使用 --scope project 创建共享的 .mcp.json。项目服务需要信任批准。切勿将原始 App Store Connect 凭据放入已提交的 .mcp.json。
Claude 将 user 和 local MCP 条目存储在 ~/.claude.json 中;.claude/settings.json 不是全局 MCP 注册表。在 Claude Code 内使用 /mcp 检查或重新连接服务。参见 Claude Code MCP 官方文档。
Claude Desktop
将服务添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"asc-mcp": {
"command": "/Users/you/.mint/bin/asc-mcp"
}
}
}
保存文件后退出并重新打开 Claude Desktop。
Gemini CLI
将服务添加到 ~/.gemini/settings.json:
{
"mcpServers": {
"asc-mcp": {
"command": "/Users/you/.mint/bin/asc-mcp"
}
}
}
Gemini MCP 默认超时时间有意保留不变。参见 Gemini CLI MCP 官方文档。
VS Code with GitHub Copilot
从命令面板运行 MCP: Add Server,并选择用户配置文件以进行个人设置。对于工作区设置,创建 .vscode/mcp.json:
{
"servers": {
"asc-mcp": {
"type": "stdio",
"command": "/Users/you/.mint/bin/asc-mcp"
}
}
}
当 VS Code 首次启动该服务时,确认你信任该本地服务。不要在共享工作区文件中提交用户专属路径或密钥。参见 VS Code MCP 官方文档。
Continue
Continue 不使用 .vscode/mcp.json。在工作区中创建 .continue/mcpServers/asc-mcp.json:
{
"mcpServers": {
"asc-mcp": {
"command": "/Users/you/.mint/bin/asc-mcp"
}
}
}
MCP 工具可在 Continue 的 Agent 模式中使用。参见 Continue MCP 官方文档。
Cursor
使用 ~/.cursor/mcp.json 应用于所有项目,或使用 .cursor/mcp.json 应用于单个项目:
{
"mcpServers": {
"asc-mcp": {
"command": "/Users/you/.mint/bin/asc-mcp"
}
}
}
编辑文件后,从 Cursor 设置中重启或刷新 MCP 服务。参见 Cursor MCP 官方文档。
Devin Desktop (formerly Windsurf)
将服务添加到 `~/.codeium/windsurf/mcp_config.json`。此示例启用一个包含 72 个工具的发布子集,低于 Cascade 的 100 个工具上限:{
"mcpServers": {
"asc-mcp": {
"command": "/Users/you/.mint/bin/asc-mcp",
"args": [
"--workers",
"apps,builds,export_compliance,versions,reviews"
]
}
}
}
你也可以在客户端中单独禁用工具。建议使用服务端工作器过滤,因为这样可以让启用的目录保持可预测。请参阅 Devin Desktop 官方 MCP 文档。
重要
command必须指向真实的可执行文件。GUI 客户端通常不会继承 shell 别名、PATH 更改或环境变量。请使用绝对路径,并优先使用默认的companies.json凭据文件。
工作器过滤
该服务在 34 个 App Store 工具域和 2 个核心域中公开 514 个工具。部分 MCP 客户端会限制工具数量;Devin Desktop 中的 Cascade 目前允许启用 100 个工具。使用 36 个 --workers 过滤键,仅启用所需的工作器:
# Only load apps, builds, and version lifecycle tools
asc-mcp --workers apps,builds,versions
# App Store release preparation subset (99 tools, including always-on and build sub-workers)
asc-mcp --workers apps,accessibility,builds,export_compliance,versions,app_info,screenshots
# TestFlight review helpers can be loaded separately (49 tools)
asc-mcp --workers apps,builds,beta_app,pre_release
# Monetization focus
asc-mcp --workers apps,iap,subscriptions,pricing,promoted,review_submissions
无论过滤器如何设置,company 和 auth 工作器都始终启用(它们提供核心的多账户和身份验证功能)。
启用 builds 后,会自动包含 build_processing 和 build_beta 子工作器。
只读模式
需要安全检查且不修改 App Store Connect 时,请使用 --read-only:
asc-mcp --read-only
asc-mcp --read-only --workers apps,builds,reviews,analytics
在此模式下,*_list、*_get、*_search、*_status、*_verify、*_parse、*_triage、auth_*、分析和指标等读取工具仍可用。能够创建、更新、上传、提交、发布、删除、撤销、清除、取消或以其他方式修改 App Store Connect 的工具,会在其工作器处理程序运行前被拦截。company_switch 仍可用,因为它只会更改本地活动公司的上下文。
OpenAPI 契约与漂移工具
使用操作契约命令,将实际的无凭据 WorkerManager 目录与语义清单以及固定版本的 Apple App Store Connect OpenAPI 规范进行比较。生产清单记录精确的 Apple operationId、HTTP 方法、路径、按调用范围限定的输入绑定、带类型的固定值、响应沿袭、本地工作流、实现状态、已弃用别名以及有意延后的操作。该命令不会加载 App Store Connect 凭据,也不会启动 MCP 服务。
rm -rf /tmp/asc-openapi
mkdir -p /tmp/asc-openapi
curl -L --fail -o /tmp/asc-openapi/spec.zip \
https://developer.apple.com/sample-code/app-store-connect/app-store-connect-openapi-specification.zip
spec_entry="$(unzip -Z1 /tmp/asc-openapi/spec.zip | grep -E '(^|/)openapi\.oas[^/]*\.json$')"
test "$(echo "$spec_entry" | grep -c .)" -eq 1
unzip -p /tmp/asc-openapi/spec.zip "$spec_entry" > /tmp/asc-openapi/openapi.oas.json
swift run asc-mcp openapi-contract-check \
--spec /tmp/asc-openapi/openapi.oas.json \
--json-output /tmp/asc-openapi/operation-contract.json \
--markdown-output /tmp/asc-openapi/operation-contract.md \
--strict
该清单按版本、SHA-256、路径数和操作数固定为 Apple API 4.5.1。它映射 503 个 Apple 操作,明确延后 431 个,并将 369 个排除在范围之外,涵盖全部 1,303 个操作。必需的 CI 检查会以可复现的方式验证已提交的快照。单独的最新 Apple 版本比较会生成语义漂移报告,并在变更经过审查前阻止发布。如果映射的操作发生变化或消失、公开工具或工作器偏离清单、输入字段失去绑定、响应沿袭变为无效,或延后的决策过期,契约 CI 都会失败。未公开的可选 Apple 参数会产生警告,以便它们继续显示在生成的待办清单中。
清单架构 v2 还会将每个可选 Apple 查询输入和请求正文输入标记为已公开绑定、由内部控制、因经过审查的原因而有意省略,或尚未分类。签入的 optionalInputCoveragePin 记录当前的精确总数,以及按输入标识和处理方式排序后生成的 SHA-256 摘要;--strict 会拒绝缺失固定值的情况,或任何数量级或标识级别的漂移。该固定值使分阶段修复过程可审计且能防止回归,但这并不表示每个可选 Apple 输入都已公开。v4.1.3 固定值的总数为 2,905:其中 1,122 个已绑定、40 个由内部控制、1,743 个有意省略,0 个尚未分类。其标识 SHA-256 为 c975f4e4eebb62ec87864a73fbf72bb8841f644108e54e6ffb25168bcf2a2766。
--strict 是合并和打标签时的发布门禁。报告中任何声明为 target 或 broken 的工具仍会被视为错误,并且回归测试会固定其确切状态。当前基线中没有 target 或 broken 实现,也没有实现偏差,因此,任何离开 asBuilt 的实现、任何结构性契约错误或任何可选输入覆盖偏差,都会阻止合并和发布。--structural-strict 仍仅可用于本地分阶段修复工作。
此门禁可验证操作标识、顶层 MCP 字段归属、必需的 Apple 输入、类型化内部值,以及响应来源和指针的溯源关系。完整的 MCP 类型、枚举和范围一致性,以及完整的类型化响应架构,仍属于独立的优化阶段;映射状态并不代表已获得 Apple 账户权限,也不代表已在现实场景中成功验收。
较早的 openapi-coverage 命令仍可用于生成高层领域报告,见 ASC-OPENAPI-COVERAGE-GENERATED.md。操作契约是权威的发布门禁。
可用的工作器名称:
| Worker | 前缀 | 工具数 | 描述 |
|---|---|---|---|
company | company_ | 3 | 多账户管理 |
auth | auth_ | 4 | JWT 令牌工具 |
apps | apps_ | 10 | App 列表、元数据、本地化内容、搜索关键词 ID |
accessibility | accessibility_ | 6 | App Store 无障碍声明 |
webhooks | webhooks_ | 11 | Webhook 通知、投递诊断和接收器辅助工具 |
xcode_cloud | xcode_cloud_ | 42 | Xcode Cloud 产品、工作流管理、构建运行、构件、问题、测试结果和 SCM |
builds | builds_ | 4 | 构建管理 |
build_uploads | build_uploads_ | 10 | 构建上传父项、文件、安全传输和恢复 |
build_processing | builds_get_processing_*, builds_update_encryption, builds_check_readiness | 4 | 构建状态、加密 |
export_compliance | export_compliance_ | 11 | 加密声明、文档上传、构建关联、就绪状态 |
build_beta | builds_*_beta_*, individual tester build tools | 11 | TestFlight 本地化内容、通知 |
versions | app_versions_ | 17 | 版本生命周期、年龄分级、提交、发布 |
reviews | reviews_ | 8 | 客户评价及回复 |
beta_groups | beta_groups_ | 15 | TestFlight 群组和公开链接招募条件 |
beta_feedback | beta_feedback_ | 8 | TestFlight 反馈截图、崩溃提交、崩溃日志 |
beta_testers | beta_testers_ | 12 | 测试人员管理 |
iap | iap_ | 59 | App 内购买、版本化元数据、定价、可用性、优惠码、审核素材 |
subscriptions | subscriptions_ | 99 | 订阅和群组版本、定价、套餐可用性、优惠、素材 |
sandbox | sandbox_ | 3 | 沙盒测试人员 |
beta_app | beta_app_ | 10 | Beta App 本地化内容和审核 |
pre_release | pre_release_ | 3 | 预发布版本 |
beta_license | beta_license_ | 3 | Beta 许可协议 |
provisioning | provisioning_ | 17 | Bundle ID、设备、证书 |
app_info | app_info_ | 10 | App 信息、类别、EULA |
pricing | pricing_ | 9 | 地区、定价 |
users | users_ | 10 | 团队成员、角色 |
app_events | app_events_ | 9 | App 内活动、本地化内容 |
analytics | analytics_ | 11 | 销售/财务报告、分析 |
assets | assets_ | 11 | 可复用图片/视频、展示位置、预览、一次性执行和恢复 |
screenshots | screenshots_ | 19 | 截图、预览、集合和已验证的排序 |
custom_pages | custom_pages_ | 17 | 自定义产品页面、版本、本地化内容和搜索关键词 |
ppo | ppo_ | 15 | 产品页面优化实验、处理方案和本地化内容 |
promoted | promoted_ | 10 | 推广的 App 内购买和已验证的排序 |
review_attachments | review_attachments_ | 4 | App Store 审核附件 |
review_submissions | review_submissions_ | 9 | 通用 App Store 审核提交和提交项目 |
metrics | metrics_ | 10 | 性能指标、诊断和 TestFlight 使用指标 |
工具目录规模
当 MCP 客户端预先加载每个工具定义时,架构的大致占用量为:
| 配置 | 工具数 | ~Token 数 |
|---|---|---|
| 所有工作器(默认) | 514 | ~60,000 |
发布工作流:apps,builds,export_compliance,versions,reviews | ~72 | ~8,900 |
变现:apps,iap,subscriptions,pricing | 184 | ~21,100 |
TestFlight:apps,builds,beta_groups,beta_testers | ~63 | ~7,100 |
营销:apps,screenshots,custom_pages,ppo,promoted | ~78 | ~8,800 |
--workers apps | 17 | ~2,100 |
**工具数最多的工作器:**订阅(99 个工具)、App 内购买(59 个工具)、Xcode Cloud(42 个工具)、屏幕截图(19 个工具)、配置文件(17 个工具)。
具体开销取决于 MCP 宿主的序列化方式、分词器和工具发现策略。现代客户端可能会等到需要时才加载架构。如果客户端设有工具数量限制,或者你希望使用更小、更聚焦的目录,请使用 --workers。
可用工具
514 个工具分布在 34 个 App Store 工具领域和 2 个核心领域(使用 36 个 --workers 过滤键,参见工作器过滤):
公司管理 — 3 个工具
| 工具 | 描述 |
|---|---|
company_list | 列出所有已配置的公司 |
company_switch | 切换用于 API 操作的当前公司 |
company_current | 获取当前公司的信息 |
身份验证 — 4 个工具
| 工具 | 描述 |
|---|---|
auth_generate_token | 生成用于 API 访问的 JWT 令牌 |
auth_validate_token | 在本地验证标准团队密钥 JWT:ES256 签名、已配置的 kid/iss、App Store Connect 受众、签发时间和过期声明,以及最长 20 分钟的有效期。此操作不会调用 Apple API,也无法证明服务器会接受该令牌。 |
auth_refresh_token | 强制刷新 JWT 令牌 |
auth_token_status | 获取 JWT 令牌缓存状态 |
应用管理 — 10 个工具
| 工具 | 描述 |
|---|---|
apps_list | 列出所有应用,可进行筛选 |
apps_get_details | 获取应用详细信息 |
apps_search | 按名称或 Bundle ID 搜索应用 |
apps_list_versions | 列出所有版本及其状态 |
apps_get_metadata | 获取某个版本的本地化元数据 |
apps_list_search_keywords | 列出用于自定产品页面定向的规范 App Store 搜索关键词 ID |
apps_update_metadata | 更新元数据(最新动态、描述等) |
apps_list_localizations | 列出本地化内容及其状态 |
apps_create_localization | 为某个版本创建新的本地化内容 |
apps_delete_localization | 删除某个版本的本地化内容 |
无障碍声明 — 6 个工具
| 工具 | 描述 |
|---|---|
accessibility_list | 列出某个应用的无障碍声明 |
accessibility_get | 获取一项无障碍声明 |
accessibility_create | 为某个设备系列创建声明 |
accessibility_update | 更新支持标记或发布声明 |
accessibility_delete | 删除声明 |
accessibility_list_relationships | 列出某个应用的声明关系 ID |
Webhook 通知 — 11 个工具
| 工具 | 描述 | |------|-------------| | `webhooks_list` | 列出某个 App 的 webhook | | `webhooks_get` | 按 ID 获取一个 webhook | | `webhooks_create` | 创建一个 webhook 配置 | | `webhooks_update` | 更新 webhook 字段 | | `webhooks_delete` | 删除一个 webhook | | `webhooks_list_deliveries` | 列出投递尝试 | | `webhooks_redeliver` | 重新投递已有的投递记录 | | `webhooks_ping` | 发送测试 ping | | `webhooks_verify_signature` | 根据精确的原始请求体校验 `x-apple-signature` | | `webhooks_parse_payload` | 解析并规范化原始 webhook 通知负载 | | `webhooks_triage_event` | 针对 webhook 事件或投递失败生成可执行的排查方案 |Xcode Cloud — 42 个工具
| 工具 | 描述 |
|---|---|
xcode_cloud_products_list | 列出 Xcode Cloud 产品 |
xcode_cloud_products_get | 获取一个 Xcode Cloud 产品 |
xcode_cloud_products_delete | 在确认保护下预览或永久删除一个 Xcode Cloud 产品 |
xcode_cloud_app_product_get | 获取与某个 App 关联的 Xcode Cloud 产品 |
xcode_cloud_product_app_get | 获取与某个 Xcode Cloud 产品关联的 App |
xcode_cloud_product_primary_repositories_list | 列出附加到某个产品的主要仓库 |
xcode_cloud_product_additional_repositories_list | 列出附加到某个产品的其他仓库 |
xcode_cloud_product_workflows_list | 列出某个产品的工作流 |
xcode_cloud_product_build_runs_list | 列出某个产品的构建运行 |
xcode_cloud_workflows_get | 获取一个工作流 |
xcode_cloud_workflows_create | 创建一个 Xcode Cloud 工作流 |
xcode_cloud_workflows_update | 更新一个 Xcode Cloud 工作流 |
xcode_cloud_workflows_delete | 在确认保护下预览或永久删除一个工作流 |
xcode_cloud_workflow_repository_get | 获取某个工作流使用的仓库 |
xcode_cloud_workflow_build_runs_list | 列出某个工作流的构建运行 |
xcode_cloud_build_runs_get | 获取一次构建运行 |
xcode_cloud_build_runs_start | 启动或重新构建一次 Xcode Cloud 构建 |
xcode_cloud_build_run_actions_list | 列出某次运行的构建操作 |
xcode_cloud_build_run_builds_list | 列出某次运行创建的 App Store Connect 构建 |
xcode_cloud_actions_get | 获取一个构建操作 |
xcode_cloud_action_build_run_get | 获取拥有某个构建操作的构建运行 |
xcode_cloud_action_artifacts_list | 列出某个操作的产物 |
xcode_cloud_action_issues_list | 列出某个操作的问题 |
xcode_cloud_action_test_results_list | 列出某个操作的测试结果 |
xcode_cloud_artifacts_get | 获取一个产物 |
xcode_cloud_issues_get | 获取一个问题 |
xcode_cloud_test_results_get | 获取一个测试结果 |
xcode_cloud_xcode_versions_list | 列出可用的 Xcode 版本 |
xcode_cloud_xcode_versions_get | 获取一个 Xcode 版本 |
xcode_cloud_xcode_version_macos_versions_list | 列出与某个 Xcode 版本兼容的 macOS 版本 |
xcode_cloud_macos_versions_list | 列出可用的 macOS 版本 |
xcode_cloud_macos_versions_get | 获取一个 macOS 版本 |
xcode_cloud_macos_version_xcode_versions_list | 列出与某个 macOS 版本兼容的 Xcode 版本 |
xcode_cloud_scm_providers_list | 列出 SCM 提供方 |
xcode_cloud_scm_providers_get | 获取一个 SCM 提供方 |
xcode_cloud_scm_provider_repositories_list | 列出某个 SCM 提供方的仓库 |
xcode_cloud_scm_repositories_list | 列出 SCM 仓库 |
xcode_cloud_scm_repositories_get | 获取一个 SCM 仓库 |
xcode_cloud_scm_repository_git_references_list | 列出仓库的 git 引用 |
xcode_cloud_scm_repository_pull_requests_list | 列出仓库的拉取请求 |
xcode_cloud_scm_git_references_get | 获取一个 git 引用 |
xcode_cloud_scm_pull_requests_get | 获取一个拉取请求 |
TestFlight Beta 反馈 — 8 个工具
| 工具 | 描述 |
|---|---|
beta_feedback_list_crashes | 列出 Beta 崩溃反馈提交 |
beta_feedback_get_crash | 获取一条 Beta 崩溃反馈提交 |
beta_feedback_get_crash_log | 读取某条提交的崩溃日志 |
beta_feedback_get_crash_log_by_id | 按崩溃日志 ID 读取崩溃日志 |
beta_feedback_delete_crash | 删除一条 Beta 崩溃反馈提交 |
beta_feedback_list_screenshots | 列出 Beta 截图反馈提交 |
beta_feedback_get_screenshot | 获取一条 Beta 截图反馈提交 |
beta_feedback_delete_screenshot | 删除一条 Beta 截图反馈提交 |
构建版本 — 4 个工具
| 工具 | 描述 |
|---|---|
builds_list | 列出构建版本及其处理状态 |
builds_get | 获取构建版本的详细信息 |
builds_find_by_number | 按版本号查找构建版本 |
builds_list_for_version | 获取特定 App 版本的构建版本 |
构建上传 — 10 个工具
| 工具 | 描述 |
|---|---|
build_uploads_list | 列出某个 App 的构建上传父项,支持筛选、稀疏字段、包含项和严格分页 |
build_uploads_get | 获取一个构建上传及其处理诊断信息和可选的包含资源 |
build_uploads_create | 创建一个构建上传父项,不重放有歧义的 POST |
build_uploads_delete | 在精确确认 ID 后删除一个构建上传父项 |
build_uploads_list_files | 列出某个构建上传下的文件预留,采用严格分页 |
build_uploads_get_file | 获取一个构建上传文件及其交付状态 |
build_uploads_reserve_file | 预留一个确切的文件,不重放有歧义的 POST |
build_uploads_commit_file | 提交校验和或已上传状态变更,并分别保留省略和 null |
build_uploads_upload_file | 从不可变的本地快照传输新建或已有的预留 |
build_uploads_upload | 执行父项创建、预留、传输、提交和处理状态核对 |
复合上传从预留到恢复全程保留相同的小写 MD5 指纹。显式恢复和恢复后继续的指令会携带 expected_md5;下一次调用会在发出任何 Apple 请求或传输之前,用新生成的不可变快照与之校验。已标记为 UPLOAD_COMPLETE 或 COMPLETE 的现有预留,仅当 Apple 的 sourceFileChecksums.file MD5 与该快照匹配时才会被接受;缺失、不支持或不匹配的证据会被保留以供检查,不会再次执行传输、提交或删除。预签名操作仅在其方法为 PUT 时重试;重定向、POST 和未知方法不会被重放。如果一次有歧义的创建被唯一恢复,工作流会停止并返回其资源 ID 以供显式继续。除非在直接读取时显式启用 include_sensitive_details,否则传输凭据始终保持脱敏。
构建处理 — 4 个工具
| 工具 | 描述 |
|---|---|
builds_get_processing_state | 获取当前处理状态 |
builds_update_encryption | 设置加密合规性 |
builds_get_processing_status | 获取详细处理状态 |
builds_check_readiness | 检查构建版本是否已准备好提交 |
出口合规 — 11 个工具
| 工具 | 描述 | |------|-------------| | `export_compliance_list_declarations` | 以严格分页列出应用的加密声明 | | `export_compliance_get_declaration` | 获取单个声明,不包含已弃用的文档 URL 字段 | | `export_compliance_create_declaration` | 为应用创建加密声明问卷 | | `export_compliance_create_document` | 从单个不可变的本地快照预留、传输、提交并轮询文档 | | `export_compliance_get_document` | 获取安全的交付元数据,不包含签名 URL、令牌或上传标头 | | `export_compliance_update_document` | 应用底层可空校验和或上传状态补丁 | | `export_compliance_upload_document` | 使用精确字节及其小写 MD5 回执恢复 AWAITING_UPLOAD 预留 | | `export_compliance_inspect_document` | 检查文档是否存在并对其交付状态进行分类 | | `export_compliance_get_build_declaration` | 获取当前附加到构建的声明 | | `export_compliance_attach_build_declaration` | 附加已批准的声明并验证该关系 | | `export_compliance_check_release_readiness` | 仅评估构建的出口合规发布门禁 |TestFlight Beta Details — 11 个工具
| 工具 | 描述 |
|---|---|
builds_get_beta_detail | 获取构建的 TestFlight 配置 |
builds_update_beta_detail | 更新 TestFlight 设置 |
builds_set_beta_localization | 设置 TestFlight 的“新功能” |
builds_list_beta_localizations | 列出所有 TestFlight 本地化 |
builds_get_beta_groups | 获取构建的 Beta 群组 |
builds_get_beta_testers | 获取构建的独立测试员 |
builds_send_beta_notification | 向 Beta 测试员发送通知 |
builds_add_to_beta_groups | 将构建添加到 Beta 群组 |
builds_add_individual_testers | 将独立测试员添加到构建 |
builds_remove_individual_testers | 从构建中移除独立测试员 |
builds_list_individual_testers | 列出分配给构建的独立测试员 |
TestFlight Beta Groups — 15 个工具
| 工具 | 描述 |
|---|---|
beta_groups_list | 列出应用的 TestFlight Beta 群组 |
beta_groups_create | 创建新的 Beta 群组 |
beta_groups_update | 更新 Beta 群组设置 |
beta_groups_delete | 删除 Beta 群组 |
beta_groups_add_testers | 将测试员添加到 Beta 群组 |
beta_groups_remove_testers | 从 Beta 群组中移除测试员 |
beta_groups_list_testers | 列出 Beta 群组中的测试员 |
beta_groups_add_builds | 将构建添加到 Beta 群组 |
beta_groups_remove_builds | 从 Beta 群组中移除构建 |
beta_groups_get_recruitment_criteria | 获取附加到 Beta 群组的公开链接招募条件 |
beta_groups_create_recruitment_criteria | 创建设备系列和操作系统版本招募条件 |
beta_groups_update_recruitment_criteria | 替换或显式清除招募筛选条件 |
beta_groups_delete_recruitment_criteria | 在精确确认条件 ID 后删除招募条件 |
beta_groups_list_recruitment_options | 列出 Apple 当前允许的设备系列和操作系统版本 |
beta_groups_check_recruitment_compatibility | 检查群组是否有与其条件兼容的构建 |
TestFlight Beta Testers — 12 个工具
包括测试员列表/搜索/获取/创建/删除、应用关系、邀请、Beta 群组分配、构建分配以及应用移除工具。
App Version Lifecycle — 17 个工具
| 工具 | 描述 | |------|-------------| | `app_versions_create` | 创建新的应用版本 | | `app_versions_list` | 按状态筛选列出各版本 | | `app_versions_get` | 获取详细的版本信息 | | `app_versions_get_age_rating_declaration` | 读取 App Info 年龄分级问卷 | | `app_versions_list_territory_age_ratings` | 按地区列出计算得出的年龄分级 | | `app_versions_update` | 更新版本属性 | | `app_versions_attach_build` | 将构建版本附加到版本 | | `app_versions_submit_for_review` | 提交至 App Store 审核 | | `app_versions_cancel_review` | 取消正在进行的审核 | | `app_versions_release` | 发布已获批准的版本 | | `app_versions_create_phased_release` | 创建分阶段发布 | | `app_versions_get_phased_release` | 获取分阶段发布信息及其 ID | | `app_versions_update_phased_release` | 暂停/恢复/完成分阶段发布 | | `app_versions_delete_phased_release` | 通过精确 ID 确认并具备未知结果安全机制,删除符合条件且已计划的分阶段发布 | | `app_versions_set_review_details` | 设置审核员联系信息 | | `app_versions_update_age_rating` | 配置年龄分级问卷 | | `app_versions_delete` | 通过精确 ID 确认并具备未知结果安全机制,删除可编辑的应用版本 |客户评论 — 8 个工具
| 工具 | 描述 |
|---|---|
reviews_list | 通过筛选和分页获取评论 |
reviews_get | 获取特定评论的详细信息 |
reviews_list_for_version | 获取特定版本的评论 |
reviews_stats | 汇总评论统计信息 |
reviews_create_response | 回复客户评论 |
reviews_delete_response | 删除回复 |
reviews_get_response | 获取某条评论的回复 |
reviews_summarizations | 汇总评论主题与评分 |
App 内购买项目 — 59 个工具
| 工具 | 描述 | |------|-------------| | `iap_list` | 列出 App 的内购项目 | | `iap_get` | 获取 IAP 详情 | | `iap_create` | 创建新的 IAP | | `iap_update` | 更新 IAP 属性 | | `iap_delete` | 删除 IAP | | `iap_list_localizations` | 列出 IAP 本地化 | | `iap_create_localization` | 创建 IAP 本地化 | | `iap_update_localization` | 更新 IAP 本地化 | | `iap_delete_localization` | 删除 IAP 本地化 | | `iap_submit_for_review` | 提交 IAP 以供审核 | | `iap_list_subscriptions` | 列出订阅组 | | `iap_get_subscription_group` | 获取订阅组详情 | | `iap_inventory` | 面向 AI 的 App 内购项目清单 | | `iap_list_price_points` | 列出按地区划分的价格点 | | `iap_list_price_point_equalizations` | 列出价格点均衡化 | | `iap_get_price_schedule` | 获取价格计划 | | `iap_set_price_schedule` | 设置价格计划 | | `iap_pricing_summary` | 汇总当前价格和已计划价格 | | `iap_prepare_offer_prices` | 为优惠查找价格点候选项 | | `iap_set_availability` | 设置地区可用性 | | `iap_get_availability` | 按 IAP 或可用性 ID 获取可用性 | | `iap_list_available_territories` | 列出可用地区 | | `iap_get_promoted_purchase` | 获取推广购买状态 | | `iap_list_offer_codes` | 列出 IAP 优惠代码 | | `iap_get_offer_code` | 获取 IAP 优惠代码 | | `iap_create_offer_code` | 创建 IAP 优惠代码 | | `iap_update_offer_code` | 更新 IAP 优惠代码 | | `iap_deactivate_offer_code` | 停用 IAP 优惠代码 | | `iap_list_offer_code_prices` | 列出按地区划分的优惠价格 | | `iap_generate_one_time_codes` | 生成一次性优惠代码 | | `iap_list_one_time_codes` | 列出一次性代码批次 | | `iap_get_one_time_code` | 获取一次性代码批次 | | `iap_update_one_time_code` | 更新一次性代码批次 | | `iap_deactivate_one_time_code` | 停用一次性代码批次 | | `iap_get_one_time_code_values` | 获取已生成的一次性代码值 | | `iap_create_custom_code` | 创建自定义优惠代码 | | `iap_get_custom_code` | 获取自定义代码详情 | | `iap_update_custom_code` | 更新自定义代码 | | `iap_deactivate_custom_code` | 停用自定义代码 | | `iap_get_review_screenshot` | 获取审核截图 | | `iap_upload_review_screenshot` | 上传审核截图 | | `iap_delete_review_screenshot` | 删除审核截图 | | `iap_upload_image` | 上传推广图片 | | `iap_get_image` | 获取推广图片 | | `iap_delete_image` | 删除推广图片 | | `iap_list_images` | 列出推广图片 | | `iap_create_version` | 创建可审核的 IAP 元数据版本 | | `iap_get_version` | 获取 IAP 版本及其审核状态 | | `iap_list_versions` | 列出 IAP 的可审核版本 | | `iap_list_version_localizations` | 列出 IAP 版本拥有的本地化 | | `iap_create_version_localization` | 为 IAP 版本创建本地化 | | `iap_get_version_localization` | 获取 IAP 版本本地化 | | `iap_update_version_localization` | 更新 IAP 版本本地化中的可空文本 | | `iap_delete_version_localization` | 删除 IAP 版本本地化 | | `iap_get_version_image` | 获取与 IAP 版本相关的单张图片 | | `iap_list_version_images` | 列出 IAP 版本拥有的所有图片资源,支持严格分页 | | `iap_upload_version_image` | 上传、提交并协调不可变的 IAP 版本图片 | | `iap_get_version_image_resource` | 获取版本范围内的 IAP 图片资源 | | `iap_delete_version_image` | 删除版本范围内的 IAP 图片 | 旧版按产品范围的本地化、提交和图像工具仍可调用以保持兼容性。Apple 4.4.1 弃用 `iap_list_localizations`、`iap_create_localization`、`iap_update_localization`、`iap_delete_localization`、`iap_submit_for_review`、`iap_upload_image`、`iap_get_image`、`iap_delete_image` 和 `iap_list_images`;成功响应会指出带版本号的替代工具。对于本地化创建、促销图像上传和审核提交,请先使用 `iap_list_versions`,仅在需要新的元数据版本时调用 `iap_create_version`,并将该版本 ID 传递给下游带版本号的工具。这些兼容性调用绝不会自动创建或选择版本。如果 Apple 可能已接受版本或版本本地化创建,但响应丢失或无法解码,工具会返回 write_outcome: not_confirmed 和 retrySafe: false,并附上请求的身份标识以及 list/get 检查步骤。重试前请先检查,以避免产生重复的元数据资源。
订阅 — 99 个工具
包括订阅和群组元数据版本、版本拥有的本地化和图像、感知计划类型的可用性、感知地区的价格、价格点和调整后的均衡、促销购买读取、库存/定价辅助工具、推介优惠、促销优惠、优惠码、一次性/自定义码、挽回优惠和审核截图。所有原公开的 offer_codes_*、intro_offers_*、promo_offers_* 和 winback_* 功能均通过 subscriptions_* 提供。
Apple 4.4.1 还弃用了旧版按产品或群组范围的本地化、图像和提交工具。它们仍可调用以保持兼容性,成功时会返回明确的替代指引,并且绝不会自动创建或选择元数据版本。新集成应使用 subscriptions_create_version 或 subscriptions_create_group_version、相应的版本本地化/图像工具,以及通用的 review_submissions_* 工作流。
订阅版本、群组版本、本地化和计划可用性创建使用相同的非幂等恢复契约:模糊的 Apple 写入会返回 write_outcome: not_confirmed、retrySafe: false、请求的指纹以及确定性的集合/get 检查指引。
以下名称仍可使用以保持兼容性,但 Apple 4.4.1 弃用了其旧版 subscriptionAvailability 资源,转而使用感知计划类型的 subscriptionPlanAvailabilities:
| 工具 | 兼容性状态 |
|---|---|
subscriptions_get_availability | 已弃用的旧版可用性读取 |
subscriptions_set_availability | 已弃用的旧版可用性写入 |
subscriptions_list_available_territories | 已弃用的旧版地区列表 |
subscriptions_inventory | 已弃用的辅助工具;可能省略首个包含关系页之后的订阅,并非权威的完整库存 |
沙盒测试人员 — 3 个工具
| 工具 | 描述 |
|---|---|
sandbox_list | 列出沙盒测试人员 |
sandbox_update | 更新沙盒测试人员设置 |
sandbox_clear_purchase_history | 清除沙盒测试人员的购买历史记录 |
Beta App — 10 个工具
| 工具 | 描述 | |------|-------------| | `beta_app_list_localizations` | 列出 Beta App 本地化内容 | | `beta_app_create_localization` | 创建 Beta App 本地化内容 | | `beta_app_get_localization` | 获取 Beta App 本地化内容 | | `beta_app_update_localization` | 更新 Beta App 本地化内容 | | `beta_app_delete_localization` | 删除 Beta App 本地化内容 | | `beta_app_submit_for_review` | 提交构建版本以供 Beta 审核 | | `beta_app_list_submissions` | 列出 Beta 审核提交记录 | | `beta_app_get_submission` | 获取 Beta 审核提交记录 | | `beta_app_get_review_details` | 获取 Beta App 审核详情 | | `beta_app_update_review_details` | 更新 Beta App 审核详情 |预发布版本 — 3 个工具
包含预发布版本列表、详情和关联的构建版本。
Beta 许可协议 — 3 个工具
包含 Beta 许可协议的列表、获取和更新功能。
配置 — 17 个工具
| 工具 | 描述 |
|---|---|
provisioning_list_bundle_ids | 列出已注册的 Bundle ID |
provisioning_get_bundle_id | 获取 Bundle ID 详情 |
provisioning_create_bundle_id | 注册新的 Bundle ID |
provisioning_delete_bundle_id | 删除 Bundle ID |
provisioning_list_devices | 列出已注册的设备 |
provisioning_register_device | 注册新设备(UDID) |
provisioning_update_device | 更新设备名称或状态 |
provisioning_list_certificates | 列出签名证书 |
provisioning_get_certificate | 获取证书详情 |
provisioning_revoke_certificate | 撤销证书 |
provisioning_list_profiles | 列出配置描述文件 |
provisioning_get_profile | 获取配置描述文件详情 |
provisioning_delete_profile | 删除配置描述文件 |
provisioning_create_profile | 创建配置描述文件 |
provisioning_list_capabilities | 列出 Bundle ID 功能 |
provisioning_enable_capability | 启用一项功能 |
provisioning_disable_capability | 禁用一项功能 |
App 信息 — 10 个工具
包含 App 信息的列表、获取和更新功能、App 信息本地化内容,以及 EULA 的获取、创建和更新工具。
定价 — 9 个工具
包含地区、可用性、价格点、价格计划和 App Store 可用性 v2 工具。
用户 — 10 个工具
包含团队成员的列表、获取、更新和移除功能、邀请、可见 App,以及可见 App 关联关系更新。
App 活动 — 9 个工具
包含应用内活动的 CRUD 操作,以及活动本地化内容的列表、创建、更新和删除功能。
分析 — 11 个工具
包含销售、财务、App 摘要、分析报告请求、报告、实例、快照和细分工具。
屏幕截图和预览 — 19 个工具
| 工具 | 描述 | |------|-------------| | `screenshots_list_sets` | 列出截图集 | | `screenshots_get_set` | 按 ID 获取截图集 | | `screenshots_create_set` | 创建截图集 | | `screenshots_delete_set` | 删除截图集 | | `screenshots_list` | 列出截图集中的截图 | | `screenshots_upload` | 上传截图 | | `screenshots_get` | 获取截图详情 | | `screenshots_delete` | 删除截图 | | `screenshots_reorder` | 重新排序截图集中的截图 | | `screenshots_list_preview_sets` | 列出 App 预览集 | | `screenshots_get_preview_set` | 按 ID 获取 App 预览集 | | `screenshots_create_preview_set` | 创建预览集 | | `screenshots_delete_preview_set` | 删除预览集 | | `screenshots_upload_preview` | 上传 App 预览 | | `screenshots_get_preview` | 获取预览详情 | | `screenshots_list_previews` | 列出预览集中的预览 | | `screenshots_reorder_previews` | 通过成员关系和事后验证重新排序集合中的每个预览 | | `screenshots_upload_batch` | 批量上传截图 | | `screenshots_delete_preview` | 删除预览 |自定义产品页 — 17 个工具
| 工具 | 描述 |
|---|---|
custom_pages_list | 列出自定义产品页 |
custom_pages_get | 获取页面详情 |
custom_pages_create | 创建自定义页面 |
custom_pages_update | 更新自定义页面 |
custom_pages_delete | 删除自定义页面 |
custom_pages_list_versions | 列出页面版本 |
custom_pages_get_version | 按 ID 获取页面版本 |
custom_pages_create_version | 创建页面版本 |
custom_pages_update_version | 更新页面版本 |
custom_pages_list_localizations | 列出版本本地化 |
custom_pages_get_localization | 按 ID 获取本地化 |
custom_pages_create_localization | 创建本地化 |
custom_pages_update_localization | 更新本地化 |
custom_pages_delete_localization | 在精确确认后删除本地化 |
custom_pages_list_search_keywords | 列出分配给本地化的搜索关键词 ID |
custom_pages_add_search_keywords | 添加搜索关键词关系 |
custom_pages_remove_search_keywords | 在精确确认后移除搜索关键词关系 |
产品页优化(A/B 测试) — 15 个工具
| 工具 | 描述 |
|---|---|
ppo_list_experiments | 列出 A/B 测试实验 |
ppo_list_version_experiments | 列出 App Store 版本的 V2 实验 |
ppo_get_experiment | 获取实验详情 |
ppo_create_experiment | 创建实验 |
ppo_update_experiment | 更新/启动/停止实验 |
ppo_delete_experiment | 删除实验 |
ppo_list_treatments | 列出实验处理 |
ppo_get_treatment | 按 ID 获取处理 |
ppo_create_treatment | 创建处理变体 |
ppo_update_treatment | 更新处理变体 |
ppo_delete_treatment | 在精确确认后删除处理 |
ppo_list_treatment_localizations | 列出处理本地化 |
ppo_get_treatment_localization | 按 ID 获取处理本地化 |
ppo_create_treatment_localization | 创建处理本地化 |
ppo_delete_treatment_localization | 在精确确认后删除处理本地化 |
推广购买 — 10 个工具
| 工具 | 描述 | |------|-------------| | `promoted_list` | 列出某个应用的推广内购项目 | | `promoted_get` | 获取推广详情 | | `promoted_create` | 创建推广 | | `promoted_update` | 更新推广的可见性或启用状态 | | `promoted_delete` | 删除推广 | | `promoted_reorder` | 替换并验证某个应用完整的推广内购顺序 | | `promoted_upload_image` | 已弃用:返回迁移指南;固定版本的 Apple OpenAPI 4.5.1 中不包含此端点 | | `promoted_get_image` | 已弃用:返回迁移指南;固定版本的 Apple OpenAPI 4.5.1 中不包含此端点 | | `promoted_delete_image` | 已弃用:返回迁移指南;固定版本的 Apple OpenAPI 4.5.1 中不包含此端点 | | `promoted_get_image_for_purchase` | 已弃用:返回迁移指南;固定版本的 Apple OpenAPI 4.5.1 中不包含此关系 |审核附件 — 4 个工具
包含 App Store 审核附件的上传、获取、删除和列表工具。
审核提交 — 9 个工具
| 工具 | 描述 |
|---|---|
review_submissions_list | 列出某个应用的通用审核提交 |
review_submissions_get | 获取一个通用审核提交 |
review_submissions_create | 为某个应用和平台创建通用审核提交 |
review_submissions_list_items | 列出附加到审核提交的项目 |
review_submissions_add_item | 将可审核的资源版本附加到提交 |
review_submissions_update_item | 更新已提交项目中可为空的 resolved 或 removed 状态 |
review_submissions_remove_item | 从提交中移除项目 |
review_submissions_submit | 提交所有已附加项目以供审核 |
review_submissions_cancel | 取消已提交的通用审核提交 |
只有当 Apple 的响应确认了有效的项目 ID,以及完全匹配请求的关系名称、JSON:API 类型和资源 ID 时,review_submissions_add_item 才会报告成功。任何不匹配都会作为未确认写入返回,并附带提交和项目列表恢复步骤。
应用资源库 — 11 个工具
| 工具 | 描述 |
|---|---|
assets_get_library | 读取应用自有的可复用资源库 |
assets_get_reference_data | 读取动态媒体和展示位置要求,可按 ID 查询 |
assets_list_images | 通过分页浏览应用的图片 |
assets_list_videos | 通过分页浏览应用的视频 |
assets_get_image | 读取图片处理/审核状态和安全属性 |
assets_get_video | 读取视频及独立海报帧的处理状态 |
assets_list_placements | 浏览某个资源的用途,或某个本地化内容的组成 |
assets_get_placement | 读取展示位置并验证其所属应用 |
assets_prepare_change | 准备一项类型化更改,但不写入 Apple;返回有效期为十分钟的预览 |
assets_apply_change | 使用一次预览,重新验证、执行并回读 |
assets_get_operation | 检查私有日志,并且仅通过读取进行协调 |
应用更改前,请阅读迁移和恢复指南。上传、展示位置和审核是独立的操作;已发布展示位置的更改不在此候选版本的验收范围内。
性能指标 — 10 个工具
| 工具 | 描述 | |------|-------------| | `metrics_performance_overview` | 查看应用性能概览,并可按设备筛选 | | `metrics_app_perf` | 获取应用性能/功耗指标 | | `metrics_build_perf` | 获取构建性能指标 | | `metrics_build_diagnostics` | 列出构建的诊断信息 | | `metrics_get_diagnostic_logs` | 获取诊断日志 | | `metrics_app_beta_tester_usage` | 按 Beta 测试者获取应用的 TestFlight 崩溃、会话和反馈指标 | | `metrics_group_beta_tester_usage` | 按 Beta 测试者获取 Beta 群组的 TestFlight 崩溃、会话和反馈指标 | | `metrics_group_public_link_usage` | 获取公开链接浏览量、接受结果、条件未满足情况和调查问卷比例 | | `metrics_tester_usage` | 获取某位测试者在某个应用中的 TestFlight 使用指标 | | `metrics_build_beta_usage` | 获取构建的 TestFlight 崩溃、安装、会话、反馈和邀请指标 |使用示例
完整发布工作流
You: "Release version 2.2.0 of my app with build 456"
Claude will:
1. app_versions_create(app_id, platform: "IOS", version_string: "2.2.0")
2. app_versions_attach_build(version_id, build_id)
3. app_versions_set_review_details(version_id, contact_email: "...")
4. app_versions_submit_for_review(version_id)
5. app_versions_create_phased_release(version_id) # after approval
TestFlight 分发
You: "Create a beta group 'External Testers' and distribute the latest build"
Claude will:
1. beta_groups_create(app_id, name: "External Testers")
2. builds_list(app_id, limit: 1) # find latest
3. builds_set_beta_localization(build_id, locale: "en-US", whats_new: "...")
4. beta_groups_add_testers(group_id, tester_ids: [...])
审核管理
You: "Show me all 1-star reviews from the last week and draft responses"
Claude will:
1. reviews_list(app_id, rating: 1, sort: "-createdDate", limit: 50)
2. reviews_create_response(review_id, response_body: "...") # for each
多公司工作流
You: "Switch to ClientCorp and check their latest build status"
Claude will:
1. company_switch(company: "ClientCorp")
2. apps_list(limit: 5)
3. builds_list(app_id, limit: 1)
4. builds_get_processing_state(build_id)
API 限制
| 限制 | 详情 |
|---|---|
| 不允许使用表情符号 | 元数据字段(What's New、描述、关键词)不得包含表情符号字符 |
| 版本状态 | App Store Connect 会验证元数据更新所处的可编辑状态。被拒绝和元数据审核未通过的版本可以编辑后重新提交;已发布或正在审核的版本可能会被 Apple 拒绝。 |
| JWT 过期时间 | 令牌会在 20 分钟后过期 — 服务会自动刷新令牌 |
| 速率限制 | Apple 对每个账户实施速率限制(文档) |
| 区域设置格式 | 使用标准代码:en-US、ru、de-DE、ja、zh-Hans |
架构
Sources/asc-mcp/
├── EntryPoint.swift # Entry point, --workers filtering
├── Core/
│ ├── Application.swift # MCP server setup & initialization
│ └── ASCError.swift # Custom error types
├── Helpers/ # JSON formatting, pagination, safe helpers
├── Models/ # API request/response models
│ ├── AppStoreConnect/ # Apps, versions, localizations
│ ├── Builds/ # Builds, beta details, beta groups
│ ├── AppLifecycle/ # Version lifecycle models
│ ├── InAppPurchases/ # IAP models
│ ├── Subscriptions/ # Subscriptions, offer codes, win-back
│ ├── Marketing/ # Screenshots, custom pages, PPO, promoted
│ ├── Metrics/ # Performance metrics, diagnostics
│ ├── Analytics/ # Sales/financial reports
│ ├── Provisioning/ # Bundle IDs, devices, certificates
│ ├── Shared/ # Shared upload/image types
│ └── ... # AppEvents, AppInfo, Pricing, Users
├── Services/
│ ├── HTTPClient.swift # Actor-based HTTP with retry logic
│ ├── JWTService.swift # ES256 JWT token generation
│ └── CompaniesManager.swift # Multi-account management
└── Workers/ # MCP tool implementations (40 Swift worker classes + MainWorker router)
├── MainWorker/WorkerManager # Central tool registry & routing
├── CompaniesWorker/ # company_* tools
├── AuthWorker/ # auth_* tools
├── AppsWorker/ # apps_* tools
├── AccessibilityWorker/ # accessibility_* tools
├── WebhooksWorker/ # webhooks_* tools
├── XcodeCloudWorker/ # xcode_cloud_* tools
├── BuildsWorker/ # builds_* tools
├── BuildUploadsWorker/ # build_uploads_* tools
├── BuildProcessingWorker/ # builds_*_processing tools
├── ExportComplianceWorker/ # export_compliance_* tools
├── BuildBetaDetailsWorker/ # builds_*_beta_* tools
├── AppLifecycleWorker/ # app_versions_* tools
├── ReviewsWorker/ # reviews_* tools
├── BetaGroupsWorker/ # beta_groups_* tools
├── BetaFeedbackWorker/ # beta_feedback_* tools
├── BetaTestersWorker/ # beta_testers_* tools
├── InAppPurchasesWorker/ # iap_* tools
├── SubscriptionsWorker/ # subscriptions_* tools
├── OfferCodesWorker/ # subscriptions offer-code tools
├── IntroductoryOffersWorker/ # subscriptions intro-offer tools
├── PromotionalOffersWorker/ # subscriptions promotional-offer tools
├── WinBackOffersWorker/ # subscriptions win-back tools
├── SandboxTestersWorker/ # sandbox_* tools
├── BetaAppWorker/ # beta_app_* tools
├── PreReleaseVersionsWorker/ # pre_release_* tools
├── BetaLicenseAgreementsWorker/ # beta_license_* tools
├── ProvisioningWorker/ # provisioning_* tools
├── AppInfoWorker/ # app_info_* tools
├── PricingWorker/ # pricing_* tools
├── UsersWorker/ # users_* tools
├── AppEventsWorker/ # app_events_* tools
├── AnalyticsWorker/ # analytics_* tools
├── ScreenshotsWorker/ # screenshots_* tools
├── CustomProductPagesWorker/ # custom_pages_* tools
├── ProductPageOptimizationWorker/ # ppo_* tools
├── PromotedPurchasesWorker/ # promoted_* tools
├── ReviewAttachmentsWorker/ # review_attachments_* tools
├── ReviewSubmissionsWorker/ # review_submissions_* tools
└── MetricsWorker/ # metrics_* tools
设计原则
- Swift 6 严格并发 — 所有工作器和服务都符合
Sendable,并正确隔离 Actor - 基于 Actor 的 HTTP 客户端 — 具备线程安全、指数退避和重试逻辑
- 基于前缀的路由 —
WorkerManager按名称前缀路由工具调用(无需配置) - 最少依赖 — 仅依赖 MCP Swift SDK
故障排查
服务无响应 / MCP 连接断开
- 运行
~/.mint/bin/asc-mcp --version,独立于 MCP 客户端验证安装。 - 确认 MCP 客户端使用已安装可执行文件的绝对路径。
- 对于 Codex,运行
codex mcp list和codex mcp get asc-mcp --json。 - 对于 Claude Code,运行
claude mcp get asc-mcp和claude mcp list。 - 检查已配置的
companies.json文件,或所选设置使用的环境变量。 - 确保每个
.p8密钥路径都是绝对路径,且文件存在。 - 更改 GUI 客户端的 MCP 配置后,重启客户端,然后检查客户端的 MCP 输出日志。
身份验证错误(401)
- 确认 Key ID 和 Issuer ID 与 App Store Connect 中显示的信息一致。
- 确保
.p8文件是原始下载文件(未经过修改)。 - 检查 API 密钥是否已被撤销。
- JWT 令牌会自动刷新,但如果密钥无效,所有请求都会失败。
App Store Connect 状态规则拒绝元数据更新
apps_update_metadata 会在本地文本、区域设置和 URL 验证后,将元数据 PATCH 请求发送到 App Store Connect。当前版本是否可编辑由 Apple 决定。被拒绝和元数据被拒绝的版本可以编辑并重新提交;已发布、正在审核或以其他方式被锁定的版本可能会返回 Apple API 错误。
构建处理耗时过长
使用 builds_get_processing_status 检查当前处理状态,并使用 builds_check_readiness 验证 App Store/TestFlight 是否已就绪。Apple 的构建处理通常需要 5-30 分钟,但高峰时段可能会更久。
速率限制(429 错误)
HTTP 客户端会在收到 429 响应时自动使用指数退避重试。如果持续触及限制,请降低 API 调用频率,或使用较小的分页大小进行分页。
获取帮助
提交报告前,请先搜索现有问题。如果问题是新出现的,请提交问题,并附上:
- macOS 版本和安装方式;
- MCP 客户端名称和版本;
- 所选的
--workers值(如有); - 准确的错误消息和最精简的可复现请求。
发布日志前,请删除 Key ID、Issuer ID、私钥、签名 URL、令牌和账户数据。请按照 SECURITY.md 中的说明私下报告安全漏洞。代码贡献请参阅 CONTRIBUTING.md。
开发
构建
swift build # Debug build
swift build -c release # Release build (optimized)
swift package clean # Clean build artifacts
测试模式
.build/debug/asc-mcp --test # Runs built-in integration tests
添加新工具
- 在相应的
Worker+Handlers.swift中创建处理程序方法 - 在
Worker+ToolDefinitions.swift中添加工具定义 - 在工作器的
getTools()方法中注册 - 在工作器的
handleTool()开关中添加路由分支 WorkerManager会根据前缀自动路由,无需在此处更改
添加新工作器
- 创建目录:
Workers/MyWorker/ - 创建 3 个文件:
MyWorker.swift、MyWorker+ToolDefinitions.swift、MyWorker+Handlers.swift - 在
WorkerManager.swift中添加工作器属性并进行初始化 - 在
WorkerManager.registerWorkers()中添加路由规则 - 添加
getMyTools()辅助方法
贡献
欢迎贡献!详情请参阅贡献指南。
许可证
本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。
致谢
- Model Context Protocol — 协议规范和 Swift SDK
- App Store Connect API — Apple 官方 REST API
这是一款由社区维护的非官方工具,与 Apple Inc. 无关,也未获得其认可。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。