Heimdall App Store Connect MCP
# Heimdall — App Store Connect MCP
**Your whole App Store Connect account, in one tool.**
<!-- Absolute URL on purpose: npm does not rewrite relative image paths. -->
<img src="https://raw.githubusercontent.com/erayendes/app-store-connect-mcp/main/assets/brand/heimdall-social-card.png" alt="Heimdall — App Store Connect MCP" width="720">
[](https://www.npmjs.com/package/@erayendes/asc-mcp)
[](https://www.npmjs.com/package/@erayendes/asc-mcp)
[](https://github.com/erayendes/app-store-connect-mcp/actions/workflows/ci.yml)
[](LICENSE)
[](https://milowda.com)
🇬🇧 English · 🇹🇷 [Türkçe](docs/README_tr.md)
**Ask, and it answers. Tell it, and it's done.**
> - *"Summarize this week's 1-star reviews and draft replies."*
> - *"Which builds are stuck in review?"*
> - *"Raise this subscription's price in every country."*
> - *"What does this subscription cost in each country?"*
> - *"Which screenshots are on the store listing?"*
> - *"Add build 42 to the Internal and External groups."*
> - *"Why did my Xcode Cloud build fail?"*
Almost anything you'd click through App Store Connect to do, you can now just ask your AI to do. More examples in the [Guide](docs/GUIDE_en.md#examples).
<!-- Absolute URL on purpose: npm does not rewrite relative image paths. -->
<img src="https://raw.githubusercontent.com/erayendes/app-store-connect-mcp/main/assets/demo.gif" alt="Asking an AI what a subscription costs worldwide; Heimdall answers in one tool call" width="720">
<sub>A real AI session, sped up. The App Store Connect account is a stand-in so the recording can be public.</sub>
### Heimdall
One MCP server for the **App Store Connect API** and the **App Store Server API (StoreKit 2)**, built from Apple's own OpenAPI specification. **13 profiles, 33 sub-profiles, 929 tools.**
Apple's specification lists 1011 API operations. Heimdall leaves out the 123 that Apple has deprecated, so 888 become tools, and adds 41 hand-written ones: 929 tools in all.
Most App Store Connect MCP servers give you a hand-picked slice of the API. That works until you need the one endpoint they left out, and then **you're off hunting for yet another tool.**
**Heimdall does the opposite: it gives you the whole API, organized into profiles.** Apps and metadata, versions, TestFlight, subscriptions and in-app purchases, pricing, reviews, Game Center, Xcode Cloud, provisioning, webhooks, sales and finance reports — all of it. **You pick what you need**, and add or remove profiles whenever you like.
[Profiles](docs/PROFILES_en.md) shows what each one covers. You don't have to memorize any of it, though: ask *"Is there a tool for in-app events?"* and Heimdall tells you which profile has it.
**Not sure which profiles you need?** The [starter packs](docs/PROFILES_en.md#starter-packs) suggest a set for your role.
### Runs on your machine
Most MCP guides recommend remote HTTP servers.
**Heimdall runs locally instead.** It reads your App Store Connect key from the Keychain, signs a short-lived token and talks to Apple directly. Nothing sits in between, so your key stays with you.
> [!NOTE]
> Give your key the narrowest role that does the job. [Roles](docs/ROLES_en.md) explains what each App Store Connect role can do.
### Asks before risky changes
Before changing a price, giving someone Admin access or deleting something, Heimdall asks you to confirm and shows what will change. This is on by default for changes that are hard to undo: revenue, deletions, infrastructure and access, and for the release steps that reach users: sending a version to review, releasing it, changing a phased rollout, and opening a build to external testers. Everything else goes through your app's own approval.
More in [Security](.github/SECURITY.md).
### Works alongside Fastlane
Heimdall doesn't replace [Fastlane](https://fastlane.tools/); it complements it. **Fastlane for the pipeline, Heimdall for everything you'd otherwise do by hand.**
### Setup
One command:
```bash
npx -y @erayendes/asc-mcp setup
```
<!-- Absolute URL on purpose: npm does not rewrite relative image paths. -->
<img src="https://raw.githubusercontent.com/erayendes/app-store-connect-mcp/main/assets/setup.gif" alt="The setup wizard: key, issuer ID, credential check, profile and sub-profile selection, key stored in the Keychain" width="720">
It asks whether to continue in your browser (recommended) or the terminal. You'll need an [App Store Connect API key](docs/SETUP_en.md#create-an-api-key); the browser page tells you which role to give it from what you pick, so you can run setup before creating the key. Node.js 20.19 or later.
Want your AI to install it for you, or to use it in [Xcode 27](docs/SETUP_en.md#using-heimdall-in-xcode-27)? Everything else is in [Setup](docs/SETUP_en.md).
### About the name and the project
In Norse mythology, **Heimdall** keeps watch over Bifröst, **the rainbow bridge that links Asgard to the nine realms**. Here, his job is to guard the road between your App Store Connect account and your machine. That's where the name comes from.
I build Heimdall on my own, in the evenings, and release it free and open source under the MIT license.
If it gets you out of the App Store Connect dashboard, it has done its job.
### License
[MIT](LICENSE) © Eray Endes
[SECURITY.md](.github/SECURITY.md) | [SUPPORT.md](.github/SUPPORT.md) | [CHANGELOG.md](docs/CHANGELOG.md) | [CONTRIBUTING.md](.github/CONTRIBUTING.md) | [CODE_OF_CONDUCT.md](.github/CODE_OF_CONDUCT.md) | [GOVERNANCE.md](.github/GOVERNANCE.md)
Heimdall is generated from the App Store Connect OpenAPI specification published by Apple Inc. App Store Connect, TestFlight, StoreKit, Xcode and Game Center are trademarks of Apple Inc. This project is not affiliated with Apple Inc.
TDQS
Scored across 376 tools
Most tools map 1:1 to distinct App Store Connect endpoints, but there is heavy overlap between high-level wrappers (pricing__set_subscription_price, release__submit, listing__upload_screenshot, analytics__get_report) and the raw endpoint tools that do the same work, plus inverse-direction relationship pairs (builds__beta_groups__add vs beta_groups__builds__add vs beta_testers__beta_groups__add) that force arbitrary choice. Descriptions do an unusually good job of saying 'use this instead of chaining X', and asc__search_tools helps discovery, which keeps it from being worse.
The dominant pattern is domain__resource__action with double-underscore separators and consistent get/list/create/update/delete verbs, which is readable. But it breaks down repeatedly: many relationship tools have machine-truncated names with random suffixes (app_store_version_experiments_v2__app_store_version_exper_0b7r4g, app_store_version_localizations__pla_1gpxt4), and curated wrappers switch to verb-first naming (listing__upload_asset, pricing__make_offer, preflight__check_version, reviews_ai__triage), mixing two conventions in one surface.
376 tools is an extreme mismatch for what an agent can reasonably navigate, even for a large domain like App Store Connect. The 1:1 endpoint mirroring floods the surface with dozens of trivially related list/get tools and near-duplicate wrappers, so any single task requires searching through hundreds of options.
Coverage is essentially exhaustive: full CRUD across apps, versions, localizations, builds, TestFlight, in-app purchases, subscriptions, pricing, experiments, App Clips, review submissions, plus finance/sales/analytics reports and App Store Server API (StoreKit) operations. Curated preflight, release, pricing and analytics wrappers close the common multi-step workflow gaps that raw endpoints leave open.