google-play-vitals-mcp
Enables analysis of Android app performance and stability data from Google Play, including crash and ANR tracking, release comparisons, anomaly detection, and metric trends.
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., "@google-play-vitals-mcpGet top ANR summary for the latest production version"
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.
Google Play Vitals MCP Server
Google Play Vitals MCP is a high-performance, token-efficient Model Context Protocol (MCP) server for the Google Play Developer Reporting API (Android Vitals).
Designed specifically for AI coding assistants and autonomous agents (Cursor, Claude Desktop, Claude Code, Codex, Windsurf, and Cline), it empowers AI to analyze Android production stability, diagnose ANRs (Application Not Responding), track crash trends, and verify startup optimizations (such as AndroidX Baseline Profiles) with minimal context token consumption.
🌟 Key Highlights
Token Economy by Design (Token Saver): Upstream Google Developer Reporting APIs return deeply nested, verbose Protobuf responses. Our built-in compression engine strips 80%+ redundant metadata and automatically reassembles raw frame data into clean, single-line standard Java stack traces (
at com.example.Foo.bar(Foo.java:42)).One-Shot Comprehensive Diagnosis (
play_get_top_anr_summary): Eliminates the frustration of multi-turn tool roundtrips. A single tool call aggregates Top ANR clusters, affected user counts, occurrence numbers, and their representative de-obfuscated main thread stack traces.Version Comparative Analysis (
play_compare_versions): Specifically designed for quantifying release optimizations. Compare before-and-after versions (e.g., verifying ANR governance or Baseline Profile cold-start acceleration) with automated delta calculation and percentage improvement reporting.Universal & Production Decoupled: Zero proprietary hardcoding. Supports any Android package, dynamic runtime parameters, environment variables, Service Account JSON files, JSON strings, or Google Application Default Credentials (ADC).
Zero-Latency In-Memory Hot Cache: Built-in 5-minute LRU cache prevents accidental quota exhaustion during multi-step AI reasoning.
Broad Agent Compatibility: Works out of the box with Cursor, Claude Desktop, Claude Code, Windsurf, Codex, and standard MCP JSON-RPC 2.0 stdio clients.
Related MCP server: MCP Google Play Store Server
🛠️ MCP Tools Overview
1. Atomic Core Tools (Recommended for Autonomous Agents)
Tool Name | Type | Description |
| Release Discovery | Fetches active release tracks ( |
| Issue Search | Searches error clusters ( |
| Deep Drilldown | Fetches multi-device environmental samples and cleaned, de-obfuscated stack traces for an issue ID or resource name. |
| Anomaly Monitor | Retrieves sudden metric spikes and regression alerts detected by Google Play algorithms. |
| App Discovery | Lists all Google Play applications accessible by the configured service account. |
2. Analytics & Convenience Tools
Tool Name | Type | Description |
| Metrics | Queries historical daily trends and overall averages for |
| Analytics | Compares metrics between two app versions (e.g. baseline |
| Quick Triage | One-shot aggregator for top ANR clusters and sample main-thread stack traces. |
| Diagnostics | Self-tests Python dependencies, GCP Service Account key presence, and environment readiness. |
| Legacy Alias | Backward-compatible alias for |
📝 MCP Prompts & Resources
Capability | Name / URI | Purpose |
Prompt |
| Interactive prompt guiding AI to perform root-cause triage and generate architectural fixes. |
Prompt |
| Automated audit prompt comparing release versions to quantify cold-start acceleration and ANR reductions. |
Prompt |
| Executive prompt generating a weekly Android stability markdown dashboard. |
Resource |
| Read-only JSON resource reporting connection health, credentials presence, and active configuration. |
🚀 Quick Start
1. Installation
Option A: Install via pip or uv
pip install google-play-vitals-mcp
# or
uv pip install google-play-vitals-mcpOption B: One-click Install via Smithery (Cursor / Windsurf / Claude)
npx -y @smithery/cli install google-play-vitals-mcp --client cursorOption C: Docker Container
docker run -i --rm -v ~/.config/gcp:/gcp -e GOOGLE_APPLICATION_CREDENTIALS=/gcp/key.json google-play-vitals-mcp2. Authentication & Credentials
Google Play Developer Reporting API requires enterprise authentication via a Google Cloud Service Account authorized with "View app quality data" read-only permission:
Option A: Google Cloud Service Account JSON Key (Standard)
Ask your Google Play Console administrator (Account Owner) for a Service Account JSON key with "View app quality data" read-only permission.
Set the environment variable:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/play_service_account.json"
Option B: CI/CD Plaintext JSON
export GOOGLE_PLAY_CREDENTIALS_JSON='{"type": "service_account", "project_id": "..."}'🤖 AI Client Integration Guides
1. Cursor
Add to your project's .cursor/mcp.json or global Cursor settings:
{
"mcpServers": {
"google-play-vitals": {
"command": "google-play-vitals-mcp",
"args": [],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "/path/to/play_service_account.json",
"GOOGLE_PLAY_PACKAGE_NAME": "com.yourcompany.app"
}
}
}
}Note: You can also run with python -m google_play_vitals_mcp if installed in a specific virtual environment.
2. Claude Desktop
Add to your claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"google-play-vitals": {
"command": "google-play-vitals-mcp",
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "/path/to/play_service_account.json",
"GOOGLE_PLAY_PACKAGE_NAME": "com.yourcompany.app"
}
}
}
}3. Claude Code CLI
Add the MCP server directly via CLI:
claude mcp add google-play-vitals -- \
google-play-vitals-mcp \
--package-name com.yourcompany.app \
--credentials /path/to/play_service_account.json4. Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"google-play-vitals": {
"command": "google-play-vitals-mcp",
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "/path/to/play_service_account.json",
"GOOGLE_PLAY_PACKAGE_NAME": "com.yourcompany.app"
}
}
}
}💡 Prompt Examples
Once configured, simply talk to your AI assistant:
"Find the top 10 Crashes and ANRs for our latest production release, along with de-obfuscated stack traces."
"Check Google Play Vitals connection status."
"Analyze the top ANR clusters in production right now and show me the problematic stack traces."
"Show me the daily ANR rate and slow startup rate for the last 14 days."
"Compare version 204000 against version 203000 to verify if our Baseline Profile and ANR fixes improved cold startup and reduced ANRs."
"Inspect issue apps/com.example/errorIssues/123456 and retrieve the raw device reports."
💻 CLI Commands
The package includes a built-in CLI:
# Check configuration and credentials readiness
google-play-vitals-mcp check -p com.example.app -c /path/to/key.json
# Launch MCP stdio server manually
google-play-vitals-mcp run -p com.example.app
# Check version
google-play-vitals-mcp --version🔧 Environment Variables
Variable | Description |
| Path to Google Cloud Service Account JSON key file. |
| Raw JSON string of Service Account credentials (useful for CI/CD or Cloud runtimes). |
| Default Android application package name (e.g. |
| Cache duration in seconds (default: |
🧪 Development & Testing
# Clone repository
git clone https://github.com/OldJii/google-play-vitals-mcp.git
cd google-play-vitals-mcp
# Install in editable mode with dev dependencies
pip install -e ".[dev]"
# Run unit tests
pytest -v
# Run linting
ruff check .
ruff format --check .📄 License
This project is licensed under the MIT License.
Available Tools
10 toolsplay_check_statusC
Verify Google Play API dependencies, GCP Service Account credentials, and environment readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | No | Optional target Android package name to verify. | |
| credentials_path | No | Optional path to GCP service account JSON key file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Verify' implies a non-destructive check, but the description doesn't explicitly state that no modifications occur, nor does it describe what the tool returns (e.g., success/failure indicators, diagnostics). The lack of any side-effect or result details is a gap.
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 a single sentence with no filler. It front-loads the action verb ('Verify') and lists the three items being checked. Efficient and well-structured.
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?
Given the lack of an output schema and annotations, the description should convey expected return values and operational details. It doesn't specify what 'environment readiness' means or what the tool outputs upon success/failure. For a status-check tool, this is incomplete—the agent doesn't know how to interpret the result.
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 description coverage is 100% — both parameters (package_name and credentials_path) have descriptive text. The description adds no additional meaning beyond the schema, which is the baseline for high coverage. Since parameters are optional and clearly explained, a 3 is appropriate.
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 states a clear action ('Verify') and specific resources (Google Play API dependencies, GCP Service Account credentials, environment readiness). This differentiates it from sibling tools that retrieve data or list items; it's a status check. Not a tautology, though it could be more explicit about what 'verify' entails.
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?
No guidance on when to use this tool versus the siblings. It doesn't mention that it's a preliminary check before other operations, nor does it list any exclusions or alternatives. The usage context is entirely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_compare_versionsA
[Version Comparison] Compare metrics between two app versions (e.g., before and after Baseline Profile / ANR fixes). Automatically calculates delta and percentage improvement.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Days range to aggregate (default: 7). | |
| metric_type | No | Metric to compare (default: 'ANR'). | |
| package_name | No | Android package name. Optional if environment variable is set. | |
| target_version | Yes | Target/newer version code (e.g. 201). | |
| baseline_version | Yes | Baseline/older version code (e.g. 200). | |
| credentials_path | No | Optional path to GCP credentials JSON. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it 'Automatically calculates delta and percentage improvement', which is useful behavioral context beyond the schema. However, with no annotations provided, the description carries the full burden for behavioral disclosure. It doesn't mention whether this is a read-only operation, whether it requires special permissions, or what happens if versions are invalid. The delta/percentage calculation is a positive addition, but more behavioral context would be expected for a tool with zero annotations.
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 compact and front-loaded with the '[Version Comparison]' category tag, followed by a clear one-sentence purpose and a useful note about automatic delta calculation. It earns its place without being verbose. Minor improvement would be adding explicit usage guidance, but the current structure is efficient.
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 comparison tool with 6 parameters and no output schema, the description covers the core purpose and the automatic calculation behavior. However, it doesn't describe the output format (what the delta/percentage looks like), which is important since there's no output schema. It also doesn't mention edge cases like missing data for a version. The description is adequate but leaves some gaps for an agent to discover at runtime.
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 description coverage is 100%, so the schema already documents all 6 parameters. The description adds context about the two key parameters (baseline_version and target_version) by framing them as 'before and after' versions, which helps an agent understand their relationship. However, it doesn't add detail about metric_type options or days aggregation beyond what the schema already provides. Baseline 3 is appropriate given full schema coverage.
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's purpose: comparing metrics between two app versions, with a concrete example (Baseline Profile / ANR fixes). It uses a specific verb ('Compare') and resource ('metrics between two app versions'), and the '[Version Comparison]' prefix helps distinguish it from sibling tools like play_get_metric_trends or play_get_top_anr_summary.
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 gives a clear context for when to use this tool (comparing before/after a change like Baseline Profile or ANR fixes) and implies it's for version-to-version comparison. It doesn't explicitly state when NOT to use it or name alternative tools, but the context is strong enough for an agent to select it appropriately among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_get_error_reportsB
[Atomic Error Reports & Stack Traces] Fetch detailed multi-device sample reports and cleaned de-obfuscated stack traces for a given error issue ID or resource name.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | Error issue ID (e.g. 'd6f045ccd040889d') or full resource name ('apps/.../errorIssues/...'). | |
| page_size | No | Number of sample reports to retrieve (default: 3). | |
| page_token | No | Optional pagination token from previous call. | |
| package_name | No | Android package name. Optional if environment variable is set. | |
| credentials_path | No | Optional path to GCP credentials JSON. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. 'Fetch' clearly implies a read-only operation, and 'cleaned de-obfuscated stack traces' conveys a transformation behavior beyond the schema. Still, it does not disclose authentication expectations, pagination behavior, error handling, or whether the operation has any side effects, leaving some transparency 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 core sentence is compact and front-loaded, immediately stating the resource and purpose. The bracketed '[Atomic Error Reports & Stack Traces]' prefix is somewhat redundant jargon but does not bloat the description. Overall, it is appropriately sized with no wasted sentences.
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 tool with five parameters, no annotations, and no output schema, the description covers the main purpose and return content but leaves some context implicit. It does not explain when to prefer this over play_get_raw_error_reports, nor does it describe pagination or the meaning of 'sample reports' beyond the schema. It is adequate but not fully complete.
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 description coverage is 100%, so the baseline is 3. The description adds only minimal semantic value beyond the schema by restating that issue_id can be an ID or resource name; it does not enrich the meaning of page_size, page_token, package_name, or credentials_path.
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 uses a specific verb ('Fetch') and names concrete resources ('detailed multi-device sample reports and cleaned de-obfuscated stack traces'). It also scopes the operation to 'a given error issue ID or resource name,' which clearly differentiates it from search-oriented siblings like play_search_error_issues and from play_get_raw_error_reports via the 'cleaned de-obfuscated' qualifier.
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 implies when to use the tool: when you already have an error issue ID or resource name and want detailed reports/traces. However, it does not explicitly state when not to use it or mention alternatives such as play_get_raw_error_reports for raw traces or play_search_error_issues for discovery, so the usage guidance remains implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_get_metric_trendsB
[Token-efficient Metrics] Query trends and daily averages for ANR rate, slow cold start rate (Baseline Profile verification), or Crash rate. Redundant Protobuf metadata is stripped.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of past days to query (default: 7). | |
| metric_type | Yes | Metric category: 'ANR' (Application Not Responding), 'STARTUP' (Slow cold start rate for Baseline Profile evaluation), or 'CRASH' (Fatal crash rate). | |
| package_name | No | Android package name. Optional if environment variable is set. | |
| version_code | No | Optional specific Android versionCode filter (e.g. 100200). | |
| credentials_path | No | Optional path to GCP credentials JSON. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does add useful behavioral context by noting that 'Redundant Protobuf metadata is stripped' and implies read-only behavior through 'Query.' However, it does not mention authentication needs, data granularity limits, error behavior, or what exactly the returned trend/daily-average structure looks like.
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 short and front-loaded: it immediately states what the tool does, then adds a meaningful output-efficiency note. No filler or redundant restatement of the tool name appears.
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?
With no annotations and no output schema, the description should explain more about the returned data. 'Trends and daily averages' gives a high-level idea, but an agent still cannot know the response shape, units, date range behavior beyond the days parameter, or whether results are aggregated per version code. The callable parameters are documented, but the overall context is incomplete.
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 description coverage is 100%, so the baseline is 3. The description adds little beyond the schema: it names the metric categories, but the schema already provides equivalent detail for each enum value and parameter.
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 operation ('Query trends and daily averages') and the specific resource types: ANR rate, slow cold start rate, and crash rate. This distinguishes it from generic reporting tools, though it does not explicitly differentiate it from nearby siblings like play_get_top_anr_summary.
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 such as play_get_top_anr_summary or play_list_anomalies. The 'Token-efficient Metrics' tag hints at a possible use case but does not state conditions, exclusions, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_get_raw_error_reportsA
[Deep-dive Drilldown] Fetch multi-device environmental samples and full stack traces for a specific error issue ID.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | Number of sample reports to retrieve (default: 3). | |
| issue_name | Yes | Full issue resource name (e.g., 'apps/.../errorIssues/...'). | |
| credentials_path | No | Optional path to GCP credentials JSON. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not state whether the operation is read-only, whether pagination is involved (despite the page_size parameter), or what happens when the issue ID is invalid. The mention of 'multi-device environmental samples and full stack traces' gives some expectation of the data scope, but it omits critical behaviors like potential large payloads or the need for authentication. This is a significant gap for a data-fetching tool.
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 a single sentence with a clear, front-loaded bracket tag. It conveys the tool's purpose and scope in under 20 words, with no filler. The structure is efficient and immediately actionable for an agent, and every word 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?
Given that there is no output schema, the description should explain what the tool returns and how the caller can use the response. It mentions 'environmental samples and full stack traces' but doesn't describe the response structure, pagination behavior, or error handling. The tool has three parameters (one required) and a specialized drill-down purpose, so the description gives the gist but leaves out details an agent might need to correctly parse the output. It's adequate but not complete.
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 schema description coverage is 100%, so all three parameters are already documented. The tool description adds minimal value: it reiterates that 'issue_name' identifies the error and implies 'page_size' controls sample count, but it doesn't explain the exact format of 'issue_name' beyond the schema's example or clarify the default behavior of 'page_size'. Since the schema already covers parameter meaning, the description doesn't need to repeat it, but it also doesn't enrich the semantics beyond what's structured.
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 verb ('Fetch') and resource ('multi-device environmental samples and full stack traces for a specific error issue ID'). The 'Deep-dive Drilldown' prefix and the specificity of 'raw' set it apart from siblings like play_get_error_reports, which presumably returns aggregated data. An agent can immediately understand what this tool does and when it would be useful.
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 gives an implied usage context ('Deep-dive Drilldown') but does not explicitly state when to use this tool over alternatives like play_get_error_reports or play_search_error_issues. It doesn't provide exclusion criteria or mention that raw stack traces are only needed for deep investigation. The guidance is implicit rather than explicit, so it falls short of a clear routing instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_get_release_tracksA
[Release Discovery] Fetch Google Play release tracks (PRODUCTION, BETA, ALPHA, INTERNAL) and active serving releases with their release names and versionCodes. Essential for automatically discovering the latest production version.
| Name | Required | Description | Default |
|---|---|---|---|
| package_name | No | Android package name (e.g. com.example.app). Optional if GOOGLE_PLAY_PACKAGE_NAME is set. | |
| credentials_path | No | Optional path to GCP credentials JSON. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It correctly implies a read-only fetch and enumerates the data returned (tracks, serving releases, versionCodes). However, it does not mention auth requirements, credentials behavior, or error/failure cases.
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 concise and well-structured: a category tag, a clear verb-first sentence, and a short use-case sentence. No redundant information is included.
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 simple read-only tool with two optional parameters and no output schema, the description adequately explains what the tool returns and why it should be used. It lacks details on edge cases like missing package_name or response shape, but these are not critical for this straightforward operation.
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 description coverage is 100%, so the baseline is 3. The description does not add meaning beyond the schema; it only reinforces the purpose rather than clarifying parameter formats or behaviors.
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 uses a specific verb ('Fetch') and identifies the resource (Google Play release tracks, active serving releases, release names, versionCodes). This clearly distinguishes it from sibling tools focused on status, errors, and anomalies, though it does not explicitly name a sibling.
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 provides a concrete use case: 'Essential for automatically discovering the latest production version.' It does not mention alternatives or exclusions, but the context is clear enough for an agent to select it when release information is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_get_top_anr_summaryA
[One-shot Diagnosis] Retrieve top ANR error clusters along with affected user counts, occurrence rates, and representative cleaned main-thread stack traces. Eliminates back-and-forth round trips.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of top ANR clusters to retrieve (default: 5). | |
| package_name | No | Android package name (e.g., com.example.app). Optional if GOOGLE_PLAY_PACKAGE_NAME is set. | |
| credentials_path | No | Optional path to GCP credentials JSON. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load for behavioral transparency. It accurately conveys a non-mutating read operation ('Retrieve') and adds that stack traces are 'cleaned' and 'representative', but it does not disclose any limitations, permission expectations, or edge cases. This is adequate but leaves 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 extremely brief and front-loaded with the 'One-Shot Diagnosis' label followed by the core action and return items. Every sentence contributes meaning; no fluff. It is an efficient two-part sentence that fully conveys purpose without redundancy.
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?
Given there is no output schema, the description appropriately lists the key return contents (affected user counts, occurrence rates, representative stack traces). It does not mention failure modes, pagination, or prerequisites, but for a tool with only optional parameters and a single summary action, this coverage is fairly complete.
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 description coverage is 100%, so the baseline is 3 per the calibration. The description does not add meaning to any parameter (it doesn't mention 'limit' or 'package_name' or 'credentials_path'), and it does not compensate beyond the 'top' summary concept. No benefit over the schema is provided.
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 starts with a specific verb ('Retrieve') and a distinct resource ('top ANR error clusters'), and names concrete outputs (affected user counts, occurrence rates, representative cleaned main-thread stack traces). This clearly differentiates it from siblings like play_get_error_reports or play_search_error_issues, which do not promise a summarized 'top clusters' view.
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 'One-Shot Diagnosis' label and 'Eliminates back-and-forth round trips' provide implied usage direction (when you want a quick, consolidated diagnosis). However, there are no explicit when-to-use versus alternatives, no exclusions, and no advice about when to prefer play_get_error_reports or play_search_error_issues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_list_accessible_appsB
[Account Apps Discovery] List all Google Play applications accessible by the configured GCP Service Account.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | Number of apps to retrieve (default: 20). | |
| page_token | No | Optional pagination token from previous call. | |
| credentials_path | No | Optional path to GCP credentials JSON. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool lists apps accessible by the service account, which implies a read-only operation, but it does not mention pagination behavior, authentication requirements, or what happens if credentials are missing. The description adds minimal behavioral context beyond the operation itself.
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 a single, front-loaded sentence with a useful category prefix. It is concise and contains no filler, though it could have added a brief note about pagination without becoming verbose.
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 simple list tool with fully documented parameters, the description is mostly complete. However, with no annotations and no output schema, it would benefit from stating that results are paginated and that the tool is read-only. The absence of any behavioral or return-value context leaves a small but real gap.
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 description coverage is 100%, so the schema already documents all three parameters. The description does not add extra meaning about how page_size, page_token, or credentials_path interact, but the baseline of 3 is appropriate because the schema covers the parameters fully.
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 states a specific verb ('List') and resource ('Google Play applications accessible by the configured GCP Service Account'), and the '[Account Apps Discovery]' prefix adds context. It is clear enough to distinguish from siblings like play_get_release_tracks or play_list_anomalies, though it does not explicitly name a sibling alternative.
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 implies a discovery/listing use case and the '[Account Apps Discovery]' prefix signals when to use it, but it does not explicitly state when not to use it or name alternative tools. The context is adequate but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_list_anomaliesA
[Anomaly Detection] List production metric anomalies and sudden regression spikes detected by Google Play algorithms for the application.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | Number of anomalies to retrieve (default: 10). | |
| page_token | No | Optional pagination token from previous call. | |
| package_name | No | Android package name. Optional if environment variable is set. | |
| credentials_path | No | Optional path to GCP credentials JSON. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description must carry all behavioral details, but it only states the list intent. It fails to disclose response format, authentication prerequisites, rate limits, or whether it is read-only, leaving the agent in the dark about operating effects.
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?
A concise single sentence that fronts the primary verb and outcome, with the '[Anomaly Detection]' label providing scope without bloat. There is no redundancy, and every word contributes.
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?
Given there is no output schema and no annotations, the description is thin on what the agent will actually receive: response shape, time, and how pagination threads through. The schema covers parameters; a few words about return structure (or reference to page_token behavior) would help close the gap.
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 covers all 4 parameters with descriptions (100% coverage), so the tool description does not need to repeat them. It adds no parameter-level meaning, but the schema handles that burden, earning the baseline score of 3.
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 uses a specific verb 'list' and identifies a precise resource: production metric anomalies and sudden regression spikes. The mention of Google Play algorithms and the '[Anomaly Detection]' label clearly differentiates this from siblings like play_get_metric_trends or play_get_error_reports.
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 implies usage for retrieving Play-detected anomalies but offers no explicit when-to-use guidance or alternatives. It does not tell the agent when to choose this over analyzers like play_get_metric_trends, nor does it mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_search_error_issuesB
[Atomic Issue Cluster Search] Search Google Play error clusters (CRASH, ANR, or NON_FATAL) with full AIP-160 filter support. Filter by specific versionCode, user-perceived state, or process state (FOREGROUND/BACKGROUND). Sorted by user impact and occurrences.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | Number of top error clusters to retrieve (default: 10, max: 50). | |
| error_type | Yes | Error cluster type to retrieve. | |
| page_token | No | Optional pagination token from previous call. | |
| package_name | No | Android package name. Optional if environment variable is set. | |
| version_code | No | Optional specific Android versionCode filter (e.g. 100200). | |
| custom_filter | No | Optional raw AIP-160 filter expression (e.g. 'deviceModel = "google/walleye"'). | |
| credentials_path | No | Optional path to GCP credentials JSON. | |
| app_process_state | No | Optional filter for app process state. | |
| is_user_perceived | No | Optional filter to match only user-perceived error issues. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It states sorting behavior and filter options but does not mention authentication requirements, rate limits, read-only nature, or pagination semantics beyond the schema. The absence of these operational details leaves significant gaps for a tool with 9 parameters.
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 sentences with zero waste. The core action is front-loaded ('Search Google Play error clusters'), and key filters are summarized succinctly. 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 complex tool with 9 parameters including pagination and enums, the description covers the main purpose and key filters but omits details like pagination usage, authentication, and return format. Since there is no output schema, the description should hint at response structure; it only mentions sorting. The gaps are moderate given the tool's complexity.
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 baseline is 3. The description adds value by grouping filters (versionCode, user-perceived state, process state) and highlighting AIP-160 filter support, which maps to custom_filter. This complements the schema without redundancy, enhancing the agent's understanding of parameter relationships.
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 Google Play error clusters and enumerates the error types (CRASH, ANR, NON_FATAL). It mentions filtering and sorting, giving a specific verb-resource pair. However, it does not explicitly name sibling alternatives like play_get_error_reports or play_get_top_anr_summary, so differentiation is implicit via the term 'error clusters'.
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 implies usage for searching error clusters with advanced AIP-160 filters, but it does not explicitly say when to choose this tool over siblings. It mentions 'full AIP-160 filter support' suggesting power users, but lacks exclusions or direct comparisons to other Play Console tools.
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.
10 tool updates
v1.3.1- First observed
play_check_status - First observed
play_compare_versions - First observed
play_get_error_reports - First observed
play_get_metric_trends - First observed
play_get_raw_error_reports - First observed
play_get_release_tracks - First observed
play_get_top_anr_summary - First observed
play_list_accessible_apps - First observed
play_list_anomalies - First observed
play_search_error_issues
TDQS
Scored across 10 tools
Tools are largely distinct, each targeting a specific aspect of Google Play Vitals (status, releases, errors, anomalies, metrics, versions). The only potential confusion is between play_get_error_reports and play_get_raw_error_reports, but the descriptions clarify different levels of detail (cleaned vs. raw).
All tools follow a consistent 'play_' prefix with snake_case verb_noun patterns (e.g., list_anomalies, compare_versions, get_metric_trends). There are no mixed conventions or ambiguous verbs, making the naming highly predictable.
With 10 tools, the server is well-scoped for its purpose. Each tool adds value—covering discovery, error analysis, metrics, and anomaly detection—without redundancy or overwhelming bloat. The count fits comfortably within the ideal 3-15 range.
The tool set covers the main workflows for monitoring Google Play Vitals: release tracking, error cluster search, detailed reports, ANR summaries, metric trends, and version comparisons. Minor gaps exist (e.g., no dedicated tool for fetching specific version metrics), but agents can work around them using existing tools.
Maintenance
Related MCP Connectors
SEO & marketing toolkit for AI agents: GA4, Search Console, AdSense, GTM, PageSpeed, Trends.
Live App Store & Google Play data for AI agents: app discovery, ASO keywords, reviews.
Real SEO data for AI assistants: page audits, Keyword Planner volumes, Search Console history.
- mcpOAuthcom.vibgrate
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables natural language analysis of Perfetto traces to diagnose Android app performance issues like ANRs, jank, CPU hotspots, memory leaks, and lock contention without writing SQL queries.218Apache 2.0
- AlicenseNot gradedqualityDmaintenanceIntegrates Google Play Store management tools with AI assistants to handle app listings, releases, and user reviews. It enables users to manage Play Console tasks like updating store information and retrieving performance statistics through natural language.26 npm10MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to automate Android release workflows via the Google Play Android Publisher API, including deploying builds, managing listings, and replying to reviews.13MIT
- AlicenseAqualityAmaintenanceEnables AI agents to manage Google Play Console reviews and Android app releases, including replying to reviews, promoting releases, managing staged rollouts, and checking crash/ANR vitals.4411 npm1MIT