Skip to main content
Glama
Jeronimo0228

mobile-release-mcp

by Jeronimo0228

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

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

Related MCP server: xcode-cloud-mcp

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.

Related MCP Connectors

Related MCP Servers