Appstore Connect Mcp

io.github.pofkyPublished by GitHub account pofkyv0.2.1Updated Oct 24, 2026

Check app review status, read reviews, download sales reports from App Store Connect

Overview

AI-generated overview

Lets an assistant read and manage App Store Connect: check review status, read reviews, pull sales reports, and edit metadata or submit releases.

What you can do
Provides 41 tools over the App Store Connect API. Read tools cover review status, customer reviews, sales and revenue reports, builds, TestFlight groups, preflight audits, briefings, keyword and competitor lookups, and metadata diffs. Pro control tools write to App Store Connect: create versions, edit metadata, upload screenshots, attach builds, manage TestFlight, create in-app purchases and subscriptions, set price, availability, age rating and review contact, submit for review, and release. Two tools use MCP Sampling so the client's own model does review clustering and reply drafting.
When to use it
Useful for iOS developers who want to ship and monitor App Store releases from a coding agent instead of the App Store Connect website: checking review state, triaging reviews, generating release notes from git history, running a pre-submission audit, or driving a release end to end.
Requirements
Local process via npm @pofky/appstore-connect-mcp, Node.js 18+, and an Apple Developer Program membership. Needs an App Store Connect API key with Admin or App Manager role: ASC_ISSUER_ID, ASC_KEY_ID, and a .p8 private key file path (ASC_PRIVATE_KEY_PATH), plus ASC_LICENSE_KEY for Pro tools. Network access to Apple's API. Some build tools need Xcode on a Mac.
Before you install
The .p8 private key is read locally and JWTs are generated on your machine; keep the file safe since Apple allows one download. Pro tools write to App Store Connect, including submit_for_review, release_version, upload_binary and phased release control, which require an explicit confirm flag. A trial or paid key is stored in plain text in ~/.asc-mcp/license.json and written as ASC_LICENSE_KEY into several client config files, with .bak copies. The license server receives the license key, and…

Installation

In SourceWeft

  1. Open Appstore Connect Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

asc-mcp

Ship an App Store release from your coding agent. An MCP server for App Store Connect: 41 tools that edit version metadata, upload screenshots, attach builds, drive TestFlight, create in-app purchases, submit and release, plus an intelligence layer that audits a version before you submit and summarizes your reviews. 6 slash-command workflows and a bundled Claude Skill. Not another API wrapper.

asc-mcp.pages.dev · npm · Pricing: 7-day free trial, then $9/month, VAT included (sales tax added in the US, Canada and India)

In plain words

You made a toy and you want it in a giant toy store, the App Store. The store has a strict office. Before your toy reaches the shelf, you fill out lots of forms, add pictures, set a price, and wait for a helper to check it all. Forget one thing and they say "no, try again", and days are gone.

asc-mcp is a helper robot for that office. It talks to your AI assistant, so you just say what you want:

  • "How is my toy doing?" It tells you whether the store said yes or no, and with Pro, what people wrote about your toy.
  • "Is my toy ready?" It checks your forms first, like a teacher reading your homework before you hand it in: "You forgot a picture, and this link is broken."
  • "Fix it for me." It fills in forms, adds pictures and sets prices. Before a big move, like changing a price or handing your toy to the store, it stops and asks: are you sure?

Checking whether the store said yes or no is free, with no time limit. Everything else works free for 7 days, no card, then it's $9 a month, VAT included, with sales tax added in the US, Canada and India. The robot checks your homework, and the store still decides.

For the grown-ups: the toy is your app, the office is App Store Connect, and the robot is an MCP server running on your own computer.

Claude Desktop, one click: download the latest asc-mcp.mcpb and open it. Claude asks for your Issuer ID and lets you pick your .p8 with a file picker. No JSON, no restart hunt.

Everything else (Claude Code, Cursor, Windsurf, Cline), one command:

bash
npx @pofky/asc-mcp init --write   # finds your .p8, asks for your Issuer ID, writes your MCP config

