原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

App Store and Google Play

作者:foreverworks版本 0.1.2i★ –i在你的电脑上运行
注册名称com.foreverworks/app-stores

安装

概览

作者提供的说明(英文原文)

Read and answer App Store and Google Play reviews, and see TestFlight feedback and crash logs.

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 其他

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

  • 基础检查:1 项中通过 1 项
  • 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
  • 需要你自己填写: ASC_KEY_ID, ASC_ISSUER_ID, ASC_PRIVATE_KEY_FILE, PLAY_SERVICE_ACCOUNT_FILE, PLAY_PACKAGES

你需要

  • npm已安装 Node.js(用于 npx 命令)

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json

{
  "mcpServers": {
    "app-stores": {
      "command": "npx",
      "args": [
        "-y",
        "@foreverworks/mcp-app-stores"
      ],
      "env": {
        "ASC_KEY_ID": "your-value",
        "ASC_ISSUER_ID": "your-value",
        "ASC_PRIVATE_KEY_FILE": "your-value",
        "PLAY_SERVICE_ACCOUNT_FILE": "your-value",
        "PLAY_PACKAGES": "your-value"
      }
    }
  }
}

在终端中运行这条命令

claude mcp add app-stores --env ASC_KEY_ID=your-value --env ASC_ISSUER_ID=your-value --env ASC_PRIVATE_KEY_FILE=your-value --env PLAY_SERVICE_ACCOUNT_FILE=your-value --env PLAY_PACKAGES=your-value -- npx -y @foreverworks/mcp-app-stores

运行前请先填写空着的值。

在 Cursor 中打开

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

