SkillAgentSearch skills...

google-play-developer-mcp

Complete MCP server for the Google Play Developer API. 150 tools covering the full Android Publisher API v3 and Play Developer Reporting API v1beta1. Works with Claude, Cursor, VS Code Copilot, Gemini CLI, and any MCP client.

Install / Use

claude mcp add devinwang -- npx -y github:devinwang/google-play-developer-mcp

If the server publishes to npm under a different name, use that package instead — check the repo README.

About this skill
🔌

MCP Server

Model Context Protocol server

Quality Score

83/100

Supported Platforms

Claude Code
Claude Desktop
Cursor
GitHub Copilot
Gemini CLI

google-play-developer-mcp

The complete Model Context Protocol (MCP) server for Google Play. 150 tools. Full Android Publisher API v3 + Play Developer Reporting API v1beta1. No deprecated endpoints. Works with Claude, Cursor, VS Code Copilot, Gemini CLI, or any MCP client.

npm version npm downloads CI License: MIT Node Tools: 150 API: v3 Reporting: v1beta1 MCP TypeScript

See also: app-store-connect-mcp — the same philosophy for Apple's App Store Connect.


Table of Contents


Why this exists

Google Play Console has an API, but its surface is wide and moves fast. Existing community MCPs each cover a slice — one does store listings, another does releases, a third does reviews — and all lag behind Google's deprecations.

google-play-developer-mcp is the one that covers everything.

| Property | This server | Typical community MCP | |---|---|---| | Android Publisher API v3 | ✅ Full | Partial | | Play Developer Reporting API | ✅ Full | ❌ Missing | | monetization.onetimeproducts (post-2025 catalog) | ✅ | Uses deprecated inappproducts | | purchases.subscriptionsv2 / productsv2 | ✅ | Often still on v1 | | 2026 features (OfferPhase, cancel/defer, priceStepUp) | ✅ | ❌ | | Multi-account | ✅ | Usually one | | Credential safety | No keys in repo, strict .gitignore | Varies | | Public release under semver | ✅ v1.0.0 | Mostly pre-1.0 |

If you drive Google Play Console with an AI assistant — release automation, review triage, subscription catalog management, crash triage — this gives the assistant a full toolbox in one install.


Feature matrix

150 tools across 30 groups. Every non-deprecated endpoint in both APIs.

<details open> <summary><strong>Android Publisher API v3</strong></summary>

| Group | Tools | Covers | |---|---|---| | accounts_* | 6 | Local registry — add / list / switch / remove / update multiple Play Console accounts | | auth_* | 1 | Verify the service account can acquire a token | | apps_* | 2 | List every app the service account can see, get app details | | edits_* | 5 | Managed-publishing transactions: insert, get, validate, commit, delete | | details_* | 3 | App-level contact email / phone / website, default language | | country_availability_* | 1 | Per-country availability within an edit | | listings_* | 6 | Per-locale title / short description / full description / video. Includes delete_all | | images_* | 4 | Icon, feature graphic, promo graphic, phone/tablet/TV/wear screenshots. List, upload, delete, delete-all | | bundles_* | 2 | Upload and list Android App Bundles (AAB) | | apks_* | 3 | Upload / list APKs + register externally-hosted APK (enterprise) | | deobfuscation_files_* | 1 | Upload ProGuard / native code mapping | | expansion_files_* | 4 | OBB — get / upload / update / patch | | tracks_* | 5 | internal, alpha, beta, production, plus custom closed-testing tracks. List, get, update, patch, create | | testers_* | 3 | Google Groups allowlists for internal / closed tracks | | onetime_products_* | 17 | ✨ New monetization catalog for non-subscription products. Three-level hierarchy: product → purchase option → offer. Complete CRUD + batch on all three levels | | subscriptions_* | 8 | Subscription catalog: list, create, update, delete, archive, batch-get, batch-update | | subscription_base_plans_* | 7 | Monthly/annual plans. Activate, deactivate, migrate prices, batch migrate, batch update + states | | subscription_offers_* | 10 | Free trials / introductory prices. Create, update, delete, activate, deactivate + batch flavours | | monetization_convert_region_prices | 1 | Compute comparable region prices from one input price | | purchases_products_v2_* | 1 | Verify one-time-product purchases (supports multiple purchase options + offers) | | purchases_subscriptions_v2_* | 4 | Get, revoke, cancel, defer. Includes 2026 OfferPhase, outOfAppPurchaseContext, priceStepUp consent, item-based refund | | purchases_subscriptions_acknowledge | 1 | v1 acknowledge (retained — still the right call for acknowledging initial purchase) | | purchases_voided_list | 1 | Refund / chargeback feed | | orders_* | 4 | List, get, batch-get, refund (get + batch-get added 2025-05) | | external_transactions_* | 3 | Alternative Billing (Korea / EU) — get / create / refund | | reviews_* | 3 | List, get, reply | | users_* + grants_* | 7 | Team members & per-app grants | | device_tier_configs_* | 3 | Device-tier targeting for AAB | | app_recovery_* | 5 | Recovery actions: list, create, deploy, cancel, add targeting | | generated_apks_* | 2 | List and download generated APKs from an AAB | | system_apks_variants_* | 4 | System APK variants for preload scenarios | | internal_app_sharing_* | 2 | Upload APK or AAB for internal link sharing |

</details> <details open> <summary><strong>Play Developer Reporting API v1beta1</strong></summary>

| Group | Tools | Covers | |---|---|---| | reports_apps_* | 2 | search, fetch_release_filter_options | | reports_anomalies_list | 1 | Detected anomalies across all metric sets | | reports_crash_rate_* | 2 | Crash rate — metadata + time-series query | | reports_anr_rate_* | 2 | ANR rate | | reports_slow_start_rate_* | 2 | Slow start (cold launch) | | reports_slow_rendering_rate_* | 2 | Slow rendering (jank) | | reports_excessive_wakeup_rate_* | 2 | Battery — excessive wake-ups | | reports_stuck_background_wake_lock_rate_* | 2 | Battery — stuck wake locks | | reports_lmk_rate_* | 2 | Low-memory killer rate | | reports_errors_counts_* | 2 | Aggregate error counts | | reports_errors_issues_search | 1 | Grouped ErrorIssue search | | reports_errors_reports_search | 1 | Raw ErrorReport search |

</details>

Quick start

npm install -g google-play-developer-mcp

Then in your MCP client config (e.g. ~/.config/claude/config.json, Cursor MCP config, or VS Code mcp.json):

{
  "mcpServers": {
    "google-play-developer": {
      "command": "google-play-developer-mcp"
    }
  }
}

Next, tell the server which Play Console account to use — see the setup guide below.


Step-by-step setup

1. Create a Google Cloud service account

  1. Open the Google Cloud Console.
  2. Select or create a project (any project — this is just where the service account lives).
  3. APIs & Services → Library — enable both of these:
    • Google Play Android Developer API
    • Google Play Developer Reporting API
  4. IAM & Admin → Service Accounts → Create service account.
  5. Once created, open the account → Keys → Add key → JSON. Download the JSON file.
  6. Move the JSON file somewhere safe and outside any git repo. A good location: ~/.config/google-play-developer-mcp/service-account.json.

2. Authorize the service account in Play Console

  1. Open Play Console.
  2. Users and permissions → Invite new user. Paste the service account email (it looks like name@project-id.iam.gserviceaccount.com).
  3. Assign permissions:
    • Admin (all permissions) for full access.
    • Or narrower combinations (View app information, Manage store presence, Manage orders and subscriptions, etc.) if you want to restrict what the MCP can do.
  4. Wait up to 24 hours. Play Console takes time to propagate the new authorization — this is a common gotcha. If early API calls return PERMISSION_DENIED, this is usually why.

3. Register the account with the MCP server

Launch any MCP client that has the server configured, then run:

accounts_add --name my-app \
  --keyFile /Users/you/.config/google-play-developer-mcp/service-account.json \
  --description "My company's Play Console"

(Or manually create ~/.google-play-developer-mcp/accounts.json — see the file format below.)

4. Verify

auth_status

Should return { ok: true, email: "..." }.

apps_list

Lists the apps the service account can see.


Register with your MCP client

Claude Desktop

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "google-play-developer": {
      "command": "google-play-developer-mcp"
    }
  }
}

Claude Code

claude mcp add google-play-developer google-play-developer-mcp

Or edit ~/.claude.json:

{
  "mcpServers": {
    "google-play-developer": {
      "command": "google-play-developer-mcp"
    }
  }
}

Cursor

Settings → MCP → Add new MCP server:

{
  "google-play-developer": {
    "command": "google-play-developer-mcp"
  }
}

VS Code (GitHub Copilot agent mode)

.vscode/mcp.json:

{
  "servers": {
    "google-play-developer": {
      "type": "stdio",
      "command": "google-play-developer-mcp"
    }
  }
}

Gemini CLI / Codex CLI / Windsurf / Continue

Any MCP-compliant client accepts the same command entry — point it at the globally installed google-play-developer-mcp binary (or at node /path/to/dist/index.js if running from source).

Running from source (no npm install -g)

git clone https://github.com/devinwang/google-play-developer-mcp.git
cd google-play-developer-mcp
npm install
npm run build

Then in your MCP client config:

{
  "mcpServers": {
    "google-play-developer": {
      "command": "node",
      "args": ["/absolute/path/to/google-play-developer-mcp/dist/index.js"]
    }
  }
}

Usage examples

Release a new build to internal testing

accounts_switch --name my-app

# Open an edit, upload bundle, route it to the internal track, commit.
edits_insert --packageName com.example.app
# → { id: "EDIT_ID", expiryTimeSeconds: "..." }

bundles_upload --packageName com.example.app --editId EDIT_ID \
  --file /path/to/app-release.aab
# → { versionCode: 47, sha256: "..." }

tracks_update --packageName com.example.app --editId EDIT_ID \
  --track internal \
  --releases '[{"versionCodes":["47"],"status":"completed","releaseNotes":[{"language":"en-US","text":"Fixes a crash on startup."}]}]'

edits_commit --packageName com.example.app --editId EDIT_ID

Promote a release from beta to production with staged rollout

edits_insert --packageName com.example.app
# → ED

Truncated for display — read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars3
CategoryDevelopment
Updated1mo ago
Forks4

Languages

TypeScript

Security Score

92/100

Audited on Aug 3, 2026

1 low