Then ask your agent: "start my asc-mcp trial, my email is [email protected]". All 41 tools unlock for 7 days, no card and nothing to cancel, and the trial activates in the session you are already in, so whatever you were blocked on works on the very next call. After that Pro is $9 a month (VAT included; in the US, Canada and India sales tax is added at checkout). Six tools stay free, and two of those (the setup check and the playbook) need nothing but Node. The Pro tools that only read (reviews, sales, builds, TestFlight groups, preflight, briefing, keywords, competitors, metadata diff, release notes) also work 5 times in total on your machine with no license, as a preview.

You sayWhat happens
"Run a preflight check on my app"Audits metadata, character limits, screenshots and build status, and says plainly when a check could not run.
"Give me a morning briefing"Summarizes all your apps: who's in review, who got rejected, new low-rating reviews, action items.
"Generate release notes from my git history"Reads commits since last tag, categorizes them, and gives you structured data to write "What's New" text.
"Is my app in review?"Exact review state with context ("typical time: 24-48 hours")
"Show me 1-star reviews"Customer reviews filtered by rating, territory, sorted by date
"What were my downloads this week?"Sales and revenue summary by territory

No context switching. No portal. Just ask.

What Makes This Different

Maintained successor to JoshuaRileyDev/app-store-connect-mcp-server (archived Feb 2026). Different angle, same API surface plus more.

Other ASC MCP servers wrap the API and give you 80 to 982 raw endpoints. This one gives you 41 opinionated tools, 6 slash-command Prompts, and a Claude Skill that all think. The read tools summarize and audit; the Pro control tools actually drive App Store Connect, from editing metadata to submitting and releasing, with the same API key. Two tools use MCP Sampling: your own client's model does the LLM work, so there is no extra cost from this server.

Why full control is possible without fastlane: fastlane's deliver and pilot are just calls to the same App Store Connect REST API this server authenticates against with your .p8. So nearly everything you would script with fastlane is a tool here, no Ruby toolchain required. The only step that needs your Mac is building and signing the binary, which build_and_archive and upload_binary drive via Xcode.

Setup (3 minutes)

Step 1. Create an API key in App Store Connect > Integrations > App Store Connect API (Admin or App Manager role), then grab three things from that same page:

  • Issuer ID (ASC_ISSUER_ID): the UUID shown at the top of the page, with a copy button next to it.
  • Key ID (ASC_KEY_ID): the 10-character ID next to your key, also in the filename AuthKey_XXXXXXXXXX.p8.
  • .p8 file (ASC_PRIVATE_KEY_PATH): click Download and point this at the saved file. Apple lets you download it only once, so keep it safe.

Step 2. Install:

bash
npm install -g @pofky/asc-mcp

No global install needed if you prefer npx (see the manual config below).

Fastest setup (recommended). Drop your .p8 into Apple's standard path ~/.appstoreconnect/private_keys/ (the file is named AuthKey_XXXXXXXXXX.p8, and the Key ID is in the filename). Then run:

bash
npx @pofky/asc-mcp init --write     # auto-detects the key, asks for your Issuer ID, and writes the config for you# or: npx @pofky/asc-mcp init       # same, but prints the block to paste yourself

init --write finds your Claude Desktop / Claude Code config, backs it up, and merges in the server block, so there's no JSON editing. The server also auto-discovers the .p8 path at runtime, so you only ever need ASC_ISSUER_ID (and ASC_LICENSE_KEY for Pro).

As a Claude Code plugin. One line installs the server and the review-triage skill together, and Claude Code asks for your Issuer ID when it enables the plugin:

/plugin install asc-mcp --marketplace pofky/asc-mcp

The plugin lives in plugin/, and its README says what it runs and sends.

Running it from an agent, or any pipe. There is no terminal to answer questions in, so pass what would have been asked:

