App Store Connect MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@App Store Connect MCP Server list my apps"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
App Store Connect MCP Server
A Model Context Protocol server for the App Store Connect API. It lets AI assistants manage apps, versions, localizations, screenshots, creative assets, in-app purchases, pricing and availability, App Review details, TestFlight, bundle IDs, devices, users, and analytics reports.
Forked from JoshuaRileyDev/app-store-connect-mcp-server (archived).
Setup
Create an API key in App Store Connect → Users and Access → Integrations, download the .p8 file, and note the Key ID and Issuer ID.
Add the server to your MCP client config (e.g. claude_desktop_config.json):
{
"mcpServers": {
"app-store-connect": {
"command": "npx",
"args": ["-y", "@yunyang088/app-store-connect-mcp-server"],
"env": {
"APP_STORE_CONNECT_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_CONNECT_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_CONNECT_P8_PATH": "/path/to/AuthKey_XXXXXXXXXX.p8",
"APP_STORE_CONNECT_VENDOR_NUMBER": "OPTIONAL"
}
}
}
}For 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=/path/to/AuthKey_XXXXXXXXXX.p8 \
-- npx -y @yunyang088/app-store-connect-mcp-serverAPP_STORE_CONNECT_VENDOR_NUMBER is optional. When set, the sales and finance report tools are enabled.
Related MCP server: App Store Connect MCP Server
Tools
Area | Tools |
Apps |
|
Versions |
|
Version localizations |
|
App info localizations (name / subtitle) |
|
Screenshots |
|
Asset Library (iOS 27 creative assets, iPhone Duo) |
|
In-app purchases |
|
In-app purchase localizations |
|
In-app purchase price, availability & review |
|
App Review information |
|
Age rating & categories |
|
App price & availability |
|
TestFlight |
|
Bundle IDs |
|
Devices & users |
|
Analytics |
|
Sales & finance (vendor number required) |
|
Xcode |
|
Notes:
upload_app_screenshothandles the full reserve → upload → commit flow for a local PNG.create_app_screenshot_setexpects display types with theAPP_prefix, e.g.APP_IPHONE_67.Asset Library flow:
upload_asset_library_media(reserve → upload → commit → wait for processing) →create_asset_placementon a version localization.Product page header:
PRODUCT_PAGE_HEADER_ASSET, 21:9 3840×1646 PNG. Search results:APP_STORE_SEARCH_RESULTS_ASSET, 3:2 up to 3840×2560. A 16:9 5244×2950 PNG universal asset fits both. Both use placement groupDEFAULT_PROFILE, one per localization; upload with categoryCREATIVE_ASSETS.iPhone Duo screenshots have no legacy
screenshotDisplayType; upload with categoryAPP_SCREENSHOTS_AND_PREVIEWSand place asAPP_SCREENSHOTin groupIPHONE_DUO_PROFILE(2853×2007 / 2034×1398, or portrait).get_asset_library_ref_datareturns the live specs and placement groups.
When a new version is being prepared, the app has two app infos (live and editable). App info localization tools now resolve the editable one, so name/subtitle edits go to the version being prepared.
In-app purchase flow:
create_in_app_purchase→create_in_app_purchase_localizationper locale →list_in_app_purchase_price_points(e.g.territory: USA,customerPrice: "0.99") →set_in_app_purchase_price→set_in_app_purchase_availability→upload_in_app_purchase_review_screenshot.Since API 4.4.1, localizations belong to an in-app purchase version. A new in-app purchase comes with version 1 in
PREPARE_FOR_SUBMISSION; given onlyinAppPurchaseId, the localization tool posts to that draft version (v2) and falls back to the deprecated v1 endpoint if there is none. Update/delete try v2 first and fall back to v1 on 404.Price and availability tools replace the whole schedule / territory list.
excludeTerritoryIds: ["CHN"]selects every territory except mainland China. Territory IDs in both lists are checked, so a typo such asCNis rejected instead of being ignored.The first in-app purchase of an app has to be submitted together with an app version on the App Store Connect website; there is no submission tool here.
set_app_availabilitycreates the app's availability once (POST /v2/appAvailabilities, every territory listed withavailabletrue/false). After it exists, useupdate_territory_availabilitywith IDs fromget_app_availability.set_app_price_schedulewithfree: truelooks up the 0.00 price point in the base territory (defaultUSA).Age rating and category tools resolve the app's editable app info when given
appId.Analytics flow: request → reports → instances → segments → download. Only one
ONGOINGrequest is allowed per app.
Development
git clone https://github.com/yunyang088/app-store-connect-mcp-server.git
cd app-store-connect-mcp-server
npm install
npm run build # compile TypeScript to dist/
npm start # run the server on stdioLicense
MIT
Available Tools
36 toolsadd_tester_to_groupB
Add a new tester to a beta group
Inputs: email (required), groupId (required), lastName (required), firstName (required).
create_analytics_report_requestC
Create a new analytics report request for an app
Inputs: appId (required), accessType.
create_app_info_localizationA
Create a new app info localization (localized app name/subtitle). Provide either appInfoId directly, or appId to resolve the current (non-REPLACED) app info automatically.
Inputs: locale (required), name, appId, subtitle, +4 more.
create_app_screenshot_setA
Create a new screenshot set for an app store version localization. The screenshotDisplayType must carry the APP_ prefix, e.g. APP_IPHONE_65, APP_IPHONE_67, APP_IPAD_PRO_3GEN_129 (a bare value like IPHONE_65 is rejected with a 409 error).
Inputs: screenshotDisplayType (required), appStoreVersionLocalizationId (required).
create_app_store_versionB
Create a new app store version for an app
Inputs: appId (required), platform (required), versionString (required), buildId, +3 more.
create_app_store_version_localizationB
Create a new localization for an app store version (e.g. to add a new language)
Inputs: locale (required), appStoreVersionId (required), keywords, whatsNew, +4 more.
create_bundle_idB
Register a new bundle ID for app development
Inputs: name (required), platform (required), identifier (required), seedId.
delete_app_screenshotC
Delete a screenshot from a screenshot set
Inputs: appScreenshotId (required).
disable_bundle_capabilityB
Disable a capability for a bundle ID
Inputs: capabilityId (required).
download_analytics_report_segmentB
Download an analytics report segment and return it as TSV text (gzip is decompressed)
Inputs: segmentUrl (required), maxChars.
enable_bundle_capabilityB
Enable a capability for a bundle ID
Inputs: bundleIdId (required), capabilityType (required), settings.
get_app_infoB
Get detailed information about a specific app
Inputs: appId (required), include.
get_app_store_version_localizationA
Get detailed information about a specific app store version localization
Inputs: localizationId (required).
get_beta_feedback_screenshotA
Get detailed information about a specific beta feedback screenshot submission. By default, downloads and returns the screenshot image.
Inputs: feedbackId (required), includeBuilds, includeTesters, downloadScreenshot.
get_bundle_id_infoB
Get detailed information about a specific bundle ID
Inputs: bundleIdId (required), fields, include.
list_analytics_report_instancesA
List generated instances (daily/weekly/monthly files) of an analytics report. Flow: request -> reports -> instances -> segments -> download
Inputs: reportId (required), limit, granularity, processingDate.
list_analytics_report_requestsA
List existing analytics report requests for an app (check before creating; only one ONGOING request is allowed per app)
Inputs: appId (required).
list_analytics_reportsC
Get available analytics reports for a specific report request
Inputs: reportRequestId (required), limit, filter.
list_analytics_report_segmentsB
Get segments of an analytics report instance (contains download URLs)
Inputs: instanceId (required), limit.
list_app_info_localizationsA
List all app info localizations (localized app name/subtitle) for an app. Resolves the current (non-REPLACED) app info automatically.
Inputs: appId (required), limit.
list_appsA
Get a list of all apps in App Store Connect
Inputs: limit.
list_app_screenshotsB
List all screenshots in a screenshot set
Inputs: appScreenshotSetId (required), limit.
list_app_screenshot_setsB
List all screenshot sets for an app store version localization
Inputs: appStoreVersionLocalizationId (required), limit.
list_app_store_version_localizationsB
Get all localizations for a specific app store version
Inputs: appStoreVersionId (required), limit.
list_app_store_versionsB
Get all app store versions for a specific app
Inputs: appId (required), limit, filter.
list_beta_feedback_screenshotsB
List all beta feedback screenshot submissions for an app. This includes feedback with screenshots, device information, and tester comments. You can identify the app using either appId or bundleId.
Inputs: sort, appId, limit, buildId, +8 more.
list_beta_groupsA
Get a list of all beta groups (internal and external)
Inputs: limit.
list_bundle_idsB
Find and list bundle IDs that are registered to your team
Inputs: sort, limit, filter, include.
list_devicesC
Get a list of all devices registered to your team
Inputs: sort, limit, fields, filter.
list_group_testersB
Get a list of all testers in a specific beta group
Inputs: groupId (required), limit.
list_schemesB
List all available schemes in an Xcode project or workspace
Inputs: projectPath (required).
list_usersB
Get a list of all users registered on your App Store Connect team
Inputs: sort, limit, filter, include.
remove_tester_from_groupB
Remove a tester from a beta group
Inputs: groupId (required), testerId (required).
update_app_info_localizationB
Update a specific field in an app info localization (localized app name/subtitle)
Inputs: field (required), value (required), appInfoLocalizationId (required).
update_app_store_version_localizationB
Update a specific field in an app store version localization
Inputs: field (required), value (required), localizationId (required).
upload_app_screenshotB
Upload a local PNG file to a screenshot set. Runs the full three-step flow: reserve the screenshot, upload the file chunks, then commit with the md5 checksum.
Inputs: filePath (required), appScreenshotSetId (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 36 tools
Most tools target distinct resources and actions, with clear descriptions separating similar-sounding tools like list_app_info_localizations and list_app_store_version_localizations. However, the presence of multiple localization and analytics tools with similar names could cause misselection without careful reading.
All tool names follow a consistent snake_case verb_noun pattern (e.g., list_apps, create_bundle_id, update_app_info_localization). Verbs are standard and used uniformly across resources.
With 36 tools, the set is heavy for an MCP server, though the breadth of App Store Connect resources justifies some granularity. Many operations are resource-specific and could potentially be consolidated, making the count borderline excessive.
The server covers many resources but lacks full CRUD for several key areas: no app creation/update/delete, no beta group management (only tester add/remove), no device registration, and no user management. These notable gaps will limit agents in end-to-end workflows.
Related MCP Connectors
App Store Connect operator for AI agents: icons, TestFlight builds, listings, IAP, rejection fixes.
Run App Store Connect from your IDE: pricing, listings, screenshots, releases, AI visibility.
Ship a new iOS app from chat. AI runs App Store Connect, builds, release, and submission through Ap…
App Store keyword rankings, competitors, markets, reviews and analytics for iOS apps, from your AI.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to manage Apple App Store Connect through the official API, including apps, metadata, reviews, TestFlight, provisioning, users, and reports.MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to manage Apple App Store Connect resources like apps, builds, TestFlight, and reviews through natural language.209 npmMIT
- AlicenseNot gradedqualityFmaintenanceEnables AI agents to manage App Store Connect apps, including registering bundle IDs, uploading metadata and screenshots, setting age ratings, managing TestFlight groups and testers, and submitting apps for review.MIT
- AlicenseCqualityDmaintenanceEnables management of App Store Connect resources including app reviews, TestFlight crashes, analytics reports, and Xcode Cloud workflows through natural language or AI agents.401MIT