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 は、アプリ開発者向けにストアレビューの閲覧・返信と、TestFlight のフィードバックやクラッシュログの確認を行う MCP サーバーです。App Store Connect と Google Play Developer API を利用し、承認した返信を公開します。

主な機能

  1. 01App Store と Play のレビュー閲覧
  2. 02レビューの絞り込みと返信状態確認
  3. 03TestFlight の画像・クラッシュ報告確認
  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はいlist_testflight_feedback から取得したクラッシュフィードバックの ID。

詳細

App Store と Google Play のアイコン App Store と Google Play の MCP サーバー

AI アシスタントからアプリの App Store と Google Play のレビューを読み、回答できます。また、TestFlight のテスターから届いたスクリーンショットのフィードバックや、ログ付きのクラッシュレポートも確認できます。App Store Connect と Google Play Developer API を通じて動作します。2 つのツールは書き込みを行います。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 から取得できるのは、過去 7 日間のレビューのみです。

質問できること

  • 「前回のリリースについて、ユーザーはどんな感想を寄せていますか?また、App Store のレビューでまだ返信していないものはどれですか?」
  • 「com.example.app の今週の Google Play レビューを英語に翻訳して、評価の低い順に表示してください。」
  • 「ビルド 42 で TestFlight のテスターに発生したクラッシュを教えてください。」
  • 「サインインについて言及している、ドイツからの 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 バンドルでは、サーバーの追加時に各設定の入力を求められます。任意の設定は空欄のままにしてください。Cursor は代わりに環境変数(${env:ASC_KEY_ID} など)から各設定を読み込むため、Cursor を起動する前に設定してください。すべての設定は任意です。どのツールにどの設定が必要かは、Configuration を参照してください。

クローンから
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 のフルパスです。複数のクライアント間で 1 つの実行中コピーを 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_IDApp Store の場合App Store Connect API キーの ID(英数字 10 文字)です。
ASC_ISSUER_IDApp Store の場合App Store Connect でチームキーの一覧の上に表示される発行者 ID(UUID)です。
ASC_PRIVATE_KEY_FILEApp Store の場合App Store Connect から一度だけダウンロードできる .p8 ファイルです。
ASC_PRIVATE_KEYいいえローカルで stdio 実行する場合に、ファイルの代わりに指定するキーのテキストです。
PLAY_SERVICE_ACCOUNT_FILEGoogle Play の場合Google Cloud からダウンロードするサービスアカウントの JSON キーです。
PLAY_SERVICE_ACCOUNTいいえローカルで stdio 実行する場合に、ファイルの代わりに指定する JSON キーのテキストです。
PLAY_PACKAGESいいえこのサーバーが応答する、カンマ区切りのパッケージ名です。例:com.example.app。Google にはサービスアカウントのアプリ一覧を取得する API がないため、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 で ユーザとアクセス を開き、統合、App Store Connect API、チームキー の順に選択します。
  2. 必要なアクセス権のみを付与してキーを生成します。カスタマーサポート ではレビューの読み取りと返信ができ、デベロッパ では TestFlight のフィードバックを読み取れます。
  3. .p8 ファイルをダウンロードします。App Store Connect からダウンロードできるのは一度だけです。自分だけが読み取り可能な状態で保存し(chmod 600)、ASC_PRIVATE_KEY_FILE にそのファイルを指定します。
  4. キーの行にある キー ID を ASC_KEY_ID に、一覧の上に表示される 発行者 ID を ASC_ISSUER_ID にコピーします。

チームキーに有効期限はありません。使用しなくなったら、同じページで取り消してください。

Google Play サービスアカウントの取得
  1. Google Cloud コンソール で任意のプロジェクトを開き、IAM と管理、サービス アカウント、サービス アカウントを作成 の順に選択します。プロジェクト内のロールは不要です。
  2. 新しいアカウントで キー、鍵を追加、新しい鍵を作成、JSON の順に選択します。自分だけが読み取り可能な状態でファイルを保存し(chmod 600)、PLAY_SERVICE_ACCOUNT_FILE にそのファイルを指定します。組織でサービスアカウントキーの作成(iam.disableServiceAccountKeyCreation)が禁止されている場合は、キーを作成する間、プロジェクトのそのポリシーを解除してください。
  3. Play Console で ユーザーと権限、新しいユーザーを招待 の順に開き、サービスアカウントのメールアドレス(JSON ファイル内の client_email)を入力します。アプリに対して、アプリ情報を表示(レビューの読み取り用)と レビューに返信 の 2 つの権限を付与します。
  4. PLAY_PACKAGES にアプリのパッケージ名を設定します(複数の場合はカンマ区切り)。

