内容
# Codemagic-MCP
Codemagic-MCP 服务器提供了一个统一的界面,用于连接 **Codemagic CI/CD** 和 **App Store Connect / Google Play**,使 AI 代理能够执行完整的移动应用交付流程,从仓库接入到构建、签名和发布,全程由对话驱动。
[](https://glama.ai/mcp/servers/todah-zg/codemagic-mcp)
[](https://glama.ai/mcp/servers/todah-zg/codemagic-mcp)
## 功能概述
该服务器提供了跨五个领域的工具:
- **Codemagic** — 列出团队和应用,触发构建,等待结果,检索工件,获取构建日志,管理变量组、缓存和 Webhooks
- **App Store Connect** — 管理 TestFlight,上传和提交构建,设置列表文本和截图,验证,提交和发布到 App Store
- **Google Play** — 发布 AAB,推广版本,管理分阶段发布,设置列表文本和截图,读取和回复用户评论
- **测试** — 解析 JUnit XML 测试结果,获取通过/失败/错误/跳过总结和每项失败的详细信息
- **跨平台** — 验证本地化发布说明是否符合平台字符限制和 BCP-47 地区代码
预期的端到端流程为:
**iOS:** `list_asc_builds` → `get_yaml_template` → `trigger_build` → `wait_for_build` → `upload_build_to_asc` → `set_version_metadata` → `validate_app_submission` → `submit_for_app_store_review` → `release_version`
**Android:** `get_latest_build_number` → `get_yaml_template` → `trigger_build` → `wait_for_build` → `upload_to_google_play` → `promote_google_play_release`
## 前置条件
- **Node.js** 20 或 22(LTS)
- **asc CLI** — [asccli.sh](https://asccli.sh) — App Store Connect 工具所需
- **google-play CLI** — [codemagic-cli-tools](https://github.com/codemagic-ci-cd/cli-tools) 的一部分 — Google Play 工具所需
```bash
pip install codemagic-cli-tools
```
## 环境变量
### 必需
| 变量名 | 描述 |
| --- | --- |
| `CODEMAGIC_API_TOKEN` | 您的 Codemagic API 令牌。在 Codemagic → 账户设置中找到。 |
### App Store Connect 工具(iOS)
| 变量名 | 描述 |
| --- | --- |
| `ASC_KEY_ID` | App Store Connect API 密钥 ID |
| `ASC_ISSUER_ID` | App Store Connect 发行者 ID |
| `ASC_PRIVATE_KEY_B64` | Base64 编码的 `.p8` 私钥 (`base64 -i AuthKey_XXXX.p8`) |
| `ASC_BYPASS_KEYCHAIN` | 设置为 `1` 以强制环境变量身份验证而不是 macOS 密钥链 |
### Google Play 工具(Android)
| 变量名 | 描述 |
| --- | --- |
| `GOOGLE_PLAY_SERVICE_ACCOUNT_CREDENTIALS` | 您的 Google Play 服务账户密钥文件的原始 JSON 内容 |
对于 Google Play 凭证,您可以使用 `@file:` 前缀避免直接粘贴 JSON:
```bash
GOOGLE_PLAY_SERVICE_ACCOUNT_CREDENTIALS=@file:/path/to/service-account.json
```
## 安装
### 使用 npx(推荐)
无需安装。添加服务器到您的 MCP 客户端配置中,使用 `npx`,它会自动下载并运行:
```json
"command": "npx",
"args": ["-y", "codemagic-mcp-server"]
```
### 全局安装
如果您更喜欢永久安装而不是使用 npx:
```bash
npm install -g codemagic-mcp-server
```
然后在您的 MCP 客户端配置中使用 `codemagic-mcp` 作为命令:
```json
"command": "codemagic-mcp",
"args": []
```
### 开发
从源码构建:
```bash
git clone https://github.com/todah-zg/codemagic-mcp.git
cd codemagic-mcp
npm install
npm run build
```
然后在您的 MCP 配置中使用本地路径 — 请参见下面的[从本地克隆运行](#running-from-a-local-clone)。
## 运行
### MCP 检测器(开发/测试)
在您的 shell 中设置所需的环境变量,然后:
```bash
npx @modelcontextprotocol/inspector node dist/index.js
```
### Claude Desktop
添加至您的 `claude_desktop_config.json`:
**如果从 npm 安装**
```json
{
"mcpServers": {
"codemagic": {
"command": "npx",
"args": ["-y", "codemagic-mcp-server"],
"env": {
"CODEMAGIC_API_TOKEN": "your-token",
"ASC_KEY_ID": "your-key-id",
"ASC_ISSUER_ID": "your-issuer-id",
"ASC_PRIVATE_KEY_B64": "base64-encoded-p8-key",
"ASC_BYPASS_KEYCHAIN": "1",
"GOOGLE_PLAY_SERVICE_ACCOUNT_CREDENTIALS": "@file:/path/to/service-account.json"
}
}
}
}
```
**如果从本地克隆运行(开发中)**
```json
{
"mcpServers": {
"codemagic": {
"command": "node",
"args": ["/absolute/path/to/codemagic-mcp-server/dist/index.js"],
"env": {
"CODEMAGIC_API_TOKEN": "your-token",
"ASC_KEY_ID": "your-key-id",
"ASC_ISSUER_ID": "your-issuer-id",
"ASC_PRIVATE_KEY_B64": "base64-encoded-p8-key",
"ASC_BYPASS_KEYCHAIN": "1",
"GOOGLE_PLAY_SERVICE_ACCOUNT_CREDENTIALS": "@file:/path/to/service-account.json"
}
}
}
}
```
配置文件位于:
- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
## 与 Claude Desktop 结合使用
### 连接服务器
要验证服务器是否已连接,请打开一个新的对话并询问: *"ping the codemagic mcp server"*。如果已连接,Claude 将调用 `ping` 工具并回复 “Codemagic MCP server is running.” 如果未连接,请检查 `args` 中的路径是否正确,所有必需的环境变量是否已设置,然后使用 Cmd+Q(而不仅仅是关闭窗口)重启 Claude Desktop。
如果服务器未显示,请检查 `CODEMAGIC_API_TOKEN` 环境变量是否正确设置在配置中,并且 `dist/index.js` 的路径是否为绝对路径且正确。
### 工作流提示
连接后,输入 `/` 到 Claude Desktop 输入字段打开命令选择器。您将看到来自此服务器的五个工作流提示:
| 提示 | 使用时机 |
| --- | --- |
| `/onboarding` | 从头开始 — 连接仓库,获取首个构建通过 |
| `/android_release` | 构建签名 AAB 并发布到 Google Play |
| `/ios_release` | 构建签名 IPA 并上传到 TestFlight |
| `/first_publish_ios` | iOS 应用商店发布者首次使用的设置清单 — Apple 开发者注册,应用记录,年龄评级,隐私标签 |
| `/first_publish_android` | Android 应用商店发布者首次使用的设置清单 — Play 账户,内容评级,封闭测试期 |
选择提示,Claude 将接收逐步的操作手册并开始使用可用工具执行工作流。
### 示例对话
您也可以用自然语言描述您想要的,Claude 将自动选择合适的工具:
> "我有一个 Flutter 应用位于 github.com/example/myapp。 在 Codemagic 上设置并运行首个构建。"
> "为我的 Android 应用触发版本 2.1.0 的发布构建。Google Play 上的上一个构建编号为 41。"
> "我的 iOS 应用的当前 App Store 审核状态是什么?"
### 配置文件位置
| 平台 | 路径 |
| --- | --- |
| macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |
| Windows | `%APPDATA%\Claude\claude_desktop_config.json` |
## 工具
### Codemagic
| 工具 | 描述 |
| --- | --- |
| `ping` | 检查服务器是否正在运行 |
| `list_teams` | 列出身份验证账户所属的团队 |
| `list_applications` | 列出 Codemagic 账户或团队中的应用 |
| `list_workflows` | 列出应用的工作流 |
| `list_builds` | 列出构建,可选过滤器(应用,状态,分支,工作流) |
| `get_build` | 获取单个构建的完整详细信息,包括工件 |
| `get_build_logs` | 获取构建的逐步骤日志文本 — 默认仅返回失败步骤 |
| `trigger_build` | 触发构建;可选提供内联 `codemagic.yaml` 或覆盖 `instance_type` |
| `wait_for_build` | 单次检查工具 — 立即返回状态;再次调用直到终端状态 |
| `cancel_build` | 取消正在运行或排队的构建 |
| `add_application` | 连接 Git 仓库到 Codemagic;自动为 SSH URL 生成 SSH 部署密钥 |
| `get_webhook_url` | 获取传入的 webhook URL 以粘贴到 Git 提供者设置中 |
| `list_webhooks` | 列出为应用配置的 webhook 订阅 |
| `delete_webhook` | 删除应用的 webhook 订阅 |
| `list_caches` | 列出应用的构建缓存 |
| `delete_cache` | 删除所有缓存或特定缓存 ID |
| `create_public_artifact_url` | 为构建工件创建时间有限的公共下载 URL |
### App Store Connect(iOS)
| 工具 | 描述 |
| --- | --- |
| `list_asc_apps` | 列出 App Store Connect 中的应用 |
| `list_asc_builds` | 列出应用的 TestFlight 构建 |
| `list_testflight_groups` | 列出 TestFlight 测试组 |
| `get_asc_review_status` | 获取应用的 App Store 审核状态 |
| `get_asc_release_status` | 完整的发布管道仪表板(构建,TestFlight,App Store) |
| `upload_to_testflight` | 从 Codemagic 下载 IPA 并上传到 TestFlight |
| `submit_beta_review` | 提交 TestFlight 构建进行外部测试审查(外部测试组之前需要) |
| `add_testflight_tester` | 按电子邮件地址将测试者添加到 TestFlight,可选添加到组 |
| `create_testflight_group` | 创建内部或外部 TestFlight 测试组 |
| `set_export_compliance` | 为构建声明加密使用(在提交到 App Store 之前需要) |
| `set_version_metadata` | 设置应用商店版本的“What's New”文本和其他每个本地化的元数据 |
| `validate_app_submission` | 预检 — 返回提交前的一系列阻止因素 |
| `upload_build_to_asc` | 上传 IPA 到 App Store Connect(快速,非阻塞);轮询 `list_asc_builds` 直到有效 |
| `submit_for_app_store_review` | 将处理的构建附加到版本并提交 App Store 审查 |
| `release_version` | 立即发布已批准的 App Store 版本 |
| `set_phased_release` | 创建,暂停,恢复或完成分阶段发布 |
| `get_ios_store_listing` | 拉取当前 App Store 列表文本的所有本地化(名称,描述,关键词等) |
| `set_ios_store_listing` | 更新应用商店列表文本的本地化 — 只更改提供的字段 |
| `list_ios_screenshot_types` | 列出支持的截图设备类型及其所需的像素尺寸 |
| `upload_ios_screenshots` | 从 URL 下载截图并上传到 App Store Connect 的设备类型和本地化 |
### Google Play(Android)
| 工具 | 描述 |
| --- | --- |
| `list_google_play_tracks` | 列出轨道(内部,alpha,beta,生产)及其发布信息 |
| `list_google_play_bundles` | 按版本代码列出上传的 AAB |
| `upload_to_google_play` | 从 Codemagic 下载 AAB 并发布到 Google Play 轨道 |
| `get_latest_build_number` | 获取所有(或指定)轨道的最高版本号 |
| `promote_google_play_release` | 在轨道之间推广版本(内部 → alpha → beta → 生产) |
| `set_rollout_fraction` | 通过设置用户分数来扩展,暂停或恢复分阶段发布 |
| `share_app_internally` | 上传 AAB 到内部应用共享以获取即时 QA 安装链接 |
| `get_android_store_listing` | 获取 Google Play 列表的当前语言(标题,描述) |
| `set_android_store_listing` | 更新 Google Play 列表的语言 — 只更改提供的字段 |
| `upload_android_screenshots` | 从 URL 下载截图并上传到 Google Play 的语言和设备类型 |
| `set_android_data_safety` | 提交数据安全声明 CSV(从 Play 控制台导出)— 当数据实践更改时重新上传 |
| `list_google_play_reviews` | 列出最近的用户评论,可选的星级筛选(例如 1-2 星);包含开发者回复状态和评论 ID |
| `reply_to_google_play_review` | 发布或更新对用户评论的开发者回复(最多 350 个字符) |
### 测试
| 工具 | 描述 |
| --- | --- |
| `get_test_results` | 从 Codemagic 构建中获取并解析 JUnit XML 测试结果 — 返回通过/失败/错误/跳过总结以及每项失败的详细信息和堆栈跟踪摘录。涵盖 Flutter,Android 仪器测试和 iOS(通过 xcresult 转换)。直接传递 `artifact_url` 如果您已经从 `wait_for_build` 获取它。 |
### 跨平台
| 工具 | 描述 |
| --- | --- |
| `prepare_release_notes` | 验证本地化发布说明 — 检查 BCP-47 地区代码和字符限制(Android:500,iOS:4000) |
| `check_publish_readiness` | iOS 或 Android 的聚合发布准备检查。API 可验证的项目(有效构建,列表完整性,二进制验证)运行实时;无 API 的项目(年龄评级,隐私标签,法律协议)始终列为需要人为干预。每个项目被标记为“代理可以修复”或“需要人为干预”。 |
### 变量组
| 工具 | 描述 |
| --- | --- |
| `list_variable_groups` | 列出团队或应用的变量组 |
| `create_variable_group` | 创建新的变量组(团队或应用范围) |
| `add_variable` | 向组添加非秘密变量 |
| `list_variables` | 列出组中的变量(需要获取 ID 才能更新或删除) |
| `update_variable` | 按 ID 更新变量的名称或值 |
| `delete_variable` | 按 ID 从组中删除变量 |
### YAML
| 工具 | 描述 |
| --- | --- |
| `validate_codemagic_yaml` | 验证 `codemagic.yaml` 官方 Codemagic JSON 模式 |
| `get_yaml_template` | 获取 android,ios,flutter,flutter-native,react-native,ionic-capacitor,ionic-cordova,kmm,snap,unity,unity-oculus,dotnet-maui,ios-screenshots,android-screenshots,flutter-screenshots — 以及 android-debug,flutter-android-debug,react-native-android-debug 初始注册 |
| `list_yaml_template_types` | 列出所有支持的项目类型以获取 `get_yaml_template` |
| `detect_project_type` | 从存储库文件列表中检测项目类型 — 返回推荐的模板和调试模板以开始 |
### 提示
| 提示 | 描述 |
| --- | --- |
| `onboarding` | 零到第一个调试构建 — 添加存储库,获取模板,触发构建,配置 webhook |
| `android_release` | 签名 AAB 从构建到 Google Play — 构建编号,模板,触发,发布,推广 |
| `ios_release` | 签名 IPA 从构建到 App Store — 构建编号,模板,触发,TestFlight,元数据,验证,提交,发布 |
| `first_publish_ios` | iOS 应用商店发布者首次使用的设置清单 — Apple 开发者注册,应用记录,年龄评级,隐私标签,然后移交到/ios_release |
| `first_publish_android` | Android 应用商店发布者首次使用的设置清单 — Play 账户,内容评级,封闭测试期,然后移交到/android_release |
提示是可重用的工作流手册。在 Claude Desktop 中,它们显示为斜线命令。代理也可以按名称调用它们以获取完整的逐步说明以完成工作流。
## 项目结构
```
src/
index.ts — 服务器设置,环境变量验证,传输
codemagic.ts — Codemagic API 函数(v3 + v1)
asc.ts — App Store Connect CLI 包装器
googleplay.ts — Google Play CLI 包装器
androidpublisher.ts — Google Play androidpublisher REST API 客户端(列表,截图,评论)
testing.ts — JUnit XML 解析器(无外部依赖)
ssh.ts — SSH 密钥生成和部署密钥设置
yaml.ts — YAML 逻辑验证
templates.ts — 静态 codemagic.yaml 模板
detection.ts — 从存储库文件列表中检测项目类型
prompts.ts — MCP 提示资源(工作流手册)
tools/
codemagic.ts — Codemagic MCP 工具注册
asc.ts — App Store Connect MCP 工具注册
googleplay.ts — Google Play MCP 工具注册
yaml.ts — YAML MCP 工具注册
releasenotes.ts — 发布说明验证工具
readiness.ts — 发布准备检查工具
testing.ts — 测试结果工具
```
`src/` 模块包含纯函数(API 调用,CLI 包装器)而没有 MCP 依赖。
`src/tools/` 模块将这些函数连接到 MCP 工具 — 输入模式,格式化,错误响应。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器