App Store Connect MCP Server
A Model Context Protocol (MCP) server for Apple's App Store Connect API. Manage your iOS, macOS, tvOS, and visionOS apps directly from Claude, Cursor, or any MCP-compatible client.
エージェントを強化
公開元自身のコマンドです。PlugMCP のエンドポイントではありません。
キーとログ付きでコピーをホスト。
npx -y [email protected]Claude Code にはローカルコマンド用のインストールリンクがありません。下のコマンドをコピーして、ターミナルで実行してください。
claude mcp add asc-mcp -- npx -y asc-mcp@2.0.4ターミナルで実行します。
{ "mcpServers": { "asc-mcp": { "command": "npx", "args": [ "-y", "[email protected]" ] } }}claude_desktop_config.json
リモート URL か、手元のマシンのコマンドか 2 つのインストール方法の違い
PlugMCP で実行
A new server you create. It is not this listing's official endpoint. Use the publisher install when you want their URL and their credentials.
起動公開元より
A Model Context Protocol (MCP) server for Apple's App Store Connect API. Manage your iOS, macOS, tvOS, and visionOS apps directly from Claude, Cursor, or any MCP-compatible client.
MCP server for Apple's App Store Connect API - manage iOS, macOS, tvOS, and visionOS apps with AI
asc_api_request, validated against Apple's OpenAPI spec, with asc_api_search and asc_api_describe to find and inspect themASC_READ_ONLY=1npx -y asc-mcp@latest and your credentials (see MCP Client Configuration).npx -y asc-mcp@latest
Your MCP client runs this command itself (see MCP Client Configuration). npx fetches the newest release whenever the client starts, so you stay up to date.
npm install -g asc-mcp
Then use "command": "asc-mcp" in your client config. A global install does not update by itself: run npm install -g asc-mcp@latest to update.
npm install -g asc-mcp@latest, then restart the client.[email protected] (or any version) instead of asc-mcp@latest.Once a day the server asks npm for the latest version in the background, without delaying startup. If yours is older, the next time the server starts it tells your assistant, which mentions it to you once. It sends nothing but that request, and installs nothing. Set ASC_DISABLE_UPDATE_CHECK=1 to turn it off.
git clone https://github.com/SardorbekR/appstore-connect-mcp.git
cd appstore-connect-mcp
npm install
npm run build
*One of P8_PATH or P8_CONTENT is required.
Optional settings:
Add to your Claude Desktop config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"app-store-connect": {
"command": "npx",
"args": ["-y", "asc-mcp@latest"],
"env": {
"APP_STORE_CONNECT_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_CONNECT_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_CONNECT_P8_PATH": "/absolute/path/to/AuthKey.p8"
}
}
}
}
Add to your Cursor MCP settings (Settings → MCP Servers):
{
"mcpServers": {
"app-store-connect": {
"command": "npx",
"args": ["-y", "asc-mcp@latest"],
"env": {
"APP_STORE_CONNECT_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_CONNECT_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_CONNECT_P8_PATH": "/absolute/path/to/AuthKey.p8"
}
}
}
}
Add to your Continue configuration:
{
"mcpServers": {
"app-store-connect": {
"command": "npx",
"args": ["-y", "asc-mcp@latest"],
"env": {
"APP_STORE_CONNECT_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_CONNECT_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_CONNECT_P8_PATH": "/absolute/path/to/AuthKey.p8"
}
}
}
}
For CI/CD or containerized environments, you can pass the key content directly:
{
"mcpServers": {
"app-store-connect": {
"command": "npx",
"args": ["-y", "asc-mcp@latest"],
"env": {
"APP_STORE_CONNECT_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_CONNECT_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_CONNECT_P8_CONTENT": "-----BEGIN PRIVATE KEY-----\nMIGT...your key here...AB12\n-----END PRIVATE KEY-----"
}
}
}
}
One-time purchases via Apple's In-App Purchases v2 API. create_in_app_purchase defaults to NON_CONSUMABLE — a "lifetime" unlock. To ship one: create → add a localization → set a price → set availability → submit for review.
Note: App Review usually requires a review screenshot on the in-app purchase. Uploading IAP review screenshots is not yet covered by these tools — add one in App Store Connect if
submit_in_app_purchase_for_reviewis rejected for a missing screenshot.
"Show me all my apps in App Store Connect"
Claude will use list_apps to retrieve and display your apps.
"Update the English description for version 2.0 of MyApp to: 'A revolutionary app that simplifies your daily tasks.'"
Claude will:
list_appslist_app_versionslist_version_localizationsupdate_version_localization"Add Japanese localization to MyApp version 2.0 with description '素晴らしいアプリです' and keywords 'アプリ,便利,簡単'"
Claude will use create_version_localization with locale ja.
"Add [email protected] as a beta tester to the Internal Testing group for MyApp"
Claude will:
list_beta_groupsadd_beta_tester"Show me the equivalent prices for my $9.99 tier in India, Brazil, and Turkey"
Claude will:
list_app_price_pointsget_price_point_equalizations"Set my app to $9.99 in the US and use PPP pricing for India and Brazil"
Claude will use set_app_prices with the appropriate price point IDs for each territory.
"Add a $99.99 lifetime unlock to MyApp with PPP pricing for India and Brazil"
Claude will:
create_in_app_purchasecreate_in_app_purchase_localizationlist_in_app_purchase_price_points, then PPP equivalents with get_in_app_purchase_price_point_equalizationsset_in_app_purchase_price and open availability with set_in_app_purchase_availabilitylist_in_app_purchase_prices"What's the status of all versions of MyApp?"
Claude will use list_app_versions to show version states (PREPARE_FOR_SUBMISSION, IN_REVIEW, READY_FOR_SALE, etc.)
"Set the copyright of MyApp 2.1 to '2026 Example Inc.', attach build 42, add review notes, and submit it for review"
Claude will use update_app_version, set_app_version_build (only VALID builds attach), update_review_detail, then create_review_submission, add_review_submission_item, and submit_review_submission, which refuses if the submission holds anything besides the items you expect.
"Turn on Game Center for MyApp's next version"
Claude will use asc_api_search to find the operation, asc_api_describe to see its body, and asc_api_request to call it.
ASC_READ_ONLY=1) blocks writes in the HTTP client itself, not just in the tool list/v1-/v3 paths on the App Store Connect host, with .., encoded, and absolute paths rejected; they must match Apple's spec unless allowUnknown is set. Demo account passwords and webhook secrets are masked in responsessavePath, owner-only permissions), never over existing ones.. not allowed)600 (owner read/write only)chmod 600 /path/to/AuthKey.p8
Ensure all required environment variables are set:
APP_STORE_CONNECT_KEY_IDAPP_STORE_CONNECT_ISSUER_IDAPP_STORE_CONNECT_P8_PATH or APP_STORE_CONNECT_P8_CONTENTAPP_STORE_CONNECT_P8_PATH is correct and absolutels -la /path/to/AuthKey.p8.p8 from Apple (starts with -----BEGIN PRIVATE KEY-----)This usually means:
The server includes built-in rate limiting (50 requests/minute). If you hit Apple's limits:
# Clone the repository
git clone https://github.com/SardorbekR/appstore-connect-mcp.git
cd appstore-connect-mcp
# Install dependencies
npm install
# Build
npm run build
# Run tests
npm test
# Lint
npm run lint
# Type check
npm run typecheck
src/
├── index.ts # MCP server entry point
├── auth/
│ └── jwt.ts # JWT token generation & caching
├── api/
│ ├── client.ts # HTTP client with retry logic and read-only guard
│ ├── upload.ts # Shared asset upload (reserve, upload chunks, commit, poll)
│ └── types.ts # TypeScript interfaces
├── openapi/
│ ├── schema-index.json # Operation index generated from spec/openapi.oas.json
│ └── index.ts # Match, search, and describe operations
├── tools/
│ ├── index.ts # Tool registry (toolsets, read-only filtering)
│ ├── api.tools.ts # Generic asc_api_* tools
│ ├── apps.tools.ts
│ ├── versions.tools.ts
│ ├── localizations.tools.ts
│ ├── app-info.tools.ts
│ ├── beta.tools.ts
│ ├── screenshots.tools.ts
│ ├── bundle-ids.tools.ts
│ ├── devices.tools.ts
│ ├── users.tools.ts
│ ├── builds.tools.ts
│ ├── categories.tools.ts
│ └── ... # One file per domain (subscriptions, release, media, ...)
└── utils/
├── errors.ts # Error classes with redaction
└── validation.ts # Zod schemas
spec/openapi.oas.json is Apple's App Store Connect OpenAPI spec, pinned (see spec/README.md). Tests check every request a tool sends against it.
npm run check-openapi # fail if src/openapi/schema-index.json is stale
npm run update-openapi # download Apple's latest spec and regenerate the index
npx tsx scripts/spec-sheet.ts "PATCH /v1/appInfos/{id}" # print an operation's resolved shape
# Development mode with auto-reload
npm run dev
# Or run the built version
npm start
Releases publish from GitHub Actions (.github/workflows/publish.yml) when a version tag is pushed. npm uses trusted publishing (OIDC, no token, provenance attached) and the MCP Registry uses GitHub OIDC.
package.json and package-lock.json (npm version X.Y.Z --no-git-tag-version), both fields in server.json, and SERVER_VERSION in src/index.tsmaingit tag vX.Y.Z && git push origin vX.Y.Zrelease environment until a required reviewer opens the workflow run and clicks Review deployments → ApproveThe workflow refuses to publish if any version field differs from the tag, or if typecheck, lint, tests, or the OpenAPI index check fail.
git checkout -b feature/my-featurenpm test and npm run lintThe generic API tools, the OpenAPI index format, and several workflow details (review submissions, asset uploads, offer pricing) follow rorkai/App-Store-Connect-CLI (MIT).
MIT License - see LICENSE for details.
MCP server for Apple's App Store Connect API - manage iOS, macOS, tvOS, and visionOS apps with AI
{ "mcpServers": { "asc-mcp": { "command": "npx", "args": [ "-y", "[email protected]" ] } }}ツール
ツール一覧はまだありません。リモートサーバーは、最初のヘルスチェック後に取得されます。
よくある質問
このページで Cursor、Claude Desktop、Claude Code、VS Code 用の stdio 設定をコピーできます。PlugMCP のプロキシではなく、公開元のインストール方法を使います。
このレコードに必須の環境変数は記載されていません。
Asc は stdio 経由でローカル実行されます。
最終チェックは 2026-11-13 です。 MCP server for Apple's App Store Connect API - manage iOS, macOS, tvOS, and visionOS apps with AI