Google Play Console MCP

io.github.AgiMaulanaPublished by GitHub account AgiMaulanav0.5.0Updated Oct 24, 2026

Google Play release lifecycle: tracks, testers, rollout, and Android Vitals.

VerifiedSTDIODesktop onlyDeveloper ToolsData & Analytics

Overview

AI-generated overview

A local MCP server that lets an assistant manage Google Play releases, testers, artifacts and Android Vitals through the Play Console APIs.

What you can do
List tracks and inspect a track's status, rollout percentage and release notes, and create, update, halt, resume or promote releases between tracks and stages of rollout. List APKs and AABs with version codes and hashes, upload an artifact and create a release in one step, or push a build to Internal App Sharing for a shareable link. Read and replace tester email lists and Google Groups for internal and closed testing tracks. Read Android Vitals: daily crash, ANR, stuck wake lock and excessive wakeup rates per version code, plus a combined summary with threshold flags.
When to use it
Useful when you ship Android apps and want an assistant to handle Play Store release chores: staged rollouts, track promotion, tester list changes, artifact uploads and checking crash or ANR health before or after a release.
Requirements
Runs locally as a Python package (uvx or pip install). Needs a Google Cloud service account JSON key, passed as the absolute path in GOOGLE_APPLICATION_CREDENTIALS, added to Play Console with the right account- and app-level permissions. The Google Play Android Developer API and Google Play Developer Reporting API must be enabled in the Cloud project.
Before you install
The service account key file is a sensitive credential; anyone with it can act on your Play Console account within its permissions. Write tools change live store state: create_release, update_release, promote_release and upload_artifact can publish to production or complete a rollout to all users, and update_testers fully replaces the tester list, so testers left out lose access. Grant the minimum permissions needed and prefer draft or staged rollouts.

Installation

In SourceWeft

  1. Open Google Play Console MCP in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Google Play Console MCP

[Google Play Console MCP server]

[GooglePlayConsoleMcp MCP server] [MCP Badge] [License: MIT]

A Python Model Context Protocol server that lets AI assistants (Claude, etc.) manage the full Google Play Store release lifecycle directly — from uploading artifacts to managing testers, rollouts, and Android Vitals.


Quick start

Option A — uvx (recommended, no install needed)

Run this once. Claude automatically starts and stops the server for every session — you never have to touch it again.

bash
claude mcp add google-play-mcp \  -e GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json \  -- uvx google-play-mcp

Requires uv — install with brew install uv or curl -Lsf https://astral.sh/uv/install.sh | sh

Option B — pip install

If you prefer a permanent install:

bash
pip install google-play-mcp
claude mcp add google-play-mcp \  -e GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json \  -- google-play-mcp

Option C — HTTP (local server)

Only needed if you want to connect via HTTP transport instead of stdio:

bash
# Terminal 1 — start the serverGOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json \  uvx google-play-mcp --transport http --port 8080
# Terminal 2 — register with Claudeclaude mcp add --transport http google-play-mcp http://localhost:8080

How stdio works: With Options A and B, there is no server to start manually. Claude launches the process in the background when a session opens and shuts it down when the session ends. Zero maintenance.


Features

Tracks & Releases

ToolDescription
list_tracksList all tracks (internal, alpha, beta, production) with releases and country availability
get_track_infoGet detailed status, rollout %, and release notes for a specific track
create_releaseCreate or replace a release on any track with rollout %, release notes, and country targeting
update_releaseUpdate rollout %, halt, resume, or complete an existing release
promote_releasePromote a release between tracks (e.g. internal → alpha → beta → production)

Artifact Management

ToolDescription
list_artifactsList all APKs and AABs with their version codes and SHA hashes
upload_artifactUpload an APK or AAB and create a release on a track in one step
upload_to_internal_sharingUpload a build to Internal App Sharing and get a shareable download URL

Tester Management

ToolDescription
get_testersGet tester email addresses and Google Groups for internal/closed testing
update_testersReplace the tester list for an internal or closed testing track

Android Vitals

ToolDescription
get_crash_rateDaily crash rate and user-perceived crash rate by version code
get_anr_rateDaily ANR rate and user-perceived ANR rate by version code
get_vitals_summaryCombined crash + ANR overview with bad behavior threshold indicators
get_wakelock_rateDaily stuck background wake lock rate by version code (battery health)
get_wakeup_rateDaily excessive wakeup rate by version code (battery health)

Prerequisites

  1. uv — install guide
  2. A Google Cloud service account with the JSON key downloaded.
  3. The service account added to Google Play Console with the correct permissions (see below).
  4. These APIs enabled in your Google Cloud project:

Required Play Console permissions

ToolsMinimum permission required
upload_artifact, create_release, update_release, promote_release, update_testersRelease to production, exclude devices, and use app signing by Google Play
upload_to_internal_sharingRelease to testing tracks
list_tracks, get_track_info, list_artifacts, get_testersView app information and download bulk reports (read-only)
get_crash_rate, get_anr_rate, get_vitals_summary, get_wakelock_rate, get_wakeup_rateView app information and download bulk reports (read-only) + Reporting API enabled

Important: Release Manager does not grant Reporting API access. You must also enable View app information and download bulk reports (read-only) — both at account level and per-app level — for the Vitals tools to work.


Claude Desktop integration

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

json
{  "mcpServers": {    "google-play": {      "command": "uvx",      "args": ["google-play-mcp"],      "env": {        "GOOGLE_APPLICATION_CREDENTIALS": "/absolute/path/to/service-account.json"      }    }  }}

Restart Claude Desktop after saving.


Service account setup

  1. Go to IAM & Admin → Service Accounts in your GCP project.
  2. Create a service account (or use an existing one) and download a JSON key.
  3. In Google Play Console → Setup → API access:
    • Link your Google Cloud project.
    • Find the service account → Manage Play Console permissions.
    • Under Account permissions, enable View app information and download bulk reports (read-only).
    • Under App permissions for each app, enable:
      • View app information and download bulk reports (read-only)
      • Release to production… (if you need write access)
    • Click Apply → Invite user.

Permissions must be granted at both account level and per-app level. Account-level alone is not sufficient for the Reporting API.


Tool reference

list_tracks

package_name : str  — e.g. "com.example.myapp"

Returns all tracks with their releases, rollout percentages, statuses, and country availability.


get_track_info

package_name : strtrack        : str  — "internal" | "alpha" | "beta" | "production" (default: "production")

Returns a human-readable summary plus releases with status, rollout %, version codes, and release notes.


create_release

package_name       : strtrack              : str        — "internal" | "alpha" | "beta" | "production"version_codes      : list[int]  — e.g. [1042]rollout_percentage : float      — default 10.0 (used when status is "inProgress")status             : str        — "draft" (default) | "inProgress" | "halted" | "completed"release_name       : str        — optionalrelease_notes      : dict       — optional, e.g. {"en-US": "Bug fixes", "fr-FR": "Corrections"}country_codes      : list[str]  — optional ISO 3166-1 alpha-2 codes, e.g. ["US", "GB"]

Creates or replaces a release on the given track. Use status="inProgress" with a rollout_percentage for a staged production rollout, or status="completed" to release to all users immediately.


update_release

package_name       : strtrack              : str    — default "production"rollout_percentage : float  — optional; pass 100 to complete the rolloutstatus             : str    — optional; "inProgress" | "halted" | "completed" | "draft"version_codes      : list[int]  — optional filter; targets first matching release if omitted

Update an existing release. Common use cases:

  • Increase rollout: update_release(pkg, rollout_percentage=50)
  • Complete rollout: update_release(pkg, rollout_percentage=100)
  • Halt rollout: update_release(pkg, status="halted")
  • Resume rollout: update_release(pkg, status="inProgress")

promote_release

package_name       : strfrom_track         : str        — "internal" | "alpha" | "beta"to_track           : str        — "alpha" | "beta" | "production"version_codes      : list[int]rollout_percentage : float      — default 10.0release_name       : str        — optional overriderelease_notes      : dict       — optional override; inherits from source if omitted

Copies a release from one track to another. Release notes and name are inherited from the source release unless explicitly overridden.


list_artifacts

package_name : str

Returns all APKs and AABs sorted by version code (newest first) with SHA hashes.


upload_artifact

package_name       : strfile_path          : str    — absolute local path to .apk or .aabtrack              : str    — default "internal"status             : str    — "draft" (default) | "inProgress" | "completed"rollout_percentage : float  — default 10.0 (used when status is "inProgress")release_name       : str    — optionalrelease_notes      : dict   — optional

Uploads an APK or AAB (auto-detected from extension) and creates a release on the given track in a single atomic operation. Returns the assigned version code.


upload_to_internal_sharing

package_name : strfile_path    : str  — absolute local path to .apk or .aab

Uploads a build to Internal App Sharing (bypasses track assignment) and returns a shareable downloadUrl. Testers must have Internal App Sharing enabled in their Play Store settings. Ideal for quick one-off testing without affecting any release track.


get_testers

package_name : strtrack        : str  — "internal" (default) | "alpha"

Returns the list of tester email addresses and Google Groups for the track.


update_testers

package_name  : strtrack         : str         — "internal" (default) | "alpha"emails        : list[str]   — optional; full replacement list of tester emailsgoogle_groups : list[str]   — optional; full replacement list of Google Group emails

Warning: This is a full replacement. Testers not in the new list will lose access. Call get_testers first to retrieve the current list if you only want to add/remove individuals.


get_crash_rate

package_name : strdays         : int  — look-back window, 1–30 (default 7)version_code : str  — optional single version code to filter

Returns daily crashRate, userPerceivedCrashRate, and distinctUsers per version code. Google's bad behavior threshold for user-perceived crash rate is ~1.09%.


get_anr_rate

package_name : strdays         : int  — look-back window, 1–30 (default 7)version_code : str  — optional single version code to filter

Returns daily anrRate, userPerceivedAnrRate, and distinctUsers per version code. Google's bad behavior threshold for user-perceived ANR rate is ~0.47%.


get_vitals_summary

package_name : strdays         : int  — look-back window, 1–30 (default 7)

Returns a combined crash + ANR summary aggregated per version code, with averages over the period and exceedsCrashThreshold / exceedsAnrThreshold flags. The latest version is highlighted as latestVersionSummary.

get_wakelock_rate

package_name : strdays         : int  — look-back window, 1–30 (default 7)version_code : str  — optional single version code to filter

Returns daily stuckBackgroundWakelockRate and distinctUsers per version code. Relevant for 2026 Google Play battery health enforcement — apps with an excessive proportion of sessions holding a partial wake lock for more than 1 hour in the background may be penalized.


get_wakeup_rate

package_name : strdays         : int  — look-back window, 1–30 (default 7)version_code : str  — optional single version code to filter

Returns daily excessiveWakeupRate and distinctUsers per version code. Relevant for 2026 Google Play battery health enforcement — apps that wake the CPU too frequently (above platform thresholds) may be penalized.


Troubleshooting

403 Forbidden on Vitals tools

403 Client Error: Forbidden for url: https://playdeveloperreporting.googleapis.com/...

This error has two common causes — check both:

1. Google Play Developer Reporting API not enabled

Enable it in your Google Cloud project: console.cloud.google.com/apis/library/playdeveloperreporting.googleapis.com

2. Service account lacks per-app Reporting API access

  1. Play Console → Setup → API access → find the service account → Manage Play Console permissions.
  2. Under App permissions, select the app and enable View app information and download bulk reports (read-only).
  3. Save and wait a few minutes for the change to propagate.

404 Package not found

The service account must be linked to the same Google Play Console account that owns the app. Go to Play Console → Setup → API access and verify the service account is listed and has been invited.


Marketplaces

RegistryLink
PyPIpip install google-play-mcp
Smitherysearch google-play-mcp
Official MCP Registrygoogle-play-mcp

License

MIT

Source: README.md at commit 9003e63

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.5.0LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts