Appstoreconnect MCP Server

App Store Connect for MCP clients: PPP pricing, subscriptions, TestFlight, reviews, reports & more

Local serverstdioGo

What is the Appstoreconnect MCP Server?

App Store Connect for MCP clients: PPP pricing, subscriptions, TestFlight, reviews, reports & more

The short version

The first published surface is subscription pricing — including a Purchasing Power Parity rebalance flow that's already been used to schedule 120 production price changes across 65 territories on a real iOS app. New ASC domains (TestFlight, sales, screenshots, IAPs) are designed to plug in one file at a time; see Roadmap.

More MCP options

Compare MCP servers by category, or browse hosted MCP servers if you prefer an endpoint over a local process.

Maintainer setup documentation.

Recorded tools

Check the linked publisher documentation and your connected client's tool list. Names and availability can vary with the server version and account permissions.

ToolWhat it does
asc_list_appslist apps (filter by bundleId)
asc_get_appfetch one app by ID
asc_list_subscription_groupsgroups for an app
asc_get_subscription_groupfetch one group by ID
asc_list_subscriptionsauto-renewable subscriptions in a group
asc_get_subscriptionfetch one subscription by ID
asc_list_subscription_pricescurrent price schedule per subscription. One row per territory (~175 unfiltered) — pass territoryId to narrow to one market
asc_list_subscription_price_pointsvalid price points for a subscription in a territory. Pass nearAmount to narrow the response to the nearest tiers around a target price.
asc_post_subscription_groupcreate the container every subscription must live in. A customer can hold only one active subscription per group, so mutually exclusive plans (Monthly vs Yearly
asc_patch_subscription_grouprename (referenceName is the only mutable attribute; groups cannot move between apps)
asc_delete_subscription_grouplists the group's subscriptions first and refuses client-side naming the specific products that block the delete, instead of letting Apple return a bare 409
asc_post_subscriptioncreate an auto-renewable subscription. productId is permanent: it cannot be changed, and Apple never lets it be reused on the account — not even after the subsc
asc_patch_subscriptionname, subscriptionPeriod, familySharable, reviewNote, groupLevel. productId has no codepath here by construction. Nested offer/price arrays are deliberately uns
asc_delete_subscriptionpre-checks state and refuses for products under review or ever approved, pointing at asc_post_subscription_availability as the way to stop selling a live produc
asc_post_subscription_group_localizationname + locale, plus optional customAppName (overrides how the app name reads inside the subscription sheet; usually omit). Wire gotcha handled: the parent relat
asc_patch_subscription_group_localizationname / customAppName; locale is the immutable lookup key
asc_post_subscription_priceset the price for one territory, either the opening price or a scheduled change. Order matters, and both steps are confirmed live: territory availability → unda
asc_delete_subscription_pricecancel a pending scheduled change
asc_list_app_pricescurrent price schedule for an app, splitting manual overrides from auto-derived prices and surfacing the base territory
asc_list_app_price_pointsvalid Apple price tiers for an app in a given territory (~600+ tiers per territory). Pass nearAmount (target price) and optional nearCount (default 10) to narro
asc_post_app_price_schedulereplace the entire price schedule (whole-schedule replace, NOT a merge — matches Apple's API). Pre-flight refuses unless at least one entry targets the base ter
asc_list_iapslist IAPs for an app (v2 surface only — auto-renewable subscriptions are covered by the Subscriptions tools above). Filterable by inAppPurchaseType and state. I
asc_get_iapfetch a single IAP by ID.
asc_list_iap_pricescurrent price schedule for an IAP (same shape as app prices: manual overrides + auto-derived + base territory).
asc_list_iap_price_pointsvalid Apple price tiers for an IAP in a given territory. Same nearAmount / nearCount narrowing as the app and subscription price-point tools.
asc_post_iap_price_schedulereplace the entire IAP price schedule (same whole-schedule replace semantics as asc_post_app_price_schedule: acknowledgeReplacesAll: true, base-territory entry
asc_list_subscription_introductory_offerslist intro offers (free trial / pay-as-you-go / pay-up-front) configured for a subscription, across territories. Apple's "all territories" wildcard (a single of
asc_get_subscription_introductory_offerfetch one offer by ID.
asc_post_subscription_introductory_offercreate an offer. Three offerModes: FREE_TRIAL (no price; omit pricePointId), PAY_AS_YOU_GO (charge the offer price each period for numberOfPeriods periods), PAY
asc_patch_subscription_introductory_offernarrow update path: only startDate, endDate, and pricePointId can change after creation. To change mode / duration / periods, delete and re-create.
asc_delete_subscription_introductory_offerdelete a pending or active offer. Apple refuses to delete one that is currently redeemable; PATCH endDate to today to stop it instead.
asc_list_subscription_promotional_offerslist promo offers configured for a subscription.
asc_get_subscription_promotional_offerfetch a single offer, including its per-territory prices.
asc_list_subscription_promotional_offer_priceslist per-territory price rows attached to an offer (territory + currency + amount + price-point ID).
asc_post_subscription_promotional_offercreate an offer (name + offerCode + mode + duration + all per-territory prices) in one atomic POST. Pre-flights Apple's 10-offer cap and offerCode collisions, r
asc_patch_subscription_promotional_offer_pricesupdate the offer's per-territory prices. Apple's wire semantic is replace (the new prices array becomes the post-state, dropping any territory not listed); the
asc_delete_subscription_promotional_offerDELETE → 204.
asc_list_subscription_win_back_offerslist win-back offers configured for a subscription.
asc_get_subscription_win_back_offerfetch a single offer, including its subscription and per-territory prices.
asc_list_subscription_win_back_offer_priceslist per-territory price rows attached to an offer (territory + currency + amount + price-point ID).
asc_post_subscription_win_back_offercreate an offer (identity + eligibility rules + schedule + priority + all per-territory prices) in one atomic POST. Eligibility is expressed as customerEligibil
asc_patch_subscription_win_back_offerupdate the mutable attributes only: eligibility, startDate/endDate, priority, and promotionIntent. To change identity, mode, duration, periods, or prices, delet
asc_delete_subscription_win_back_offerDELETE → 204.
Imagesto-many, per IAP / subscription): asc_list_{iap,subscription}_images · asc_get_ · asc_upload_ (composite) · asc_post_ / asc_patch_ (raw reserve/commit) · asc_de
asc_post_app_store_version_release_request⚠️ release an approved (PENDING_DEVELOPER_RELEASE) version to the public App Store now — the "Release this version" click, automated. Only for manually-released
Subscriptionsasc_get_subscription_availability · asc_list_subscription_available_territories · asc_post_subscription_availability (POST-only full replacement — send the comp
IAPsasc_get_iap_availability (reads through the v2 parent path) · asc_list_iap_available_territories · asc_post_iap_availability (same replace semantics).
asc_sign_promotional_offer_legacylegacy ECDSA-concatenated signature used by StoreKit 1's SKPaymentDiscount and the original StoreKit 2 Product.PurchaseOption.promotionalOffer(offerID:keyID:non
asc_sign_promotional_offerJWS v2 format introduced at WWDC 2025 (back-deployed to iOS 15). Use with StoreKit 2's newer promotional-offer purchase options. Returns the JWS compact seriali
asc_sign_introductory_offer_eligibilityJWS v2 with aud="introductory-offer-eligibility". Lets you override StoreKit's default introductory-offer eligibility check (e.g. grant a returning customer ano
asc_get_age_rating_declarationread the answers. Shows only the non-default ones (a typical declaration has 29 attributes, nearly all at NONE/false) plus every override, so the few that actua
asc_patch_age_rating_declarationanswer the questionnaire. Content questions take a frequency (NONE / INFREQUENT_OR_MILD / FREQUENT_OR_INTENSE); the rest are booleans, plus the rating overrides
Readsasc_list_ci_products · asc_list_ci_workflows / asc_get_ci_workflow (compact config summary: flags, start-condition patterns, actions, resolved Xcode/macOS — raw
Triggersasc_post_ci_build_run (start a build — optional branch/tag override + clean; uses the team's compute hours) · asc_patch_ci_workflow (pause/resume via isEnabled,
asc_list_nominationsfilter by app / state / type) · asc_get_nomination · asc_post_nomination (defaults to a reviewable DRAFT — submitted:false) · asc_patch_nomination (edit the dra
Capabilitiesasc_post_bundle_id_capability · asc_patch_bundle_id_capability · asc_delete_bundle_id_capability — capability changes invalidate existing profiles; regenerate t
Certificatesasc_list_certificates · asc_get_certificate (base64 DER content) · asc_post_certificate (from a PEM CSR — the private key never goes to Apple) · asc_delete_cert
Profilesasc_list_profiles · asc_get_profile (profileContent = the actual base64 .mobileprovision) · asc_post_profile · asc_delete_profile. No PATCH — profiles are immut
Devicesasc_list_devices · asc_post_device (⚠️ effectively permanent — devices can only be disabled, never deleted, and count against the 100-per-class yearly limit) ·
asc_list_territoriesall 175 App Store territories
ppp_load_indexreturn the bundled Apple Music Individual-plan price snapshot used as the PPP signal
ppp_compute_proposalcompute a proposed per-territory price schedule (read-only dry-run; uses Apple Music ratios as implied PPP-FX, snaps to valid Apple price points, applies a conf
ppp_apply_proposalrecompute and apply the proposal against ASC after confirming via MCP elicitation (or confirm: true for unattended use). Refuses if any row drops by more than m
rawtrue — return the full JSON:API payload (data, included, links, meta) for debugging or advanced use.
maxItemsnumber — cap auto-pagination (default 500–1000 depending on the tool). The MCP follows links.next and merges + dedupes included resources across pages.

How to install the Appstoreconnect MCP Server

{
  "mcpServers": {
    "appstoreconnect": {
      "command": "npx",
      "args": [
        "-y",
        "@akoskomuves/appstoreconnect-mcp"
      ],
      "env": {
        "ASC_ISSUER_ID": "...",
        "ASC_KEY_ID": "YOUR_ASC_KEY_ID",
        "ASC_PRIVATE_KEY_PATH": "YOUR_ASC_PRIVATE_KEY_PATH"
      }
    }
  }
}

From the project documentation. Replace placeholders and example paths before connecting.

Configuration

VariableDescriptionRequired
ASC_ISSUER_IDDeclared in the maintainer’s client configuration.Check documentation
ASC_KEY_IDDeclared in the maintainer’s client configuration.Check documentation
ASC_PRIVATE_KEY_PATHDeclared in the maintainer’s client configuration.Check documentation

Example prompts to try

  • “Use Appstoreconnect to Apps.”
  • “Use Appstoreconnect to Subscriptions.”
  • “Use Appstoreconnect to Territories.”

Frequently asked questions

App Store Connect for MCP clients: PPP pricing, subscriptions, TestFlight, reviews, reports & more Confirm the tools offered by your installed version in the connected client. Tool availability and permissions depend on the server and account configuration.