STOMP — MCP Server for App Store Connect
Give Claude, Cursor, Windsurf, and other AI coding agents full access to the Apple App Store Connect API — 162 tools covering every major endpoint.

What is STOMP?
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, in-app purchases, subscriptions, App Store submissions, analytics, certificates, provisioning profiles, Game Center, Xcode Cloud, App Clips, sandbox testing, reviews, screenshots, pricing, and more. 162 dedicated tools plus a generic api_request escape hatch for any endpoint not yet covered.
Prerequisites
- Node.js 18+
- An Apple Developer account with access to App Store Connect
- An App Store Connect API key (.p8 file) with appropriate permissions
Getting your API key
- 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
Installation
Install globally:
npm install -g @seriousmonster/app-store-connect-mcp
Or run directly without installing:
npx @seriousmonster/app-store-connect-mcp
Configuration
STOMP 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 Code
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-mcp
Cursor
Add 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"
}
}
}
}
Generic MCP client
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.
Available tools
Apps
| Tool | Description |
|---|
list_apps | List all apps. Filter by name or bundle ID. |
get_app | Get details for a specific app by ID. |
create_app | Create a new app in App Store Connect. |
App Store Versions
| 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). |
update_app_store_version | Update a version's string, copyright, release type, or scheduled date. |
Localizations
| Tool | Description |
|---|
list_version_localizations | List all localizations for a version. |
get_version_localization | Get a specific localization by ID. |
create_version_localization | Add a new locale with description, keywords, what's new, etc. |
update_version_localization | Update an existing localization's metadata. |
TestFlight (Beta)
| Tool | Description |
|---|
list_beta_groups | List beta groups for an app. |
create_beta_group | Create a new beta group. |
delete_beta_group | Delete a beta group. |
list_beta_testers | List beta testers. Filter by email, group, or app. |
create_beta_tester | Create a tester and optionally assign to groups. |
add_tester_to_beta_group | Add testers to a beta group. |
remove_tester_from_beta_group | Remove testers from a beta group. |
delete_beta_tester | Remove a tester from all groups and apps. |
Builds
| 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. |
Bundle IDs
| Tool | Description |
|---|
list_bundle_ids | List registered bundle IDs. Filter by identifier, name, or platform. |
register_bundle_id | Register a new bundle ID. |
Capabilities
| Tool | Description |
|---|
list_bundle_id_capabilities | List capabilities enabled for a bundle ID. |
enable_bundle_id_capability | Enable a capability (push notifications, Sign in with Apple, etc.). |
disable_bundle_id_capability | Disable a capability. |
Submissions
| Tool | Description |
|---|
create_app_store_version_submission | Submit a version for App Review. |
Users & Devices
| Tool | Description |
|---|
list_users | List users in your App Store Connect team. Filter by role or username. |
list_devices | List registered devices. Filter by name, platform, status, or UDID. |
Reviews
| Tool | Description |
|---|
list_customer_reviews | List customer reviews for an app. Sort and filter. |
get_customer_review | Get a specific review with response. |
create_review_response | Respond to a customer review. |
update_review_response | Update a review response. |
delete_review_response | Delete a review response. |
Screenshots & Previews
| Tool | Description |
|---|
list_screenshot_sets | List screenshot sets for a localization. |
create_screenshot_set | Create a screenshot set for a display type. |
delete_screenshot_set | Delete a screenshot set. |
list_screenshots | List screenshots in a set. |
create_screenshot | Initiate a screenshot upload. |
delete_screenshot | Delete a screenshot. |
list_preview_sets | List app preview sets for a localization. |
create_preview_set | Create an app preview set. |
delete_preview_set | Delete a preview set. |
list_previews | List previews in a set. |
create_preview | Initiate a preview video upload. |
delete_preview | Delete a preview. |
Analytics & Reporting
| Tool | Description |
|---|
create_analytics_report_request | Request analytics report generation. |
list_analytics_report_requests | List report requests for an app. |
get_analytics_report_request | Get a report request with included reports. |
list_analytics_reports | List reports for a request. Filter by category. |
list_analytics_report_instances | List report instances. Filter by date and granularity. |
list_analytics_report_segments | List data segments for a report instance. |
Pricing & Territories
| Tool | Description |
|---|
list_app_price_points | List price points for an app by territory. |
get_app_price_schedule | Get an app's price schedule. |
list_territories | List all App Store territories. |
TestFlight (Advanced)
| Tool | Description |
|---|
list_beta_app_localizations | List TestFlight app descriptions per locale. |
create_beta_app_localization | Create a TestFlight app localization. |
update_beta_app_localization | Update a TestFlight app localization. |
list_beta_build_localizations | List "What to Test" per locale for a build. |
create_beta_build_localization | Create "What to Test" for a build. |
update_beta_build_localization | Update "What to Test" for a build. |
submit_build_for_beta_review | Submit a build for beta app review. |
get_beta_app_review_detail | Get beta review contact info and demo account. |
update_beta_app_review_detail | Update beta review details. |
Certificates & Profiles
| Tool | Description |
|---|
list_certificates | List signing certificates. |
get_certificate | Get a specific certificate. |
create_certificate | Create a signing certificate from a CSR. |
revoke_certificate | Revoke a signing certificate. |
list_profiles | List provisioning profiles. |
get_profile | Get a provisioning profile with related resources. |
create_profile | Create a provisioning profile. |
delete_profile | Delete a provisioning profile. |
App Info & Categories
| Tool | Description |
|---|
list_app_infos | List app info records with localizations and categories. |
get_app_info | Get app info with localizations. |
update_app_info | Update app categories. |
list_app_info_localizations | List app info localizations. |
update_app_info_localization | Update name, subtitle, privacy policy URL. |
list_app_categories | List all App Store categories. |
list_age_rating_declarations | Get age rating declarations. |
update_age_rating_declaration | Update age rating content descriptions. |
Phased Releases
| Tool | Description |
|---|
get_phased_release | Get phased release status for a version. |
create_phased_release | Start a phased release. |
update_phased_release | Pause, resume, or complete a phased release. |
delete_phased_release | Remove phased release (full rollout). |
create_version_release_request | Manually release a version. |
In-App Purchases
| Tool | Description |
|---|
list_in_app_purchases | List in-app purchases for an app. |
get_in_app_purchase | Get in-app purchase details. |
create_in_app_purchase | Create a new in-app purchase. |
update_in_app_purchase | Update an in-app purchase. |
delete_in_app_purchase | Delete an in-app purchase. |
list_iap_localizations | List localizations for an IAP. |
create_iap_localization | Create an IAP localization. |
update_iap_localization | Update an IAP localization. |
delete_iap_localization | Delete an IAP localization. |
list_iap_price_points | List price points for an IAP. |
submit_iap_for_review | Submit an IAP for review. |
Subscriptions
| Tool | Description |
|---|
list_subscription_groups | List subscription groups for an app. |
create_subscription_group | Create a subscription group. |
get_subscription_group | Get subscription group details. |
list_subscriptions | List subscriptions in a group. |
create_subscription | Create a subscription. |
update_subscription | Update a subscription. |
delete_subscription | Delete a subscription. |
list_subscription_localizations | List subscription localizations. |
create_subscription_localization | Create a subscription localization. |
update_subscription_localization | Update a subscription localization. |
delete_subscription_localization | Delete a subscription localization. |
list_subscription_prices | List subscription prices. |
list_subscription_price_points | List price points for a subscription. |
create_subscription_introductory_offer | Create an introductory offer. |
submit_subscription_group | Submit a subscription group for review. |
Game Center
| Tool | Description |
|---|
get_game_center_detail | Get Game Center config for an app. |
list_game_center_leaderboards | List leaderboards. |
create_game_center_leaderboard | Create a leaderboard. |
update_game_center_leaderboard | Update a leaderboard. |
delete_game_center_leaderboard | Delete a leaderboard. |
list_game_center_achievements | List achievements. |
create_game_center_achievement | Create an achievement. |
update_game_center_achievement | Update an achievement. |
delete_game_center_achievement | Delete an achievement. |
list_game_center_leaderboard_sets | List leaderboard sets. |
create_game_center_leaderboard_set | Create a leaderboard set. |
delete_game_center_leaderboard_set | Delete a leaderboard set. |
list_game_center_groups | List Game Center groups. |
create_game_center_group | Create a Game Center group. |
Xcode Cloud
| Tool | Description |
|---|
list_ci_products | List Xcode Cloud products. |
get_ci_product | Get a CI product with related resources. |
list_ci_workflows | List workflows for a product. |
get_ci_workflow | Get workflow details. |
list_ci_build_runs | List build runs for a workflow. |
get_ci_build_run | Get build run details. |
start_ci_build_run | Start a new build run. |
list_ci_build_actions | List actions in a build run. |
list_ci_artifacts | List artifacts from a build action. |
list_ci_test_results | List test results from a build action. |
list_ci_issues | List issues from a build action. |
list_ci_mac_os_versions | List available macOS versions. |
list_ci_xcode_versions | List available Xcode versions. |
App Clips
| Tool | Description |
|---|
list_app_clips | List App Clips for an app. |
get_app_clip | Get App Clip details. |
list_app_clip_default_experiences | List default experiences for an App Clip. |
create_app_clip_default_experience | Create a default App Clip experience. |
update_app_clip_default_experience | Update an App Clip experience. |
delete_app_clip_default_experience | Delete an App Clip experience. |
Sandbox Testing
| Tool | Description |
|---|
list_sandbox_testers | List sandbox tester accounts. |
update_sandbox_tester | Update sandbox tester settings. |
clear_sandbox_tester_purchase_history | Clear purchase history for sandbox testers. |
Compliance & Legal
| Tool | Description |
|---|
list_app_encryption_declarations | List encryption declarations. |
create_app_encryption_declaration | Create an encryption declaration. |
get_app_encryption_declaration | Get an encryption declaration. |
list_eulas | Get the EULA for an app. |
create_eula | Create a custom EULA. |
update_eula | Update a EULA. |
delete_eula | Delete a custom EULA. |
App Events
| Tool | Description |
|---|
list_app_events | List in-app events. |
create_app_event | Create an in-app event. |
update_app_event | Update an in-app event. |
delete_app_event | Delete an in-app event. |
list_app_event_localizations | List event localizations. |
create_app_event_localization | Create an event localization. |
update_app_event_localization | Update an event localization. |
delete_app_event_localization | Delete an event localization. |
Generic
| Tool | Description |
|---|
api_request | Make an arbitrary request to any App Store Connect API endpoint. |
The api_request escape hatch
The 162 dedicated tools cover the vast majority of the App Store Connect API, but Apple's API surface is enormous. The api_request tool lets you hit any endpoint directly for anything that doesn't have a dedicated tool yet.
You provide:
- method --
GET, POST, PATCH, or DELETE
- 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.
License
MIT