Run an app portfolio across Google Play and the App Store: vitals, reviews, earnings, releases.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
One MCP server for a whole app portfolio, across Google Play and the App Store.
Ask your assistant:
"Which of my apps has a crash rate above Google's threshold?"
"How much did the portfolio earn last month, per app?"
"Show me every app on both stores: version, rating, installs, revenue, crashes."
"The German description drifted between the two stores β what's different?"
"Ship 3.2.1 to the Play internal track and TestFlight."
Each question above is one tool call covering every app you own, because the tools are portfolio-shaped rather than endpoint-shaped. The last one is two, on purpose: writes preview first and wait for a human.
You need your own developer accounts β a Google Play service account, an App Store Connect API key, or both. StorePilot reads your accounts; it does not scrape public store listings.
Status: early. The read tools have run against real accounts on both stores; the money and crash-threshold paths have not returned real data yet, and no write has ever executed against a store. Read Status and honest limits before trusting a number.
Both stores, one tool set. Google Play via the Android Publisher API, the Play Developer Reporting API and the private Cloud Storage reports bucket; the App Store via App Store Connect. 34 tools total, named consistently.
Installs and earnings, which most tooling cannot reach. Play installs, ratings and earnings have no REST API. They exist only as UTF-16 CSVs in a private Cloud Storage bucket, so most tooling skips them and "how much did this app earn?" simply cannot be answered. StorePilot reads that bucket, resolves CSV columns by name rather than position, and reports earnings per currency without ever summing across currencies. (This path is implemented and fixture-tested but has not yet read a real report β see Status.)
Portfolio-first. portfolio_overview renders every app on both stores in
one table. play_portfolio_health scans an entire Play account. Neither takes a
package name. Built for indie devs, app factories and agencies.
Cross-store tools. parity_check finds listing and version drift between
the two stores. compare_reviews puts both stores' reviews side by side.
release_both ships one version to both. metadata_pull / metadata_push use
fastlane's own directory layout, so adopting StorePilot never means abandoning
fastlane.
Writes are gated. Every write previews first and returns a confirmation token that is HMAC-keyed to the exact operation, single-use, and expires in 10 minutes. Production releases are forced into a staged rollout capped at 20%.
setup_doctor. Credential setup here is a multi-step Google Cloud + Play
Console + App Store Connect maze with several silent failure modes. One tool
checks every step and prints the exact fix.
Requires Python 3.11+.
or install it:
Either way you get a storepilot binary. Every client config below wants its
absolute path β which storepilot prints it.
claude_desktop_config.json:
Settings β MCP β Add new MCP server, or add to ~/.cursor/mcp.json:
Add to ~/.codex/config.toml:
Configure only the store you use. Each adapter registers its tools independently,
and the cross-store tools register as soon as either store is configured. See
.env.example for every variable the code reads.
A .env file also works, but it is read from the process working directory β
which is whatever directory your MCP client happened to launch the server from,
not the repo. Use it when you run storepilot yourself from the checkout; use
the client's env block otherwise.
Credentials are read from the environment and never written anywhere by
StorePilot. Keep the service account JSON and the .p8 outside the repo, and
chmod 600 both β they are private keys.
Do not start by calling a data tool and guessing why it returned nothing. Ask
your assistant to run setup_doctor first. It checks each credential step
independently, so one failure never hides the rest, and every failure carries
its own fix.
With nothing configured yet:
It also catches the failure that looks like success: without the Reply to
reviews permission, Play's reviews API returns HTTP 200 and an empty list
rather than an error, so "this app has no reviews" and "you lack a permission"
are the same response. setup_doctor reports that ambiguity as its own
diagnosis instead of guessing.
Full walkthrough for both stores: docs/SETUP.md.
34 tools. Full arguments, return shapes and per-tool limitations in docs/TOOLS.md.
| Tool | What it answers |
|---|---|
play_list_apps | Which packages can this install reach? |
play_get_vitals | Crash and ANR (Application Not Responding) rates vs Google's 1.09% / 0.47% thresholds |
play_get_anomalies | What did Google's own anomaly detection flag? |
play_get_stats | Installs and ratings for a month (GCS bucket) |
play_get_earnings | Earnings for a month, per currency (GCS bucket) |
play_list_reviews | Recent production reviews, filterable by star rating |
play_portfolio_health | Vitals + rating + installs for every app, one table |
| Tool | What it does |
|---|---|
play_upload_bundle | Upload an .aab and release it on a track |
play_create_release | Release already-uploaded version codes |
play_promote_release | Move a build between tracks (beta β production) |
play_expand_rollout | Widen a staged rollout β the only path to 100% |
play_halt_rollout | Stop a rollout immediately, no confirmation step |
play_reply_review | Publish a public developer reply |
play_update_listing | Overwrite listing copy for one locale |
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/storepilot-mcp)<a href="https://allmcps.com/mcp/storepilot-mcp"><img src="https://allmcps.com/api/badge/storepilot-mcp?style=directory" alt="Storepilot MCP on AllMCPs" /></a>