Release orchestration MCP for App Store Connect + Google Play
Ask your agent “can I ship?” — get blockers, a plan, and safe dry-runs before touching production.
npm: storepilot-mcp · CLI: storepilot
4K: docs/assets/storepilot-console-4k.mp4 · Rebuild: npm run record:console:4k
Golden path · Quick start · Demo · Tools · Compare · Launch post
Not the same as silviosotelo/mobile-release-mcp (Fastlane/build focus).
StorePilot = store operations + release orchestration for AI agents.
| Other MCP servers | StorePilot |
|---|---|
| 90+ low-level tools, agent picks one-by-one | Snapshot → blockers → intent → execute |
| No project memory | storepilot.yaml + .storepilot/memory.json |
| Writes hit production immediately | dryRun: true by default on workflows |
| Apple or Google depth | Both, plus escape hatch for long tail |
| No CI hooks | EAS + GitHub webhooks built in |
~131 typed tools · 91 in release toolset · App Store Connect · Google Play · provenance on npm
Three steps from zero to “agent knows if you can ship”:
cp path/to/StorePilot/storepilot.example.yaml ./storepilot.yaml
# Edit stores.ios.appId and stores.android.packageproject: my-app
stores:
ios:
appId: "1234567890"
bundleId: com.example.app
android:
package: com.example.app
release:
defaultRollout: 0.1{
"mcpServers": {
"storepilot": {
"command": "npx",
"args": ["-y", "storepilot-mcp@latest"],
"env": {
"APPLE_KEY_ID": "YOUR_KEY_ID",
"APPLE_ISSUER_ID": "YOUR_ISSUER_ID",
"APPLE_PRIVATE_KEY_PATH": "/path/to/AuthKey.p8",
"GOOGLE_SERVICE_ACCOUNT_KEY_PATH": "/path/to/play-service-account.json",
"STOREPILOT_CONFIG_PATH": "/path/to/your-app/storepilot.yaml",
"MCP_TOOLSET": "release"
}
}
}
}"Load my project and explain what's blocking release."
→ load_project / get_release_snapshot / explain_release_blockers
"Plan a 10% production rollout (don't execute yet)."
→ execute_release_intent { intent: "rollout_production", percentage: 10, dryRun: true }
"When ready: promote Android internal → production at 10%."
→ execute_release_intent { intent: "promote_to_production", dryRun: false, confirm: true }
CLI (no IDE):
export STOREPILOT_CONFIG_PATH=./storepilot.yaml
# + Apple/Google env vars — see docs/CREDENTIALS.md
storepilot snapshot # blockers + next actions
storepilot projects # multi-app registryFull walkthrough: docs/DEMO.md
npx -y storepilot-mcp@latestCredentials: docs/CREDENTIALS.md — EAS webhooks do not replace App Store / Play API keys.
get_release_snapshot— production vs candidate, cross-platform blockersexplain_release_blockers— human-readable “what to do next”execute_release_intent— rollout, promote, submit (dry-run default)list_projects— multi-app registry viaSTOREPILOT_PROJECTS_DIRpromote_release,configure_rollout,create_tester_group
confirm: trueon destructive writes; workflows skip confirm whendryRunis true (default)- Toolsets:
MCP_TOOLSET=release|readonly|all - Escape hatch:
apple_api_call,google_api_callfor long-tail API - Webhooks: EAS Build/Submit + GitHub Actions →
list_pending_webhooks - Transports: stdio (Cursor/Claude) or HTTP
/mcp - Tests:
npm test(42+),npm run smoke(live, needs credentials)
- Apple: builds, TestFlight, metadata, screenshots, export compliance, submission preflight
- Google: tracks, uploads, subscriptions, internal app sharing, deobfuscation maps
See docs/TOOLS.md · docs/COMPARISON.md
| Variable | Description |
|---|---|
STOREPILOT_CONFIG_PATH |
Path to storepilot.yaml |
STOREPILOT_PROJECTS_DIR |
Directory of app repos for list_projects |
MCP_TOOLSET |
release (recommended), readonly, all |
APPLE_* / GOOGLE_* |
Store API credentials — CREDENTIALS.md |
EAS_PROJECT_MAPPINGS |
Map EAS project → store IDs for webhooks |
LOG_LEVEL |
Set error for clean CLI JSON output |
Full env reference: .env.example
EAS/GitHub → POST /webhook/* → verify → persist
→ list_pending_webhooks
→ get_release_snapshot
→ execute_release_intent (dryRun → confirm)
→ mark_webhook_processed
git clone https://github.com/Jeronimo0228/StorePilot.git
cd StorePilot
npm install
npm test
npm run build
npm run storepilot -- snapshot # from sourceTry it without cloning: npx storepilot-mcp@latest + scripts/try-storepilot.sh
src/
├── core/ Release snapshot, workflows, release-intent
├── tools/ MCP registrations (orchestrator, apple, google, escape)
├── providers/ App Store Connect + Google Play clients
├── plugins/ Plugin hook contract (v1.0)
├── cli.ts storepilot CLI
└── webhook/ EAS + GitHub
docs/ DEMO, TOOLS, COMPARISON, LAUNCH (LinkedIn draft)
Early v1 — we want real-world reports: Try StorePilot feedback
MIT — see LICENSE.