bash
npx @pofky/asc-mcp init --write --issuer <your-issuer-uuid>   # add --config <path> if you keep several client configs

It prints the paste-ready block either way, and it never invents a value: if the Issuer ID is missing it says so instead of writing a config that fails at Apple's auth. --key-path, --key-id and --license are there for the same reason, and every one of them also reads from the matching ASC_* environment variable.

Stuck? Run npx @pofky/asc-mcp doctor (or ask your agent to call asc_setup_check). It checks your key, Issuer ID, a live connection to App Store Connect, and your license, and prints the exact fix for anything wrong. In your agent, the /asc-start command walks a first-time user through all of this.

Manual setup. Add to your agent's MCP config (Claude Desktop config, or ~/.claude.json for Claude Code). Use npx for zero-install, or asc-mcp if you installed globally:

json
{  "mcpServers": {    "appstore-connect": {      "command": "npx",      "args": ["-y", "@pofky/asc-mcp"],      "env": {        "ASC_ISSUER_ID": "YOUR_ISSUER_ID"      }    }  }}

With the .p8 in ~/.appstoreconnect/private_keys/, ASC_ISSUER_ID is the only required env var (Key ID and key path are auto-detected). Add ASC_LICENSE_KEY to unlock Pro.

Step 3. Ask your agent: "List my App Store Connect apps"

Step 4, to try the paid half. Ask your agent: "start my asc-mcp trial, my email is [email protected]". It calls asc_start_trial, which unlocks all 41 tools for 7 days with no card and nothing to cancel. The key activates in the running session, so whatever you were blocked on works on the very next call, and it is saved on your machine, in ~/.asc-mcp/license.json and in any MCP client config that already has an asc-mcp entry, so it survives a restart. One trial per Apple developer account.

Works with Claude Code, Cursor, Windsurf, Cline, and any MCP-compatible client.

Tools

Free (no signup, no license key)

ToolWhat it does
asc_start_trial7 days of everything, no card. Ask your agent to run it with your email. Unlocks all 41 tools in the running session, no restart, nothing to cancel.
asc_setup_checkRun first if anything's off. Checks your key, Issuer ID, a live App Store Connect connection, and license tier, and prints the exact fix for each failure.
asc_guideStart here. The in-agent playbook for every flow (first release, update, IAP, subscriptions, reviews, TestFlight, binary), with each manual App Store Connect website step flagged inline. See also USER_GUIDE.md and LIMITATIONS.md.
list_appsList all your apps with name, bundle ID, SKU and App ID
app_detailsVersion history, build status, release state, dates
review_statusCurrent review state with human-readable context

Pro (free 7-day trial, then $9/month)

$9 per month, VAT included; in the US, Canada and India sales tax is added at checkout, before you pay. Cancel any time.

ToolWhat it doesWhy it matters
list_reviewsCustomer reviews filtered by rating, territory, sort orderSee what users say without opening the portal
sales_reportDaily/weekly/monthly downloads and revenue by territoryKnow your numbers instantly
release_preflightPre-submission audit: metadata, char limits, screenshots, buildsFinds submission blockers before you press Submit, and names any check it could not run
daily_briefingMorning summary across all apps: status, reviews, rejectionsOne call replaces 10 minutes of portal clicking
release_notesGit commits since last tag, categorized for writing "What's New"Your AI agent writes release notes from your actual changes
keyword_insightsAnalyze keywords against iTunes search competition, difficulty ratingsSee which keywords are worth targeting at a glance
competitor_snapshotLook up any app: ratings, reviews, version, price, release notesCompetitive intelligence without leaving your editor
metadata_diffCompare live vs pending version metadata across all localesVerify exactly what changed before submitting
triage_reviewsPulls recent reviews and clusters them into 3 to 5 themes with counts, action buckets, and quotes, using MCP SamplingZero extra cost: your client's model does the clustering
draft_review_responseDrafts a public reply to a single review in the review's locale, via Sampling. Elicits tone if your client supports it. Never auto-posts.Apple guideline 1.2 respected; you paste into ASC yourself

Control & Ship (Pro)

These tools write to App Store Connect. Every outward-facing action (submit, release, upload binary) requires an explicit confirm: true, so nothing leaves your machine by accident.

ToolWhat it does
create_versionCreate a new editable App Store version for your next release
update_version_metadataEdit description, keywords, what's-new, promo text, URLs, app name, subtitle. Validates Apple's character limits and refuses over-limit writes
upload_screenshotsUpload screenshots for a device display type (reserve, upload, commit, with checksum)
list_buildsList recent builds and their processing state (VALID = ready)
wait_for_buildPoll until a build finishes processing, so the chain does not need a manual pause
attach_buildAttach a build to the editable version (defaults to newest processed build)
submit_for_reviewSubmit the version to App Review (modern reviewSubmissions flow). confirm: true required
release_versionRelease an approved version to the public App Store. confirm: true required
manage_phased_releaseStart, pause, resume, or complete the 7-day phased rollout
list_beta_groupsList your TestFlight beta groups
assign_build_to_groupPush a build to a beta group so testers can install it
invite_beta_testerInvite an external tester by email and add them to a group
set_app_metadataSet primary/secondary category, copyright, content-rights, and export-compliance (encryption) in one call
set_app_priceSet the base price by creating the price schedule (price_usd: 0 for free), auto-equalized to all territories
set_app_availabilityMake the app available in all App Store territories (or a subset), with auto-include for future ones
set_review_contactSet the App Review contact and optional demo account on the version
set_age_ratingSet the v2 age-rating declaration (full content-descriptor set)
set_privacy_nutritionGuidance + deep link for the App Privacy nutrition labels (not API-addressable)
set_eu_trader_statusGuidance + deep link for the EU DSA trader status (not API-addressable)
create_iapCreate a non-consumable/consumable IAP with localization, availability, and an auto-equalized price
create_subscriptionCreate a subscription group, sub, localization, availability, price, and free trial
set_iap_review_screenshotAttach the App Review screenshot to a subscription or IAP
setup_app_store_signingDownload the app's App Store provisioning profiles and write a manual-signing ExportOptions.plist (works with a least-privilege API key)
build_and_archiveBuild, archive, and export a signed .ipa via xcodebuild (needs Xcode on your Mac)
upload_binaryUpload the .ipa to App Store Connect via altool, using your API key. confirm: true required

The whole flow chains: setup_app_store_signing to build_and_archive to upload_binary to wait_for_build (blocks until VALID) to attach_build to update_version_metadata to upload_screenshots to set_app_metadata/set_app_price/set_app_availability/set_age_rating/set_review_contact to release_preflight to submit_for_review to release_version. The /asc-ship-release slash command drives it for you.

release_preflight is the check to run before you submit: it reads every API-addressable field, loads the support, privacy and terms links in the record, and with project_path checks privacy manifests, required-reason APIs, listed SDKs and purpose strings on your machine. Every rule ends in PASS, WARN, FAIL or UNKNOWN, and any UNKNOWN withholds the clean verdict. Project files are checked only with project_path, and the verdict says when they were not. It ends with the manual steps for the few things Apple only allows in the website (first-IAP bundling, App Privacy nutrition labels, EU trader status). It is not a prediction of App Review's decision.

Get Pro | Retrieve your license key

What stays manual (and why)

