asc_delete_bundle_idLABSCO SUMMARY
The guards are the reason to use this rather than the raw API.
Apple's app and IAP price endpoints replace an entire schedule rather than merging into it, and changing the base territory silently wipes pending scheduled changes. This server refuses those calls unless you acknowledge each behaviour explicitly, and the PPP rebalance flow refuses any run where a single territory drops more than maxDropPct (default 90%). Read the write semantics before the first write: apps and IAPs have no grandfather mechanism, so a new schedule activates for everyone at each entry's startDate.
What it is
A broad App Store Connect API server. It reads and writes the parts of App Store Connect that are otherwise a lot of clicking: subscription and app price schedules, introductory, promotional and win-back offers, review screenshots and attachments, age rating, availability, provisioning and certificates, Xcode Cloud runs, and sandbox testers.
What you get
- Apps and subscriptions —
asc_list_apps,asc_get_app,asc_list_subscription_groups,asc_list_subscriptions,asc_list_subscription_prices - Price points narrowed to what you care about —
asc_list_app_price_pointsandasc_list_subscription_price_pointstakenearAmount(andnearCount, default 10) so you get the nearest tiers rather than every tier in the territory - Writes with pre-flight guards —
asc_post_app_price_scheduleandasc_post_iap_price_schedulereplace the whole schedule, and refuse unlessacknowledgeReplacesAll: trueis passed and one entry targets the base territory with nostartDate - All three offer types — introductory (
asc_post_subscription_introductory_offerwithFREE_TRIAL,PAY_AS_YOU_GO,PAY_UP_FRONT), promotional, and win-back, each with list, get, patch and delete - Offer signing for in-app redemption —
asc_sign_promotional_offer,asc_sign_promotional_offer_legacy,asc_sign_introductory_offer_eligibility; signatures are valid for 24 hours - Release plumbing —
asc_get_app_store_review_detail,asc_post_app_store_version_release_request,asc_post_iap_submission,asc_post_subscription_submission - Age rating —
asc_get_age_rating_declarationshows only the non-default answers,asc_patch_age_rating_declarationmerges changes - Xcode Cloud —
asc_list_ci_build_runs,asc_list_ci_issues,asc_list_ci_artifacts,asc_post_ci_build_runto start a build - Provisioning —
asc_list_bundle_ids,asc_list_certificates,asc_list_profiles,asc_list_devicesand their write counterparts asc_list_territoriesreturns all 175 App Store territories- Every list and get tool returns a compact text table by default;
raw: truegives the full JSON:API payload andmaxItemscaps auto-pagination
Requirements
Published on npm as @akoskomuves/appstoreconnect-mcp, version 1.9.0. npx @akoskomuves/appstoreconnect-mcp init runs a wizard that opens the Keys page, copies the .p8 into ~/.appstore/ with chmod 600, verifies auth with a real API call, and registers the server in whichever clients it finds. Configured by hand it needs ASC_ISSUER_ID (the issuer UUID), ASC_KEY_ID (10 characters) and ASC_PRIVATE_KEY_PATH (the .p8 file). ASC_VENDOR_NUMBER is optional and only needed for the sales and finance report tools. Provisioning and code-signing tools additionally require an Admin or Account Holder API key — App Manager and Developer keys get 403. Offer signing uses a separate In-App Purchase key, not the ASC API key. npx @akoskomuves/appstoreconnect-mcp doctor runs a read-only diagnostic.
Setup effort
One command plus a key — npx @akoskomuves/appstoreconnect-mcp init, then supply credentials
USE CASES
Repricing a subscription across many territories
Compute a proposed per-territory schedule as a dry run first, review the table, then apply it.
Finding the right price tier near a target
Ask for price points near an amount instead of paging through hundreds of Apple tiers.
Setting up a win-back offer for churned subscribers
Create the offer with its eligibility window and per-territory prices in one call, with collisions pre-flighted.
Answering the age-rating questionnaire
Read only the answers that are not at their default, then patch the few that drive the rating.
Releasing an approved build
Trigger the release for a version sitting in pending-developer-release without opening the web UI.
Working out why a CI build failed
List the build runs, read the issues attached to the failing action, and pull the artifact.
109 tools
Listed in project docs. Your client may show a different list.
asc_delete_bundle_id_capabilityasc_delete_certificateasc_delete_nominationasc_delete_profileasc_delete_subscription_introductory_offerasc_delete_subscription_priceasc_delete_subscription_promotional_offerasc_delete_subscription_win_back_offerasc_get_age_rating_declarationasc_get_appasc_get_app_store_review_detailasc_get_bundle_idasc_get_certificateasc_get_ci_artifactasc_get_ci_build_runasc_get_ci_workflowasc_get_finance_reportasc_get_iapasc_get_iap_availabilityasc_get_nominationasc_get_profileasc_get_review_attachmentasc_get_sales_reportasc_get_subscription_availabilityasc_get_subscription_grace_periodasc_get_subscription_introductory_offerasc_get_subscription_promotional_offerasc_get_subscription_win_back_offerasc_list_app_price_pointsasc_list_app_pricesasc_list_appsasc_list_bundle_idsasc_list_certificatesasc_list_ci_artifactsasc_list_ci_build_actionsasc_list_ci_build_run_buildsasc_list_ci_build_runsasc_list_ci_environment_versionsasc_list_ci_issuesasc_list_ci_productsasc_list_ci_test_resultsasc_list_ci_workflowsasc_list_devicesasc_list_iap_available_territoriesasc_list_iap_price_pointsasc_list_iap_pricesasc_list_iapsasc_list_nominationsasc_list_profilesasc_list_review_attachmentsasc_list_sandbox_testersasc_list_scm_git_referencesasc_list_scm_providersasc_list_scm_pull_requestsasc_list_scm_repositoriesasc_list_subscription_available_territoriesasc_list_subscription_groupsasc_list_subscription_introductory_offersasc_list_subscription_plan_availabilitiesasc_list_subscription_plan_available_territoriesasc_list_subscription_price_pointsasc_list_subscription_pricesasc_list_subscription_promotional_offer_pricesasc_list_subscription_promotional_offersasc_list_subscription_win_back_offer_pricesasc_list_subscription_win_back_offersasc_list_subscriptionsasc_list_territoriesasc_patch_age_rating_declarationasc_patch_app_store_version_localizationasc_patch_bundle_idasc_patch_bundle_id_capabilityasc_patch_ci_workflowasc_patch_deviceasc_patch_nominationasc_patch_sandbox_testerasc_patch_subscription_introductory_offerasc_patch_subscription_promotional_offer_pricesasc_patch_subscription_win_back_offerasc_post_app_price_scheduleasc_post_app_store_version_release_requestasc_post_bundle_idasc_post_bundle_id_capabilityasc_post_certificateasc_post_ci_build_runasc_post_deviceasc_post_iap_availabilityasc_post_iap_price_scheduleasc_post_iap_submissionasc_post_nominationasc_post_profileasc_post_sandbox_testers_clear_purchase_historyasc_post_subscription_availabilityasc_post_subscription_group_submissionasc_post_subscription_introductory_offerasc_post_subscription_priceasc_post_subscription_promotional_offerasc_post_subscription_submissionasc_post_subscription_win_back_offerasc_sign_introductory_offer_eligibilityasc_sign_promotional_offerasc_sign_promotional_offer_legacyasc_upload_app_previewasc_upload_review_attachmentasc_upload_screenshotppp_apply_proposalppp_compute_proposalppp_load_indexBEFORE YOU INSTALL
What to know first
Tools you get
109 tools named in the project's documentation.
Requires
- npx on PATH
- ASC_KEY_ID in your environment
- ASC_PRIVATE_KEY_PATH in your environment
- ASC_ISSUER_ID in your environment
Optional
- ASC_IAP_KEY_ID in your environment
- ASC_IAP_PRIVATE_KEY_PATH in your environment
- ASC_IAP_ISSUER_ID in your environment
- ASC_VENDOR_NUMBER in your environment
INSTALLATION
Connect your client
Server setup
npx @akoskomuves/appstoreconnect-mcp initMCP Clients
Claude Code, Claude Desktop
{
"mcpServers": {
"appstoreconnect": {
"command": "npx",
"args": [
"-y",
"@akoskomuves/appstoreconnect-mcp"
],
"env": {
"ASC_ISSUER_ID": "<YOUR_ASC_ISSUER_ID>",
"ASC_KEY_ID": "<YOUR_ASC_KEY_ID>",
"ASC_PRIVATE_KEY_PATH": "~/.appstore/<YOUR_AUTH_KEY_P8>"
}
}
}
}ASC_IAP_ISSUER_ID, ASC_IAP_KEY_ID and ASC_IAP_PRIVATE_KEY_PATH are only for the asc_sign_* offer-signing tools: issue a separate In-App Purchase key (App Store Connect → Users and Access → Integrations → In-App Purchase) and set all three or none, since setting only one or two makes the server reject its configuration. They go in the server's env, next to ASC_ISSUER_ID, in the entry that the init wizard or the manual configuration creates. ASC_VENDOR_NUMBER is an optional default for the sales and finance report tools.
Cursor, Windsurf
npx @akoskomuves/appstoreconnect-mcp initASC_IAP_ISSUER_ID, ASC_IAP_KEY_ID and ASC_IAP_PRIVATE_KEY_PATH are only for the asc_sign_* offer-signing tools: issue a separate In-App Purchase key (App Store Connect → Users and Access → Integrations → In-App Purchase) and set all three or none, since setting only one or two makes the server reject its configuration. They go in the server's env, next to ASC_ISSUER_ID, in the entry that the init wizard or the manual configuration creates. ASC_VENDOR_NUMBER is an optional default for the sales and finance report tools.