App Store Connect MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ASC_KEY_ID | Yes | Your App Store Connect API key ID | |
| ASC_ISSUER_ID | Yes | Your App Store Connect API issuer ID | |
| ASC_PRIVATE_KEY_PATH | Yes | Path to your .p8 private key file |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_api_operationsB | Search the complete official Apple App Store Connect OpenAPI catalog. Covers provisioning, users, TestFlight, releases, metadata, pricing, screenshots, analytics, Xcode Cloud and more. No network request. |
| get_api_operationA | Get exact parameters and request schemas, including referenced definitions, for an Apple operation before executing it. No network request. |
| read_apiA | Execute an official Apple GET operation after schema validation. Returns one unflattened JSON:API page with relationships, included resources and pagination links. Pass cursor from links.next for another page. Binary reports return base64. |
| write_apiA | Execute a schema-validated official Apple POST/PATCH/DELETE operation. Changes production Apple data; only use within the user's authorized scope. dryRun validates without a network call. Cannot create a new app record: Apple requires its website. |
| create_beta_groupA | Create an internal or external TestFlight group. External public links are optional. Internal testers must already be eligible ASC team users. |
| update_beta_groupC | Rename a TestFlight group or enable/disable its public invitation link and tester limit. |
| create_beta_testerB | Create/invite a TestFlight tester by email and assign to groups. May send invitation email. For internal testing, the user must already have the appropriate ASC team access. |
| add_testers_to_beta_groupB | Add existing TestFlight testers to a group. Adding may send invitations. |
| remove_testers_from_beta_groupC | Remove existing TestFlight testers from a group. Adding may send invitations. |
| submit_beta_reviewA | Submit a processed build for TestFlight external Beta App Review, after completing beta app description, review contacts and export compliance. This is separate from App Store review. |
| get_beta_review_statusB | Read TestFlight Beta App Review state for a build. |
| set_build_export_complianceC | Declare whether a build uses non-exempt encryption. Use the app's actual export-compliance determination. |
| set_beta_build_localizationA | Create or update localized What to Test text for a TestFlight build. Supply localizationId to update an existing locale. |
| upload_buildA | Upload a ready, signed local .ipa/.pkg/.zip using Apple's Build Upload API. Streams chunks and commits the checksum. Does not compile, sign, distribute or submit review. For large builds prefer the CLI to avoid host tool-call timeouts. On failure inspect returned reservation IDs before retrying. |
| upload_reserved_assetA | Upload a local file into an existing Apple reservation and commit its checksum. Supports screenshots, app previews, review attachments and build files. Create the reservation through write_api first; upload instructions are fetched directly from Apple. |
| list_appsB | List all apps in your App Store Connect account |
| get_appB | Get details for a specific app by its App Store Connect ID |
| list_app_versionsB | List all App Store versions for an app |
| list_buildsA | List builds for an app, optionally filtered by version or processing state |
| get_buildB | Get details for a specific build |
| list_beta_groupsB | List TestFlight beta groups for an app |
| add_build_to_beta_groupC | Assign a build to a TestFlight beta group |
| list_beta_testersA | List TestFlight beta testers, optionally filtered by beta group |
| get_review_statusC | Get the current review status for an app store version |
| get_review_submissionB | Get the latest review submission for an app, including rejection reasons if any |
| list_app_store_version_localizationsB | List localizations for an app store version (descriptions, what's new, keywords per locale) |
| submit_for_reviewA | Submit an app version for App Store review: resolve/reuse a draft submission, attach the version and set submitted=true. Separate from TestFlight beta review. On failure inspect and resume the returned submission ID. |
| list_iapsA | List all in-app purchases for an app |
| get_iapB | Get details for a specific in-app purchase |
| create_iapC | Create a new in-app purchase |
| update_iapC | Update an existing in-app purchase |
| delete_iapA | Delete a draft in-app purchase (only works if not yet submitted for review) |
| list_iap_localizationsA | List localizations (display names, descriptions) for an in-app purchase |
| set_iap_localizationC | Create or update a localization for an in-app purchase |
| set_iap_priceB | Set or update the price for an in-app purchase using a price point ID |
| submit_iap_for_reviewA | Submit an in-app purchase for review independently of the app version |
| list_subscription_groupsC | List subscription groups for an app |
| create_subscription_groupC | Create a new subscription group for an app |
| list_subscriptionsB | List subscriptions within a subscription group |
| create_subscriptionC | Create a new auto-renewable subscription |
| update_subscriptionC | Update an existing subscription |
| list_subscription_localizationsB | List localizations (display names, descriptions) for a subscription |
| set_subscription_localizationC | Create or update a localization for a subscription |
| list_subscription_price_pointsA | List available price points for a subscription, optionally filtered by territory |
| set_subscription_priceC | Set a price point for a subscription |
| list_subscription_offersB | List promotional offers for a subscription |
| create_subscription_offerC | Create a promotional offer for a subscription |
| list_custom_product_pagesA | List all custom product pages for an app |
| create_custom_product_pageC | Create a new custom product page for an app |
| get_custom_product_pageC | Get details for a specific custom product page |
| update_custom_product_pageB | Update a custom product page name or visibility |
| list_experimentsB | List all A/B test experiments for an app store version |
| get_experimentB | Get details for a specific A/B test experiment |
| create_experimentC | Create a new A/B test experiment for an app store version |
| start_experimentC | Start running an A/B test experiment |
| stop_experimentC | Stop a running A/B test experiment |
| get_experiment_resultsB | Get results for an A/B test experiment including conversion rates per treatment |
| update_app_descriptionB | Update the app description for a specific locale |
| update_whats_newC | Update the 'What's New' text for a specific locale |
| update_keywordsC | Update the keywords for a specific locale |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 60 tools
Most specialized tools target distinct resources and actions, but the generic read_api/write_api tools overlap with nearly every specific list/get/create/update tool. upload_build and upload_reserved_asset also overlap for build-file uploads. Descriptions help clarify intent, but an agent still faces real selection ambiguity.
Tool names consistently use snake_case with a verb-first noun pattern (list_apps, get_build, create_iap, set_subscription_price, submit_for_review). Even the generic API tools follow the same convention. There is no mixed casing or chaotic verb style.
At 60 tools, the surface is far beyond a well-scoped set and exceeds the rubric's 50+ extreme threshold. While App Store Connect is a broad domain, this many tools creates substantial selection overhead and increases the chance of choosing the wrong operation.
Core App Store Connect workflows are well covered: apps, versions, builds, TestFlight, review submission, IAPs, subscriptions, pricing, experiments, custom product pages and localizations. Some gaps remain, such as app-level metadata beyond description/whats-new/keywords and user/provisioning operations, but the search/read/write API tools provide a general escape hatch.