初回実行

  1. アシスタントに、アプリストアの health チェックを実行するよう依頼します。各ストアについて、認証情報が機能するかどうか、キーで確認できるアプリ(バンドル ID と Apple ID)、およびレビューを 1 件読み取った各 Play パッケージが表示されます。
  2. 書き込む前に読み取りましょう。返信の下書きを依頼し、承認したものだけを送信してください。

ツール

read はどちらのストアにも変更を加えません(クラッシュログはサーバーの送信トレイに保存されます)。write はレビューに返信を投稿します。

ツールアクセス内容
healthread各ストアの認証情報が有効かどうか、App Store Connect のキーで確認できるアプリ、およびレビューを1件読み込んだ各 Play パッケージを表示します。
list_app_store_reviewsreadアプリの App Store レビューを、返信内容とその状態、星評価、ストアフロント、返信済みかどうかで絞り込んで表示します。
list_play_reviewsread過去7日間(Google の上限)のパッケージの Play レビューを、返信内容とともに表示します。必要に応じて翻訳できます。
list_testflight_feedbackreadテスターが TestFlight から送信したスクリーンショットおよびクラッシュのフィードバックを、デバイス、OS、ビルドとともに表示します。
get_testflight_crash_logreadクラッシュフィードバック1件のログ全体を送信トレイに保存し、先頭40行を表示します。
reply_app_store_review / reply_play_reviewwriteレビューに返信を投稿します。既存の返信は、置き換えを指定しない限り置き換えません。同じテキストは1回だけ送信されます。

トラブルシューティング

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。 ストアがこれらの認証情報へのリクエストを制限しています。1分待ってください。ステータスが0の api はストアに接続できなかったことを示します。それ以外のステータスはリクエストが失敗したことを示します。後でもう一度お試しください。drift はストアの応答形式が変わったことを意味します。メッセージを添えて報告してください。

仕組み

  • Apple にはトークンエンドポイントがありません。 App Store Connect は JSON Web Token 自体をベアラートークンとして受け取ります。サーバーは .p8 キーで署名したトークン(ES256)を、Apple が認める20分のうち19分間有効にしてメモリ上に保持します。Google はサービスアカウントのキーで署名したアサーション(RS256、RFC 7523)を oauth2.googleapis.com に提示し、1時間有効なトークンと交換します。別のトークンエンドポイントが指定されたキーファイルは拒否されるため、アサーションがほかの場所に送られることはありません。
  • 返信は公開されるため、慎重に扱います。 どちらのストアも既存の返信を通知なく置き換えるため、サーバーは先にレビューを読み込みます。replace が true でない限り、異なる返信の置き換えは拒否し、テキストが同じ場合は何も送信しません。 Apple では、新しい返信は Apple 側の確認を経て公開されるまで pending の状態になり、通常は1日以内に公開されます。
  • 上限は各ストアの仕様です。 返信の最大文字数は Apple で5,970文字、Google で約350文字で、送信前に確認されます。Google の API が返すのは、テキストがあり、過去7日間に投稿または更新されたレビューのみです。全履歴は Play Console の月次レビュー レポート(Download reports、Reviews)で確認できます。
  • 中継ではなく、モデルに基づいています。 データ構造は Apple の OpenAPI specification 4.5.1 と Google の androidpublisher v3 リファレンスに基づいています。ドキュメントに記載されたフィールドが見つからない場合、空の値として処理を続けるのではなく、drift として失敗します。
  • クラッシュログは outbox に保存します。 数百行に及ぶことがあるためです。各 Apple 形式の例外とクラッシュしたスレッドを含む先頭40行を、ファイルパスと SHA-256 とともに返します。

npx tsx scripts/smoke.ts は、認証情報を使ってビルド済みサーバーを読み取り専用で実行します。内容は health、設定済みの各ストアから3件ずつのレビュー、TestFlight フィードバック3件です。返信は一切行いません。

制限事項

  • レビューは 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日間の対象期間をすべての回答に明記し、クラッシュログをチェックサム付きで保存します。また、ストアごとに型付けされたエラーを返し、どのコンソールで何を変更すべきかを示します。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。