Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
App Store release pilot — version bump, TestFlight upload, metadata, review submission
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
APPLE_KEY_ID, APPLE_ISSUER_ID, ASC_KEY_PATH, APPLE_KEY_CONTENT, APPLE_TEAM_ID, ASC_BUNDLE_ID, ASC_PROJECT_DIR, ASC_PLATFORM, ASC_FASTLANE_LANE, ASC_FASTLANE_PLATFORM, ASC_UPLOAD_CMDValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"appstore-release": {
"command": "npx",
"args": [
"-y",
"appstore-release-mcp"
],
"env": {
"APPLE_KEY_ID": "your-value",
"APPLE_ISSUER_ID": "your-value",
"ASC_KEY_PATH": "your-value",
"APPLE_KEY_CONTENT": "your-value",
"APPLE_TEAM_ID": "your-value",
"ASC_BUNDLE_ID": "your-value",
"ASC_PROJECT_DIR": "your-value",
"ASC_PLATFORM": "your-value",
"ASC_FASTLANE_LANE": "your-value",
"ASC_FASTLANE_PLATFORM": "your-value",
"ASC_UPLOAD_CMD": "your-value"
}
}
}
}Run this in your terminal
claude mcp add appstore-release --env APPLE_KEY_ID=your-value --env APPLE_ISSUER_ID=your-value --env ASC_KEY_PATH=your-value --env APPLE_KEY_CONTENT=your-value --env APPLE_TEAM_ID=your-value --env ASC_BUNDLE_ID=your-value --env ASC_PROJECT_DIR=your-value --env ASC_PLATFORM=your-value --env ASC_FASTLANE_LANE=your-value --env ASC_FASTLANE_PLATFORM=your-value --env ASC_UPLOAD_CMD=your-value -- npx -y appstore-release-mcpFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"appstore-release": {
"command": "npx",
"args": [
"-y",
"appstore-release-mcp"
],
"env": {
"APPLE_KEY_ID": "your-value",
"APPLE_ISSUER_ID": "your-value",
"ASC_KEY_PATH": "your-value",
"APPLE_KEY_CONTENT": "your-value",
"APPLE_TEAM_ID": "your-value",
"ASC_BUNDLE_ID": "your-value",
"ASC_PROJECT_DIR": "your-value",
"ASC_PLATFORM": "your-value",
"ASC_FASTLANE_LANE": "your-value",
"ASC_FASTLANE_PLATFORM": "your-value",
"ASC_UPLOAD_CMD": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"appstore-release": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"appstore-release-mcp"
],
"env": {
"APPLE_KEY_ID": "your-value",
"APPLE_ISSUER_ID": "your-value",
"ASC_KEY_PATH": "your-value",
"APPLE_KEY_CONTENT": "your-value",
"APPLE_TEAM_ID": "your-value",
"ASC_BUNDLE_ID": "your-value",
"ASC_PROJECT_DIR": "your-value",
"ASC_PLATFORM": "your-value",
"ASC_FASTLANE_LANE": "your-value",
"ASC_FASTLANE_PLATFORM": "your-value",
"ASC_UPLOAD_CMD": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
ASC_KEY_PATH envAPPLE_TEAM_ID envASC_PROJECT_DIR envASC_PLATFORM envASC_FASTLANE_LANE envASC_FASTLANE_PLATFORM envASC_UPLOAD_CMD envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026
The registry name was verified with the GitHub account rabdulsal, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: APPLE_KEY_ID, APPLE_ISSUER_ID, APPLE_KEY_CONTENT, ASC_BUNDLE_ID
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.1.1) reached the registry 4 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, NexusWindows
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Windows computer use in the background: desktop apps driven without your mouse or keyboard.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
An MCP server that drives the full App Store release cycle for iOS and macOS apps: version bump → archive + TestFlight upload → metadata → review submission → status.
What makes it different: existing App Store Connect MCP servers wrap the REST API — metadata, TestFlight management, analytics. None of them can do the one step the REST API doesn't support: getting a binary onto Apple's servers. This server is a *release pilot*, not an API browser, and gives you two ways to do that:
node:crypto) for status, builds, metadata, and review submission.ipa? (from eas build, a CI pipeline, a manual Xcode archive) Upload it directly via xcrun altool — no fastlane, no local archive step, nothing to configure beyond the ASC API key you already haveproject.pbxproj (and project.yml for xcodegen projects)xcrun altool — used by asc_upload_ipa)beta) — only needed for asc_upload_build; skip it entirely if you're only using asc_upload_ipa.p8).p8 — Apple lets you download it exactly once. Keep it in ~/.appstoreconnect/private_keys/.claude mcp add appstore \
-e APPLE_KEY_ID=XXXXXXXXXX \ -e APPLE_ISSUER_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \ -e ASC_KEY_PATH=$HOME/.appstoreconnect/private_keys/AuthKey_XXXXXXXXXX.p8 \ -e APPLE_TEAM_ID=XXXXXXXXXX \ -e ASC_BUNDLE_ID=com.example.myapp \ -e ASC_PROJECT_DIR=/path/to/your/xcode/project \ -- npx appstore-release-mcp
For a macOS app whose Fastfile uses platform :mac, add -e ASC_PLATFORM=MAC_OS -e ASC_FASTLANE_PLATFORM=mac.
asc_doctor. All checks should be ✓.| Tool | What it does |
|---|---|
asc_doctor | Verify config, creds, fastlane/xcodebuild/altool, app record — run first |
asc_app_status | Versions + review states + recent builds in one call |
asc_list_builds | Build processing states (wait for VALID after upload) |
asc_bump_version | Bump build number / set marketing version in local project files |
asc_upload_build | Run your fastlane upload lane as an async job — returns job ID immediately |
asc_upload_ipa | Upload an already-built .ipa via xcrun altool — async job, no fastlane needed |
asc_job_status | Poll a job started by asc_upload_build or asc_upload_ipa; status + log tail |
asc_update_metadata | Description / keywords / what's-new / promo text via REST |
asc_submit_review | Attach build + create review submission + submit |
Building locally with fastlane:
asc_doctor # toolchain healthy?
asc_bump_version {marketing_version: "1.1.0"} asc_upload_build # → job id asc_job_status {job_id} # poll until succeeded asc_list_builds # wait for processingState VALID asc_update_metadata {whats_new: "...", create_version: "1.1.0"} asc_submit_review {build_id} # point of no return asc_app_status # WAITING_FOR_REVIEW
Already have a signed .ipa (EAS Build, CI, manual archive) — no fastlane needed:
asc_doctor
asc_upload_ipa {ipa_path: "./build/app.ipa"} # → job id asc_job_status {job_id} # poll until succeeded asc_list_builds # wait for processingState VALID asc_update_metadata {whats_new: "...", create_version: "1.1.0"} asc_submit_review {build_id} asc_app_status
Credential names deliberately match fastlane's app_store_connect_api_key, so one credential set serves both.
| Var | Required | Notes |
|---|---|---|
APPLE_KEY_ID | yes | ASC API key ID |
APPLE_ISSUER_ID | yes | ASC issuer ID |
APPLE_KEY_CONTENT / ASC_KEY_PATH | one of | base64-encoded .p8 / path to .p8 file |
APPLE_TEAM_ID | for asc_upload_build | Apple Developer team ID (not needed for asc_upload_ipa) |
ASC_BUNDLE_ID | yes | your app's bundle identifier |
ASC_PROJECT_DIR | recommended | Xcode project root where fastlane runs (default: cwd) |
ASC_PLATFORM | no | IOS (default), MAC_OS, TV_OS, VISION_OS |
ASC_FASTLANE_LANE | no | upload lane name (default: beta) |
ASC_FASTLANE_PLATFORM | no | fastlane platform prefix, e.g. mac or ios |
ASC_UPLOAD_CMD | no | full override, e.g. bundle exec fastlane ios beta |
~/.appstore-mcp/jobs/ either way.asc_submit_review is the point of no return for a release — the tool description tells agents to confirm with a human first.MIT