MCP server and command line

AI Agents

Storeflight includes a local MCP server and the storeflight command. Your agent checks the app, reads the listing, makes the fixes with your App Store Connect tools, and checks again until nothing blocks the release.

Both are part of Storeflight Pro and run from the app at /Applications/Storeflight.app/Contents/Helpers/storeflight. They use the API key you added to Storeflight, and they only read: Storeflight never changes anything in App Store Connect. Without Pro, --sample still works with three made-up apps.

The MCP tools are list_apps, check_app, get_fix_prompt (the rules and character limits for each fix) and get_listing (the current text per locale). Settings → AI Agents shows these lines with a Copy button, and which agents have connected.

Claude Code

Run this in Terminal. It adds Storeflight for all your projects:

claude mcp add --scope user storeflight -- /Applications/Storeflight.app/Contents/Helpers/storeflight mcp

Or install the plugin, which adds the server along with a release-check skill. In Claude Code:

/plugin marketplace add chansencc/storeflight-claude-plugin
/plugin install storeflight@storeflight

Codex

codex mcp add storeflight -- /Applications/Storeflight.app/Contents/Helpers/storeflight mcp

Or add this to ~/.codex/config.toml:

[mcp_servers.storeflight]
command = "/Applications/Storeflight.app/Contents/Helpers/storeflight"
args = ["mcp"]

Cursor

Click Add to Cursor in Settings → AI Agents, or add this to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "storeflight": {
      "command": "/Applications/Storeflight.app/Contents/Helpers/storeflight",
      "args": ["mcp"]
    }
  }
}

Other agents

Storeflight is a local MCP server that talks over stdio. Point your agent at /Applications/Storeflight.app/Contents/Helpers/storeflight mcp. Claude, VS Code, Windsurf and most others take the same mcpServers JSON as Cursor in their MCP settings.

Try it

Each check reads App Store Connect fresh and uses about 20 to 30 of Apple’s 3,600 API requests per hour.

The storeflight command

To run it yourself, link it into ~/.local/bin (make sure that folder is on your PATH):

mkdir -p ~/.local/bin && ln -sf /Applications/Storeflight.app/Contents/Helpers/storeflight ~/.local/bin/storeflight

Then:

storeflight list
storeflight check "My App"
storeflight check "My App" --platform iOS --markdown
storeflight listing "My App" --locale de-DE

check takes an app name, bundle ID or App Store Connect app ID. Add --json for machine-readable output or --prompt for a fix prompt. storeflight --help lists every command and option.

CI

storeflight check <app> --fail-on blocker exits with 1 when something blocks the release, so the build fails. Use --fail-on warning to fail on warnings too, or never to only report.

CI needs a Mac with Storeflight installed and Pro, such as a self-hosted GitHub Actions runner or your own build Mac. The command lives inside the app and checks Pro there, so GitHub-hosted runners and Xcode Cloud aren’t supported yet.

Run the runner as the macOS user who has Storeflight and Pro, and open the app now and then: a yearly plan stops working at its renewal date until the app sees the renewal. An example for a self-hosted macOS runner:

name: Release check
on:
  workflow_dispatch:
  push:
    branches: [main]

jobs:
  storeflight:
    runs-on: [self-hosted, macOS]
    steps:
      - name: Check the next App Store release
        run: /Applications/Storeflight.app/Contents/Helpers/storeflight check "My App" --fail-on blocker

This uses the API key added to Storeflight on that Mac. To use a different key, set ASC_PRIVATE_KEY (the contents of the .p8 file), ASC_KEY_ID and ASC_ISSUER_ID. They win over the key in the app. For an Individual key, leave out the issuer ID and set ASC_KEY_TYPE=individual. The bundled command can’t open key files, so pass the key’s contents rather than a path.

      - name: Check the next App Store release
        run: /Applications/Storeflight.app/Contents/Helpers/storeflight check "My App" --fail-on blocker
        env:
          ASC_PRIVATE_KEY: ${{ secrets.ASC_PRIVATE_KEY }}
          ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }}
          ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}

Exit codes

CodeMeaning
0Done, nothing at the --fail-on level
1Issues at the --fail-on level (blockers by default)
2Usage: a wrong command or option
3API key missing or invalid
4App or platform not found
5App Store Connect returned an error
6Needs Storeflight Pro