{
  "mcpServers": {
    "app-stores": {
      "command": "npx",
      "args": [
        "-y",
        "@foreverworks/mcp-app-stores"
      ],
      "env": {
        "ASC_KEY_ID": "your-value",
        "ASC_ISSUER_ID": "your-value",
        "ASC_PRIVATE_KEY_FILE": "your-value",
        "PLAY_SERVICE_ACCOUNT_FILE": "your-value",
        "PLAY_PACKAGES": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

在 VS Code 中打开

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

{
  "servers": {
    "app-stores": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@foreverworks/mcp-app-stores"
      ],
      "env": {
        "ASC_KEY_ID": "your-value",
        "ASC_ISSUER_ID": "your-value",
        "ASC_PRIVATE_KEY_FILE": "your-value",
        "PLAY_SERVICE_ACCOUNT_FILE": "your-value",
        "PLAY_PACKAGES": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

需要你填写的值

  • ASC_KEY_ID env
    For the App Store: the App Store Connect API key's id (10 characters).
  • ASC_ISSUER_ID env
    For the App Store: the issuer id App Store Connect shows above your team keys.
  • ASC_PRIVATE_KEY_FILE env
    For the App Store: path of the .p8 key file App Store Connect let you download.
  • PLAY_SERVICE_ACCOUNT_FILE env
    For Google Play: path of the service account's JSON key.
  • PLAY_PACKAGES env
    For Google Play: the package names to answer for, comma-separated, e.g. com.example.app.

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过域名 foreverworks.com 验证(注册中心会核实域名所有权)

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“其他”中的其他服务器比较i

  • 星标数多于此分类中其他 32678 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 32678 个服务器的 89% 更新
  • 基础检查结果等于或优于此分类中其他 32678 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

App Store and Google Play 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(0.1.2)于4天前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。

有什么可以替代它?

同一分类中有:Spec Driven Development, Remote Desktop Commander, Starreel

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Spec Driven Development

作者:formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

在你的电脑上运行★ 440MIT14个月前更新
安装

Remote Desktop Commander

作者:desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

在云端运行★ 211前天更新
安装

Starreel

作者:starreel

Turn a script into a finished, downloadable short-drama episode — via MCP or REST.

在你的电脑上运行今天更新
安装

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

App Store and Google Play MCP server

Read and answer your app's App Store and Google Play reviews from your AI assistant, and see what TestFlight testers sent you: screenshot feedback, and crashes with their logs. It works through App Store Connect and the Google Play Developer API. Two tools write: reply_app_store_review and reply_play_review publish a reply in the developer's name, visible to everyone, so send only text you have approved. Nothing here moves money.

You need credentials for each store you use, and one store is enough: for the App Store, an App Store Connect API key (its .p8 file, key id and issuer id); for Google Play, a Google Cloud service account with a JSON key, invited to your app in Play Console. Google's API returns only the last seven days of reviews.

What you can ask

  • "What did people say about the last release, and which App Store reviews still have no reply?"
  • "Show this week's Google Play reviews of com.example.app, translated into English, worst first."
  • "What crashed for TestFlight testers on build 42?"
  • "Draft replies to the App Store reviews from Germany that mention signing in." Then, once you have read them: "Send these."

Install

.%22%7D%2C%7B%22type%22%3A%22promptString%22%2C%22id%22%3A%22asc_issuer_id%22%2C%22description%22%3A%22Optional.%20For%20the%20App%20Store%3A%20the%20issuer%20id%20App%20Store%20Connect%20shows%20above%20your%20team%20keys.%22%7D%2C%7B%22type%22%3A%22promptString%22%2C%22id%22%3A%22asc_private_key_file%22%2C%22description%22%3A%22Optional.%20For%20the%20App%20Store%3A%20path%20of%20the%20.p8%20key%20file%20App%20Store%20Connect%20let%20you%20download.%22%7D%2C%7B%22type%22%3A%22promptString%22%2C%22id%22%3A%22play_service_account_file%22%2C%22description%22%3A%22Optional.%20For%20Google%20Play%3A%20path%20of%20the%20service%20account's%20JSON%20key.%22%7D%2C%7B%22type%22%3A%22promptString%22%2C%22id%22%3A%22play_packages%22%2C%22description%22%3A%22Optional.%20For%20Google%20Play%3A%20the%20package%20names%20to%20answer%20for%2C%20comma-separated%2C%20e.g.%20com.example.app.%22%7D%5D&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40foreverworks%2Fmcp-app-stores%22%5D%2C%22env%22%3A%7B%22ASC_KEY_ID%22%3A%22%24%7Binput%3Aasc_key_id%7D%22%2C%22ASC_ISSUER_ID%22%3A%22%24%7Binput%3Aasc_issuer_id%7D%22%2C%22ASC_PRIVATE_KEY_FILE%22%3A%22%24%7Binput%3Aasc_private_key_file%7D%22%2C%22PLAY_SERVICE_ACCOUNT_FILE%22%3A%22%24%7Binput%3Aplay_service_account_file%7D%22%2C%22PLAY_PACKAGES%22%3A%22%24%7Binput%3Aplay_packages%7D%22%7D%7D)

With Claude Code:

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

Claude Desktop (Settings, Developer, Edit Config) and most other clients read the same command as JSON:

{

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

Each runs the published package on Node 22.19 or newer. VS Code and the Claude Desktop bundle ask for each setting as they add the server; leave an optional one empty. Cursor reads each from your environment instead (${env:ASC_KEY_ID} and so on), so set them before you start Cursor. Every setting is optional; Configuration says which ones you need for which tools.

From a clone
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"

In a JSON configuration, the command is node and its one argument the full path of servers/app-stores/dist/index.js. To share one running copy between several clients over HTTP, see docs/deploying.md.

The commands above configure no store. Add the variables of each store you use:

claude mcp add app-stores \

-e ASC_KEY_ID=ABCDE12345 -e ASC_ISSUER_ID=" " -e ASC_PRIVATE_KEY_FILE=" " \ -e PLAY_SERVICE_ACCOUNT_FILE=" " -e PLAY_PACKAGES=com.example.app \ -- npx -y @foreverworks/mcp-app-stores

Configuration

VariableRequiredMeaning
ASC_KEY_IDfor the App StoreThe App Store Connect API key's id (10 letters and digits).
ASC_ISSUER_IDfor the App StoreThe issuer id App Store Connect shows above your team keys (a UUID).
ASC_PRIVATE_KEY_FILEfor the App StoreThe .p8 file App Store Connect let you download once.
ASC_PRIVATE_KEYnoThe key's text itself, instead of the file, for a local stdio run.
PLAY_SERVICE_ACCOUNT_FILEfor Google PlayThe service account's JSON key, as Google Cloud downloads it.
PLAY_SERVICE_ACCOUNTnoThe JSON key's text itself, instead of the file, for a local stdio run.
PLAY_PACKAGESnoComma-separated package names this server answers for, e.g. com.example.app. Google has no call that lists a service account's apps, so health checks these, and a call that names no package means the only one.
APP_STORES_OUTBOX_DIRnoWhere crash logs are saved. Default: outbox/ in the state folder.
APP_STORES_STATE_DIRnoThe state folder; the default is in docs/configuration.md.

A store you leave out shows as configured: false in health, and its tools answer config. Credentials are read on the first call that needs them, so the server starts without any. The variables every server shares (transport, limits, what tools may do) are in docs/configuration.md.

Getting an App Store Connect API key
  1. In App Store Connect, open Users and Access, then Integrations, App Store Connect API, Team Keys.
  2. Generate a key with the access it needs and no more: Customer Support reads and answers reviews, Developer reads TestFlight feedback.
  3. Download the .p8 file. App Store Connect offers it once: save it readable only by you (chmod 600), and point ASC_PRIVATE_KEY_FILE at it.
  4. Copy the Key ID from the key's row into ASC_KEY_ID, and the Issuer ID shown above the list into ASC_ISSUER_ID.

A team key does not expire; revoke it on the same page once it is unused.

Getting a Google Play service account
  1. In the Google Cloud console, in any project, open IAM and Admin, Service accounts, and Create service account. It needs no roles in the project.
  2. On the new account, open Keys, Add key, Create new key, JSON. Save the file readable only by you (chmod 600) and point PLAY_SERVICE_ACCOUNT_FILE at it. If your organisation forbids service account keys (iam.disableServiceAccountKeyCreation), lift that policy for the project while you make the key.
  3. In Play Console, open Users and permissions, Invite new users, and enter the service account's e-mail address (client_email in the JSON file). Give it two permissions on the app: View app information (to read reviews) and Reply to reviews.
  4. Set PLAY_PACKAGES to the app's package name (several, comma-separated).

First run

  1. Ask your assistant to run the app stores' health check. For each store it says whether the credentials work, with the apps the key sees (bundle ids and Apple ids) and each Play package with one review read.
  2. Then read before you write: ask for draft replies, and send only those you approved.

Tools

read changes nothing in either store (a crash log is saved to the server's outbox); write publishes a reply under a review.

ToolAccessWhat it does
healthreadWhether each store's credentials work, the apps the App Store Connect key sees, and each Play package with one review read.
list_app_store_reviewsreadAn app's App Store reviews with your reply and its state, by star rating, storefront or whether you replied.
list_play_reviewsreadA package's Play reviews from the last 7 days (Google's limit) with your reply, optionally translated.
list_testflight_feedbackreadScreenshot and crash feedback testers sent from TestFlight, with the device, OS and build.
get_testflight_crash_logreadOne crash feedback's log, saved whole to the outbox, with its first 40 lines.
reply_app_store_review / reply_play_reviewwritePublish your reply under a review. Refuses to replace an existing reply unless asked; the same text twice is sent once.

Troubleshooting

`config`: "App Store Connect is not configured" or "Google Play is not configured". The message names the missing variables. Any other config message names a value the store did not issue: a key id that is not 10 letters and digits, an issuer id that is not a UUID, a .p8 that is not an EC P-256 key, or a JSON file that is not a service account's key.

`auth`. The store refused the credentials: the key was revoked or the service account deleted. Check it in App Store Connect (Users and Access, Integrations) or the service account's Google Cloud project, and replace the file.

`forbidden` from the App Store. The key lacks the role: reviews need Customer Support, TestFlight feedback needs Developer.

`forbidden` from Google Play. The service account cannot act on that app: in Play Console, Users and permissions, give it View app information and Reply to reviews on the app. A newly invited account can take hours to reach the API. If the message says the Google Play Android Developer API is disabled, enable it in the service account's Google Cloud project.

`input`: "... already has a public reply". The review has a different reply, quoted in the message. Call again with replace: true only if you mean yours to take its place. Other input messages name the problem: a reply over the store's limit, or an app or package to name because there are several.

`not_found`. These credentials do not reach that id or app: health lists the apps and packages they do.

`outcome_unknown` after a reply. The connection dropped after the reply left, so it may already be public. List the review again (it shows its reply) before you send it again.

`rate_limited`. The store is throttling these credentials; wait a minute. `api` with status 0 means the store was unreachable; another status, that it failed: retry later. `drift` means the store's

只显示了开头部分;其余内容请在仓库中阅读

问 PopNx