Give Claude, Cursor, Windsurf, and other AI coding agents full access to the Apple App Store Connect API — a lean set of everyday tools plus a generic api_request escape hatch that reaches every endpoint.
STOMP is a Model Context Protocol (MCP) server for Apple's App Store Connect API. It lets AI assistants manage your iOS, macOS, tvOS, and visionOS apps — TestFlight, builds, versions, App Store submissions, reviews, in-app purchases, and subscriptions.
STOMP deliberately ships a small, high-signal set of everyday tools rather than one wrapper per endpoint. Every registered tool costs context (its name, description, and full input schema are loaded for the whole session) and dilutes tool selection, so the long tail of the API is handled by a single generic api_request tool that can reach any App Store Connect endpoint — analytics, certificates, provisioning profiles, Game Center, Xcode Cloud, App Clips, sandbox testing, pricing, screenshots, and everything else. You lose nothing in capability; you just stop paying for 140 tool schemas you rarely call.
- Node.js 18+
- An Apple Developer account with access to App Store Connect
- An App Store Connect API key (.p8 file) with appropriate permissions
- Sign in to App Store Connect
- Go to Users and Access > Integrations > App Store Connect API
- Click Generate API Key (or request one from your Account Holder)
- Choose a name and select the role/permissions the key should have
- Click Generate
- Download the .p8 file -- Apple only lets you download it once, so store it somewhere safe
- Note the Key ID shown in the table and the Issuer ID at the top of the page -- you'll need both
Install globally:
npm install -g @seriousmonster/app-store-connect-mcpOr run directly without installing:
npx @seriousmonster/app-store-connect-mcpSTOMP requires three environment variables:
| Variable | Description |
|---|---|
APP_STORE_CONNECT_KEY_ID |
The Key ID from App Store Connect (e.g., ABC123DEFG) |
APP_STORE_CONNECT_ISSUER_ID |
The Issuer ID (a UUID) |
APP_STORE_CONNECT_P8_PATH |
Absolute path to your .p8 private key file (supports ~) |
claude mcp add app-store-connect \
-e APP_STORE_CONNECT_KEY_ID=YOUR_KEY_ID \
-e APP_STORE_CONNECT_ISSUER_ID=YOUR_ISSUER_ID \
-e APP_STORE_CONNECT_P8_PATH=~/.keys/AuthKey_YOUR_KEY_ID.p8 \
-- npx @seriousmonster/app-store-connect-mcpAdd to your Cursor MCP config (~/.cursor/mcp.json):
{
"mcpServers": {
"app-store-connect": {
"command": "npx",
"args": ["@seriousmonster/app-store-connect-mcp"],
"env": {
"APP_STORE_CONNECT_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_CONNECT_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_CONNECT_P8_PATH": "~/.keys/AuthKey_YOUR_KEY_ID.p8"
}
}
}
}Any MCP-compatible client (Claude Desktop, Cline, Zed, etc.) can run STOMP. Set the three environment variables and run npx @seriousmonster/app-store-connect-mcp as the server command.
STOMP registers a focused set of dedicated tools for the day-to-day app lifecycle. Anything not listed here is reachable through api_request.
| Tool | Description |
|---|---|
list_apps |
List all apps. Filter by name or bundle ID. |
get_app |
Get details for a specific app by ID. |
| Tool | Description |
|---|---|
list_app_store_versions |
List versions for an app. Filter by version string, platform, or state. |
create_app_store_version |
Create a new version (set version string, platform, release type). |
| Tool | Description |
|---|---|
list_version_localizations |
List all localizations for a version. |
update_version_localization |
Update a localization's description, keywords, what's new, promo text, URLs. |
| Tool | Description |
|---|---|
list_beta_groups |
List beta groups for an app. |
create_beta_group |
Create a new beta group. |
add_tester_to_beta_group |
Add testers to a beta group. |
remove_tester_from_beta_group |
Remove testers from a beta group. |
submit_build_for_beta_review |
Submit a build for TestFlight beta review. |
| Tool | Description |
|---|---|
list_builds |
List builds for an app. Filter by version, state, or expiry. |
add_build_to_beta_group |
Add builds to a beta group for TestFlight distribution. |
| Tool | Description |
|---|---|
create_app_store_version_submission |
Submit a version for App Review. |
| Tool | Description |
|---|---|
list_customer_reviews |
List customer reviews for an app. Sort and filter. |
create_review_response |
Respond to a customer review. |
| Tool | Description |
|---|---|
list_in_app_purchases |
List in-app purchases for an app. |
list_subscription_groups |
List subscription groups (include subscriptions for the full structure). |
list_subscriptions |
List subscriptions within a subscription group. |
| Tool | Description |
|---|---|
api_request |
Make an arbitrary request to any App Store Connect API endpoint. |
These dedicated tools cover the everyday workflow, but Apple's API surface is enormous — certificates, provisioning profiles, pricing, analytics, Game Center, Xcode Cloud, App Clips, sandbox testers, in-app-purchase and subscription authoring, screenshots, app events, and much more. Rather than ship a tool for each (and pay the context cost of every one), STOMP exposes a single api_request tool that can hit any endpoint directly.
You provide:
- method --
GET,POST,PATCH, orDELETE - path -- the API path, e.g.
/v1/apps,/v2/inAppPurchases/{id} - params (optional) -- query parameters as key-value pairs
- body (optional) -- a JSON string for POST/PATCH requests, following Apple's JSON:API format
Authentication is handled automatically. Refer to Apple's API documentation for available endpoints and request formats.
MIT