appstore-connect-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ASC_KEY_ID | Yes | The Key ID from your App Store Connect Team API Key. | |
| ASC_ISSUER_ID | Yes | The Issuer ID from your App Store Connect Team API Key. | |
| ASC_PRIVATE_KEY_PATH | Yes | Path to the downloaded .p8 private key file. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| asc_apps_listA | Read-only. Lists all apps visible to this App Store Connect account: name, bundle id, SKU, primary locale, and App Store Connect app id. Use this to discover which apps exist before calling other tools. |
| asc_app_getA | Read-only. Gets details for a single app. Identify it by bundle id (e.g. io.tmkch.colorvia), app name (e.g. Colorvia), or numeric App Store Connect app id — you never need to know the numeric id yourself. |
| asc_builds_listA | Read-only. Lists uploaded builds for an app (build id, version/build number, upload date, processing state, whether it has expired), most recent first. |
| asc_build_getA | Read-only. Gets a single build by its App Store Connect build id or version/build number. |
| asc_build_statusA | Read-only. Gets just the processing state (e.g. PROCESSING, VALID, INVALID, FAILED) and expiration flag for a build — use this to poll after an upload. |
| asc_build_latestA | Read-only. Finds the highest build number (CFBundleVersion) already uploaded for an app — optionally scoped to a marketing version and/or platform — and suggests the next one. Use this before an Xcode MCP build/archive step to decide what build number to set, since this server never writes to the Xcode project itself. |
| asc_build_uploadA | Write. Uploads a build binary (.ipa for iOS/tvOS/visionOS, .pkg for macOS) to App Store Connect: creates the upload, sends the file in Apple's required chunks, and commits it with an MD5 checksum. Processing then continues on Apple's servers — poll asc_build_upload_status, then asc_builds_list, to see it finish and become a usable build. |
| asc_build_upload_statusA | Read-only. Gets the state (AWAITING_UPLOAD, PROCESSING, FAILED, COMPLETE) of a build upload started with asc_build_upload, plus any validation errors/warnings Apple reported. |
| asc_beta_groups_listA | Read-only. Lists TestFlight beta tester groups for an app (e.g. "Internal Testers"), including whether each is the internal group and whether public link sharing is enabled. |
| asc_beta_group_add_buildA | Write. Adds an already-uploaded build to a TestFlight beta group, making it available to that group's testers. The build must already exist in App Store Connect (see asc_builds_list) — this tool does not upload builds. |
| asc_beta_build_localization_getA | Read-only. Gets the per-locale TestFlight "What to Test" notes for a build. Returns all locales unless a specific one is given. |
| asc_beta_build_localization_updateA | Write. Updates the "What to Test" notes shown to testers for a build/locale. The localization must already exist for that locale (Apple creates these automatically after processing) — use asc_beta_build_localization_get to check first. |
| asc_beta_build_statusA | Read-only. Gets a build's processing state plus its internal/external TestFlight beta review state, for checking whether a build is ready to distribute to testers. |
| asc_versions_listA | Read-only. Lists all App Store versions for an app (version string, platform, App Store review state, created date, copyright, releaseType, earliestReleaseDate). |
| asc_version_getA | Read-only. Gets a single App Store version by its version string. |
| asc_version_createA | Write. Creates a new App Store Version for an app, e.g. "prepare 1.1 for review". Optionally sets copyright, releaseType (MANUAL/AFTER_APPROVAL/SCHEDULED), and earliestReleaseDate. This does not submit anything for review. Supports dryRun to preview without creating. |
| asc_version_updateA | Write. Partially updates an existing App Store version: versionString, copyright, releaseType (MANUAL/AFTER_APPROVAL/SCHEDULED), earliestReleaseDate. Supports dryRun to preview the change as an old → new diff without applying it. |
| asc_version_select_buildA | Write. Sets which uploaded build an App Store version will ship. Supports dryRun to preview without applying. |
| asc_version_ensureA | Write. Returns the App Store version if it already exists, or creates it if not — saving the agent from a manual get/exists-check/create/conflict sequence. Returns { version, created }. Supports dryRun. |
| asc_metadata_getA | Read-only. Gets localized App Store metadata (description, keywords, promotional text, what's new, support URL, marketing URL) for a version. Locale must be explicit — returns all locales unless one is given. |
| asc_metadata_updateA | Write. Partially updates localized App Store metadata for a version/locale (description, keywords, promotionalText, whatsNew, supportUrl, marketingUrl). Locale is required and must be explicit (e.g. en-US, ja). Supports dryRun to preview the change as an old → new diff without applying it. |
| asc_metadata_create_localeA | Write. Creates a new localization for a version, e.g. adding Japanese ("ja") to a version that only has en-US. Fails if the locale already exists — use asc_metadata_update for existing locales. Fields are optional and can be filled in now or later with asc_metadata_update. Supports dryRun. |
| asc_screenshot_sets_listA | Read-only. Lists the App Store screenshot sets (one per device display type, e.g. APP_IPHONE_67) for a version/locale. |
| asc_screenshot_uploadA | Write. Uploads a local screenshot image file to App Store Connect for a version/locale/display type, creating the screenshot set first if one doesn't already exist for that display type. |
| asc_screenshot_deleteA | DESTRUCTIVE. Permanently removes a single screenshot from App Store Connect. Get the screenshot id from asc_screenshot_sets_list results (each set's screenshots) before calling this. |
| asc_submission_statusA | Read-only. Gets the App Store review state for a version (e.g. PREPARE_FOR_SUBMISSION, WAITING_FOR_REVIEW, IN_REVIEW, REJECTED, READY_FOR_SALE) and whether it has been submitted. |
| asc_submit_for_reviewA | DESTRUCTIVE / RELEASE-CLASS. Submits a version for App Review via the current ReviewSubmission API — this changes real, public-facing App Store state and cannot be trivially undone. Always runs asc_release_preflight first and refuses to proceed if any check fails. Always shows a native macOS confirmation dialog (with the preflight summary) to the human user and never submits silently just because it was called; it only proceeds if the human explicitly clicks Submit. |
| asc_review_getA | Read-only. Gets the reviewer-only info for a version: contact name/phone/email, demo account requirement/name, and review notes. Never returns the demo account password — only whether one is configured (demoAccountConfigured). |
| asc_review_updateA | Write. Partially updates reviewer-only info: contact name/phone/email, demoAccountRequired, demoAccountName, demoAccountPassword, notes. Password is accepted as write-only input — it is never echoed back in this tool's result, in dryRun output, or in logs. Supports dryRun. |
| asc_age_rating_getA | Read-only. Gets the current App Store age rating questionnaire answers for an app (content descriptors, Kids Age Band, age rating overrides). |
| asc_age_rating_updateA | Write. Partially updates the age rating questionnaire for an app using Apple's current field set and enum values (content descriptors are NONE/INFREQUENT/FREQUENT). Supports dryRun to preview the change as an old → new diff without applying it. |
| asc_build_waitA | Read-only (polls, doesn't change anything). Waits for a build (processingState) or a build upload (BuildUpload state) to reach a terminal state — VALID/COMPLETE (success) or FAILED/INVALID (failure) — polling on an interval up to a timeout. Give exactly one of buildId or buildUploadId. Returns SUCCESS, FAILED, TIMEOUT, or CANCELLED, plus Apple's last-seen state, any errors, and when it was last checked. |
| asc_app_info_localizations_listA | Read-only. Lists app-level localized fields (name, subtitle, privacy policy URL/text, privacy choices URL) for every locale. Distinct from asc_metadata_get, which covers per-version fields like description/keywords. |
| asc_app_info_localization_getA | Read-only. Gets app-level localized fields for a single locale. |
| asc_app_info_localization_createA | Write. Creates app-level localized fields (name, subtitle, privacy policy) for a new locale, e.g. adding "ja". Fails if the locale already exists — use asc_app_info_localization_update for existing locales. Supports dryRun. |
| asc_app_info_localization_updateA | Write. Partially updates app-level localized fields (name, subtitle, privacy policy URL/text, privacy choices URL) for an existing locale. Supports dryRun to preview the change as an old → new diff without applying it. |
| asc_availability_getA | Read-only. Gets which App Store territories an app is currently available in. |
| asc_availability_updateA | Write. Replaces the full set of territories an app is available in. Use 3-letter territory codes (e.g. "JPN", "USA", "GBR", "CAN") or the literal "ALL" to expand to every currently active App Store territory (fetched live from Apple). Unknown codes are rejected before any change is made. Supports dryRun to preview enable/disable changes per territory. |
| asc_pricing_getA | Read-only. Gets whether an app's price schedule is configured, its base territory, and whether it's currently free (isFree is null if no schedule is configured yet). |
| asc_pricing_set_freeA | Write. Sets the app's price to free by scheduling the $0 price point in the base territory (Apple equalizes $0 across all other territories/currencies automatically). Paid price points are not supported by this tool. Supports dryRun. |
| asc_content_rights_getA | Read-only. Gets whether the app declares it uses third-party content requiring rights (contentRightsDeclaration). |
| asc_content_rights_updateB | Write. Sets whether the app uses third-party content requiring rights. Supports dryRun to preview the change. |
| asc_release_syncA | Write. Reads /.appstore/appstore.yml + locale files and syncs App Info, version metadata, availability, age rating, review info, pricing, and content rights to App Store Connect — diffing local vs remote first, so unchanged fields are never re-written. One category failing doesn't stop the others. Screenshots and App Privacy are always reported separately (skipped / manual_required) since they aren't covered by this sync. Supports dryRun to preview every change without applying anything. |
| asc_release_preflightA | Read-only. Runs a comprehensive readiness check before submitting a version for App Review: app/version/build existence, build processing/selection, app name/subtitle/description/keywords/support URL/privacy policy URL, screenshots, review contact/demo account, age rating, pricing, availability, content rights, export compliance (if detectable), the App Privacy questionnaire (always manual_required — no public API), and current submission state. Each check reports pass/fail/warning/manual_required; |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/tomoki013/appstore-connect-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server