App Store Connect MCP
Provides tools for managing iOS and macOS apps, TestFlight beta testing, in-app subscriptions, and App Store metadata through the official App Store Connect API.
Enables management of App Store Connect resources such as apps, builds, app store versions, review submissions, customer reviews, and pricing.
Integrates with App Store Connect to manage iOS app lifecycle, including TestFlight builds, beta groups, and app store version localizations.
Integrates with App Store Connect to manage macOS app lifecycle, including TestFlight builds, beta groups, and app store version localizations.
Provides tools to list Xcode schemes and CI products associated with the developer's App Store Connect account.
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 list my iOS 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.
A Model Context Protocol (MCP) server that connects Cursor, Claude Desktop, and other MCP clients to the official App Store Connect API—so you can manage iOS/macOS apps, TestFlight, in-app subscriptions, and store metadata via chat or automated tool calls instead of clicking through the App Store Connect UI.
Use it to: list and inspect apps, builds, and beta groups · manage TestFlight testers and review submissions · create and update subscription groups and prices · edit App Store version localizations and "What's New" · download sales and finance reports · list Xcode schemes and CI products. All with JWT auth and the same API Apple's own tools use.
Install
Cursor (install link):
Other clients (Claude Desktop, etc.):
npx add-mcp mcp-ascRelated MCP server: App Store Connect MCP Server
Configure
Add the server to your MCP config and set these environment variables:
Variable | Required | Description |
| Yes | API Key ID from App Store Connect |
| Yes | Issuer ID from App Store Connect |
| Yes | Path to your |
| For reports | Needed for sales/finance reports |
Create an API key at App Store Connect → Users and Access → Integrations → App Store Connect API. Download the .p8 and note Key ID and Issuer ID.
Example (stdio):
{
"mcpServers": {
"app-store-connect": {
"command": "npx",
"args": ["-y", "mcp-asc"],
"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_XXXXX.p8",
"APP_STORE_CONNECT_VENDOR_NUMBER": "YOUR_VENDOR_NUMBER_OPTIONAL"
}
}
}
}Example (HTTP SSE): Run npm run build then npm run start:http. Point your client at http://localhost:3001/mcp with the same env vars.
Tools
Tools are exposed in kebab-case. Use your MCP client to list them and see parameters. Summary by area:
Apps & metadata
list-apps,get-app,list-app-infos,get-app-info,get-app-availabilitylist-app-store-versions,get-app-store-version,create-app-store-version,update-app-store-versionlist-app-store-version-localizations,list-app-categories,list-app-encryption-declarations,list-nominations
TestFlight / Beta
list-beta-groups,get-beta-group,list-beta-testers,get-beta-tester,add-beta-testers-to-group,remove-beta-testers-from-grouplist-builds,get-build,list-build-beta-details,list-pre-release-versions,get-pre-release-versionlist-beta-app-localizations,list-beta-app-review-details,list-beta-app-review-submissions,list-beta-license-agreements,get-beta-license-agreement,update-beta-license-agreement
Subscriptions
list-subscription-groups,list-subscription-group-subscriptions,get-subscription,create-subscription-group,create-subscriptioncreate-subscription-availability,list-subscription-price-points,create-subscription-price,create-subscription-localization
Store & review
list-review-submissions,get-review-submission,submit-for-review,list-customer-reviews,create-customer-review-responseget-app-store-review-detail,update-app-store-review-detail
Other
list-bundle-ids,get-bundle-id·list-certificates,get-certificate·list-profiles·list-devices,get-devicelist-users,get-user,list-user-invitations·list-territories·list-actors,get-actorget-eula,update-eula·get-phased-release,create-phased-release·update-age-rating-declarationlist-schemes(Xcode),list-ci-products(Xcode Cloud)download-sales-report,download-finance-report(requireAPP_STORE_CONNECT_VENDOR_NUMBER)
Development
Built with xmcp. One tool per file under src/tools/; each file exports metadata and a default handler.
npm install
npm run build
npm run start:stdio # or npm run start:http for HTTP transport
npm run dev # watch + runNode 20+.
Open Plugins
This repository now includes Open Plugins-compatible metadata and layout:
.plugin/plugin.jsonfor plugin metadata.mcp.jsonfor MCP server wiringskills/app-store-connect/SKILL.mdfor installable skill context
Open Plugins standard: open-plugins.com
You can test locally by loading the plugin directory in a compatible host, for example:
claude --plugin-dir .Listing in MCP catalogs
To add this server to the official MCP Registry, Cursor MCP Directory, cursor.store, and other catalogs, see docs/REGISTRY.md.
License
MIT.
Links
Available Tools
69 toolsadd-beta-testers-to-groupAdd beta testers to groupAIdempotent
Add one or more beta testers to a TestFlight group. Tester IDs come from list-beta-testers.
Inputs: betaGroupId (required), betaTesterIds (required).
create-app-store-versionCreate app store versionA
Create a new App Store version for an app (platform + version string). Optionally attach a build.
Inputs: appId (required), platform (required), versionString (required), buildId, +2 more.
create-customer-review-responseCreate customer review responseA
Reply to an App Store customer review. One response per review; use list-customer-reviews to get review IDs.
Inputs: responseBody (required), customerReviewId (required).
create-phased-releaseCreate phased releaseA
Enable phased release for an App Store version (gradual rollout to users). Version must be approved or already in release.
Inputs: appStoreVersionId (required), phasedReleaseState.
create-subscriptionCreate subscriptionA
Create an auto-renewable subscription in a subscription group. Requires productId (permanent) and name. Then add localizations and prices (create-subscription-localization, create-subscription-price).
Inputs: name (required), productId (required), subscriptionGroupId (required), groupLevel, +3 more.
create-subscription-availabilityCreate subscription availabilityA
Set which territories the subscription is available in. Call this before create-subscription-price; otherwise adding a price often returns 409 ENTITY_ERROR.RELATIONSHIP.INVALID.
Inputs: territoryIds (required), subscriptionId (required), availableInNewTerritories.
create-subscription-groupCreate subscription groupA
Create a subscription group (container for auto-renewable subscriptions). Then add subscriptions with create-subscription.
Inputs: appId (required), referenceName (required).
create-subscription-localizationCreate subscription localizationA
Create a localized name/description for a subscription. Add one per locale (e.g. en-US, de-DE). Required for submission.
Inputs: name (required), locale (required), subscriptionId (required), description.
create-subscription-priceCreate subscription priceA
Attach a price to a subscription (by price point and optionally territory). Set subscription availability first with create-subscription-availability for the territory, or you may get 409 ENTITY_ERROR.RELATIONSHIP.INVALID. Use price point IDs from list-subscription-price-points; when you used filter.territory there, pass that same territoryId here.
Inputs: subscriptionId (required), subscriptionPricePointId (required), startDate, territoryId, +1 more.
download-finance-reportDownload finance reportARead-onlyIdempotent
Download a finance report (gzip TSV). Requires APP_STORE_CONNECT_VENDOR_NUMBER. Returns decompressed tab-delimited text.
Inputs: regionCode (required), reportDate (required), reportType, vendorNumber.
download-sales-reportDownload sales reportARead-onlyIdempotent
Download a sales and trends report (gzip TSV). Requires APP_STORE_CONNECT_VENDOR_NUMBER. Returns decompressed tab-delimited text.
Inputs: frequency (required), reportDate (required), version, reportType, +2 more.
get-actorGet actorARead-onlyIdempotent
Get actor (user or API key) by ID. Actors appear in review submissions and version history. Use list-actors with known IDs to resolve.
Inputs: actorId (required).
get-appGet appARead-onlyIdempotent
Get detailed information about a specific app
Inputs: appId (required), include.
get-app-availabilityGet app availabilityARead-onlyIdempotent
Get app availability (territories where the app is available). Use list-territories for territory list.
Inputs: appId (required).
get-app-infoGet app infoARead-onlyIdempotent
Get app info for one territory: age rating, category, app store state. IDs from list-app-infos.
Inputs: appInfoId (required).
get-app-store-review-detailGet app store review detailARead-onlyIdempotent
Get App Review details for an App Store version: contact info, demo account, notes for reviewers. Set these before submitting for review.
Inputs: appStoreVersionId (required).
get-app-store-versionGet app store versionARead-onlyIdempotent
Get detailed information about a specific App Store version (metadata, state, build link)
Inputs: appStoreVersionId (required).
get-beta-groupGet beta groupBRead-onlyIdempotent
Get detailed information about a specific beta group
Inputs: betaGroupId (required).
get-beta-license-agreementGet beta license agreementARead-onlyIdempotent
Get TestFlight beta license agreement text for an app. Update with update-beta-license-agreement.
Inputs: betaLicenseAgreementId (required).
get-beta-testerGet beta testerARead-onlyIdempotent
Get detailed information about a specific beta tester
Inputs: betaTesterId (required).
get-buildGet buildARead-onlyIdempotent
Get detailed information about a specific build
Inputs: buildId (required).
get-bundle-idGet bundle IDARead-onlyIdempotent
Get detailed information about a specific bundle ID
Inputs: bundleIdId (required).
get-certificateGet certificateARead-onlyIdempotent
Get detailed information about a specific signing certificate
Inputs: certificateId (required).
get-deviceGet deviceARead-onlyIdempotent
Get detailed information about a specific registered device
Inputs: deviceId (required).
get-eulaGet EULAARead-onlyIdempotent
Get End User License Agreement (EULA) for an app. Returns agreement text and territory. Create/update via update-eula or App Store Connect UI.
Inputs: appId (required).
get-phased-releaseGet phased releaseARead-onlyIdempotent
Get phased release for an App Store version (gradual rollout state). Returns 404 if version has no phased release.
Inputs: appStoreVersionId (required).
get-pre-release-versionGet pre-release versionARead-onlyIdempotent
Get detailed information about a specific pre-release (TestFlight) version
Inputs: preReleaseVersionId (required).
get-review-submissionGet review submissionARead-onlyIdempotent
Get a single App Store review submission by ID (state, items, app, etc.)
Inputs: reviewSubmissionId (required), include.
get-subscriptionGet subscriptionARead-onlyIdempotent
Get one subscription by ID: productId, name, state, prices, review screenshot, introductory/promotional offers, etc.
Inputs: subscriptionId (required).
get-userGet userBRead-onlyIdempotent
Get detailed information about a team member (user)
Inputs: userId (required).
list-actorsList actorsARead-onlyIdempotent
List actors (users or API keys) by ID(s). Use when you have actor IDs from review submissions or version history.
Inputs: filter.id (required), limit.
list-app-categoriesList app categoriesARead-onlyIdempotent
List App Store categories (reference for app metadata)
Inputs: limit, exists.parent, filter.platforms.
list-app-encryption-declarationsList app encryption declarationsARead-onlyIdempotent
List app encryption declarations (export compliance, encryption usage)
Inputs: limit, filter.app, filter.builds, filter.platform.
list-app-infosList app infosARead-onlyIdempotent
List app infos for an app (one per territory): age rating, app store state, category. Use get-app-info for a single territory.
Inputs: appId (required), limit.
list-appsList appsBRead-onlyIdempotent
Get a list of all apps in App Store Connect
Inputs: limit, filter.id, filter.sku, filter.name, +1 more.
list-app-store-version-localizationsList app store version localizationsARead-onlyIdempotent
List localizations for a specific App Store version (metadata per locale)
Inputs: appStoreVersionId (required), limit, filter.locale.
list-app-store-versionsList app store versionsARead-onlyIdempotent
List App Store versions for an app (by app ID)
Inputs: appId (required), limit, filter.id, filter.platform, +2 more.
list-beta-app-localizationsList beta app localizationsARead-onlyIdempotent
List TestFlight (beta) app localizations (feedback email, marketing URL, description per locale)
Inputs: limit, filter.id, filter.app, filter.locale.
list-beta-app-review-detailsList beta app review detailsARead-onlyIdempotent
List TestFlight (beta) app review details for an app (contact info, demo account, notes)
Inputs: filter.app (required), limit, filter.id.
list-beta-app-review-submissionsList beta app review submissionsARead-onlyIdempotent
List TestFlight (beta) app review submissions for a build
Inputs: filter.build (required), limit, filter.betaReviewState.
list-beta-groupsList beta groupsARead-onlyIdempotent
Get a list of all beta groups (internal and external)
Inputs: limit, filter.id, filter.app, filter.name.
list-beta-license-agreementsList beta license agreementsARead-onlyIdempotent
List TestFlight (beta) license agreements. One per app. Use get-beta-license-agreement to read or update text.
Inputs: limit, filter.app.
list-beta-testersList beta testersARead-onlyIdempotent
Get a list of beta testers (optionally filter by app or beta group)
Inputs: limit, filter.id, filter.apps, filter.email, +3 more.
list-build-beta-detailsList build beta detailsARead-onlyIdempotent
List build beta details (export compliance, auto-notify, internal/external state) for TestFlight builds
Inputs: limit, filter.id, filter.build.
list-buildsList buildsARead-onlyIdempotent
List builds for an app (optionally filter by version)
Inputs: filter.app (required), limit, filter.id, filter.version, +3 more.
list-bundle-idsList bundle IDsARead-onlyIdempotent
Get a list of bundle IDs registered in your team
Inputs: limit, filter.id, filter.name, filter.platform, +1 more.
list-certificatesList certificatesARead-onlyIdempotent
Get a list of signing certificates in your team
Inputs: limit, filter.id, filter.displayName, filter.serialNumber, +1 more.
list-ci-productsList CI productsARead-onlyIdempotent
List Xcode Cloud CI products (integrations per app)
Inputs: limit, filter.app, filter.productType.
list-customer-reviewsList customer reviewsARead-onlyIdempotent
List App Store customer reviews for an app store version (rating, title, body, response)
Inputs: appStoreVersionId (required), sort, limit, filter.rating, +1 more.
list-devicesList devicesBRead-onlyIdempotent
Get a list of registered devices for development and testing
Inputs: limit, filter.id, filter.name, filter.udid, +2 more.
list-nominationsList nominationsARead-onlyIdempotent
List App Store nominations (e.g. custom product pages, in-app events)
Inputs: filter.state (required), limit, filter.type, filter.relatedApps.
list-pre-release-versionsList pre-release versionsARead-onlyIdempotent
List pre-release versions (TestFlight) for an app or across apps
Inputs: limit, filter.id, filter.app, filter.version, +1 more.
list-profilesList profilesARead-onlyIdempotent
Get a list of provisioning profiles in your team
Inputs: limit, filter.id, filter.name, filter.profileType, +1 more.
list-review-submissionsList review submissionsARead-onlyIdempotent
List App Store review submissions for an app (submission history). Filter by state (e.g. UNRESOLVED_ISSUES for rejected). Note: the actual rejection message is only visible in App Store Connect → Version → Resolution Center, not in the API.
Inputs: filter.app (required), limit, filter.state, filter.platform.
list-schemesList Xcode schemesARead-onlyIdempotent
List all available schemes in an Xcode project or workspace
Inputs: projectPath (required).
list-subscription-groupsList subscription groupsARead-onlyIdempotent
List subscription groups for an app. Use the returned group IDs with list-subscription-group-subscriptions or create-subscription.
Inputs: appId (required), limit, filter.referenceName.
list-subscription-group-subscriptionsList subscription group subscriptionsARead-onlyIdempotent
List all auto-renewable subscriptions in a subscription group (productId, name, state, prices, etc.). Use to verify products like premium_monthly_v2 and premium_annual_v2 in a group.
Inputs: subscriptionGroupId (required), sort, limit, filter.name, +2 more.
list-subscription-price-pointsList subscription price pointsARead-onlyIdempotent
List available price points for a subscription. Use the returned price point id as subscriptionPricePointId in create-subscription-price.
Inputs: subscriptionId (required), limit, filter.territory.
list-territoriesList territoriesARead-onlyIdempotent
Get the list of territories (countries/regions) for App Store availability
Inputs: limit.
list-user-invitationsList user invitationsARead-onlyIdempotent
Get a list of pending user invitations to your team
Inputs: limit, filter.email, filter.roles, filter.visibleApps.
list-usersList usersARead-onlyIdempotent
Get a list of team members (users) in your App Store Connect team
Inputs: limit, filter.roles, filter.username, filter.visibleApps.
remove-beta-testers-from-groupRemove beta testers from groupAIdempotent
Remove one or more beta testers from a TestFlight group. Tester IDs come from list-beta-testers.
Inputs: betaGroupId (required), betaTesterIds (required).
submit-for-reviewSubmit for reviewA
Submit an App Store version for review. Creates a review submission, adds the version as an item, and marks it as submitted.
Inputs: appId (required), appStoreVersionId (required), platform.
update-age-rating-declarationUpdate age rating declarationA
Update age rating declaration for an app version (content ratings). Get ID from get-app-info or get-app-store-version include.
Inputs: ageRatingDeclarationId (required), gambling, advertising, gamblingSimulated, +12 more.
update-app-store-review-detailUpdate app store review detailA
Update App Review details for a version: contact, demo account, notes. Required before submit for review if app needs login or special instructions.
Inputs: appStoreReviewDetailId (required), notes, contactEmail, contactPhone, +5 more.
update-app-store-versionUpdate app store versionB
Update an App Store version: assign a build, set version string, copyright, release type, or downloadable flag.
Inputs: appStoreVersionId (required), buildId, copyright, releaseType, +2 more.
update-app-store-version-localizationUpdate app store version localizationA
Update localized metadata (description, keywords, URLs, what's new, promotional text) for a specific App Store version locale. Get the localization ID from list-app-store-version-localizations.
Inputs: appStoreVersionLocalizationId (required), keywords, whatsNew, supportUrl, +3 more.
update-beta-license-agreementUpdate beta license agreementA
Update TestFlight (beta) license agreement text. Required for external testing.
Inputs: agreementText (required), betaLicenseAgreementId (required).
update-eulaUpdate EULAA
Update app EULA text and/or territories. Get EULA ID from get-eula.
Inputs: eulaId (required), territoryIds, agreementText.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 69 tools
Most tools have clear resource+action names, but a few closely related pairs like create-subscription-availability and create-subscription-price could cause confusion. Overall, an agent can reliably distinguish tools based on their names and descriptions.
All tools follow a consistent kebab-case verb_noun pattern (e.g., list-apps, get-build, create-subscription). Verbs like get/list/create/update/remove/add are used predictably.
With 69 tools, the server is heavily over-scoped compared to typical MCP servers, making it difficult for an agent to manage. While the App Store Connect API is large, the tool count exceeds the recommended range and is overwhelming.
The tool set covers many core workflows for app versions, TestFlight, subscriptions, and review submissions, but notable gaps exist: no create/delete operations for beta testers, bundle IDs, certificates, or app store version localizations. These gaps may require workarounds but do not entirely block common tasks.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
MCP connector for iMessage & Contacts via a local Mac agent + Vercel relay
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server for App Store Connect API with 208 tools across 25 workers. Manage apps, builds, TestFlight, in-app purchases, subscriptions, reviews, provisioning, screenshots, analytics, and more — directly from Claude, Cursor, VS Code, or any MCP client. Multi-account support, worker filtering, JWT auth.84MIT
- AlicenseAqualityBmaintenanceA 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.52175 npm23MIT
- AlicenseAqualityBmaintenanceAn opinionated MCP server for App Store Connect that provides 13 curated tools, slash-command workflows, and a Claude Skill to manage apps, reviews, sales, and pre-submission audits via natural language.41880 npm1MIT
- AlicenseBqualityBmaintenanceA Model Context Protocol server that wraps Apple's App Store Connect API v2, enabling management of apps, in-app purchases, subscriptions, TestFlight, product page experiments, and App Review submissions via natural language.601MIT