App Store and Google Play について
App Store and Google Play は、アプリ開発者向けにストアレビューの閲覧・返信と、TestFlight のフィードバックやクラッシュログの確認を行う MCP サーバーです。App Store Connect と Google Play Developer API を利用し、承認した返信を公開します。
主な機能
- 01App Store と Play のレビュー閲覧
- 02レビューの絞り込みと返信状態確認
- 03TestFlight の画像・クラッシュ報告確認
- 04クラッシュログの保存
- 05レビュー返信の公開
活用シーン
- 01リリースへの反応をまとめる
- 02未返信のレビューを見つける
- 03特定の TestFlight ビルドのクラッシュを調べる
- 04返信案を確認してから公開
MCP 対応
MCP クライアントにレビュー、TestFlight フィードバック、クラッシュログの読み取りツールと、レビュー返信の公開ツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @foreverworks/mcp-app-storesASC_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
7掲載時のツール一覧 · 2 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| submission | string | はい | list_testflight_feedback から取得したクラッシュフィードバックの ID。 |
詳細
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 レビューへの返信案を作成してください。」その後、内容を確認してから「これらを送信してください。」
インストール
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_ID | App Store の場合 | App Store Connect API キーの ID(英数字 10 文字)です。 |
ASC_ISSUER_ID | App Store の場合 | App Store Connect でチームキーの一覧の上に表示される発行者 ID(UUID)です。 |
ASC_PRIVATE_KEY_FILE | App Store の場合 | App Store Connect から一度だけダウンロードできる .p8 ファイルです。 |
ASC_PRIVATE_KEY | いいえ | ローカルで stdio 実行する場合に、ファイルの代わりに指定するキーのテキストです。 |
PLAY_SERVICE_ACCOUNT_FILE | Google 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 キーの取得
- App Store Connect で ユーザとアクセス を開き、統合、App Store Connect API、チームキー の順に選択します。
- 必要なアクセス権のみを付与してキーを生成します。カスタマーサポート ではレビューの読み取りと返信ができ、デベロッパ では TestFlight のフィードバックを読み取れます。
.p8ファイルをダウンロードします。App Store Connect からダウンロードできるのは一度だけです。自分だけが読み取り可能な状態で保存し(chmod 600)、ASC_PRIVATE_KEY_FILEにそのファイルを指定します。- キーの行にある キー ID を
ASC_KEY_IDに、一覧の上に表示される 発行者 ID をASC_ISSUER_IDにコピーします。
チームキーに有効期限はありません。使用しなくなったら、同じページで取り消してください。
Google Play サービスアカウントの取得
- Google Cloud コンソール で任意のプロジェクトを開き、IAM と管理、サービス アカウント、サービス アカウントを作成 の順に選択します。プロジェクト内のロールは不要です。
- 新しいアカウントで キー、鍵を追加、新しい鍵を作成、JSON の順に選択します。自分だけが読み取り可能な状態でファイルを保存し(
chmod 600)、PLAY_SERVICE_ACCOUNT_FILEにそのファイルを指定します。組織でサービスアカウントキーの作成(iam.disableServiceAccountKeyCreation)が禁止されている場合は、キーを作成する間、プロジェクトのそのポリシーを解除してください。 - Play Console で ユーザーと権限、新しいユーザーを招待 の順に開き、サービスアカウントのメールアドレス(JSON ファイル内の
client_email)を入力します。アプリに対して、アプリ情報を表示(レビューの読み取り用)と レビューに返信 の 2 つの権限を付与します。 PLAY_PACKAGESにアプリのパッケージ名を設定します(複数の場合はカンマ区切り)。
初回実行
- アシスタントに、アプリストアの
healthチェックを実行するよう依頼します。各ストアについて、認証情報が機能するかどうか、キーで確認できるアプリ(バンドル ID と Apple ID)、およびレビューを 1 件読み取った各 Play パッケージが表示されます。 - 書き込む前に読み取りましょう。返信の下書きを依頼し、承認したものだけを送信してください。
ツール
read はどちらのストアにも変更を加えません(クラッシュログはサーバーの送信トレイに保存されます)。write はレビューに返信を投稿します。
| ツール | アクセス | 内容 |
|---|---|---|
health | read | 各ストアの認証情報が有効かどうか、App Store Connect のキーで確認できるアプリ、およびレビューを1件読み込んだ各 Play パッケージを表示します。 |
list_app_store_reviews | read | アプリの App Store レビューを、返信内容とその状態、星評価、ストアフロント、返信済みかどうかで絞り込んで表示します。 |
list_play_reviews | read | 過去7日間(Google の上限)のパッケージの Play レビューを、返信内容とともに表示します。必要に応じて翻訳できます。 |
list_testflight_feedback | read | テスターが TestFlight から送信したスクリーンショットおよびクラッシュのフィードバックを、デバイス、OS、ビルドとともに表示します。 |
get_testflight_crash_log | read | クラッシュフィードバック1件のログ全体を送信トレイに保存し、先頭40行を表示します。 |
reply_app_store_review / reply_play_review | write | レビューに返信を投稿します。既存の返信は、置き換えを指定しない限り置き換えません。同じテキストは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 の
androidpublisherv3 リファレンスに基づいています。ドキュメントに記載されたフィールドが見つからない場合、空の値として処理を続けるのではなく、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日間の対象期間をすべての回答に明記し、クラッシュログをチェックサム付きで保存します。また、ストアごとに型付けされたエラーを返し、どのコンソールで何を変更すべきかを示します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。