Release Health MCP Server
Reads app release health and rollout data from the Google Play Developer Reporting API and Google Play Developer API, including user-perceived crash/ANR rates, top crash/ANR issues, new issues, track releases, and staged rollout state. Supports assessing whether a release is healthy enough to expand, hold, or halt.
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., "@Release Health MCP Server Is the current production rollout healthy enough to expand?"
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.
Release Health MCP Server
An MCP server that lets any AI agent (Claude Code, Claude Desktop, Gemini CLI, …) answer one question:
Is this release healthy enough to expand the rollout?
It reads crash rate, ANR rate and top crashes per version from the Google Play Developer Reporting API and the staged-rollout state from the Play Developer API. It then recommends expand, hold or halt against your own thresholds.
The current version is read-only: it never changes a rollout. Approval-gated rollout changes are planned for milestone 3 (see docs/ROADMAP.md).
flowchart LR
A[AI agent<br/>Claude Code / Gemini CLI] -- MCP stdio --> S[release-health-mcp]
S -- read-only service account --> R[Play Developer Reporting API<br/>crash & ANR rates, error issues]
S -- read-only service account --> P[Play Developer API<br/>tracks & staged rollouts]
S --> T[(thresholds.yaml)]Tools
Tool | Returns |
| Releases on a track: version codes, status ( |
| User-perceived crash and ANR rates, compared with the previous version that has data |
| Largest crash/ANR issues by affected users, each with a sample stack trace |
| Issues first seen in this version (likely regressions) |
|
|
app is an alias from config.yaml or a package name. If you omit version_code, the server uses the release currently rolling out on production. All tools return structured JSON and are annotated readOnlyHint.
Related MCP server: play-console-mcp
Quick start (demo data, no Google account needed)
# Python 3.12+ and uv required
uv sync
cp config.example.yaml config.yaml
cp thresholds.example.yaml thresholds.yaml
uv run pytestConnect to Claude Code
This repo ships a project-scoped .mcp.json, so starting claude in the repo picks up the server (approve it on first use). To register it globally instead:
claude mcp add release-health -e RELEASE_HEALTH_CONFIG=$PWD/config.yaml -- uv --directory $PWD run release-health-mcpThen ask: "Is the current rollout of regressed healthy enough to expand?"
Connect to Gemini CLI
Add this to ~/.gemini/settings.json:
{
"mcpServers": {
"release-health": {
"command": "uv",
"args": ["--directory", "/path/to/release-health-mcp", "run", "release-health-mcp"],
"env": { "RELEASE_HEALTH_CONFIG": "/path/to/release-health-mcp/config.yaml" }
}
}
}Inspect by hand
uv run mcp dev src/release_health_mcp/server.py opens the MCP Inspector (requires Node.js).
Using real Google Play data
In Google Cloud, enable the Google Play Developer Reporting API and the Google Play Android Developer API, then create a service account and a JSON key.
In Play Console → Users and permissions, invite the service account for the apps you want with exactly two permissions: View app information (read-only) (tracks and rollouts) and View app quality information (read-only) (Android vitals: crash/ANR rates and issues). Nothing under Releases. Don't reuse a CI/fastlane key that has release rights: least privilege matters, because milestone 3 adds a separate account for rollout changes.
In
config.yaml:backend: play apps: ada: com.alturos.ada leo: app.alturos.leo default_app: ada read_key_file: ~/.config/release-health/play-read-only.jsonSanity check: compare
get_release_healthwith Android vitals → Overview in Play Console for the same version and window.
Environment overrides: RELEASE_HEALTH_CONFIG, RELEASE_HEALTH_BACKEND, RELEASE_HEALTH_READ_KEY, RELEASE_HEALTH_THRESHOLDS.
How the numbers are computed
Rates come from
crashRateMetricSet/anrRateMetricSet, using daily rows for theversionCodedimension over the lasthealth_window_daysdays of available data. Each rate is a user-weighted average.user_daysis the summed daily distinct users and serves as the sample size.Previous version is the highest lower
versionCodethat has data in the same window.New issues are issues whose
firstAppVersion(withinissues_window_days) equals the version.
Recommendation rules
The thresholds are in thresholds.yaml (defaults plus per-package overrides):
Outcome | When |
halt | User-perceived crash rate > |
hold | Sample < |
expand | Otherwise. Suggests the next value in |
The decision logic lives in src/release_health_mcp/recommend.py. It's a pure function with table-driven tests.
Development
uv run pytest # unit, recorded-API and in-process MCP tests
uv run ruff check . && uv run ruff format --check .
uv run mypy src tests scripts # stricttests/recorded/holds Play API responses thatPlayBackendis tested against withHttpMockSequence, so no network access is needed.scripts/record_responses.py --package <pkg> --key <json> --out tests/recorded/<name> --scrubcaptures real responses for new tests (read-only calls only).
src/release_health_mcp/
server.py MCP tools (MCPServer, mcp SDK v2)
service.py composes backend + recommendation
recommend.py pure decision logic
backends/ fixture (demo JSON) | play (Google APIs)
config.py, thresholds.py, models.pyRoadmap
See docs/ROADMAP.md: approval-gated propose_rollout_change (human approval, hard limits, audit log, dry-run by default), then the showcase, iOS, remote HTTP and tracing.
License
MIT, see LICENSE.
Available Tools
5 toolsget_release_healthBRead-only
Crash and ANR rates for a version, compared with the previous version that has data.
Inputs: app, version_code. Returns: app, current, previous, anr_rate_change, +1 more
list_releasesBRead-only
Current releases on a Play track with status and staged-rollout fraction.
Inputs: app, track. Returns: result
new_issuesARead-only
Crash/ANR issues first seen in this version (likely regressions).
Inputs: app, version_code. Returns: result
recommend_rolloutARead-only
Recommend expand, hold or halt for a staged rollout, with reasons, using thresholds.yaml.
This is advice only; it does not change the rollout.
Inputs: app, version_code. Returns: app, health, reasons, decision, +4 more
top_crashesBRead-only
Largest crash/ANR issues in a version by affected users, with a sample stack trace.
Inputs: app, limit, version_code, include_stack_traces. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
The tools mostly target distinct questions: listing releases, health metrics, top crashes, new regressions, and rollout advice. The only mild overlap is between top_crashes and new_issues, since both surface crash/ANR issues, but their ranking and regression framing help distinguish them.
Three tools follow a clear verb_noun pattern: recommend_rollout, list_releases, and get_release_health. top_crashes and new_issues do not use the same imperative-verb convention, making the set readable but not fully consistent.
Five tools is well-scoped for a release-health advisory server. Each tool covers a meaningful part of the workflow without excessive surface area.
The set covers release listing, health metrics, top issues, new regressions, and rollout recommendation, which is strong coverage for an advisory release-health domain. Minor gaps may exist around deeper release/track detail or historical trends, but core workflows are supported.
Maintenance
Related MCP Connectors
Production runtime data for Android and KMP apps (startup, ANRs, slow screens) for coding agents
Synthetic checks, nightly regression replay and model-drift alerts for AI agents
AI-agent operations for App Store Connect and Google Play, with approval before live publishing.
AI-agent operations for App Store Connect and Google Play, with approval before live publishing.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to automate Android release workflows via the Google Play Android Publisher API, including deploying builds, managing listings, and replying to reviews.40MIT
- AlicenseAqualityBmaintenanceEnables 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.4446 npm2MIT
- AlicenseBqualityBmaintenanceEnables managing releases, monitoring Android vitals, analyzing earnings and search terms, optimizing ASO, and preflighting store assets through natural language, with a confirmation gate before destructive writes.17070 PyPI2Apache 2.0
- FlicenseBqualityCmaintenanceEnables AI agents to manage Google Play apps with scope-based permissions, including publishing internal releases, updating listings, replying to reviews, and promoting to production.118 npm-