appstore-play-mcp
appstore-play-mcp
読み取り専用のMCPサーバー。App Store Connect と Google Play の両方に対応しています。1つのツールセットで両ストアを扱えるので、「何が公開中で、何が審査中で、ユーザーは何に不満を持っているのか?」という質問を2回ではなく1回で確認できます。
> Which of my apps have a release that isn't live yet?
Pocket Herbarium (App Store)
app-store: 2.1.0 (214) — in review
Pocket Herbarium (Google Play)
production: 2.0.3 (208) — rolling out at 20%
beta: 2.1.0 (214) — live両ストアにアプリを公開している個人開発者のために作られています。2つのコンソール、2つの認証方式、同じことを表す2つの語彙に疲れている人のためのものです。
ここで書き込みは一切行いません。 メタデータの編集も、提出も、レビューへの返信もありません。すべてのツールは readOnlyHint と注釈され、それが守られなくなった場合はテストスイートが失敗します。
30秒で試す
Appleのキーも、Googleのサービスアカウントも必要ありません:
npx -y appstore-play-mcp --demoデモモードは、架空の2アプリ開発者のフィクスチャを提供します。審査で止まっているバージョンや、20%でローリングアウト中、ステージングされたロールアウトなど、注目すべき状態が含まれています。
npx @modelcontextprotocol/inspector npx -y appstore-play-mcp --demoツール
Tool | 機能 |
| 設定済みのストアと、認証情報が機能するかを確認できます。 |
| 両ストアでアクセス可能なすべてのアプリを1つのリストで取得。 |
| App StoreのID、Playのパッケージ名、またはバンドルIDで1つのアプリを取得。 |
| 公開中、審査中、ロールアウト途中のリリースを、1つのアプリまたは全ポートフォリオで取得します。 |
| 両ストアの最近のレビューをマージして並べ替え。 |
appId は get_releases と get_reviews では省略可能です。省略すると、ツールは所有するすべてのアプリを検索します。それがポートフォリオビューです。
2つのストアに1つの語彙
App Store には appVersionState を持ち帰る appStoreVersions があり、Play には status とロールアウト率を持つリリースを含むトラックがあります。どちらも正規化されています:
正規化された | App Store | Google Play |
|
|
|
|
| — |
|
| — |
|
| — |
| — |
|
| — |
|
|
|
|
各ストア独自の表現は rawState に保存されるため、翻訳によって失われるものはありません。
セットアップ
MCP Registry に io.github.JohnBilousov/appstore-play-mcp として掲載されているため、レジストリを読み込んだクライアントは自分で見つけることができます。
どちらのストアでも単体で動作します。片方、両方、またはどちらも設定しない(フィクスチャ)ことができます。
App Store Connect → ユーザーとアクセス → 統合 → App Store Connect API でキーを作成し、.p8 をダウウンロードします(Apple は一度だけダウンロードできます)。
export ASC_KEY_ID=XXXXXXXXXX
export ASC_ISSUER_ID=00000000-0000-0000-0000-000000000000
export ASC_KEY_PATH=/path/to/AuthKey_XXXXXXXXXX.p8サーバーはそれ自体で ES256 JWT を生成します。fastlane も追加の依存関係もありません。CI の場合は、ASC_PRIVATE_KEY に鍵を直接インラインで設定します。
Google Cloud でサービスアカウントを作成し、そのプロジェクトで Android Publisher API を有効にして、Play Console → ユーザーと権限 でアクセス権を付与します。
export PLAY_SERVICE_ACCOUNT_PATH=/path/to/service-account.json
export PLAY_PACKAGES=com.example.app,com.example.otherPLAY_PACKAGES は省略できません: Play API には開発者アプリの一覧を返すエンドポイントがないため、パッケージを宣言する必要があります。CI の場合は PLAY_SERVICE_ACCOUNT_JSON で JSON をインライン設定できます。
{
"mcpServers": {
"stores": {
"command": "npx",
"args": ["-y", "appstore-play-mcp"],
"env": {
"ASC_KEY_ID": "XXXXXXXXXX",
"ASC_ISSUER_ID": "00000000-0000-0000-0000-000000000000",
"ASC_KEY_PATH": "/path/to/AuthKey_XXXXXXXXXX.p8",
"PLAY_SERVICE_ACCOUNT_PATH": "/path/to/service-account.json",
"PLAY_PACKAGES": "com.example.app"
}
}
}
}Claude Code:
claude mcp add stores -- npx -y appstore-play-mcp知っておくと役立つプラットフォームの制限
これらはストア側の制約であり、サーバー側の制約ではありません:
Play はアプリの一覧を取得できません。 そのための
PLAY_PACKAGESが必要です。Play のレビューは約1週間遡れるだけで、レビューが存在するアプリに対してのみ存在します。
Play のトラックデータは「編集」内からのみ読み取れます。 ここでのすべての読み取りは一時的な編集を開き、
finallyブロックで削除します。コミットは一切行われないため、アプリが変更されることはありません。しかし、だからこそ読み取り専用サーバーであっても POST を送信します。App Store のレビューはテリトリーごとに存在し、ストアページより数時間遅れることがあります。
設計メモ
2つの認証情報、1つのインターフェース。 AppStoreClient と PlayClient はどちらも StoreClient を実装します。DemoStoreClient はフィクスチャ上で同じ実装を3つ目の形として提供します。ツールは、接続先のストアによって分岐することはありません。
片方のストアが失敗しても呼び出し全体は死にません。 読み取りは Promise.allSettled で分散されます。Play がダウンしても、App Store のレビューは、欠けているものを説明する注記付きで返ってきます。空のリストと壊れた認証情報が同じに見えることはあってはなりません。
エラーは修正方法を含んでいます。 Play からの 403 は、サービスアカウントがアクセス権を持っていない か、そのプロジェクトで Android Publisher API が無効になっている可能性を示します。 404 は list_apps を呼び出すことを示します。モデルは通常、ユーザーが介入しなくても復帰できます。
トークンはキャッシュされ、早めに更新されます。 Apple では ES256(20分)、Google では RS256 → OAuth2(1時間)。どちらも有効期限の1分前に更新されるため、呼び出しが期限ギリギリの競合を起こしません。
開発
git clone https://github.com/JohnBilousov/appstore-play-mcp && cd appstore-play-mcp
npm install
npm run build
npm test # tool surface, state normalisation, and portfolio sweeps over a real MCP transport
npm run inspectsrc/
index.ts CLI entry, stdio transport
config.ts env → Config; either store optional, fixtures as the floor
server.ts tools + the registry that fans reads across stores
schemas.ts zod input and output shapes
format.ts human-readable summaries next to structuredContent
stores/
types.ts shared vocabulary + state normalisation
appstore.ts App Store Connect (ES256 JWT)
play.ts Google Play (service account → OAuth2)
demo.ts fixturesロードマップ
App Store Connect からの売上・ダウンロードレポート(ベンダーナンバーが必要)
Play Developer Reporting API からのクラッシュと ANR のバイタルデータ
TestFlight ビルドとテスターグループ
stdio に加えた Streamable HTTP トランスポート
MCP registry への公開
コントリビューションは歓迎です。特に両ストアにアプリをリリースしていて、ここに記録する価値のある制限に遭遇した方からのものが歓迎されます。
ライセンス
MIT © Ivan Bilousov
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Remote MCP connector for App Store + Google Play data via StoreBridge API. No auth required.
Live App Store & Google Play data for AI agents: app discovery, ASO keywords, reviews.
Read-only access to your VortexIQ store data: audits, KPIs, alerts, Brand DNA, reports, Ask VIQ.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/JohnBilousov/appstore-play-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server