mcpField
A
App Store and Google Play

App Store and Google Play

本地服务
foreverworks.github.io开发工具22 天前更新

关于 App Store and Google Play

App Store and Google Play MCP 服务面向应用开发者,用于读取和回复商店评论,并查看 TestFlight 测试反馈与崩溃日志。它通过 App Store Connect 和 Google Play Developer API 工作,公开回复由开发者批准后发布。

主要功能

  1. 01读取 App Store 和 Play 评论
  2. 02按条件筛选并查看回复状态
  3. 03查看 TestFlight 截图与崩溃反馈
  4. 04保存崩溃日志
  5. 05发布评论回复

适用场景

  1. 01汇总近期版本的用户评价
  2. 02筛选尚未回复的评论
  3. 03查看指定 TestFlight 构建的崩溃
  4. 04审核草拟回复后发布

MCP 相关

向 MCP 客户端提供商店评论、TestFlight 反馈和崩溃日志读取工具,以及发布评论回复的写入工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"com-foreverworks-app-stores": {
"command": "npx",
"args": [
"-y",
"@foreverworks/mcp-app-stores"
],
"env": {
"ASC_KEY_ID": "<ASC_KEY_ID>",
"ASC_ISSUER_ID": "<ASC_ISSUER_ID>",
"ASC_PRIVATE_KEY_FILE": "<ASC_PRIVATE_KEY_FILE>",
"PLAY_SERVICE_ACCOUNT_FILE": "<PLAY_SERVICE_ACCOUNT_FILE>",
"PLAY_PACKAGES": "<PLAY_PACKAGES>"
}
}
}
}
启动命令npx -y @foreverworks/mcp-app-stores
需要配置的环境变量
ASC_KEY_ID密钥For the App Store: the App Store Connect API key's id (10 characters).
ASC_ISSUER_IDFor the App Store: the issuer id App Store Connect shows above your team keys.
ASC_PRIVATE_KEY_FILE密钥For the App Store: path of the .p8 key file App Store Connect let you download.
PLAY_SERVICE_ACCOUNT_FILEFor Google Play: path of the service account's JSON key.
PLAY_PACKAGESFor Google Play: the package names to answer for, comma-separated, e.g. com.example.app.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@foreverworks/mcp-app-stores0.1.2

工具

7

收录的工具列表 · 更新于 2 天前

参数类型必填说明
submissionstring是崩溃反馈的 ID,取自 list_testflight_feedback。

详细介绍

App Store 和 Google Play 图标 App Store 和 Google Play MCP 服务

在 AI 助手中阅读并回复应用的 App Store 和 Google Play 评论,还能查看 TestFlight 测试人员发送的内容:截图反馈,以及附有日志的崩溃报告。它通过 App Store Connect 和 Google Play Developer API运行。 两个工具会发布回复:reply_app_store_review 和 reply_play_review 会以开发者的名义发布回复,所有人都能看到,因此只发送你已批准的内容。这里不会涉及资金交易。

你需要为所用的商店准备凭据,只使用一个商店也可以:对于 App Store,需要 App Store Connect API 密钥(其 .p8 文件、密钥 ID 和发行者 ID);对于 Google Play,需要一个拥有 JSON 密钥的 Google Cloud 服务账号,并在 Play Console 中获邀访问你的应用。Google 的 API 只会返回最近七天的评论。

你可以提出的问题

  • “大家对上次发布的版本有什么评价?哪些 App Store 评论还没有回复?”
  • “显示 com.example.app 本周的 Google Play 评论,翻译成英语,并按评分从低到高排列。”
  • “TestFlight 测试人员在构建版本 42 中遇到了哪些崩溃?”
  • “为来自德国且提到登录的 App Store 评论起草回复。”然后,在你读完之后:“发送这些回复。”

安装

在 VS Code 中安装 在 Cursor 中安装 下载 Claude Desktop 版

使用 Claude Code:

claude mcp add app-stores -- npx -y @foreverworks/mcp-app-stores

Claude Desktop(Settings、Developer、Edit Config)和大多数其他客户端都以 JSON 格式读取相同的命令:

{
  "mcpServers": {
    "app-stores": {
      "command": "npx",
      "args": ["-y", "@foreverworks/mcp-app-stores"]
    }
  }
}

每种方式都会在 Node 22.19 或更高版本上运行已发布的包。添加服务时,VS Code 和 Claude Desktop bundle 会逐项询问设置;可选项可以留空。Cursor 则从环境变量读取各项设置(如 ${env:ASC_KEY_ID}),因此请在启动 Cursor 前设置好这些变量。所有设置都是可选的;配置说明了哪些工具需要哪些设置。

从克隆版本安装
git clone https://github.com/foreverworks/mcps.git && cd mcps
npm ci && npm run build
claude mcp add app-stores -- node "$PWD/servers/app-stores/dist/index.js"

在 JSON 配置中,命令为 node,其唯一参数是 servers/app-stores/dist/index.js 的完整路径。若要让多个客户端通过 HTTP 共用一个运行中的实例,请参阅 docs/deploying.md。

上面的命令未配置任何商店。请添加你所用商店对应的变量:

claude mcp add app-stores \
  -e ASC_KEY_ID=ABCDE12345 -e ASC_ISSUER_ID="<issuer id>" -e ASC_PRIVATE_KEY_FILE="<path to AuthKey.p8>" \
  -e PLAY_SERVICE_ACCOUNT_FILE="<path to service account JSON>" -e PLAY_PACKAGES=com.example.app \
  -- npx -y @foreverworks/mcp-app-stores

配置

变量必填含义
ASC_KEY_ID适用于 App StoreApp Store Connect API 密钥的 ID(10 个字母和数字)。
ASC_ISSUER_ID适用于 App StoreApp Store Connect 显示在团队密钥上方的发行者 ID(UUID)。
ASC_PRIVATE_KEY_FILE适用于 App StoreApp Store Connect 允许下载一次的 .p8 文件。
ASC_PRIVATE_KEY否密钥文本本身,可在本地 stdio 运行时替代文件。
PLAY_SERVICE_ACCOUNT_FILE适用于 Google PlayGoogle Cloud 下载的服务账号 JSON 密钥。
PLAY_SERVICE_ACCOUNT否JSON 密钥文本本身,可在本地 stdio 运行时替代文件。
PLAY_PACKAGES否此服务响应的逗号分隔包名,例如 com.example.app。Google 没有可列出服务账号所关联应用的调用,因此 health 会检查这些包名;未指定包名的调用则表示唯一的包名。
APP_STORES_OUTBOX_DIR否保存崩溃日志的位置。默认值:状态文件夹中的 outbox/。
APP_STORES_STATE_DIR否状态文件夹;默认位置见 docs/configuration.md。

未配置的商店会在 health 中显示为 configured: false,其工具会返回 config。凭据会在首次需要时读取,因此服务无需凭据也能启动。所有服务共用的变量(传输方式、限制、工具可执行的操作)见 docs/configuration.md。

获取 App Store Connect API 密钥
  1. 在 App Store Connect 中,打开 Users and Access,然后依次打开 Integrations、App Store Connect API、Team Keys。
  2. 创建权限恰到好处的密钥:Customer Support 可读取并回复评论,Developer 可读取 TestFlight 反馈。
  3. 下载 .p8 文件。App Store Connect 只会提供一次下载:请将文件保存为仅自己可读(chmod 600),并将 ASC_PRIVATE_KEY_FILE 指向该文件。
  4. 将密钥所在行的 Key ID 复制到 ASC_KEY_ID,并将列表上方显示的 Issuer ID 复制到 ASC_ISSUER_ID。

团队密钥不会过期;不再使用时,请在同一页面撤销。