A handful of things Apple does not expose to API keys. The MCP never pretends otherwise: it either returns the exact website steps plus a deep link, or detects the case and aborts so nothing is half-done. Full detail in LIMITATIONS.md (and asc_guide topic:limitations):

  • Create an app record / App Group. POST /v1/apps is forbidden for API keys; do it once in the website.
  • App Privacy nutrition label. Not in the API (/v1/appDataUsages still 404s, re-probed 2026-10-31). set_privacy_nutrition returns the checklist plus a deep link, and release_preflight with project_path lists the data types your manifests declare to check it against.
  • EU DSA trader status. Not in the API. set_eu_trader_status returns the steps. Legal decision.
  • An app's first IAPs/subscriptions. Must be submitted with the version in the website; submit_for_review aborts rather than orphan the version. Later products submit via the API.
  • Certificate creation / cloud signing. Least-privilege keys can't; setup_app_store_signing uses manual-signing profiles instead.
  • Compiling the binary. Needs Xcode on your Mac (build_and_archive runs it locally).
  • Posting a public review reply. draft_review_response writes it; you paste it in the website.

How Sampling works (zero extra cost)

triage_reviews and draft_review_response use the MCP Sampling primitive. When you call one of these tools, this server sends a sampling/createMessage request back to your own MCP client. Your client runs the LLM locally (Claude Desktop uses your account; Claude Code uses its session). We never call Anthropic from our side.

Outcome: review clustering and reply drafting cost you exactly what you would pay for any other Claude request, not a penny more from this server.

If your MCP client does not support Sampling yet, both tools return a structured degraded: true result with a clear explanation. Upgrade Claude Desktop or Claude Code to a recent version for full functionality.

Slash Commands (Prompts)

Type these in Claude Desktop or Claude Code and the agent runs a pre-built multi-tool workflow:

Slash commandWhat it does
/asc-startNew here? Verifies the connection, lists your apps, explains free vs Pro in plain language, and recommends your next step. No App Store Connect knowledge assumed.
/asc-weekly-reviewCalls daily_briefing then list_reviews (low-rating, last 7 days) for every app, clusters themes, returns a single digest with 3-bullet action list.
/asc-rejection-auditGiven an app_id, calls release_preflight + metadata_diff + review_status, reads the result against the top 2026 rejection drivers (guideline 2.3 metadata, 4.0 design, privacy-AI 5.1.2). Produces Blocking / Likely-flagged / Safe sections.
/asc-release-go-no-goGiven an app_id, combines preflight + review queue + metadata diff + top competitors in the same category. Returns a direct GO or NO-GO with three supporting reasons.
/asc-ship-releaseGiven an app_id, drives the full release: locate or create the editable version, push metadata, attach the newest build, upload screenshots, run preflight, then submit. Stops to confirm before every outward-facing step.
/asc-first-appGiven an app_id, drives a brand-new app's first 1.0 from existing app record to submitted, handling every first-time-only constraint and stopping at each manual website step (privacy label, trader status, first-IAP bundling).

These are MCP Prompts per the spec. Zero other App Store Connect MCP ships with them.

Claude Skill (one-line install)

After installing the MCP, run:

bash
npx @pofky/asc-mcp install-skill

This copies a small asc-review-triage Skill to ~/.claude/skills/ so Claude automatically picks up review-related questions ("any bad reviews lately?", "what do my users say?", "ratings this week?") and calls the right ASC tools without you having to explain the workflow each time.

Works on macOS, Linux, and Windows. To remove: npx @pofky/asc-mcp uninstall-skill.

Real Output Examples

"Run a preflight check before I submit" (real output, on one of our own unfinished apps, shortened)

## Release Preflight: Adaptale
BLOCKED: 13 failures
Auditing v1.0 (iOS), state PREPARE_FOR_SUBMISSION
### Failures
FAIL  shots.required  [en-US]Saw:  This app runs on iPad, going by the build's iPad icon, and there is no APP_IPAD_PRO_3GEN_129 set with images.Rule: required device sizes (Screenshot specifications, verified 2026-10-31)Fix:  upload_screenshots
FAIL  build.attachedSaw:  Build 1 has expired. Upload a new one.Rule: Guideline 2.1(a), final versions (App Review Guidelines, verified 2026-10-31)Fix:  attach_build
FAIL  app.priceSaw:  No price has been set, not even free.Rule: price schedule (App information reference, verified 2026-10-31)Fix:  set_app_price price_usd (0 for free)

Fix what it names, re-run, and the clean line reads: NO BLOCKING ISSUES FOUND: 32 rules checked. This is not a prediction of App Review's decision.

"Morning briefing"

Daily Briefing - 2026-04-13
2 apps in your account
Tempo: Habit Builder- Latest: v2.3 (IOS) - Waiting for Review- Action needed: v2.3 is Waiting for Review- Reviews (last 3d): 5 new, avg 4.2 stars
NightOwl Weather- Latest: v1.1 (IOS) - Live- No new reviews in the last 3 days

"Generate release notes from git"

Git History for Release Notes
Since: v2.2.0Commits: 8Character limit: 4000 chars for "What's New"
New Features (3)- feat: add habit streak calendar view- feat: dark mode support- add widget for home screen
Bug Fixes (2)- fix: notification timing off by 1 hour- fix: crash on iPad when rotating
Instructions: Write user-facing "What's New" text.Lead with the most impactful change. Keep under 4000 chars.

Why This One Over the Free Alternatives?

Raw API wrappers (free)This server
Tool count80 to 98241 opinionated tools (read + control)
MCP Prompts (slash commands)NoYes, 6 pre-built workflows
MCP Sampling (zero server-side LLM cost)NoYes, review triage + response drafts
Claude Skill bundledNoYes, one-line install
Pre-submission auditNoYes, catches rejections before you submit
Cross-app briefingsNoYes, one call, all apps
Git-aware release notesNoYes, reads your project's commit history
Smart review summariesNoYes, theme clustering, action items
SetupBuild from source (Swift or Node)One command, init --write writes your config
Free tierSomeYes, 6 tools, no signup. Two of them need nothing but Node
Try the paid halfn/a7 days, no card, started from inside your agent

Raw wrappers give you endpoints. This gives you answers.

Security

Your .p8 private key never leaves your machine:

  • The .p8 private key is read locally. JWT tokens are generated on your computer, and name your Key ID and Issuer ID to Apple, as Apple's API requires.
  • API calls go directly from your machine to api.appstoreconnect.apple.com.
  • The license server is sent your license key string when one is set and, if you start a trial, your email address, a one-way hash of your Issuer ID and the name of the tool you started from. No Apple data and no credentials.
  • release_preflight requests the support, marketing and privacy policy addresses in your own App Store Connect record and any link in your description that looks like Terms of Use, following their redirects, from your machine with no key or token, and never one that resolves to a private network. If you pass project_path it reads that folder (on a Mac, nm and plutil on a built app there), writes nothing and runs nothing from the project; its reply carries paths, line numbers and setting names, not file contents.
  • ~/.asc-mcp/preview.json holds one number, how many of the 5 free preview calls have been used on this machine. It is never sent anywhere.
  • Starting a trial saves the license key in plain text in ~/.asc-mcp/license.json (owner-only permissions on macOS and Linux) and adds it as ASC_LICENSE_KEY to every asc-mcp entry found in your Claude Desktop, Claude Code (~/.claude.json, including per-project entries), ./.mcp.json, Cursor, Windsurf and Cline configs. Nothing else in those files is changed, and each edited file gets a one-time .bak copy beside it, which holds whatever the file held. ~/.asc-mcp/last-verdict.json holds the last license check and a hash of the key. Delete the file and the ASC_LICENSE_KEY lines to remove the key.
  • Fully open source. Read the code.

Works With

Requirements

  • Node.js 18+
  • Apple Developer Program membership
  • App Store Connect API key (Admin or App Manager role)

Legal

This project is not affiliated with, endorsed by, or sponsored by Apple Inc. Apple, App Store, App Store Connect, TestFlight, Xcode, iOS, and macOS are trademarks of Apple Inc.

License

MIT

Source: README.md at commit 252261f

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.2.1LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts