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
- “Use Storeflight to check whether My App is ready to submit to App Review. Fix what you can, then check again until there are no blockers.”
- “With Storeflight, read My App’s listing in every locale and tell me which fields are close to their character limits.”
- “Which of my apps in Storeflight have blockers right now?”
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
| Code | Meaning |
|---|---|
| 0 | Done, nothing at the --fail-on level |
| 1 | Issues at the --fail-on level (blockers by default) |
| 2 | Usage: a wrong command or option |
| 3 | API key missing or invalid |
| 4 | App or platform not found |
| 5 | App Store Connect returned an error |
| 6 | Needs Storeflight Pro |