获取 Google Play 服务账号
  1. 在 Google Cloud 控制台 中,打开任意项目的 IAM and Admin、Service accounts,然后点击 Create service account。该账号无需在项目中拥有任何角色。
  2. 打开新建账号的 Keys,依次点击 Add key、Create new key、 JSON。将文件保存为仅自己可读(chmod 600),并将 PLAY_SERVICE_ACCOUNT_FILE 指向该文件。如果贵组织禁止创建服务账号密钥(iam.disableServiceAccountKeyCreation),请在创建密钥期间解除该项目的此项政策限制。
  3. 在 Play Console 中,打开 Users and permissions,点击 Invite new users,然后输入服务账号的电子邮件地址(JSON 文件中的 client_email)。为其授予应用的两项权限:View app information(读取评论)和 Reply to reviews。
  4. 将 PLAY_PACKAGES 设置为应用的包名(多个包名用逗号分隔)。

首次运行

  1. 请助手运行应用商店的 health 检查。对于每个商店,检查结果会说明凭据是否有效,以及密钥可访问的应用(bundle ID 和 Apple ID);对每个 Play 包,也会读取一条评论。
  2. 先读再写:请助手起草回复,只发送你已批准的回复。

工具

read 不会更改任何一个商店中的内容(崩溃日志会保存到服务端的发件箱);write 会在评论下发布回复。

工具访问权限功能
health读取检查各商店的凭据是否有效、App Store Connect 密钥可访问的应用,以及每个 Play 软件包中是否读到一条评论。
list_app_store_reviews读取按星级、店面或回复状态筛选应用的 App Store 评论,并显示你的回复及其状态。
list_play_reviews读取获取过去 7 天内某个软件包的 Play 评论(Google 的限制),并显示你的回复;可选择翻译。
list_testflight_feedback读取获取测试人员通过 TestFlight 发送的屏幕截图和崩溃反馈,并显示设备、OS 和构建版本。
get_testflight_crash_log读取获取一条崩溃反馈的日志,将其完整保存到发件箱,并显示前 40 行。
reply_app_store_review / reply_play_review写入在评论下发布回复。除非明确要求,否则不会替换已有回复;相同文本只会发送一次。

故障排除

config:“App Store Connect is not configured”或“Google Play is not configured”。 消息会指出缺少哪些变量。其他任何 config 消息都会指出商店未提供的值:不是 10 个字母和数字的密钥 ID、不是 UUID 的发行者 ID、不是 EC P-256 密钥的 .p8 文件,或不是服务账号密钥的 JSON 文件。

auth。 商店拒绝了凭据:密钥已撤销,或服务账号已删除。请在 App Store Connect(Users and Access、Integrations)或服务账号的 Google Cloud 项目中检查,并替换该文件。

来自 App Store 的 forbidden。 密钥缺少相应角色:查看评论需要 Customer Support;查看 TestFlight 反馈需要 Developer。

来自 Google Play 的 forbidden。 服务账号无法对该应用执行操作:在 Play Console 的 Users and permissions 中,授予其该应用的 View app information 和 Reply to reviews 权限。新受邀的账号可能需要数小时才能获得 API 访问权限。如果消息指出 Google Play Android Developer API 已停用,请在服务账号的 Google Cloud 项目中启用它。

input:“... already has a public reply”。 该评论已有不同的回复,消息中会引用该回复。只有在你确实要替换它时,才使用 replace: true 再次调用。其他 input 消息会指出问题:回复超过商店限制,或存在多个应用或软件包,需要指定其中一个。

not_found。 这些凭据无法访问该 ID 或应用:health 会列出它们可访问的应用和软件包。

回复后出现 outcome_unknown。回复发出后连接中断,因此它可能已经公开。请先重新列出该评论(其中会显示回复),再决定是否重新发送。

rate_limited。 商店正在限制这些凭据的请求;请等待一分钟。状态码为 0 的 api 表示无法连接到商店;其他状态码表示请求失败:请稍后重试。drift 表示商店的响应格式发生变化:请连同消息一起报告。

工作原理

  • Apple 没有令牌端点。 App Store Connect 直接将 JSON Web Token 用作 bearer:服务端使用 .p8 密钥(ES256)为其签名,将有效期设为 Apple 允许的 20 分钟中的 19 分钟,并将其保存在内存中。Google 则会在 oauth2.googleapis.com 使用服务账号密钥签名的断言(RS256、RFC 7523)换取有效期为 1 小时的令牌。如果密钥文件指定了其他令牌端点,则会被拒绝,因此断言不会发送到其他地方。
  • 回复会公开显示,因此处理时很谨慎。 两家商店都会静默替换已有回复,因此服务端会先读取评论:除非 replace 为 true,否则如果已有回复不同,就会拒绝替换;如果文本相同,则不会发送任何内容。 Apple 会将新回复设为 pending,直到 Apple 自行审核并发布,通常会在一天内完成。
  • 限制由商店决定。 Apple 的回复最多为 5,970 个字符,Google 则约为 350 个字符;发送前会进行检查。Google 的 API 仅返回带有文本、且在过去 7 天内撰写或修改的评论;完整历史记录可在 Play Console 的月度评论报告中查看(下载报告、评论)。
  • 使用模型,而非中继。 数据结构来自 Apple 的 OpenAPI 规范 4.5.1 和 Google 的 androidpublisher v3 参考文档;如果缺少文档中列出的字段,则会以 drift 错误失败,而不会将其作为空值继续传递。
  • 崩溃日志会保存到发件箱,因为日志可能有数十到数百行。返回日志的前 40 行及文件路径和 SHA-256,其中包含异常信息和崩溃线程信息,且支持 Apple 的两种格式。

npx tsx scripts/smoke.ts 会使用你的凭据以只读方式调用已构建的服务:检查 health,获取每个已配置商店的 3 条评论,以及 3 条 TestFlight 反馈。它绝不会回复评论。

限制

  • 评论仅限 API 窗口范围内的数据:App Store 返回完整历史记录,Google 返回过去 7 天的数据。
  • 不支持 Play 崩溃报告(Android vitals 使用不同的 API,即 Play Developer Reporting API),不提供评论摘要,也不能删除回复。
  • TestFlight 截图是会过期的链接(expiresAt);服务端不会下载这些截图。
  • TestFlight 反馈中的版本以构建编号标识;营销版本号可在 App Store Connect 中查看。

其他 App Store Connect 和 Google Play 服务

搜索日期:2026-10-22。Apple 和 Google 均未发布此类服务。

  • Expo 托管的 MCP 服务涵盖了所有这些功能(App Store 和 Play 评论及回复、TestFlight 反馈和崩溃、Play 崩溃),但它运行在 Expo 一侧,需要通过个人浏览器登录;而且回复会直接替换已有回复,不会事先询问。

社区服务各自通过 stdio 涵盖部分功能:

  • asc-mcp(Swift,仅限 macOS):App Store 评论、回复,以及带崩溃日志的 TestFlight 反馈。
  • Heimdall(erayendes/app-store-connect-mcp):完整的 App Store Connect API。
  • app-publish-mcp:两家商店的评论和回复,不支持 TestFlight 反馈。
  • google-play-developer-mcp 和 google-play-console-cli:Play 评论和回复。
  • antoniolg/play-store-mcp 和 shipstores 用于发布,而非评论;JoshuaRileyDev/app-store-connect-mcp-server 已归档。

这个服务实现了其他服务都未能集中实现的功能:通过一个运行在 Linux 上、将密钥保存在文件中的服务,同时支持两家商店和 TestFlight;如果回复会替换公开回复,则拒绝发送;重复提交时只发送一次;每条回复都会注明 Google 的 7 天窗口;保存带校验和的崩溃日志;并按商店类型返回错误,说明需要在相应控制台中更改什么。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。