Skip to content

Repository files navigation

StorePilot

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 version CI License: MIT Node.js MCP


npm: storepilot-mcp · CLI: storepilot

StorePilot console demo — snapshot, blockers, dry-run intents

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.

Why StorePilot

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

Golden path (StorePilot)

Three steps from zero to “agent knows if you can ship”:

1. Add storepilot.yaml to your app repo

cp path/to/StorePilot/storepilot.example.yaml ./storepilot.yaml
# Edit stores.ios.appId and stores.android.package
project: my-app
stores:
  ios:
    appId: "1234567890"
    bundleId: com.example.app
  android:
    package: com.example.app
release:
  defaultRollout: 0.1

2. Point MCP at your project

{
  "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"
      }
    }
  }
}

3. Ask your agent

"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 registry

Full walkthrough: docs/DEMO.md

Quick start

npx -y storepilot-mcp@latest

Credentials: docs/CREDENTIALS.md — EAS webhooks do not replace App Store / Play API keys.

Features

Orchestrator (v1.0+)

  • get_release_snapshot — production vs candidate, cross-platform blockers
  • explain_release_blockers — human-readable “what to do next”
  • execute_release_intent — rollout, promote, submit (dry-run default)
  • list_projects — multi-app registry via STOREPILOT_PROJECTS_DIR
  • promote_release, configure_rollout, create_tester_group

Safety & ops

  • confirm: true on destructive writes; workflows skip confirm when dryRun is true (default)
  • Toolsets: MCP_TOOLSET=release | readonly | all
  • Escape hatch: apple_api_call, google_api_call for 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)

Store coverage

  • 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

Configuration

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

Webhook flow

EAS/GitHub → POST /webhook/* → verify → persist
  → list_pending_webhooks
  → get_release_snapshot
  → execute_release_intent (dryRun → confirm)
  → mark_webhook_processed

Development

git clone https://github.com/Jeronimo0228/StorePilot.git
cd StorePilot
npm install
npm test
npm run build
npm run storepilot -- snapshot   # from source

Try it without cloning: npx storepilot-mcp@latest + scripts/try-storepilot.sh

Project structure

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)

Feedback

Early v1 — we want real-world reports: Try StorePilot feedback

License

MIT — see LICENSE.

About

No description, website, or topics provided.

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages