
Appstore Connect
io.github.SardorbekR由 GitHub 账号 SardorbekR 发布v2.0.4更新于 Nov 4, 2026
MCP server for Apple's App Store Connect API. Manage apps, TestFlight, and more.
概览
面向 Apple App Store Connect API 的本地 MCP 服务器,让助手管理应用、版本、TestFlight、定价、订阅和评论。
- 可以做什么
- 列出并查看应用、构建、设备、团队成员、Bundle ID 和类别
- 创建和编辑应用版本、本地化、截图及 App 审核信息
- 管理 TestFlight 分组、测试员和邀请
- 设置定价与上架地区,包括按地区购买力平价的定价
- 管理订阅、App 内购买、优惠和自定产品页
- 下载分析、销售、财务、性能与诊断报告
- 适用场景
- 适合在对话中让助手处理 App Store Connect 事务:准备发版、编辑商店文案与本地化、运营 TestFlight、调整价格,或获取销售与分析报告。
- 运行要求
- 通过 npx 或全局 npm 安装后在本地运行(需要 Node.js)。需要 App Store Connect API 密钥:APP_STORE_CONNECT_KEY_ID、APP_STORE_CONNECT_ISSUER_ID,以及 APP_STORE_CONNECT_P8_PATH 或 APP_STORE_CONNECT_P8_CONTENT 之一。需能访问 Apple 的 API;除非设置 ASC_DISABLE_UPDATE_CHECK=1,服务器每天会向 npm 查询一次更新。
安装
在 SourceWeft 中
- 打开 控制台中的 Appstore Connect,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
App Store Connect MCP Server
[npm version] [License: MIT] [Node.js Version]
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.
Features
- Any API Operation - Call any of the 1,303 App Store Connect API operations through
asc_api_request, validated against Apple's OpenAPI spec, withasc_api_searchandasc_api_describeto find and inspect them - Submission & Release - Edit version metadata (copyright, version string, release type), attach builds, App Review details, review submissions, phased and manual release, export compliance
- App Info - Categories, age rating declaration, app info localizations, custom EULA
- App Store Localizations - Full CRUD for version descriptions, keywords, and what's new
- App Management - List and inspect apps across all platforms
- Version Control - Create and manage app store versions
- TestFlight - Groups, build access, testers and invitations, What to Test notes, beta app localizations, beta review submissions
- Screenshots & Previews - Upload, reorder, and delete screenshots and app previews; review screenshots for subscriptions and in-app purchases
- Customer Reviews - Read reviews and publish or remove responses
- Bundle ID Management - Full CRUD for bundle identifiers
- Device Management - List and inspect registered devices
- User Management - List and inspect team users
- Build Management - List and inspect app builds
- Category & Pricing - Browse categories, check pricing and availability
- Pricing & PPP - Set per-territory pricing with Purchase Power Parity support
- Subscriptions - Groups, subscriptions, localizations, pricing & PPP, availability, promotional, introductory and win-back offers, offer codes
- In-App Purchases - Create and manage one-time purchases (lifetime/non-consumable, consumable, non-renewing): metadata, localization, pricing & PPP, availability, offer codes, review screenshots, and review submission
- Custom Product Pages - Pages, versions, and per-locale promotional text
- Analytics Reports - Request and download app analytics reports (engagement, commerce, usage, performance)
- Sales & Finance - Download sales, trends, and financial reports
- Performance & Diagnostics - App/build power & performance metrics and diagnostic logs
- Toolsets & Read-Only Mode - Expose only the tool groups you need, or block every write with
ASC_READ_ONLY=1 - Secure by Default - ES256 JWT auth with automatic token refresh, credential redaction in logs
Table of Contents
- Quick Start
- Installation
- Configuration
- Available Tools
- Usage Examples
- Security
- Troubleshooting
- Development
- License
Quick Start
- Get an App Store Connect API key (see Prerequisites).
- Add the server to your MCP client with
npx -y asc-mcp@latestand your credentials (see MCP Client Configuration). - Restart the client. New releases are picked up on each restart.
Installation
npx (recommended)
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.
Global install
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.
Updating
- npx: restart your MCP client. A running client keeps the version it started with.
- Global install:
npm install -g asc-mcp@latest, then restart the client. - Pin a version for stability with
[email protected](or any version) instead ofasc-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.
From Source
Configuration
Prerequisites: Get Your Apple API Credentials
- Sign in to App Store Connect
- Go to Users and Access → Integrations → App Store Connect API
- Click Generate API Key (or use existing)
- Select appropriate role (Admin or App Manager recommended)
- Download the .p8 file - you can only download it once!
- Note your Key ID (shown in the keys list)
- Note your Issuer ID (shown at the top of the page)
Environment Variables
*One of P8_PATH or P8_CONTENT is required.
Optional settings:
MCP Client Configuration
Claude Desktop
Add to your Claude Desktop config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Cursor
Add to your Cursor MCP settings (Settings → MCP Servers):
VS Code with Continue
Add to your Continue configuration:
Using P8 Content Instead of Path
For CI/CD or containerized environments, you can pass the key content directly:
Available Tools
Apps
Versions
Version Localizations
App Info Localizations
Beta Testing (TestFlight)
Screenshots
Bundle IDs
Devices
Users
Builds
Categories & Pricing
Pricing (PPP)
In-App Purchases (Lifetime / Non-Consumable)
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.
Analytics Reports
Sales & Finance
Performance & Diagnostics
Any API Operation (generic)
Subscriptions
Version Admin & App Review Details
Release & Export Compliance
App Review Submissions
App Info: Categories, Age Rating, EULA
Media: Screenshot Sets, App Previews, Review Screenshots
TestFlight Groups
TestFlight Builds & Beta Review
Customer Reviews
Subscription Offers (Introductory & Win-Back)
Subscription Offer Codes
In-App Purchase Offer Codes
Custom Product Pages
Usage Examples
List Your Apps
"Show me all my apps in App Store Connect"
Claude will use list_apps to retrieve and display your apps.
Update App Description
"Update the English description for version 2.0 of MyApp to: 'A revolutionary app that simplifies your daily tasks.'"
Claude will:
- Find the app using
list_apps - Get the version using
list_app_versions - Find the English localization using
list_version_localizations - Update it using
update_version_localization
Add Japanese Localization
"Add Japanese localization to MyApp version 2.0 with description '素晴らしいアプリです' and keywords 'アプリ,便利,簡単'"
Claude will use create_version_localization with locale ja.
Add a Beta Tester
"Add [email protected] as a beta tester to the Internal Testing group for MyApp"
Claude will:
- Find the app and beta group using
list_beta_groups - Add the tester using
add_beta_tester
Set PPP Pricing
"Show me the equivalent prices for my $9.99 tier in India, Brazil, and Turkey"
Claude will:
- Find the $9.99 price point using
list_app_price_points - Get equivalent prices using
get_price_point_equalizations - Show you the PPP-adjusted prices in each territory
"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.
Create a Lifetime Purchase
"Add a $99.99 lifetime unlock to MyApp with PPP pricing for India and Brazil"
Claude will:
- Create a non-consumable IAP with
create_in_app_purchase - Add a display name with
create_in_app_purchase_localization - Find the $99.99 tier with
list_in_app_purchase_price_points, then PPP equivalents withget_in_app_purchase_price_point_equalizations - Apply per-territory pricing with
set_in_app_purchase_priceand open availability withset_in_app_purchase_availability - Confirm the result with
list_in_app_purchase_prices
Check Version Status
"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.)
Prepare and Submit a Version
"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.
Anything Without a Dedicated Tool
"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.
Security
Credential Handling
- Private keys are never logged or exposed in error messages
- JWT tokens are automatically redacted from any error output
- Issuer ID is redacted from error messages and details; demo account passwords are never returned and are redacted from errors
- Read-only mode (
ASC_READ_ONLY=1) blocks writes in the HTTP client itself, not just in the tool list - Generic requests only reach relative
/v1-/v3paths on the App Store Connect host, with.., encoded, and absolute paths rejected; they must match Apple's spec unlessallowUnknownis set. Demo account passwords and webhook secrets are masked in responses - Offer code CSVs are written only to new files (
savePath, owner-only permissions), never over existing ones - Token caching minimizes key usage (15-min tokens, refreshed at 10 min)
Path Validation
- P8 file paths are validated against directory traversal attacks (
..not allowed) - Only absolute paths are resolved
Best Practices
- Never commit credentials - Use environment variables or a secrets manager
- Restrict API key permissions - Use minimal required role (App Manager for most operations)
- Rotate keys periodically - Generate new API keys and revoke old ones
- Secure your .p8 file - Set file permissions to
600(owner read/write only)
Troubleshooting
"Configuration error: APP_STORE_CONNECT_KEY_ID environment variable is required"
Ensure all required environment variables are set:
APP_STORE_CONNECT_KEY_IDAPP_STORE_CONNECT_ISSUER_IDAPP_STORE_CONNECT_P8_PATHorAPP_STORE_CONNECT_P8_CONTENT
"Failed to read private key"
- Verify the path in
APP_STORE_CONNECT_P8_PATHis correct and absolute - Check file permissions:
ls -la /path/to/AuthKey.p8 - Ensure the file is a valid
.p8from Apple (starts with-----BEGIN PRIVATE KEY-----)
"Authentication failed"
This usually means:
- The API key was revoked in App Store Connect
- The Key ID or Issuer ID doesn't match the .p8 file
- The .p8 file is corrupted or incomplete
"Rate limit exceeded"
The server includes built-in rate limiting (50 requests/minute). If you hit Apple's limits:
- Wait for the indicated retry time
- Batch your operations when possible
- The server automatically retries with exponential backoff
Tools Not Appearing in Claude
- Verify the server is running: check Claude Desktop logs
- Ensure the config file path is correct for your OS
- Restart Claude Desktop after config changes
Development
Prerequisites
- Node.js 20+
- npm or pnpm
Setup
Project Structure
OpenAPI Spec
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.
Running Locally
Releasing
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.
- Set the new version in
package.jsonandpackage-lock.json(npm version X.Y.Z --no-git-tag-version), both fields inserver.json, andSERVER_VERSIONinsrc/index.ts - Merge to
main git tag vX.Y.Z && git push origin vX.Y.Z- Approve the run: the publish job waits on the
releaseenvironment until a required reviewer opens the workflow run and clicks Review deployments → Approve
The workflow refuses to publish if any version field differs from the tag, or if typecheck, lint, tests, or the OpenAPI index check fail.
Contributing
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Make your changes and add tests
- Run
npm testandnpm run lint - Submit a pull request
Acknowledgements
The generic API tools, the OpenAPI index format, and several workflow details (review submissions, asset uploads, offer pricing) follow rorkai/App-Store-Connect-CLI (MIT).
License
MIT License - see LICENSE for details.
Links
来源:README.md,提交 d738483
工具
0版本历史
3- v2.0.4最新Oct 21, 2026
- v2.0.3Oct 16, 2026
- v1.0.4Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分