Heimdall
Every App Store Connect + StoreKit 2 endpoint.
Connector by erayendes · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/erayendes-asc-mcp
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.
- Tools
- 30 read · 6 write · 5 delete
- Secrets
- 1 (API keys, tokens or passwords)
- Install scripts
- None found
- Runs as
- Node.js package
Tools by what they do 41
Read from the source code; the running server may list different tools.
Read 30 · Look things up without changing anything.
analytics__get_reportasc__account_statusasc__callasc__describeasc__discover_domainsasc__loadasc__profile_removedasc__search_toolsasc__statusci__diagnose_runlisting__diff_metadatalisting__get_screenshots
Show 18 more tools
metadata_ai__audit_localizationsmetadata_ai__draft_translationpreflight__check_subscriptionpreflight__check_versionpricing__get_app_pricepricing__get_iap_pricepricing__get_subscription_pricereviews_ai__daily_briefingreviews_ai__draft_responsereviews_ai__triagestorekit__check_entitlementstorekit__get_notification_historystorekit__get_refund_historystorekit__get_subscription_statusesstorekit__get_transaction_historystorekit__get_transaction_infostorekit__lookup_ordertestflight__feedback_digest
Write 6 · Create, change, send or run things.
listing__upload_assetlisting__upload_screenshotmetadata_ai__apply_localizationspricing__set_subscription_pricerelease__submitstorekit__request_test_notification
Delete 5 · Delete, drop, revoke or wipe things.
listing__delete_assetspricing__equalize_pricepricing__set_iap_pricestorekit__extend_renewal_datetestflight__assign_build_to_groups
Secrets and settings it asks for
Secrets: values you paste in that let it act as you.
ASC_PRIVATE_KEY
Other settings (environment variables or headers).
ASC_BUNDLE_IDASC_ISSUER_IDASC_KEY_IDASC_PRIVATE_KEY_PATH
Network hosts it talks to 6
appstoreconnect.apple.com· found in codedeveloper.apple.com· found in codegithub.com· found in codeglama.ai· found in codemilowda.com· found in coderaw.githubusercontent.com· found in code
Files it touches
~/.claude.json/tmp/heimdall-setup-demo- Your home directory (~)
~/.codeium/windsurf/mcp_config.json~/.codex/config.toml~/.cursor/mcp.json~/.gemini/config/mcp_config.json
Tools (41)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
analytics__get_reportread-onlyRead an App Store analytics report as rows, in one step. Give the app (name, bundle ID or Apple ID) and the report name or category; it walks the request → report → instance → segment chain, downloads the gzipped TSV Apple stores behind a signed link, and returns decoded rows. Use this instead of chaining analytics_report_requests / analytics_reports / analytics_report_instances / analytics_report_segments, which ends holding a URL rather than data. Does not start a new report request.
asc__account_statusread-onlyShow every app in the account with the version that is live, the version in flight, and whose move it is — in one call. Translates App Store states into the action they imply: approved-and-held apps, rejections, submissions stuck on export compliance, and versions never submitted. Also opens each app's review submission, so an in-app purchase or event Apple rejected shows up even when the version itself reads as fine. Start here when the question is "what needs my attention?" rather than one app. Read-only.
asc__callread-onlyRead through any tool this profile owns, even one that is not in your tool list — its sub-profile does not have to be loaded and nothing needs a restart. Use this whenever asc__search_tools names a tool you cannot see. Get its arguments from asc__describe first. Read-only: to change something, load the sub-profile with asc__load and call the tool itself, so the confirmation prompt reaches the user.
asc__describeread-onlyShow the exact input schema of any tool this profile owns, including ones not currently loaded. Use it before asc__call to build valid arguments. Find tool names with asc__search_tools.
asc__discover_domainsread-onlyList what this server can reach and what it cannot: in profile mode the profiles and sub-profiles that exist, which are loaded here, and how many tools each holds; otherwise the tool domains. Use this when a capability you need is not in the tool list.
asc__loadread-onlyDescription is built at runtime.
asc__profile_removedread-onlyDescription is built at runtime.
asc__search_toolsread-onlySearch all App Store Connect operations by keyword, including domains that are not currently loaded. Returns matching tool names, their domain, and the underlying endpoint. Search in English: tool names and descriptions are generated from Apple’s English spec, so translate the goal before searching.
asc__statusread-onlyReport server configuration, spec version, loaded domains, JWT token state and remaining API rate limit. Also verifies credentials against Apple with a single lightweight request.
ci__diagnose_runread-onlyDiagnose why an Xcode Cloud build failed in one call. Give an app name, bundle ID or Apple ID; optionally a build run ID or number and a workflow name or ID. By default inspect the newest run whose completionStatus is FAILED or ERRORED (canceled and skipped runs are passed over) (within the newest 40 runs). Returns failing actions, issues and failed tests, with bounded counts and truncation notes. Read-only.
listing__delete_assetscan change or delete dataDelete images or videos from an app’s asset library. One confirmation covers them all and names each file. Give the app and the ids of the files; every id is checked against that app’s library before anything is deleted. DESTRUCTIVE-level write: deletion is not reversible.
listing__diff_metadataread-onlyCompare the store text of two app versions locale by locale, in one call, and list only what differs. Give the app (name, bundle ID or Apple ID). By default it compares the version that is on sale against the one being prepared, which is the answer to "what am I about to change?". Reports per locale which of description, keywords, whatsNew, promotional text, marketing URL and support URL changed, plus locales added or dropped. Read-only.
listing__get_screenshotsread-onlyList the screenshots on an app’s store listing in one step: which locales have them, which device sizes, how many, and their dimensions. Give the app (name, bundle ID or Apple ID). Use this instead of chaining app_store_versions / localizations / screenshot_sets / screenshots — most locales carry no screenshots of their own, so walking that chain costs one call per locale.
listing__upload_assetUpload an image or video file into an app’s asset library in one step, and optionally place it on a store page in the same call. Give the app, the file path and the category; to place it, add a placement type and either a locale (the version page) or the id of a custom product page, experiment or in-app event localization. Handles Apple’s reserve/upload/commit sequence, which the raw library tools cannot finish. PUBLIC-level write when it places the file; the upload alone shows nowhere.
listing__upload_screenshotUpload a screenshot image file to an app’s store listing in one step. Give the app (name, bundle ID or Apple ID), the locale, the device size and a path to the file on this machine. Handles Apple’s reserve/upload/commit sequence and the checksum — the raw screenshot tool reserves a slot and moves no bytes. PUBLIC-level write: the image appears on the store listing once Apple processes it.
Show 26 more tools
metadata_ai__apply_localizationsWrite store text for several languages at once from a file the user prepared — the values are theirs, read straight from the file rather than retyped. Accepts CSV with a "locale" column and one column per field, or JSON keyed by locale. Every value is checked against Apple’s character limits before anything is sent, so a file with a bad value changes nothing at all. Apple is still asked one language at a time: if it rejects the eleventh, the first ten are already written and the error names exactly which ones landed.
metadata_ai__audit_localizationsread-onlyCompare an app version’s store text across every language and report what is missing or over Apple’s limit — empty descriptions, blank keywords, fields present in one language and absent in others. Read-only: it reports and stops, and never fills anything in.
metadata_ai__draft_translationread-onlyReturn one language’s store text plus an instruction for you to draft it in the languages named. Only runs for locales the caller asks for — it never decides that a language looks stale. Returns a draft for a person to read; writing is a separate step, and for keywords the draft is a starting point rather than an answer, because keywords are a search-ranking choice rather than a translation.
preflight__check_subscriptionread-onlyCheck subscription catalog readiness before submitting for review. Give the app and either a subscription (product ID, name or ID) or a group (reference name or ID). Checks localizations, group locales, prices, plan availability, review screenshot, review note and required attributes; reports state and blocking or warning findings with the raw tool that fixes each gap. Group mode checks at most 20 subscriptions. All reads are capped and truncation is reported. Read-only; ready means no observed blocking catalog gaps, not a prediction of Apple approval or permission to submit.
preflight__check_versionread-onlyCheck whether an app version is complete enough to submit, in one call, and list what is missing. Give the app (name, bundle ID or Apple ID). Verifies the build is attached and finished processing, the export compliance answer is given, the review contact and demo account are filled in, every locale has a description and keywords, and screenshots exist. Each gap names the tool that fixes it. Read-only — it changes nothing and does not submit.
pricing__equalize_pricecan change or delete dataSet one anchor price and let Apple derive the equivalent price in every other country, for an app, an in-app purchase or a subscription. Give the app, which kind of product, the anchor territory (e.g. TUR) and the price (e.g. "99.99"). Apple's own currency and tax maths decides each market — a price is NOT copied across currencies, because 4.99 USD is not 4.99 EUR. REVENUE-level write covering about 175 countries; run it under --dry-run first to see the full derived table.
pricing__get_app_priceread-onlyRead current and scheduled app purchase prices by territory, including currency, customer price, proceeds, dates, and manual or automatic source. Omit territory for all countries.
pricing__get_iap_priceread-onlyRead current and scheduled in-app purchase prices by territory, including currency, customer price, proceeds, dates, and manual or automatic source. Give an IAP ID, or give the app and IAP product ID. Omit territory for all countries.
pricing__get_subscription_priceread-onlyWhat a subscription costs customers today — in one country, or in every country at once. Give the app (name, bundle ID or Apple ID); both other arguments are optional. Omit the territory to get worldwide pricing, grouped by price so the answer stays readable, with the currency and the country codes in each group. Omit the subscription to cover every subscription in the app, which is how you answer "what does the weekly one cost" without knowing its product ID. Use this instead of chaining apps__list / subscription_groups / prices calls. It also returns the price actually in effect: subscriptio…
pricing__set_iap_pricecan change or delete dataChange or set an in-app purchase (IAP) price in one territory (country) without assembling a price schedule. Give an IAP ID, or the app and IAP product ID, plus the territory (e.g. TUR) and the price (e.g. "99.99"). Apple replaces an IAP price schedule as a whole, so every other manual price and scheduled change is read and re-sent unchanged. Pricing the base territory also moves Apple's automatic prices elsewhere. REVENUE-level write.
pricing__set_subscription_priceChange or set a subscription price in one territory (country) in a single step. Give it the app (name, bundle ID or Apple ID), the subscription (product ID or name), the territory (e.g. TUR, USA) and the price (e.g. "99.99") — it resolves the app, subscription and Apple price point internally and performs the one write. Use this instead of chaining apps__list / subscription_groups / price_points calls when the goal is simply "set/raise/lower the price".
release__submitSend an App Store version to Apple for review in one call — it opens the submission, puts the version in it, and hands it over. Checks first that the version is actually submittable and refuses rather than submitting something that will bounce. Use this instead of review_submissions__create, which by itself sends nothing.
reviews_ai__daily_briefingread-onlyFetch the last N days of reviews for an app, with volume and rating trend (computed deterministically), and an instruction for you to summarise top complaints, standout praise and one suggested action. Read-only.
reviews_ai__draft_responseread-onlyFetch one customer review and return it with an instruction for you to draft a reply — no separate API key needed, you write the text. Returns data only — never posts. Review the draft, then post it yourself with customer_review_responses__create if you approve it.
reviews_ai__triageread-onlyFetch recent reviews for an app and return them with an instruction for you to group them by theme (bug, feature request, pricing complaint, praise, spam). Read-only.
storekit__check_entitlementread-onlyAnswer the single question "does this customer currently have access?". Returns a boolean plus the active subscriptions backing it — those come back as Apple's SIGNED payloads (JWS strings), so verify and decode them before reading any field. Optionally narrow to one product ID. [App Store Server API]
storekit__extend_renewal_datecan change or delete dataExtend a subscriber's renewal date — a service gesture for an outage or a support escalation. This changes billing, so confirm with the user before calling it. [App Store Server API]
storekit__get_notification_historyread-onlyRetrieve App Store Server Notification delivery history, including failures. Use to debug a webhook endpoint that is missing events. [App Store Server API]
storekit__get_refund_historyread-onlyList every refunded transaction for a customer. Useful for auditing refund abuse before granting goodwill credit. Returns Apple's SIGNED transactions (JWS strings) unless ASC_APPLE_ROOT_CERTS is set, in which case they arrive verified and decoded. [App Store Server API]
storekit__get_subscription_statusesread-onlyGet the status of every subscription a customer holds, including expiry date, auto-renew state, billing retry and grace period. Apple returns those fields inside SIGNED payloads (JWS strings) on each item, so verify and decode them before reading. Use this for entitlement checks. [App Store Server API]
storekit__get_transaction_historyread-onlyGet a customer's full purchase history from any one of their transaction IDs. Supports filtering by product type, product ID and date range. Returns Apple's SIGNED transactions (JWS strings) unless ASC_APPLE_ROOT_CERTS is set, in which case they arrive verified and decoded. [App Store Server API]
storekit__get_transaction_inforead-onlyGet a single transaction: product, price, dates, ownership type and revocation state. Set ASC_APPLE_ROOT_CERTS and the payload arrives verified and decoded; without it you get Apple's SIGNED payload (a JWS string) to verify yourself with the App Store Server Library. [App Store Server API]
storekit__lookup_orderread-onlyLook up all transactions tied to an order ID from a customer receipt. Use when a customer sends you the order number from their email. [App Store Server API]
storekit__request_test_notificationAsk Apple to send a test notification to your configured webhook endpoint. Returns a token you can use to look up the delivery result. [App Store Server API]
testflight__assign_build_to_groupscan change or delete dataAssign one processed, unexpired TestFlight build to named beta groups. Checks existing assignments and reports each group, including partial failures. External groups may need beta app review before testers can install the build. RELEASE-level write.
testflight__feedback_digestread-onlySummarize what TestFlight beta testers are reporting: recent crash and screenshot feedback grouped by build version, counts, top devices and OS versions, newest comments, and short crash log excerpts. Give the app (name, bundle ID or Apple ID), optionally a build number or UUID and days (default 14, max 90). Reads at most five pages of 50 submissions per type, ten comments per type per build, and three crash logs (first 40 lines or 4 KB each). Reports truncation. Read-only.
Signals
- Stars
- 53
- Forks
- 6
- Open issues
- 9
- Weekly downloads
- 641
- Last commit
- Oct 17, 2026 (12 days ago)
- Last release
- Oct 16, 2026 (12 days ago)
- Last package publish
- Oct 16, 2026 (12 days ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.erayendes/asc-mcp- Version
- 2.7.1
- Auth
- API key
- Packages
- npm @erayendes/asc-mcp
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 25, 2026
Cite this page
Heimdall MCP server. Agent Mart. https://agentmart.dev/connectors/erayendes-asc-mcp (last updated 2026-10-25)