MCP server for Google Play Console — manage app releases, reply to reviews, query Android Vitals (crashes/ANRs), update store listings, upload screenshots, and manage release tracks from any AI agent (Claude, Cursor, Copilot).
23 tools with consistent verb-noun naming (query_, list_, get_, create_, update_, delete_, upload_, assign_, commit_, reply_). All tools have descriptions (avg 120 chars, within baseline 34-392). Input schemas present for all tools with proper JSON Schema structure. However, output schemas are NOT documented, critical gap for LLM planning. Parameter descriptions are present but often generic (e.g., 'App package name' repeated 23 times without context on fallback behavior). Error handling guidance is minimal; no recovery hints or actionable error messages visible. Tool composition is sound (single responsibility), but some tools like upload_aab and upload_store_image lack validation details. Pagination implemented (pageSize, pageToken, startIndex, token) but inconsistently named across tools.
Assign an uploaded version code to a release track (such as production, beta, alpha, or internal) within the active edit session.
Commit all changes staged in the active edit session to make them live or submit them for store review.
Initialize a new draft edit transaction session for app updates or publishing. The returned edit ID is required for all other publishing, listing, and track operations. Edits expire after 48 hours.
Delete all store listing image assets of a specific type (e.g. all phone screenshots) from the active edit session.
Delete a specific store listing image asset from the active edit session by its image ID.
Retrieve app-wide details such as default language, contact email, website, and phone number from the active edit session.
Output schemas not documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., what does create_edit return? Is it editId or edit_id?). This forces agents to guess field names and risks broken tool chains.
Pagination parameter naming is inconsistent: query_crash_rate uses pageSize/pageToken, list_reviews uses maxResults/startIndex/token. LLMs must learn three different pagination conventions for the same semantic operation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Retrieve details of a single user review by its unique review ID.
Retrieve localized store listing metadata (title, short description, and full description) for a specific language code within the active edit session.
Retrieve release track details (releases, rollout percentages, version codes) for a specific track (e.g. production, beta, alpha, internal) in the active edit session.
List all localized store listings (across all languages) for the app in the active edit session.
List all configured in-app purchase products (one-time purchases) for the app.
Fetch a list of recent user reviews for the specified app. Returns ratings, comments, device details, and pagination metadata.
List all configured subscription products for the app.
List all release tracks and their active/draft releases configured in the active edit session.
Query application ANR (App Not Responding) rate statistics. Returns daily ANR percentage metrics (ratio of daily active users who experienced an ANR) for app health check.
Query application crash rate statistics. Returns daily crash percentage metrics (ratio of daily active users who experienced a crash) for the stability vital check.
Reply to a user review. If a reply already exists for the review, it will be overwritten and updated. Reply character limit is 350.
Update app-wide contact information (email, phone, website) and default language in the active edit session.
Upload and update the app's Data Safety declaration using raw CSV content. (Advanced usage only).
Update localized store listing texts (title, short description, and full description) for a specific language code within the active edit session.
Upload an Android App Bundle (AAB) binary to an active edit session. The target file path is validated before uploading.
Upload a new store listing asset (e.g. app icon, feature graphic, screenshots) to an active edit session. The target file path is validated before uploading.
Validate the active edit session before committing. Checks that all staged changes are complete and consistent. Call this before commit_edit to avoid failed submissions.
No error handling guidance. Tools like commit_edit (IRREVERSIBLE) and delete_store_image (DESTRUCTIVE) lack recovery hints. If a call fails, the LLM has no actionable next step. No dry-run or confirmation pattern for destructive operations.
packageName parameter is optional with fallback to environment/CLI default, but this behavior is not clearly documented in most tool descriptions. LLMs may not understand when to omit it vs. when to provide it explicitly.
upload_aab and upload_store_image accept file paths but lack validation details (file size limits, format constraints, supported image dimensions). LLMs cannot predict which files will be rejected.