MCP server for Apple's App Store Connect API. Manage apps, TestFlight, and more.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
A Model Context Protocol (MCP) server for Apple's App Store Connect API. Manage your iOS, macOS, tvOS, and visionOS apps directly from Claude, Cursor, or any MCP-compatible client.
| Variable | Required | Description |
|---|---|---|
APP_STORE_CONNECT_KEY_ID | Yes | Your API Key ID (e.g., ABC123DEFG) |
APP_STORE_CONNECT_ISSUER_ID | Yes | Your Issuer ID (UUID format) |
APP_STORE_CONNECT_P8_PATH | Yes* | Path to your .p8 private key file |
APP_STORE_CONNECT_P8_CONTENT | Yes* | Raw content of .p8 key (alternative to path) |
*One of P8_PATH or P8_CONTENT is required.
Add to your Claude Desktop config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Add to your Cursor MCP settings (Settings β MCP Servers):
Add to your Continue configuration:
For CI/CD or containerized environments, you can pass the key content directly:
| Tool | Description | Parameters |
|---|---|---|
list_apps | List all apps in your account | limit? (number, 1-200) |
get_app | Get details of a specific app | appId (string, required) |
| Tool | Description | Parameters |
|---|---|---|
list_app_versions | List all versions for an app | appId, platform?, versionState?, limit? |
get_app_version | Get version details | versionId |
create_app_version | Create a new app version | appId, platform, versionString, releaseType? |
| Tool | Description | Parameters |
|---|---|---|
list_version_localizations | List localizations for a version | versionId, limit? |
get_version_localization | Get localization details | localizationId |
create_version_localization | Add a new locale | versionId, locale, description?, keywords?, whatsNew? |
update_version_localization | Update localization | localizationId, description?, keywords?, whatsNew?, promotionalText? |
delete_version_localization | Remove a locale | localizationId |
| Tool | Description | Parameters |
|---|---|---|
list_app_infos | List app info records | appId, limit? |
list_app_info_localizations | List name/subtitle localizations | appInfoId, limit? |
update_app_info_localization | Update app name, subtitle | localizationId, name?, subtitle?, privacyPolicyUrl? |
| Tool | Description | Parameters |
|---|---|---|
list_beta_groups | List beta groups for an app | appId, limit? |
list_beta_testers | List testers in a group | betaGroupId, limit? |
add_beta_tester | Add a tester to a group | betaGroupId, email, firstName?, lastName? |
remove_beta_tester | Remove a tester from a group | betaGroupId, betaTesterId |
| Tool | Description | Parameters |
|---|---|---|
list_screenshot_sets | List screenshot sets | localizationId, limit? |
list_screenshots | List screenshots in a set | screenshotSetId, limit? |
upload_screenshot | Upload a new screenshot | screenshotSetId, fileName, fileSize, filePath |
| Tool | Description | Parameters |
|---|---|---|
list_bundle_ids | List all bundle IDs | limit?, platform? |
get_bundle_id | Get bundle ID details | bundleIdId |
create_bundle_id | Register a new bundle ID | identifier, name, platform |
update_bundle_id | Update bundle ID name | bundleIdId, name |
delete_bundle_id | Delete a bundle ID | bundleIdId |
| Tool | Description | Parameters |
|---|---|---|
list_devices | List registered devices | limit?, platform?, status? |
get_device | Get device details | deviceId |
| Tool | Description | Parameters |
|---|---|---|
list_users | List team users | limit?, roles? |
get_user | Get user details | userId |
| Tool | Description | Parameters |
|---|---|---|
list_builds | List builds for an app | appId, limit? |
get_build | Get build details | buildId |
| Tool | Description | Parameters |
|---|---|---|
list_app_categories | List app categories | limit?, platform? |
get_app_price_schedule | Get app pricing info | appId |
get_app_availability | Get app territory availability | appId |
| Tool | Description | Parameters |
|---|---|---|
list_territories | List all territories with currencies | limit? |
list_app_price_points | List available price tiers for an app | appId, territory?, limit? |
get_price_point_equalizations | Get PPP equivalent prices across countries | pricePointId, territories?, limit? |
set_app_prices | Set per-territory manual pricing (replaces entire schedule) | appId, baseTerritory, manualPrices |
One-time purchases via Apple's In-App Purchases v2 API. create_in_app_purchase defaults to NON_CONSUMABLE β a "lifetime" unlock. To ship one: create β add a localization β set a price β set availability β submit for review.
Note: App Review usually requires a review screenshot on the in-app purchase. Uploading IAP review screenshots is not yet covered by these tools β add one in App Store Connect if
submit_in_app_purchase_for_reviewis rejected for a missing screenshot.
| Tool | Description | Parameters |
|---|---|---|
list_in_app_purchases | List an app's in-app purchases, optionally by type | appId, inAppPurchaseType?, limit? |
get_in_app_purchase | Get a single in-app purchase's details and state | inAppPurchaseId |
create_in_app_purchase | Create an IAP (defaults to NON_CONSUMABLE / lifetime) | appId, name, productId, inAppPurchaseType?, familySharable?, reviewNote? |
update_in_app_purchase | Update name, Family Sharing, or review note (productId/type immutable) | inAppPurchaseId, name?, familySharable?, reviewNote? |
delete_in_app_purchase | Delete an in-app purchase | inAppPurchaseId |
list_in_app_purchase_localizations | List localized names/descriptions | inAppPurchaseId, limit? |
create_in_app_purchase_localization | Add a localized display name (+ description) | inAppPurchaseId, locale, name, description? |
update_in_app_purchase_localization | Update a localization | localizationId, name?, description? |
delete_in_app_purchase_localization | Delete a localization | localizationId |
list_in_app_purchase_price_points | List price points (customer price & proceeds) | inAppPurchaseId, territory?, limit?, offset? |
get_in_app_purchase_price_point_equalizations | Apple's PPP-equivalent price points for a base price point | pricePointId, territories?, limit? |
set_in_app_purchase_price | Set pricing (replaces schedule; one base territory to auto-equalize, or full PPP list) | inAppPurchaseId, baseTerritory, manualPrices |
list_in_app_purchase_prices | Read current per-territory prices (manual; optional automatic) | inAppPurchaseId, territory?, includeAutomatic?, limit? |
get_in_app_purchase_availability | Get territory availability | inAppPurchaseId |
set_in_app_purchase_availability | Set territory availability | inAppPurchaseId, availableInNewTerritories, territories? |
submit_in_app_purchase_for_review | Submit the IAP to App Review (independent of an app version) | inAppPurchaseId |
| Tool | Description | Parameters |
|---|---|---|
create_analytics_report_request | Request an analytics report (ongoing or one-time snapshot) | appId, accessType |
list_analytics_report_requests | List analytics report requests for an app | appId |
get_analytics_report_request | Get an analytics report request | requestId |
delete_analytics_report_request | Delete an analytics report request | requestId |
list_analytics_reports | List reports available within a request | requestId |
list_analytics_report_instances | List instances (by date) of a report | reportId |
list_analytics_report_segments | List downloadable segments of a report instance | instanceId |
download_analytics_report_segment | Download a report segment | url |
| Tool | Description | Parameters |
|---|---|---|
get_sales_report | Download a sales/trends report | vendorNumber, reportType, reportSubType, frequency, reportDate |
get_finance_report | Download a financial report | vendorNumber, regionCode, reportDate, reportType |
| Tool | Description | Parameters |
|---|---|---|
get_app_perf_metrics | Get an app's power & performance metrics | appId, metricType |
get_build_perf_metrics | Get a build's performance metrics | buildId, metricType |
list_diagnostic_signatures | List diagnostic signatures for a build | buildId |
list_diagnostic_logs | List diagnostic logs for a signature | signatureId |
"Show me all my apps in App Store Connect"
Claude will use list_apps to retrieve and display your apps.
"Update the English description for version 2.0 of MyApp to: 'A revolutionary app that simplifies your daily tasks.'"
Claude will:
list_appslist_app_versionslist_version_localizationsupdate_version_localization"Add Japanese localization to MyApp version 2.0 with description 'η΄ ζ΄γγγγ’γγͺγ§γ' and keywords 'γ’γγͺ,δΎΏε©,η°‘ε'"
Claude will use create_version_localization with locale ja.
"Add john@example.com as a beta tester to the Internal Testing group for MyApp"
Claude will:
list_beta_groupsadd_beta_tester"Show me the equivalent prices for my $9.99 tier in India, Brazil, and Turkey"
Claude will:
list_app_price_pointsget_price_point_equalizations"Set my app to $9.99 in the US and use PPP pricing for India and Brazil"
Claude will use set_app_prices with the appropriate price point IDs for each territory.
"Add a $99.99 lifetime unlock to MyApp with PPP pricing for India and Brazil"
Claude will:
create_in_app_purchasecreate_in_app_purchase_localizationlist_in_app_purchase_price_points, then PPP equivalents with get_in_app_purchase_price_point_equalizationsset_in_app_purchase_price and open availability with set_in_app_purchase_availabilitylist_in_app_purchase_prices"What's the status of all versions of MyApp?"
Claude will use list_app_versions to show version states (PREPARE_FOR_SUBMISSION, IN_REVIEW, READY_FOR_SALE, etc.)
.. not allowed)600 (owner read/write only)Ensure all required environment variables are set:
APP_STORE_CONNECT_KEY_IDAPP_STORE_CONNECT_ISSUER_IDAPP_STORE_CONNECT_P8_PATH or APP_STORE_CONNECT_P8_CONTENTAPP_STORE_CONNECT_P8_PATH is correct and absolutels -la /path/to/AuthKey.p8.p8 from Apple (starts with -----BEGIN PRIVATE KEY-----)This usually means:
The server includes built-in rate limiting (50 requests/minute). If you hit Apple's limits:
git checkout -b feature/my-featurenpm test and npm run lintMIT License - see LICENSE for details.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/appstore-connect)<a href="https://allmcps.com/mcp/appstore-connect"><img src="https://allmcps.com/api/badge/appstore-connect?style=directory" alt="Appstore Connect on AllMCPs" /></a>