play-store-mcp
This server acts as a Model Context Protocol (MCP) interface for the Google Play Developer API, enabling AI assistants to manage Android apps on the Play Store across the following areas:
App Deployment: Upload APK/AAB files to any track (internal, alpha, beta, production) with single or multi-language release notes, staged rollouts, and batch deployment to multiple tracks.
Release Management: Get release status, promote releases between tracks, halt staged rollouts, and update rollout percentages.
Store Listings: Retrieve, update, and list app titles, descriptions, and YouTube video URLs for any language.
Review Management: Fetch recent user reviews (with optional translation) and reply to them.
Subscriptions & Purchases: List subscription products, check purchase/renewal status, list voided purchases, and retrieve detailed order/transaction information.
In-App Products: List all IAP items and get details for specific products by SKU.
Tester Management: Get and update tester email addresses and Google Groups for testing tracks.
Expansion Files: Retrieve metadata for APK expansion files (main or patch).
Validation: Validate package names, track names, and store listing text lengths before use.
Android Vitals (Placeholder): Get a crash/ANR overview and specific metrics (e.g., crash rate, ANR rate) โ currently placeholder data; requires the separate Play Developer Reporting API for full functionality.
Provides tools for managing Android apps on Google Play, including app deployment, release management, review responses, subscription and in-app product management, and Android Vitals monitoring.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@play-store-mcprespond to the latest 1-star review"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Play Store MCP Server
An MCP (Model Context Protocol) server that connects to the Google Play Developer API. Deploy apps, manage releases, respond to reviews, and monitor app health โ all through your AI assistant.
๐ Full Documentation
โจ Features
๐ App Deployment โ Deploy APK/AAB files to any track (internal, alpha, beta, production)
โก Batch Operations โ Deploy to multiple tracks simultaneously
๐ Multi-Language Support โ Deploy with release notes in multiple languages
โ Input Validation โ Validate package names, tracks, and text before API calls
๐ Automatic Retries โ Built-in retry logic with exponential backoff for transient failures
๐ Store Listings โ Update app titles, descriptions, and videos for any language
๐ Release Management โ Promote releases between tracks, manage staged rollouts
๐ฅ Tester Management โ Add and manage testers for testing tracks
โญ Review Management โ Fetch and reply to user reviews
๐ณ Subscription Management โ List subscriptions and check purchase status
๐ In-App Products โ List and manage in-app products
๐ฆ Expansion Files โ Manage APK expansion files for large apps
๐งพ Orders โ Retrieve detailed transaction information
๐ณ Docker Support โ Run as a container with health checks
๐ Per-Request Credentials โ Bring-your-own-credentials for multi-tenant deployments
๐ Secure โ Google Cloud service account authentication
Related MCP server: Google Play Developer API MCP Server
๐ Quick Start
Prerequisites
Google Cloud Project with the Google Play Developer API enabled
Service Account with access to your Play Console
Python 3.11+,
uvx, or Docker installed
Installation
Using uvx (Recommended)
# Run directly without installation
uvx play-store-mcpUsing pip
pip install play-store-mcp
play-store-mcpUsing Docker
docker run -e GOOGLE_APPLICATION_CREDENTIALS=/creds/key.json \
-v /path/to/service-account.json:/creds/key.json:ro \
ghcr.io/lusky3/play-store-mcp:latestFrom source
git clone https://github.com/lusky3/play-store-mcp.git
cd play-store-mcp
pip install -e .
play-store-mcpConfiguration
Set the path to your service account key:
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.jsonRunning with HTTP Transport
For remote access or public deployments, run the server with streamable-http transport:
play-store-mcp --transport streamable-http --host 0.0.0.0 --port 8000The server exposes a /health endpoint for monitoring.
Per-Request Credentials (Recommended for Public Instances)
For public deployments where users bring their own credentials, configure your MCP client to pass credentials in headers:
{
"mcpServers": {
"play-store": {
"url": "https://your-server.com/mcp",
"transport": "http",
"headers": {
"X-Google-Credentials-Base64": "YOUR_BASE64_ENCODED_CREDENTIALS"
}
}
}
}To get your base64-encoded credentials:
base64 -w 0 < service-account.jsonPer-request credentials are isolated โ each request uses only the credentials provided in its headers. No credentials are stored server-side or shared between requests.
Server-Side Credentials (For Private/Trusted Deployments)
For private deployments, set credentials via environment variable at server startup:
export GOOGLE_PLAY_STORE_CREDENTIALS='{"type":"service_account",...}'
# or
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json
play-store-mcp --transport streamable-http --host 0.0.0.0 --port 8000Read-Only Mode
To point the server at a live Play Console without any risk of mutating it, run in read-only mode. All write tools (deploy, promote, halt, rollout, reply to reviews, listing/tester updates) return an error instead of calling the API; read tools are unaffected.
play-store-mcp --read-only
# or
export PLAY_STORE_MCP_READ_ONLY=1Code Mode (Experimental, enabled by default)
By default the tools are served as three meta-tools (search/get_schema/
execute) instead of the full tool list, cutting per-request tool-list token
overhead. The sandbox execute runs in is a base dependency, so this works
out of the box โ no extra install needed.
To opt out and use the classic tool list instead (CODE_MODE is env-only โ
there is no CLI flag):
export CODE_MODE=0Under code mode one execute call can invoke up to 50 tool calls (including mutations) behind a single approval. Read-only enforcement still applies inside the sandbox, so pair it with --read-only / PLAY_STORE_MCP_READ_ONLY=1 unless you need writes.
๐ง MCP Client Configuration
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"play-store": {
"command": "uvx",
"args": ["play-store-mcp"],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "/path/to/service-account.json"
}
}
}
}Kiro
Add to .kiro/settings/mcp.json:
{
"mcpServers": {
"play-store": {
"command": "uvx",
"args": ["play-store-mcp"],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "/path/to/service-account.json"
}
}
}
}Gemini CLI / Other MCP Clients
{
"mcpServers": {
"play-store": {
"command": "uvx",
"args": ["play-store-mcp"],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "/path/to/service-account.json"
}
}
}
}๐ ๏ธ Available Tools
Publishing Tools
Tool | Description |
| Deploy an APK/AAB to a track with optional staged rollout and single-language release notes |
| Deploy an APK/AAB with multi-language release notes |
| Promote a release from one track to another |
| Get release status for all tracks |
| Halt a staged rollout |
| Update rollout percentage for a staged release |
| Get app metadata (title, description, etc.) |
Store Listings Tools
Tool | Description |
| Get store listing for a specific language |
| Update store listing (title, descriptions, video) |
| List all store listings for all languages |
Review Tools
Tool | Description |
| Fetch recent reviews with optional filters |
| Reply to a user review |
Subscription Tools
Tool | Description |
| List subscription products for an app |
| Check subscription purchase status |
| List voided purchases |
In-App Products Tools
Tool | Description |
| List all in-app products for an app |
| Get details of a specific in-app product |
Testers Management Tools
Tool | Description |
| Get testers for a specific testing track |
| Update testers for a testing track |
Orders Tools
Tool | Description |
| Get detailed order/transaction information |
Expansion Files Tools
Tool | Description |
| Get APK expansion file information |
Validation Tools
Tool | Description |
| Validate package name format |
| Validate track name |
| Validate store listing text lengths |
Batch Operations Tools
Tool | Description |
| Deploy to multiple tracks simultaneously |
๐ Google Cloud Setup
1. Create a Service Account
Go to Google Cloud Console
Create a new project or select an existing one
Enable the Google Play Developer API
Go to IAM & Admin > Service Accounts
Create a new service account
Download the JSON key file
2. Grant Play Console Access
Go to Google Play Console
Navigate to Users and permissions
Click Invite new users
Enter the service account email (from the JSON file)
Grant the following permissions:
Release apps to testing tracks (for internal/alpha/beta)
Release apps to production (for production releases)
Reply to reviews (for review management)
View app information and download bulk reports (for app details and orders)
๐ Environment Variables
Variable | Description | Required |
| Path to service account JSON key | Yes (or use per-request credentials) |
| Inline JSON credentials string | Alternative to file path |
| Log level (DEBUG, INFO, WARNING, ERROR) | No (default: INFO) |
| Disable DNS rebinding protection (for cloud/reverse-proxy deployments) | No |
| Require | No |
| Disable all write operations (deploy, promote, rollout, reply, listing/tester updates) | No (default: off) |
| Directory that APK/AAB downloads are confined to (path-traversal / arbitrary-write protection). Downloads are always confined; defaults to the working directory when unset | No (defaults to cwd); recommended for network/hosted deployments โ the server warns if unset |
| Set to | No (default: on) |
๐งช Development
Setup
git clone https://github.com/lusky3/play-store-mcp.git
cd play-store-mcp
uv sync --devRunning Tests
uv run pytest -v --cov=src/play_store_mcpLinting
ruff check src/ tests/
ruff format src/ tests/Type Checking
mypy src/๐ Troubleshooting
Error: "Service account key not found"
Ensure GOOGLE_APPLICATION_CREDENTIALS points to a valid JSON file:
ls -la $GOOGLE_APPLICATION_CREDENTIALSError: "The caller does not have permission"
Verify the service account has been granted access in Play Console with the required permissions.
Error: "Package name not found"
Ensure the app exists in Play Console and the service account has access to it.
๐ License
MIT License โ see LICENSE for details.
๐ Acknowledgments
Inspired by antoniolg/play-store-mcp (Kotlin)
Built with the MCP Python SDK
Uses the Google Play Developer API
๐ค AI Usage Disclaimer
Portions of this codebase were generated with the assistance of Large Language Models (LLMs). All AI-generated code has been reviewed and tested to ensure quality and correctness.
Available Tools
3 toolsexecuteExecuteA
Chain await call_tool(...) calls in one Python block; prefer returning the final answer from a single block.
Use return to produce output.
Only call_tool(tool_name: str, params: dict) -> Any is available in scope.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Python async code to execute tool calls via call_tool(name, arguments) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of explaining behavior. It usefully discloses that only `call_tool(tool_name: str, params: dict) -> Any` is in scope and that output is produced with `return`. However, it does not describe execution environment constraints, error behavior, side effects, or persistence across blocks, leaving meaningful gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no filler. The core instruction is front-loaded, and every sentence contributes either to usage, output, or scope constraints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description is largely sufficient: it explains how to invoke tools, how to return output, and what is available in scope. It could be more complete by noting error/exception behavior or execution restrictions, but these are not critical for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents `code` at 100% coverage, but the description adds real value by specifying the callable signature, the need for `await`, and the output mechanism. This goes beyond merely restating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool executes a Python block which chains `await call_tool(...)` calls and returns output via `return`. It is not a tautology and gives a concrete sense of the tool's role, though it does not explicitly differentiate itself from siblings like `search` or `get_schema`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when to use the tool: when multiple tool calls need to be chained in one Python block, and it advises preferring a single block and using `return`. It lacks explicit exclusion criteria or named alternatives, but the usage intent is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_schemaGet SchemaA
Get parameter schemas for specific tools.
Use after searching to get the detail needed to call a tool.
| Name | Required | Description | Default |
|---|---|---|---|
| tools | Yes | List of tool names to get schemas for | |
| detail | No | 'brief' for names and descriptions, 'detailed' for parameter schemas as markdown, 'full' for complete JSON schemas | detailed |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of conveying behavioral context. It does present this as a read/inspection operation ('Get', 'Use after searching'), and the output schema partially covers return behavior. However, it does not explicitly state that the tool has no side effects, does not execute the requested tools, or how it behaves if a tool name is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The main purpose is front-loaded, and the workflow guidance directly follows. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity introspection tool with an output schema and fully documented parameters, the description is largely sufficient. It gives the workflow context ('after searching') and the goal ('detail needed to call a tool'). The main missing piece is a brief note on side-effect-free behavior, but this is minor for a tool like this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with meaningful descriptions for both tools and detail, including the enum meanings. The description adds little parameter-specific value beyond the phrase 'detail needed to call a tool,' so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Get') and resource ('parameter schemas for specific tools'), so an agent can quickly understand what the tool does. However, it slightly undersells the output: the detail parameter can return names/descriptions and full JSON schemas, not just parameter schemas. It also doesn't explicitly differentiate from execute, though the workflow hint helps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool 'after searching' and frames it as the step to obtain 'the detail needed to call a tool.' This gives useful sequencing relative to the sibling tools search and execute. It stops short of naming explicit exclusions or when not to use it, so it is clear but not fully exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearchB
Search for available tools by query.
Returns matching tools ranked by relevance.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Filter to tools with any of these tags before searching | |
| limit | No | Maximum number of results to return | |
| query | Yes | Search query to find available tools | |
| detail | No | 'brief' for names and descriptions, 'detailed' for parameter schemas as markdown, 'full' for complete JSON schemas | brief |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry behavioral disclosure. It states that matching tools are returned ranked by relevance, which is a clear behavioral promise. It does not mention safety, side effects, or authentication, but for a read-only search tool the disclosed behavior is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The primary action is front-loaded, and the additional sentence about ranking is useful without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a discovery tool with full schema coverage and an output schema, the description is largely complete. It could be enhanced with usage guidance or explicit differentiation from sibling tools, but nothing essential for invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the input schema already documents all four parameters. The description adds context about ranking but does not meaningfully elaborate on query, tags, limit, or detail beyond what the schema provides, matching the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for available tools by query and returns ranked results, so an agent understands the core action and resource. However, it does not explicitly differentiate this tool from siblings like get_schema or execute, relying on the tool name and context rather than the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description implies it is for discovering tools, but it does not state prerequisites, exclusions, or how it relates to get_schema or execute.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
120 tool updates
v0.6.1- Removed
acknowledge_product_purchase - Removed
activate_base_plan - Removed
activate_purchase_option_offer - Removed
activate_subscription_offer - Removed
add_app_recovery_targeting - Removed
batch_delete_in_app_products - Removed
batch_delete_one_time_products - Removed
batch_delete_purchase_option_offers - Removed
batch_delete_purchase_options - Removed
batch_deploy - Removed
batch_get_in_app_products - Removed
batch_get_one_time_products - Removed
batch_get_orders - Removed
batch_get_purchase_option_offers - Removed
batch_get_subscription_offers - Removed
batch_get_subscriptions - Removed
batch_migrate_base_plan_prices - Removed
batch_update_base_plan_states - Removed
batch_update_one_time_products - Removed
batch_update_purchase_option_offer_states - Removed
batch_update_purchase_option_offers - Removed
batch_update_purchase_option_states - Removed
batch_update_subscription_offer_states - Removed
batch_update_subscription_offers - Removed
batch_update_subscriptions - Removed
cancel_app_recovery - Removed
cancel_purchase_option_offer - Removed
cancel_subscription_purchase - Removed
consume_product_purchase - Removed
create_app_recovery - Removed
create_device_tier_config - Removed
create_external_transaction - Removed
create_grant - Removed
create_in_app_product - Removed
create_subscription - Removed
create_subscription_offer - Removed
create_system_apk_variant - Removed
create_user - Removed
deactivate_base_plan - Removed
deactivate_purchase_option_offer - Removed
deactivate_subscription_offer - Removed
defer_subscription_purchase - Removed
delete_all_images - Removed
delete_base_plan - Removed
delete_grant - Removed
delete_image - Removed
delete_in_app_product - Removed
delete_one_time_product - Removed
delete_subscription - Removed
delete_subscription_offer - Removed
delete_user - Removed
deploy_app - Removed
deploy_app_multilang - Removed
deploy_app_recovery - Removed
download_generated_apk - Removed
download_system_apk_variant - Added
execute - Removed
get_app_details - Removed
get_device_tier_config - Removed
get_expansion_file - Removed
get_external_transaction - Removed
get_in_app_product - Removed
get_listing - Removed
get_one_time_product - Removed
get_order - Removed
get_product_purchase - Removed
get_product_purchase_v2 - Removed
get_releases - Removed
get_review - Removed
get_reviews - Added
get_schema - Removed
get_subscription - Removed
get_subscription_offer - Removed
get_subscription_status - Removed
get_system_apk_variant - Removed
get_testers - Removed
halt_release - Removed
list_all_listings - Removed
list_apks - Removed
list_app_recoveries - Removed
list_bundles - Removed
list_device_tier_configs - Removed
list_generated_apks - Removed
list_images - Removed
list_in_app_products - Removed
list_one_time_products - Removed
list_purchase_option_offers - Removed
list_subscription_offers - Removed
list_subscriptions - Removed
list_system_apk_variants - Removed
list_users - Removed
list_voided_purchases - Removed
migrate_base_plan_prices - Removed
patch_in_app_product - Removed
patch_one_time_product - Removed
patch_subscription - Removed
patch_subscription_offer - Removed
promote_release - Removed
refund_external_transaction - Removed
refund_order - Removed
reply_to_review - Removed
revoke_subscription_purchase - Added
search - Removed
set_data_safety - Removed
update_grant - Removed
update_in_app_product - Removed
update_listing - Removed
update_rollout - Removed
update_testers - Removed
update_user - Removed
upload_apk - Removed
upload_bundle - Removed
upload_deobfuscation_file - Removed
upload_expansion_file - Removed
upload_image - Removed
upload_internal_app_sharing_apk - Removed
upload_internal_app_sharing_bundle - Removed
validate_listing_text - Removed
validate_package_name - Removed
validate_track
119 tool updates
v0.5.0- Added
acknowledge_product_purchase - Added
activate_base_plan - Added
activate_purchase_option_offer - Added
activate_subscription_offer - Added
add_app_recovery_targeting - Added
batch_delete_in_app_products - Added
batch_delete_one_time_products - Added
batch_delete_purchase_option_offers - Added
batch_delete_purchase_options - Changed
batch_deploy13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / file_path / descriptionAdded value: +"Absolute path to APK or AAB file" - removed
Input schema / properties / file_path / titleRemoved value: -"File Path" - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - added
Input schema / properties / release_notes / descriptionAdded value: +"Optional release notes for all tracks" - removed
Input schema / properties / release_notes / titleRemoved value: -"Release Notes" - added
Input schema / properties / rollout_percentages / descriptionAdded value: +"Optional dict mapping track names to rollout percentages" - removed
Input schema / properties / rollout_percentages / titleRemoved value: -"Rollout Percentages" - added
Input schema / properties / tracks / descriptionAdded value: +"List of tracks to deploy to (e.g., [\"internal\", \"alpha\"])" - removed
Input schema / properties / tracks / titleRemoved value: -"Tracks" - removed
Input schema / titleRemoved value: -"batch_deployArguments" - removed
Output schema / titleRemoved value: -"batch_deployDictOutput"
- Added
batch_get_in_app_products - Added
batch_get_one_time_products - Added
batch_get_orders - Added
batch_get_purchase_option_offers - Added
batch_get_subscription_offers - Added
batch_get_subscriptions - Added
batch_migrate_base_plan_prices - Added
batch_update_base_plan_states - Added
batch_update_one_time_products - Added
batch_update_purchase_option_offer_states - Added
batch_update_purchase_option_offers - Added
batch_update_purchase_option_states - Added
batch_update_subscription_offer_states - Added
batch_update_subscription_offers - Added
batch_update_subscriptions - Added
cancel_app_recovery - Added
cancel_purchase_option_offer - Added
cancel_subscription_purchase - Added
consume_product_purchase - Added
create_app_recovery - Added
create_device_tier_config - Added
create_external_transaction - Added
create_grant - Added
create_in_app_product - Added
create_subscription - Added
create_subscription_offer - Added
create_system_apk_variant - Added
create_user - Added
deactivate_base_plan - Added
deactivate_purchase_option_offer - Added
deactivate_subscription_offer - Added
defer_subscription_purchase - Added
delete_all_images - Added
delete_base_plan - Added
delete_grant - Added
delete_image - Added
delete_in_app_product - Added
delete_one_time_product - Added
delete_subscription - Added
delete_subscription_offer - Added
delete_user - Changed
deploy_app15 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / file_path / descriptionAdded value: +"Absolute path to APK or AAB file" - removed
Input schema / properties / file_path / titleRemoved value: -"File Path" - added
Input schema / properties / package_name / descriptionAdded value: +"App package name (e.g., com.example.myapp)" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - added
Input schema / properties / release_notes / descriptionAdded value: +"Optional release notes for this version (string for single language,\n or use release_notes_multilang for multiple languages)" - removed
Input schema / properties / release_notes / titleRemoved value: -"Release Notes" - added
Input schema / properties / release_notes_language / descriptionAdded value: +"Language code for release notes (default: en-US)" - removed
Input schema / properties / release_notes_language / titleRemoved value: -"Release Notes Language" - added
Input schema / properties / rollout_percentage / descriptionAdded value: +"Rollout percentage (0-100). Default 100 for full rollout." - removed
Input schema / properties / rollout_percentage / titleRemoved value: -"Rollout Percentage" - added
Input schema / properties / track / descriptionAdded value: +"Release track - one of: internal, alpha, beta, production" - removed
Input schema / properties / track / titleRemoved value: -"Track" - removed
Input schema / titleRemoved value: -"deploy_appArguments" - removed
Output schema / titleRemoved value: -"deploy_appDictOutput"
- Changed
deploy_app_multilang13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / file_path / descriptionAdded value: +"Absolute path to APK or AAB file" - removed
Input schema / properties / file_path / titleRemoved value: -"File Path" - added
Input schema / properties / package_name / descriptionAdded value: +"App package name (e.g., com.example.myapp)" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - added
Input schema / properties / release_notes / descriptionAdded value: +"Dictionary mapping language codes to release notes\n (e.g., {\"en-US\": \"Bug fixes\", \"es-ES\": \"Correcciรณn de errores\"})" - removed
Input schema / properties / release_notes / titleRemoved value: -"Release Notes" - added
Input schema / properties / rollout_percentage / descriptionAdded value: +"Rollout percentage (0-100). Default 100 for full rollout." - removed
Input schema / properties / rollout_percentage / titleRemoved value: -"Rollout Percentage" - added
Input schema / properties / track / descriptionAdded value: +"Release track - one of: internal, alpha, beta, production" - removed
Input schema / properties / track / titleRemoved value: -"Track" - removed
Input schema / titleRemoved value: -"deploy_app_multilangArguments" - removed
Output schema / titleRemoved value: -"deploy_app_multilangDictOutput"
- Added
deploy_app_recovery - Added
download_generated_apk - Added
download_system_apk_variant - Changed
get_app_details7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / language / descriptionAdded value: +"Language code for localized content (default: en-US)" - removed
Input schema / properties / language / titleRemoved value: -"Language" - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - removed
Input schema / titleRemoved value: -"get_app_detailsArguments" - removed
Output schema / titleRemoved value: -"get_app_detailsDictOutput"
- Added
get_device_tier_config - Changed
get_expansion_file9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / expansion_file_type / descriptionAdded value: +"Type of expansion file (main or patch)" - removed
Input schema / properties / expansion_file_type / titleRemoved value: -"Expansion File Type" - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - added
Input schema / properties / version_code / descriptionAdded value: +"APK version code" - removed
Input schema / properties / version_code / titleRemoved value: -"Version Code" - removed
Input schema / titleRemoved value: -"get_expansion_fileArguments" - removed
Output schema / titleRemoved value: -"get_expansion_fileDictOutput"
- Added
get_external_transaction - Changed
get_in_app_product7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - added
Input schema / properties / sku / descriptionAdded value: +"Product SKU identifier" - removed
Input schema / properties / sku / titleRemoved value: -"Sku" - removed
Input schema / titleRemoved value: -"get_in_app_productArguments" - removed
Output schema / titleRemoved value: -"get_in_app_productDictOutput"
- Changed
get_listing7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / language / descriptionAdded value: +"Language code (e.g., en-US, es-ES, fr-FR)" - removed
Input schema / properties / language / titleRemoved value: -"Language" - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - removed
Input schema / titleRemoved value: -"get_listingArguments" - removed
Output schema / titleRemoved value: -"get_listingDictOutput"
- Added
get_one_time_product - Changed
get_order7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / order_id / descriptionAdded value: +"Order ID to retrieve" - removed
Input schema / properties / order_id / titleRemoved value: -"Order Id" - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - removed
Input schema / titleRemoved value: -"get_orderArguments" - removed
Output schema / titleRemoved value: -"get_orderDictOutput"
- Added
get_product_purchase - Added
get_product_purchase_v2 - Changed
get_releases7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - removed
Input schema / titleRemoved value: -"get_releasesArguments" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"get_releasesOutput" - added
Output schema / x-fastmcp-wrap-resultAdded value: +true
- Added
get_review - Changed
get_reviews11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / max_results / descriptionAdded value: +"Maximum number of reviews to return (default: 50, max: 100)" - removed
Input schema / properties / max_results / titleRemoved value: -"Max Results" - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - added
Input schema / properties / translation_language / descriptionAdded value: +"Optional language code to translate reviews to" - removed
Input schema / properties / translation_language / titleRemoved value: -"Translation Language" - removed
Input schema / titleRemoved value: -"get_reviewsArguments" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"get_reviewsOutput" - added
Output schema / x-fastmcp-wrap-resultAdded value: +true
- Added
get_subscription - Added
get_subscription_offer - Changed
get_subscription_status9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - added
Input schema / properties / purchase_token / descriptionAdded value: +"The purchase token from the client app" - removed
Input schema / properties / purchase_token / titleRemoved value: -"Purchase Token" - added
Input schema / properties / subscription_id / descriptionAdded value: +"Subscription product ID" - removed
Input schema / properties / subscription_id / titleRemoved value: -"Subscription Id" - removed
Input schema / titleRemoved value: -"get_subscription_statusArguments" - removed
Output schema / titleRemoved value: -"get_subscription_statusDictOutput"
- Added
get_system_apk_variant - Changed
get_testers7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - added
Input schema / properties / track / descriptionAdded value: +"Track name (internal, alpha, beta)" - removed
Input schema / properties / track / titleRemoved value: -"Track" - removed
Input schema / titleRemoved value: -"get_testersArguments" - removed
Output schema / titleRemoved value: -"get_testersDictOutput"
- Removed
get_vitals_metrics - Removed
get_vitals_overview - Changed
halt_release9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - added
Input schema / properties / track / descriptionAdded value: +"Track containing the release (internal, alpha, beta, production)" - removed
Input schema / properties / track / titleRemoved value: -"Track" - added
Input schema / properties / version_code / descriptionAdded value: +"Version code of the release to halt" - removed
Input schema / properties / version_code / titleRemoved value: -"Version Code" - removed
Input schema / titleRemoved value: -"halt_releaseArguments" - removed
Output schema / titleRemoved value: -"halt_releaseDictOutput"
- Changed
list_all_listings7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - removed
Input schema / titleRemoved value: -"list_all_listingsArguments" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"list_all_listingsOutput" - added
Output schema / x-fastmcp-wrap-resultAdded value: +true
- Added
list_apks - Added
list_app_recoveries - Added
list_bundles - Added
list_device_tier_configs - Added
list_generated_apks - Added
list_images - Changed
list_in_app_products7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - removed
Input schema / titleRemoved value: -"list_in_app_productsArguments" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"list_in_app_productsOutput" - added
Output schema / x-fastmcp-wrap-resultAdded value: +true
- Added
list_one_time_products - Added
list_purchase_option_offers - Added
list_subscription_offers - Changed
list_subscriptions7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - removed
Input schema / titleRemoved value: -"list_subscriptionsArguments" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"list_subscriptionsOutput" - added
Output schema / x-fastmcp-wrap-resultAdded value: +true
- Added
list_system_apk_variants - Added
list_users - Changed
list_voided_purchases9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / max_results / descriptionAdded value: +"Maximum number of results (default: 100)" - removed
Input schema / properties / max_results / titleRemoved value: -"Max Results" - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - removed
Input schema / titleRemoved value: -"list_voided_purchasesArguments" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"list_voided_purchasesOutput" - added
Output schema / x-fastmcp-wrap-resultAdded value: +true
- Added
migrate_base_plan_prices - Added
patch_in_app_product - Added
patch_one_time_product - Added
patch_subscription - Added
patch_subscription_offer - Changed
promote_release13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / from_track / descriptionAdded value: +"Source track (internal, alpha, beta)" - removed
Input schema / properties / from_track / titleRemoved value: -"From Track" - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - added
Input schema / properties / rollout_percentage / descriptionAdded value: +"Rollout percentage for target track (0-100)" - removed
Input schema / properties / rollout_percentage / titleRemoved value: -"Rollout Percentage" - added
Input schema / properties / to_track / descriptionAdded value: +"Destination track (alpha, beta, production)" - removed
Input schema / properties / to_track / titleRemoved value: -"To Track" - added
Input schema / properties / version_code / descriptionAdded value: +"Version code to promote" - removed
Input schema / properties / version_code / titleRemoved value: -"Version Code" - removed
Input schema / titleRemoved value: -"promote_releaseArguments" - removed
Output schema / titleRemoved value: -"promote_releaseDictOutput"
- Added
refund_external_transaction - Added
refund_order - Changed
reply_to_review9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - added
Input schema / properties / reply_text / descriptionAdded value: +"Text of the reply (will be visible to the reviewer)" - removed
Input schema / properties / reply_text / titleRemoved value: -"Reply Text" - added
Input schema / properties / review_id / descriptionAdded value: +"ID of the review to reply to (from get_reviews)" - removed
Input schema / properties / review_id / titleRemoved value: -"Review Id" - removed
Input schema / titleRemoved value: -"reply_to_reviewArguments" - removed
Output schema / titleRemoved value: -"reply_to_reviewDictOutput"
- Added
revoke_subscription_purchase - Added
set_data_safety - Added
update_grant - Added
update_in_app_product - Changed
update_listing15 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / full_description / descriptionAdded value: +"Full description (max 4000 characters, optional)" - removed
Input schema / properties / full_description / titleRemoved value: -"Full Description" - added
Input schema / properties / language / descriptionAdded value: +"Language code (e.g., en-US, es-ES, fr-FR)" - removed
Input schema / properties / language / titleRemoved value: -"Language" - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - added
Input schema / properties / short_description / descriptionAdded value: +"Short description (max 80 characters, optional)" - removed
Input schema / properties / short_description / titleRemoved value: -"Short Description" - added
Input schema / properties / title / descriptionAdded value: +"App title (max 50 characters, optional)" - removed
Input schema / properties / title / titleRemoved value: -"Title" - added
Input schema / properties / video / descriptionAdded value: +"YouTube video URL (optional)" - removed
Input schema / properties / video / titleRemoved value: -"Video" - removed
Input schema / titleRemoved value: -"update_listingArguments" - removed
Output schema / titleRemoved value: -"update_listingDictOutput"
- Changed
update_rollout11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - added
Input schema / properties / rollout_percentage / descriptionAdded value: +"New rollout percentage (0-100)" - removed
Input schema / properties / rollout_percentage / titleRemoved value: -"Rollout Percentage" - added
Input schema / properties / track / descriptionAdded value: +"Track containing the release" - removed
Input schema / properties / track / titleRemoved value: -"Track" - added
Input schema / properties / version_code / descriptionAdded value: +"Version code of the staged release" - removed
Input schema / properties / version_code / titleRemoved value: -"Version Code" - removed
Input schema / titleRemoved value: -"update_rolloutArguments" - removed
Output schema / titleRemoved value: -"update_rolloutDictOutput"
- Changed
update_testers9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / google_groups / descriptionAdded value: +"List of Google Group email addresses" - removed
Input schema / properties / google_groups / titleRemoved value: -"Google Groups" - added
Input schema / properties / package_name / descriptionAdded value: +"App package name" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - added
Input schema / properties / track / descriptionAdded value: +"Track name (internal, alpha, beta)" - removed
Input schema / properties / track / titleRemoved value: -"Track" - removed
Input schema / titleRemoved value: -"update_testersArguments" - removed
Output schema / titleRemoved value: -"update_testersDictOutput"
- Added
update_user - Added
upload_apk - Added
upload_bundle - Added
upload_deobfuscation_file - Added
upload_expansion_file - Added
upload_image - Added
upload_internal_app_sharing_apk - Added
upload_internal_app_sharing_bundle - Changed
validate_listing_text9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / full_description / descriptionAdded value: +"Full description (max 4000 characters)" - removed
Input schema / properties / full_description / titleRemoved value: -"Full Description" - added
Input schema / properties / short_description / descriptionAdded value: +"Short description (max 80 characters)" - removed
Input schema / properties / short_description / titleRemoved value: -"Short Description" - added
Input schema / properties / title / descriptionAdded value: +"App title (max 50 characters)" - removed
Input schema / properties / title / titleRemoved value: -"Title" - removed
Input schema / titleRemoved value: -"validate_listing_textArguments" - removed
Output schema / titleRemoved value: -"validate_listing_textDictOutput"
- Changed
validate_package_name5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / package_name / descriptionAdded value: +"Package name to validate (e.g., com.example.myapp)" - removed
Input schema / properties / package_name / titleRemoved value: -"Package Name" - removed
Input schema / titleRemoved value: -"validate_package_nameArguments" - removed
Output schema / titleRemoved value: -"validate_package_nameDictOutput"
- Changed
validate_track5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / track / descriptionAdded value: +"Track name to validate (internal, alpha, beta, production)" - removed
Input schema / properties / track / titleRemoved value: -"Track" - removed
Input schema / titleRemoved value: -"validate_trackArguments" - removed
Output schema / titleRemoved value: -"validate_trackDictOutput"
27 tool updates
v0.2.0- First observed
batch_deploy - First observed
deploy_app - First observed
deploy_app_multilang - First observed
get_app_details - First observed
get_expansion_file - First observed
get_in_app_product - First observed
get_listing - First observed
get_order - First observed
get_releases - First observed
get_reviews - First observed
get_subscription_status - First observed
get_testers - First observed
get_vitals_metrics - First observed
get_vitals_overview - First observed
halt_release - First observed
list_all_listings - First observed
list_in_app_products - First observed
list_subscriptions - First observed
list_voided_purchases - First observed
promote_release - First observed
reply_to_review - First observed
update_listing - First observed
update_rollout - First observed
update_testers - First observed
validate_listing_text - First observed
validate_package_name - First observed
validate_track
TDQS
Scored across 3 tools
Each tool occupies a clearly separate stage of the workflow: search discovers tools, get_schema inspects parameters, and execute runs the actual call. There is no overlap or ambiguity between them.
Tool names are all lowercase and verb-focused, with get_schema following verb_noun while search and execute are bare verbs. The pattern is mostly predictable but not perfectly uniform.
Three tools is minimal but exactly matches the intended meta-workflow of discover, inspect, and execute. Each tool clearly earns its place, though the set is on the smaller end.
The workflow covers the full lifecycle from discovery to execution, enabling an agent to find and call tools effectively. A dedicated list-all-tools capability is missing, but search compensates for that gap.
Maintenance
Related MCP Connectors
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
The Google Compute Engine MCP server is a fully-managed Model Context Protocol server that provides tools to manage Google Compute Engine resources through AI agents. It enables capabilities including instance management (creating, starting, stopping, resetting, listing), disk management, handling instance templates and group managers, viewing machine and accelerator types, managing images, and accessing reservation and commitment information. The server operates as a zero-deployment, enterprise-grade endpoint at https://compute.googleapis.com/mcp with built-in IAM-based security.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides AI agents with tools to build, deploy, and manage Flutter applications, including APK/AAB generation, keystore management, and CI/CD integration.91MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for managing Google Play app deployment and in-app products via the Android Publisher API v3.164MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that connects AI assistants to the Google Play Developer API for automated app publishing, subscription management, review monitoring, and tester management.MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that exposes Google Play Console analytics to AI agents, including store-listing acquisitions by traffic source, installs, uninstalls, ratings, crashes, subscriptions, and reviews by reading bulk CSV reports from Cloud Storage.MIT