google-play-developer-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| accounts_listA | List every Play Console account registered with the MCP server (names + key-file paths, no secrets). |
| accounts_currentA | Show which account is currently active. All subsequent API calls target this account. |
| accounts_addA | Register a new Play Console account. Provide a local filesystem path to a Google Cloud service-account JSON key. The key stays on disk — the MCP only records its path. |
| accounts_removeB | Remove an account from the local registry. Does NOT delete the key file. |
| accounts_switchB | Make an existing registered account the active one. |
| accounts_updateB | Change the key-file path or description of an existing account. |
| auth_statusA | Verify that the active account can acquire a Google OAuth token. Returns the service-account email plus whether a token was obtained. |
| apps_listB | List every Android app the active service account can access. Uses the Play Developer Reporting API's apps.search. |
| apps_getA | Open a fresh edit and return the details resource (contact email/phone/website + default language) for one app. |
| edits_insertA | Open a new edit session for an app. Returns the edit id plus its expiry. Subsequent edits.* tool calls must pass this id. |
| edits_getA | Fetch an existing edit — useful to check expiry before work. |
| edits_validateA | Validate an edit without committing. Catches schema/media errors before you publish. |
| edits_commitB | Commit and publish all changes in the edit. Pass changesNotSentForReview=true to skip automatic review submission. |
| edits_deleteB | Abandon an edit. All pending changes are discarded. |
| details_getA | Get app-level details (contact email/phone/website + default language). |
| details_updateB | Overwrite app-level details. Full replacement — unspecified fields are cleared. |
| details_patchB | Partial update — only the provided fields change. |
| country_availability_getB | Fetch per-country availability for a given track within an edit. |
| listings_listB | List every locale listing within an edit. |
| listings_getC | Get one locale's listing. |
| listings_updateB | Full replacement update of a locale listing. Fields: title (30), shortDescription (80), fullDescription (4000), video (YouTube URL). |
| listings_patchC | Partial update — unspecified fields preserved. |
| listings_deleteC | Delete the listing for one locale. |
| listings_delete_allA | Delete ALL locale listings in this edit. Irreversible within the edit. |
| images_listB | List uploaded images for a specific type and locale. |
| images_uploadB | Upload a new image. |
| images_deleteC | Delete a single image by id. |
| images_delete_allB | Delete every image of a given type in one locale. |
| bundles_listC | List all AAB uploads in the current edit. |
| bundles_uploadA | Upload a new App Bundle (.aab). Returns versionCode and sha256. Commit the edit separately to publish to a track. |
| apks_listB | List all APK uploads in the edit. |
| apks_uploadA | Upload a new APK. Prefer AAB via |
| apks_add_externally_hostedA | Register an APK that is hosted outside Google Play (enterprise-only, requires allowlist). |
| deobfuscation_files_uploadC | Upload a ProGuard mapping file for a specific version code. Use deobfuscationFileType='proguard' or 'nativeCode'. |
| expansion_files_getB | Get expansion file metadata for a version code. |
| expansion_files_uploadC | Upload expansion file contents (OBB). |
| expansion_files_updateC | Full update of expansion file metadata. |
| expansion_files_patchC | Partial update of expansion file metadata. |
| tracks_listA | List every track visible in this edit (includes default internal/alpha/beta/production + any custom closed-testing tracks). |
| tracks_getB | Get one track — includes all releases currently staged. |
| tracks_updateA | Full replacement of track state. |
| tracks_patchC | Partial update of track state. |
| tracks_createA | Create a brand-new custom closed-testing track. The new id is set on the server. Type can only be closedTesting. |
| testers_getB | Get the current tester allowlist for a track. |
| testers_updateB | Full replacement of the tester allowlist. |
| testers_patchC | Partial update of the tester allowlist. |
| onetime_products_listC | List all one-time products. |
| onetime_products_getB | Get a single one-time product. |
| onetime_products_createB | Create a one-time product. Pass the full OneTimeProduct body. |
| onetime_products_updateC | Update a one-time product (patch semantics, with updateMask). |
| onetime_products_deleteC | Delete a one-time product. |
| onetime_products_batch_getB | Fetch up to 100 one-time products in one call. |
| onetime_products_batch_updateC | Update up to 100 one-time products in one call. |
| onetime_products_batch_deleteC | Delete up to 100 one-time products in one call. |
| onetime_product_purchase_options_batch_updateC | Update or create up to 100 purchase options for a one-time product. |
| onetime_product_purchase_options_batch_update_statesC | Activate or deactivate up to 100 purchase options in one call. |
| onetime_product_purchase_options_batch_deleteC | Delete up to 100 purchase options. |
| onetime_product_offers_listB | List offers attached to a purchase option. |
| onetime_product_offers_getB | Get one offer on a purchase option. |
| onetime_product_offers_batch_getC | Batch-get up to 100 offers. |
| onetime_product_offers_batch_updateB | Batch-update up to 100 offers (creates or updates). |
| onetime_product_offers_batch_update_statesC | Activate/deactivate/cancel up to 100 offers. |
| onetime_product_offers_batch_deleteC | Delete up to 100 offers. |
| subscriptions_listC | List all subscriptions. |
| subscriptions_getC | Get a single subscription. |
| subscriptions_createC | Create a subscription. |
| subscriptions_updateB | Patch-update a subscription. Pass |
| subscriptions_deleteA | Delete a subscription. Only works on subscriptions with no active base plans/offers. |
| subscriptions_archiveA | Archive a subscription. Archived subscriptions are hidden from new purchases but existing subscribers keep access. |
| subscriptions_batch_getB | Get up to 100 subscriptions in one call. |
| subscriptions_batch_updateC | Update up to 100 subscriptions in one call. |
| subscription_base_plans_activateC | Activate a base plan — starts making it available for purchase. |
| subscription_base_plans_deactivateA | Deactivate a base plan — no new purchases; existing subscribers unaffected. |
| subscription_base_plans_deleteA | Delete a base plan (must be inactive). |
| subscription_base_plans_migrate_pricesC | Apply a price change to existing subscribers of a base plan in specific regions. |
| subscription_base_plans_batch_migrate_pricesB | Migrate prices on up to 100 base plans in one call. |
| subscription_base_plans_batch_updateC | Upsert up to 100 base plans. |
| subscription_base_plans_batch_update_statesC | Activate/deactivate up to 100 base plans. |
| subscription_offers_listA | List offers for a base plan. |
| subscription_offers_getC | Get a single offer. |
| subscription_offers_createB | Create an offer on a base plan (free trial, intro pricing, etc.). |
| subscription_offers_updateC | Patch-update an offer. |
| subscription_offers_deleteD | Delete an offer. |
| subscription_offers_activateC | Activate an offer — starts making it available for purchase. |
| subscription_offers_deactivateC | Deactivate an offer. |
| subscription_offers_batch_getC | Batch-get up to 100 offers. |
| subscription_offers_batch_updateC | Upsert up to 100 offers. |
| subscription_offers_batch_update_statesC | Activate/deactivate up to 100 offers. |
| monetization_convert_region_pricesA | Utility: convert a price in one region to comparable prices in every other region. Use before setting prices on a base plan. |
| purchases_products_v2_getA | Get current state of a one-time product purchase. Supports multiple purchase options + offers (replaces legacy purchases.products). |
| purchases_products_acknowledgeA | Acknowledge a one-time product purchase. Unacknowledged purchases are refunded by Play after 3 days. |
| purchases_products_consumeA | Consume a consumable one-time product so the user can buy it again. Consuming also acknowledges the purchase. |
| purchases_subscriptions_v2_getB | Get full state of a subscription purchase (SubscriptionPurchaseV2). Includes OfferPhase (2026), outOfAppPurchaseContext, latestSuccessfulOrderId, priceChangeState, priceStepUpConsentDetails. |
| purchases_subscriptions_v2_revokeC | Revoke a subscription (refund + terminate access). 2025-05 added |
| purchases_subscriptions_v2_cancelC | Cancel a subscription (2025-09+). |
| purchases_subscriptions_v2_deferA | Defer billing for a subscription (2026-01 supports subscriptions with add-ons too). Pass DeferralInfo with expectedExpiryTime + desiredExpiryTime. |
| purchases_subscriptions_acknowledgeB | Acknowledge a subscription purchase. 2025-11+ accepts optional |
| purchases_voided_listB | List voided purchases (refunded/charged-back). Supports filtering by time range + voided source. |
| orders_listC | List orders within a time window. Returns OrderId, productId, purchase state, quantity, offerPhaseDetails. |
| orders_getB | Get one order by order id. |
| orders_batch_getB | Get up to 100 orders in one call. |
| orders_refundB | Refund an order. Pass |
| orders_review_refundA | Respond to a pending refund review (collaborative chargeback, 2026-07). Call within 24 hours of a PendingRefundReviewNotification. Supply |
| external_transactions_getC | Get an external transaction (Alternative Billing). |
| external_transactions_createC | Register a new external transaction (Alternative Billing). |
| external_transactions_refundC | Report a refund on an external transaction. |
| reviews_listB | List reviews from the last 7 days. Use token from the previous page for pagination. Optional filters: language, translationLanguage, device. |
| reviews_getC | Get a single review by id. |
| reviews_replyA | Post a public reply to a review. Replies can be edited by calling this again. |
| users_listA | List all users on a developer account. |
| users_createB | Add a new team member to the developer account. Pass the user resource with email + roles + optional expirationTime. |
| users_updateC | Patch-update a team member (roles, access level). |
| users_deleteB | Remove a user from the developer account. |
| grants_createA | Grant a user access to one app. |
| grants_updateC | Patch a grant (change appLevelPermissions). |
| grants_deleteC | Revoke a grant. |
| device_tier_configs_listB | List all device-tier configs for an app. |
| device_tier_configs_createC | Create a new device-tier config. |
| device_tier_configs_getC | Get a device-tier config by id. |
| app_recovery_listC | List app recovery actions for a versionCode. |
| app_recovery_createD | Create an app recovery action. |
| app_recovery_deployC | Deploy an app recovery action to users. |
| app_recovery_cancelB | Cancel an in-flight app recovery action. |
| app_recovery_add_targetingB | Add targeting (country/locale/version) to an in-progress recovery action. |
| generated_apks_listA | List generated (split + standalone) APKs for a given bundle versionCode. |
| generated_apks_downloadA | Download a specific generated APK. |
| system_apks_variants_listB | List system APK variants created for a given versionCode. |
| system_apks_variants_createC | Create a new system APK variant for a versionCode. |
| system_apks_variants_getC | Get a system APK variant. |
| system_apks_variants_downloadC | Download a built system APK variant. Returns base64. |
| internal_app_sharing_upload_apkB | Upload an APK for internal app sharing. Returns a link you can distribute internally. |
| internal_app_sharing_upload_bundleC | Upload an AAB for internal app sharing. |
| reports_apps_searchC | List every app the service account can access. |
| reports_apps_fetch_release_filter_optionsB | List the release-filter dimensions available for an app (version codes, track, staged rollout). |
| reports_anomalies_listC | List detected anomalies across metric sets for an app. |
| reports_crash_rate_getA | Get crash-rate metric-set metadata (available dimensions, metrics, freshness). |
| reports_crash_rate_queryB | Query crash-rate timeline with dimensions, metrics, filter. |
| reports_anr_rate_getC | Get ANR-rate metric-set metadata. |
| reports_anr_rate_queryD | Query ANR-rate timeline. |
| reports_anon_rss_swap_memory_getC | Get anonymous RSS + swap memory usage metric-set metadata. Format: apps/{packageName}/anonRssAndSwapMemoryUsageMetricSet |
| reports_anon_rss_swap_memory_queryC | Query anonymous RSS + swap memory usage timeline. |
| reports_bitmap_memory_getB | Get bitmap memory usage metric-set metadata. Format: apps/{packageName}/bitmapMemoryUsageMetricSet |
| reports_bitmap_memory_queryC | Query bitmap memory usage timeline. |
| reports_slow_start_rate_getC | Get slow-start-rate metadata. |
| reports_slow_start_rate_queryD | Query slow-start-rate timeline. |
| reports_slow_rendering_rate_getC | Get slow-rendering-rate metadata. |
| reports_slow_rendering_rate_queryC | Query slow-rendering-rate timeline. |
| reports_excessive_wakeup_rate_getC | Get excessive-wake-up-rate metadata. |
| reports_excessive_wakeup_rate_queryC | Query excessive-wake-up-rate timeline. |
| reports_stuck_background_wake_lock_rate_getC | Get stuck-background-wake-lock-rate metadata. |
| reports_stuck_background_wake_lock_rate_queryC | Query stuck-background-wake-lock-rate timeline. |
| reports_lmk_rate_getC | Get Low-Memory-Killer (LMK) rate metadata. |
| reports_lmk_rate_queryC | Query LMK-rate timeline. |
| reports_errors_counts_getC | Get error-counts metric-set metadata. |
| reports_errors_counts_queryC | Query aggregated error-count timelines. |
| reports_errors_issues_searchC | Search grouped error issues (ErrorIssue). |
| reports_errors_reports_searchC | Search raw error reports (ErrorReport) within an issue or time window. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 157 tools
The vast majority of tools use clear resource_action naming (e.g., subscriptions_create, tracks_patch, orders_refund), so boundaries are mostly clean. However, a few genuine overlaps exist, notably apps_list vs reports_apps_search (both 'list every app the account can access') and the dense family of subscriptions/onetime_products batch variants that an agent could easily confuse.
Strongly consistent snake_case with a resource_prefix_action pattern across nearly all 157 tools. Minor deviations like auth_status, monetization_convert_region_prices, and mixed onetime_products_/subscriptions_ prefixes (singular vs plural asymmetry) keep it from a perfect score.
157 tools is far beyond the 15-25 comfortable range and imposes heavy selection overhead even for a large API. The domain is genuinely broad so not an absolute mismatch, but the surface is bloated with many fine-grained batch/state variants that could be consolidated.
Coverage is remarkably thorough across accounts, apps, edits, listings, images, bundles/APKs, tracks, testers, products, subscriptions, base plans, offers, purchases, orders, reviews, users/grants, recovery, and reporting. Full CRUD plus batch and lifecycle state operations are present with few obvious dead ends.