App Store连接MCP服务器——代码模式
923个端点。2个工具。规范就是实现。
   ](https://developer.apple.com/app-store-connect/api/)
问题
传统的MCP服务器将每个API端点包装为一个单独的工具。苹果的应用商店连接API 923个端点。这意味着923个工具定义、约10万个上下文令牌,以及每次苹果添加端点时都会发布一个新版本。
解决方案
代码模式: 2个工具替换923.
| 工具 | 它做什么 |
|---|---|
search(code) | 编写JS查询Apple的OpenAPI规范。发现端点,检查参数,读取模式。 |
execute(code) | 编写JS来调用API。身份验证是自动的。连接多个通话。 |
LLM写入查询。规范就是实现。添加端点=苹果更新了他们的规范。我们这边没有代码更改。
Traditional MCP: 923 endpoints → 923 tools → ~100K tokens → constant maintenance
Code Mode: 923 endpoints → 2 tools → ~1K tokens → zero maintenance快速开始
1.获取App Store Connect凭据
- 首选 App Store Connect → 用户和访问→ 集成→ Keys
- 单击“+”生成新密钥(管理员或财务角色)
- 下载
.p8文件(只能下载一次!) - 记下您的密钥ID和发卡机构ID
2.通过克劳德代码安装
claude mcp add appstore-connect -s user \
-e APP_STORE_KEY_ID=YOUR_KEY_ID \
-e APP_STORE_ISSUER_ID=YOUR_ISSUER_ID \
-e APP_STORE_P8_PATH=/absolute/path/to/AuthKey_XXXXXXXXXX.p8 \
-e APP_STORE_VENDOR_NUMBER=YOUR_VENDOR_NUMBER \
-- npx -y @trialanderror-ai/appstore-connect-mcp-s user 使服务器在所有项目中都可用。掉落 -e APP_STORE_VENDOR_NUMBER 如果你不需要财务报告。
或者跳过env-var内联形式,在shell/MCP配置中设置它们(见下文)。
3.配置凭据
三个必需的环境变量(一个可选):
| 变量 | 描述 |
|---|---|
APP_STORE_KEY_ID | 10个字符的密钥ID |
APP_STORE_ISSUER_ID | UUID发行者ID |
APP_STORE_P8_PATH | 通往你的绝对之路 .p8 文件 |
APP_STORE_VENDOR_NUMBER *(可选)* | 财务报告要求 |
配置Claude代码
要么在shell中设置env变量,要么通过 .mcp.json:
{
"mcpServers": {
"appstore-connect": {
"command": "npx",
"args": ["-y", "@trialanderror-ai/appstore-connect-mcp"],
"env": {
"APP_STORE_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_P8_PATH": "/path/to/AuthKey_XXXXXXXXXX.p8",
"APP_STORE_VENDOR_NUMBER": "YOUR_VENDOR_NUMBER"
}
}
}
}为Claude桌面配置
添加 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"appstore-connect": {
"command": "npx",
"args": ["-y", "@trialanderror-ai/appstore-connect-mcp"],
"env": {
"APP_STORE_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_P8_PATH": "/path/to/AuthKey_XXXXXXXXXX.p8"
}
}
}
}从源代码构建(替代)
git clone https://github.com/TrialAndErrorAI/appstore-connect-mcp
cd appstore-connect-mcp
npm install
npm run build然后将MCP配置指向 node /path/to/appstore-connect-mcp/dist/index.js 而不是 npx.
用法示例
发现端点
search: "Find all endpoints related to customer reviews"法学硕士写道:
const reviews = Object.entries(spec.paths)
.filter(([p]) => p.includes('customerReview'))
.map(([path, methods]) => ({
path,
methods: Object.keys(methods).map(m => m.toUpperCase())
}));
return reviews;列出您的应用程序
execute: "List all my apps"法学硕士写道:
const apps = await api.request({ method: 'GET', path: '/v1/apps' });
return apps.data.map(a => ({ id: a.id, name: a.attributes.name }));连接多个通话
execute: "Get latest reviews for my first app"法学硕士写道:
const apps = await api.request({ method: 'GET', path: '/v1/apps', params: { limit: '1' } });
const appId = apps.data[0].id;
const reviews = await api.request({
method: 'GET',
path: `/v1/apps/${appId}/customerReviews`,
params: { limit: '5', sort: '-createdDate' }
});
return {
app: apps.data[0].attributes.name,
reviews: reviews.data.map(r => ({
rating: r.attributes.rating,
title: r.attributes.title,
body: r.attributes.body
}))
};您可以访问的内容
所有923个App Store Connect API端点,包括:
| 类别 | 终点 | 您将获得什么 |
|---|---|---|
| 应用元数据 | 29 | 标题、副标题、关键字、描述——读写 |
| 分析 | 10 | 印象、页面浏览量、下载量、来源归因 |
| 销售与财务 | 2 | 按国家分列的收入、单位、收益 |
| 客户评价 | 5 | 评分、评论文本、回复评论 |
| 订阅 | 30 | 次级管理、定价、团体、优惠 |
| 应用内购买 | 29 | IAP管理,提供代码 |
| 版本 | 28 | 版本管理,分阶段推出 |
| 截图 | 12 | 上传、重新排序、管理截图集 |
| A/B测试 | 24 | 产品页面实验,治疗变体 |
| 自定义产品页面 | 18 | 每个广告活动的自定义登录页面 |
| TestFlight | 23 | 测试组、测试人员、构建 |
| 定价 | 11 | 按地区定价,价格点 |
| 构建 | 29 | 构建管理、处理状态 |
看 API-覆盖.md 对于完整的分组地图。
运作原理
Claude writes JavaScript
│
▼
┌─────────────────────────────────────────────────┐
│ search({ code }) │
│ Sandbox executes code against OpenAPI spec │
│ 923 paths, 1337 schemas — pre-resolved $refs │
│ Returns: matching endpoints + parameters │
└─────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ execute({ code }) │
│ Sandbox executes code against auth'd client │
│ JWT injected — code never sees credentials │
│ Supports GET/POST/PATCH/DELETE + chaining │
│ Auto-decompresses gzipped report responses │
│ Returns: API response (truncated to 40K chars) │
└─────────────────────────────────────────────────┘安全
- 代码在Node.js中运行
vm沙盒 - 不
fetch,require,process,eval,setTimeout可用的 - 通过绑定注入凭据——生成的代码永远不可见
- 截断响应以防止上下文膨胀
- 仅
spec(搜索)或api(执行)可用作全局变量
建筑
src/
├── auth/jwt-manager.ts — JWT with P8 key, ES256, 19-min cache
├── api/client.ts — HTTP client, rate limiting, gzip handling
├── spec/
│ ├── openapi.json — Apple's official spec (923 endpoints)
│ └── loader.ts — Loads + resolves $refs for flat traversal
├── executor/sandbox.ts — vm-based sandboxed execution
├── server/mcp-server.ts — MCP server (search, execute, test_connection)
└── index.ts — Entry point为什么是代码模式?
| 传统MCP | 编码模式 | |
|---|---|---|
| 工具 | 每个端点1个(923) | 共2个 |
| 上下文标记 | ~10k+ | ~1K |
| 添加端点 | 新工具+代码+模式+发布 | 苹果更新规范。零变化。 |
| 连锁电话 | 在每次执行之间重新输入LLM | 单次执行,多次调用 |
| 维护 | 更新923工具定义 | 更新1规范文件 |
受到启发 Cloudflare的代码模式.
发展
npm install # Install dependencies
npm run build # Compile + copy spec
npm run dev # Watch mode (tsx)
npm start # Run compiled server
npm run type-check # TypeScript check许可证
麻省理工学院——使用它,修改它,出售它。只要让它发挥作用。
学分
建造于 试错公司.用于生产 翻新AI,一款适用于iOS、Android和网络的人工智能家居设计应用程序。代码模式模式来自 云耀.
______________________________________________________________________
*“我们不实现单个端点。我们实现了调用任何端点的能力。”*
