A community-driven registry for the Claude Code ecosystem. Not affiliated with Anthropic.
Are you the author? Sign in to claim
MCP server for App Store Connect API - 389 tools for apps, builds, TestFlight, subscriptions, Xcode Cloud, and more from
A Model Context Protocol server for the App Store Connect API.
Manage apps, builds, TestFlight, reviews, and more — directly from Claude.
asc-mcp is a Swift-based MCP server that bridges Claude (or any MCP-compatible host) with the App Store Connect API. It exposes 389 tools across 30 App Store tool domains + 2 core domains, enabling you to automate your entire iOS/macOS release workflow through natural language.
# 1. Install via Mint
brew install mint
mint install zelentsov-dev/asc-mcp@v3.0.2
# 2. Add to Claude Code with env vars (simplest setup)
claude mcp add asc-mcp \
-e ASC_KEY_ID=XXXXXXXXXX \
-e ASC_ISSUER_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
-e ASC_PRIVATE_KEY_PATH=/path/to/AuthKey.p8 \
-- ~/.mint/bin/asc-mcp
Or use a JSON config file — see Configuration below.
| Requirement | Version |
|---|---|
| macOS | 14.0+ (Sonoma) |
| Swift | 6.2+ |
| Xcode | 26.0+ or a Swift 6.2 toolchain |
| App Store Connect API Key | Create one here |
Mint is the simplest way to install — one command, no manual cloning.
# Install Mint (if you don't have it)
brew install mint
# Install asc-mcp from GitHub
mint install zelentsov-dev/asc-mcp@v3.0.2
# Register in Claude Code
claude mcp add asc-mcp -- ~/.mint/bin/asc-mcp
To install a specific branch or tag:
mint install zelentsov-dev/asc-mcp@main # main branch
mint install zelentsov-dev/asc-mcp@develop # develop branch
mint install zelentsov-dev/asc-mcp@v3.0.2 # specific tag
To update to the latest version:
mint install zelentsov-dev/asc-mcp@v3.0.2 --force
git clone https://github.com/zelentsov-dev/asc-mcp.git
cd asc-mcp
swift build -c release
# Register in Claude Code
claude mcp add asc-mcp -- $(pwd)/.build/release/asc-mcp
[!TIP] For convenience, copy the binary to a location in your PATH:
hljs language-bashcp .build/release/asc-mcp /usr/local/bin/asc-mcp
.p8 private key file (you can only download it once!)asc-mcp supports three configuration methods (checked in this order):
Single company — simplest setup:
export ASC_KEY_ID=XXXXXXXXXX
export ASC_ISSUER_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
export ASC_PRIVATE_KEY_PATH=/path/to/AuthKey.p8
# or pass the key content directly:
# export ASC_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIGT..."
# optional:
# export ASC_COMPANY_NAME="My Company"
# export ASC_VENDOR_NUMBER=YOUR_VENDOR_NUMBER # for analytics
Multiple companies — numbered variables:
export ASC_COMPANY_1_NAME="My Company"
export ASC_COMPANY_1_KEY_ID=XXXXXXXXXX
export ASC_COMPANY_1_ISSUER_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
export ASC_COMPANY_1_KEY_PATH=/path/to/AuthKey1.p8
export ASC_COMPANY_1_VENDOR_NUMBER=YOUR_VENDOR_NUMBER # optional, for analytics
export ASC_COMPANY_2_NAME="Client Corp"
export ASC_COMPANY_2_KEY_ID=YYYYYYYYYY
export ASC_COMPANY_2_ISSUER_ID=yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
export ASC_COMPANY_2_KEY_PATH=/path/to/AuthKey2.p8
Numbering starts at 1. The server scans while
ASC_COMPANY_{N}_KEY_IDexists.
Create ~/.config/asc-mcp/companies.json:
{
"companies": [
{
"id": "my-company",
"name": "My Company",
"key_id": "XXXXXXXXXX",
"issuer_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"key_path": "/Users/you/.keys/AuthKey_XXXXXXXXXX.p8",
"vendor_number": "YOUR_VENDOR_NUMBER"
},
{
"id": "client-company",
"name": "Client Corp",
"key_id": "YYYYYYYYYY",
"issuer_id": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
"key_path": "/Users/you/.keys/AuthKey_YYYYYYYYYY.p8",
"vendor_number": "YOUR_VENDOR_NUMBER"
}
]
}
Note:
vendor_numberis required for analytics tools (analytics_sales_report,analytics_financial_report,analytics_app_summary). Find it in App Store Connect → Sales and Trends → Reports.
The server resolves configuration in this order:
--companies /path/to/companies.json (CLI argument)ASC_MCP_COMPANIES=/path/to/companies.json (env var pointing to JSON file)~/.config/asc-mcp/companies.json, etc.)ASC_COMPANY_1_KEY_ID ... (multi-company env vars)ASC_KEY_ID + ASC_ISSUER_ID (single-company env vars)claude mcp add asc-mcp -- ~/.mint/bin/asc-mcp
Or add to .mcp.json (project) / .claude/settings.json (global) with env vars:
{
"mcpServers": {
"asc-mcp": {
"command": "/path/to/asc-mcp",
"env": {
"ASC_KEY_ID": "XXXXXXXXXX",
"ASC_ISSUER_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"ASC_PRIVATE_KEY_PATH": "/path/to/AuthKey.p8"
}
}
}
}
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"asc-mcp": {
"command": "/path/to/asc-mcp",
"env": {
"ASC_KEY_ID": "XXXXXXXXXX",
"ASC_ISSUER_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"ASC_PRIVATE_KEY_PATH": "/path/to/AuthKey.p8"
}
}
}
}
Add to ~/.codex/config.toml:
[mcp_servers.asc-mcp]
command = "/path/to/asc-mcp"
startup_timeout_sec = 20
tool_timeout_sec = 60
enabled = true
Set env vars in your shell or use a wrapper script.
Add to ~/.gemini/settings.json:
{
"mcpServers": {
"asc-mcp": {
"command": "/path/to/asc-mcp",
"timeout": 60000,
"env": {
"ASC_KEY_ID": "XXXXXXXXXX",
"ASC_ISSUER_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"ASC_PRIVATE_KEY_PATH": "/path/to/AuthKey.p8"
}
}
}
}
Add to .vscode/mcp.json:
{
"servers": {
"asc-mcp": {
"command": "/path/to/asc-mcp",
"env": {
"ASC_KEY_ID": "XXXXXXXXXX",
"ASC_ISSUER_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"ASC_PRIVATE_KEY_PATH": "/path/to/AuthKey.p8"
}
}
}
}
Add to Cursor settings → MCP Servers:
{
"mcpServers": {
"asc-mcp": {
"command": "/path/to/asc-mcp",
"env": {
"ASC_KEY_ID": "XXXXXXXXXX",
"ASC_ISSUER_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"ASC_PRIVATE_KEY_PATH": "/path/to/AuthKey.p8"
}
}
}
}
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"asc-mcp": {
"command": "/path/to/asc-mcp",
"args": ["--workers", "apps,builds,versions,reviews,beta_groups,iap"],
"env": {
"ASC_KEY_ID": "XXXXXXXXXX",
"ASC_ISSUER_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"ASC_PRIVATE_KEY_PATH": "/path/to/AuthKey.p8"
}
}
}
}
Note: Windsurf has a 100-tool limit. The server exposes 389 tools by default, so you must use
--workersto select a subset. See Worker Filtering below.
[!IMPORTANT] If the MCP host doesn't inherit your shell PATH, you may need to specify the full path to the binary and ensure
.p8key paths are absolute.
The server exposes 389 tools across 30 App Store tool domains + 2 core domains. Some MCP clients impose a tool limit (e.g., Windsurf caps at 100). Use the 32 --workers filter keys to enable only the workers you need:
# Only load apps, builds, and version lifecycle tools
asc-mcp --workers apps,builds,versions
# Full release + App Store compliance subset (~96 tools, fits within 100-tool clients)
asc-mcp --workers apps,accessibility,builds,versions,reviews,beta_groups,iap
# Monetization focus
asc-mcp --workers apps,iap,subscriptions,pricing,promoted
company and auth workers are always enabled regardless of the filter (they provide core multi-account and authentication functionality).
When builds is enabled, it automatically includes build_processing and build_beta sub-workers.
Use --read-only when you want safe inspection without App Store Connect mutations:
asc-mcp --read-only
asc-mcp --read-only --workers apps,builds,reviews,analytics
In this mode, read tools such as *_list, *_get, *_search, *_status, *_verify, *_parse, *_triage, auth_*, analytics, and metrics remain available. Tools that can create, update, upload, submit, release, delete, revoke, clear, cancel, or otherwise mutate App Store Connect are blocked before their worker handler runs. company_switch remains available because it changes only the local active company context.
Use the built-in OpenAPI coverage command to compare the maintained asc-mcp coverage map with Apple's latest App Store Connect OpenAPI specification. This command does not load App Store Connect credentials, does not start the MCP server, and does not call Apple APIs beyond your explicit spec download.
rm -rf /tmp/asc-openapi
mkdir -p /tmp/asc-openapi
curl -L --fail -o /tmp/asc-openapi/spec.zip \
https://developer.apple.com/sample-code/app-store-connect/app-store-connect-openapi-specification.zip
unzip -q /tmp/asc-openapi/spec.zip -d /tmp/asc-openapi
swift run asc-mcp openapi-coverage \
--spec /tmp/asc-openapi/openapi.oas.json \
--output ASC-OPENAPI-COVERAGE-GENERATED.md
The generated report records Apple spec metadata, path and operation counts, domain status, P0/P1 gaps, missing domains, and unclassified paths. The current checked-in report is ASC-OPENAPI-COVERAGE-GENERATED.md, generated from App Store Connect API 4.3.
Available worker names:
| Worker | Prefix | Tools | Description |
|---|---|---|---|
company | company_ | 3 | Multi-account management |
auth | auth_ | 4 | JWT token tools |
apps | apps_ | 9 | App listing, metadata, localizations |
accessibility | accessibility_ | 6 | App Store accessibility declarations |
webhooks | webhooks_ | 11 | Webhook notifications, delivery diagnostics, and receiver helpers |
xcode_cloud | xcode_cloud_ | 30 | Xcode Cloud products, workflows, build runs, artifacts, issues, test results, and SCM |
builds | builds_ | 4 | Build management |
build_processing | builds_get_processing_*, builds_update_encryption, builds_check_readiness | 4 | Build states, encryption |
build_beta | builds_*_beta_*, individual tester build tools | 11 | TestFlight localizations, notifications |
versions | app_versions_ | 14 | Version lifecycle, submit, release |
reviews | reviews_ | 8 | Customer reviews and responses |
beta_groups | beta_groups_ | 9 | TestFlight groups |
beta_feedback | beta_feedback_ | 8 | TestFlight feedback screenshots, crash submissions, crash logs |
beta_testers | beta_testers_ | 12 | Tester management |
iap | iap_ | 46 | In-app purchases, pricing, availability, offer codes, review assets |
subscriptions | subscriptions_ | 73 | Subscription lifecycle, pricing, availability, offers, assets |
sandbox | sandbox_ | 3 | Sandbox testers |
beta_app | beta_app_ | 10 | Beta app localizations and review |
pre_release | pre_release_ | 3 | Pre-release versions |
beta_license | beta_license_ | 3 | Beta license agreements |
provisioning | provisioning_ | 17 | Bundle IDs, devices, certificates |
app_info | app_info_ | 10 | App info, categories, EULA |
pricing | pricing_ | 9 | Territories, pricing |
users | users_ | 10 | Team members, roles |
app_events | app_events_ | 9 | In-app events, localizations |
analytics | analytics_ | 11 | Sales/financial reports, analytics |
screenshots | screenshots_ | 16 | Screenshots, previews, sets |
custom_pages | custom_pages_ | 10 | Custom product pages |
ppo | ppo_ | 9 | Product page optimization (A/B tests) |
promoted | promoted_ | 9 | Promoted in-app purchases |
review_attachments | review_attachments_ | 4 | App Store review attachments |
metrics | metrics_ | 4 | Performance metrics, diagnostics |
When connected to an LLM client, tool definitions consume context tokens. Here's the approximate footprint:
| Configuration | Tools | ~Tokens |
|---|---|---|
| All workers (default) | 389 | ~44,000 |
Release workflow: apps,builds,versions,reviews | ~57 | ~7,000 |
Monetization: apps,iap,subscriptions,pricing | ~137 | ~15,500 |
TestFlight: apps,builds,beta_groups,beta_testers | ~56 | ~6,000 |
Marketing: apps,screenshots,custom_pages,ppo,promoted | ~60 | ~6,800 |
--workers apps | 16 | ~2,000 |
Heaviest workers: Subscriptions (73 tools), InAppPurchases (46 tools), Xcode Cloud (30 tools), Provisioning (17 tools), Screenshots (16 tools).
For 200K-context clients, ~44K tokens is about 22% of the window. For clients with smaller context windows, use --workers to reduce the footprint.
389 tools organized across 30 App Store tool domains + 2 core domains (use the 32 --workers filter keys — see Worker Filtering):
| Tool | Description |
|---|---|
company_list | List all configured companies |
company_switch | Switch active company for API operations |
company_current | Get current active company info |
| Tool | Description |
|---|---|
auth_generate_token | Generate JWT token for API access |
auth_validate_token | Validate an existing JWT token |
auth_refresh_token | Force refresh JWT token |
auth_token_status | Get JWT token cache status |
| Tool | Description |
|---|---|
apps_list | List all applications with filtering |
apps_get_details | Get detailed app information |
apps_search | Search apps by name or Bundle ID |
apps_list_versions | List all versions with states |
apps_get_metadata | Get localized metadata for a version |
apps_update_metadata | Update metadata (What's New, description, etc.) |
apps_list_localizations | List localizations with content status |
apps_create_localization | Create a new localization for a version |
apps_delete_localization | Delete a localization from a version |
| Tool | Description |
|---|---|
accessibility_list | List accessibility declarations for an app |
accessibility_get | Get one accessibility declaration |
accessibility_create | Create a declaration for a device family |
accessibility_update | Update support flags or publish a declaration |
accessibility_delete | Delete a declaration |
accessibility_list_relationships | List declaration relationship IDs for an app |
| Tool | Description |
|---|---|
webhooks_list | List webhooks for an app |
webhooks_get | Get a webhook by ID |
webhooks_create | Create a webhook configuration |
webhooks_update | Update webhook fields |
webhooks_delete | Delete a webhook |
webhooks_list_deliveries | List delivery attempts |
webhooks_redeliver | Redeliver an existing delivery |
webhooks_ping | Send a test ping |
webhooks_verify_signature | Verify x-apple-signature against the exact raw payload body |
webhooks_parse_payload | Parse and normalize a raw webhook notification payload |
webhooks_triage_event | Produce an actionable triage plan for webhook events or delivery failures |
| Tool | Description |
|---|---|
xcode_cloud_products_list | List Xcode Cloud products |
xcode_cloud_products_get | Get an Xcode Cloud product |
xcode_cloud_product_workflows_list | List workflows for a product |
xcode_cloud_product_build_runs_list | List build runs for a product |
xcode_cloud_workflows_get | Get a workflow |
xcode_cloud_workflow_build_runs_list | List build runs for a workflow |
xcode_cloud_build_runs_get | Get a build run |
xcode_cloud_build_runs_start | Start or rebuild an Xcode Cloud build |
xcode_cloud_build_run_actions_list | List build actions for a run |
xcode_cloud_build_run_builds_list | List App Store Connect builds created by a run |
xcode_cloud_actions_get | Get a build action |
xcode_cloud_action_artifacts_list | List artifacts for an action |
xcode_cloud_action_issues_list | List issues for an action |
xcode_cloud_action_test_results_list | List test results for an action |
xcode_cloud_artifacts_get | Get an artifact |
xcode_cloud_issues_get | Get an issue |
xcode_cloud_test_results_get | Get a test result |
xcode_cloud_xcode_versions_list | List available Xcode versions |
xcode_cloud_xcode_versions_get | Get an Xcode version |
xcode_cloud_macos_versions_list | List available macOS versions |
xcode_cloud_macos_versions_get | Get a macOS version |
xcode_cloud_scm_providers_list | List SCM providers |
xcode_cloud_scm_providers_get | Get an SCM provider |
xcode_cloud_scm_provider_repositories_list | List repositories for an SCM provider |
xcode_cloud_scm_repositories_list | List SCM repositories |
xcode_cloud_scm_repositories_get | Get an SCM repository |
xcode_cloud_scm_repository_git_references_list | List repository git references |
xcode_cloud_scm_repository_pull_requests_list | List repository pull requests |
xcode_cloud_scm_git_references_get | Get a git reference |
xcode_cloud_scm_pull_requests_get | Get a pull request |
| Tool | Description |
|---|---|
beta_feedback_list_crashes | List beta crash feedback submissions |
beta_feedback_get_crash | Get one beta crash feedback submission |
beta_feedback_get_crash_log | Read crash log for a submission |
beta_feedback_get_crash_log_by_id | Read crash log by crash log ID |
beta_feedback_delete_crash | Delete a beta crash feedback submission |
beta_feedback_list_screenshots | List beta screenshot feedback submissions |
beta_feedback_get_screenshot | Get one beta screenshot feedback submission |
beta_feedback_delete_screenshot | Delete a beta screenshot feedback submission |
| Tool | Description |
|---|---|
builds_list | List builds with processing states |
builds_get | Get detailed build information |
builds_find_by_number | Find build by version number |
builds_list_for_version | Get builds for specific app version |
| Tool | Description |
|---|---|
builds_get_processing_state | Get current processing state |
builds_update_encryption | Set encryption compliance |
builds_get_processing_status | Get detailed processing status |
builds_check_readiness | Check if build is ready for submission |
| Tool | Description |
|---|---|
builds_get_beta_detail | Get TestFlight configuration for build |
builds_update_beta_detail | Update TestFlight settings |
builds_set_beta_localization | Set What's New for TestFlight |
builds_list_beta_localizations | List all TestFlight localizations |
builds_get_beta_groups | Get beta groups for a build |
builds_get_beta_testers | Get individual testers for a build |
builds_send_beta_notification | Send notification to beta testers |
builds_add_to_beta_groups | Add build to beta groups |
builds_add_individual_testers | Add individual testers to a build |
builds_remove_individual_testers | Remove individual testers from a build |
builds_list_individual_testers | List individual testers assigned to a build |
| Tool | Description |
|---|---|
beta_groups_list | List TestFlight beta groups for an app |
beta_groups_create | Create a new beta group |
beta_groups_update | Update beta group settings |
beta_groups_delete | Delete a beta group |
beta_groups_add_testers | Add testers to a beta group |
beta_groups_remove_testers | Remove testers from a beta group |
beta_groups_list_testers | List testers in a beta group |
beta_groups_add_builds | Add builds to a beta group |
beta_groups_remove_builds | Remove builds from a beta group |
Includes tester list/search/get/create/delete, app relationships, invitations, beta group assignment, build assignment, and app removal tools.
| Tool | Description |
|---|---|
app_versions_create | Create a new app version |
app_versions_list | List versions with state filtering |
app_versions_get | Get detailed version information |
app_versions_update | Update version attributes |
app_versions_attach_build | Attach build to version |
app_versions_submit_for_review | Submit for App Store review |
app_versions_cancel_review | Cancel ongoing review |
app_versions_release | Release approved version |
app_versions_create_phased_release | Create gradual rollout |
app_versions_get_phased_release | Get phased release info and ID |
app_versions_update_phased_release | Pause/resume/complete rollout |
app_versions_set_review_details | Set reviewer contact info |
app_versions_update_age_rating | Configure age rating declaration |
app_versions_delete | Delete an editable app version |
| Tool | Description |
|---|---|
reviews_list | Get reviews with filtering and pagination |
reviews_get | Get specific review details |
reviews_list_for_version | Get reviews for a specific version |
reviews_stats | Aggregated review statistics |
reviews_create_response | Respond to a customer review |
reviews_delete_response | Delete a response |
reviews_get_response | Get response for a review |
reviews_summarizations | Summarize review themes and ratings |
| Tool | Description |
|---|---|
iap_list | List in-app purchases for an app |
iap_get | Get IAP details |
iap_create | Create a new IAP |
iap_update | Update IAP attributes |
iap_delete | Delete an IAP |
iap_list_localizations | List IAP localizations |
iap_create_localization | Create IAP localization |
iap_update_localization | Update IAP localization |
iap_delete_localization | Delete IAP localization |
iap_submit_for_review | Submit IAP for review |
iap_list_subscriptions | List subscription groups |
iap_get_subscription_group | Get subscription group details |
iap_inventory | AI-friendly IAP inventory for an app |
iap_list_price_points | List territory-aware price points |
iap_list_price_point_equalizations | List price point equalizations |
iap_get_price_schedule | Get price schedule |
iap_set_price_schedule | Set price schedule |
iap_pricing_summary | Summarize current and scheduled prices |
iap_prepare_offer_prices | Find price point candidates for offers |
iap_set_availability | Set territory availability |
iap_get_availability | Get availability by IAP or availability ID |
iap_list_available_territories | List available territories |
iap_get_promoted_purchase | Get promoted purchase state |
iap_list_offer_codes | List IAP offer codes |
iap_get_offer_code | Get an IAP offer code |
iap_create_offer_code | Create an IAP offer code |
iap_update_offer_code | Update an IAP offer code |
iap_deactivate_offer_code | Deactivate an IAP offer code |
iap_list_offer_code_prices | List territory-aware offer prices |
iap_generate_one_time_codes | Generate one-time offer codes |
iap_list_one_time_codes | List one-time code batches |
iap_get_one_time_code | Get a one-time code batch |
iap_update_one_time_code | Update a one-time code batch |
iap_deactivate_one_time_code | Deactivate a one-time code batch |
iap_get_one_time_code_values | Get generated one-time code values |
iap_create_custom_code | Create a custom offer code |
iap_get_custom_code | Get custom code details |
iap_update_custom_code | Update a custom code |
iap_deactivate_custom_code | Deactivate a custom code |
iap_get_review_screenshot | Get review screenshot |
iap_upload_review_screenshot | Upload review screenshot |
iap_delete_review_screenshot | Delete review screenshot |
iap_upload_image | Upload promotional image |
iap_get_image | Get promotional image |
iap_delete_image | Delete promotional image |
iap_list_images | List promotional images |
Includes subscription groups, group localizations, subscriptions, subscription localizations, territory-aware prices, price points, price point equalizations, availability, promoted purchase reads, inventory/pricing helpers, intro offers, promotional offers, offer codes, one-time/custom codes, win-back offers, images, and review screenshots. All former public offer_codes_*, intro_offers_*, promo_offers_*, and winback_* functionality is exposed through subscriptions_*.
| Tool | Description |
|---|---|
sandbox_list | List sandbox testers |
sandbox_update | Update sandbox tester settings |
sandbox_clear_purchase_history | Clear purchase history for sandbox testers |
| Tool | Description |
|---|---|
beta_app_list_localizations | List beta app localizations |
beta_app_create_localization | Create beta app localization |
beta_app_get_localization | Get beta app localization |
beta_app_update_localization | Update beta app localization |
beta_app_delete_localization | Delete beta app localization |
beta_app_submit_for_review | Submit build for beta review |
beta_app_list_submissions | List beta review submissions |
beta_app_get_submission | Get beta review submission |
beta_app_get_review_details | Get beta app review details |
beta_app_update_review_details | Update beta app review details |
Includes pre-release version listing, details, and associated builds.
Includes beta license agreement list, get, and update.
| Tool | Description |
|---|---|
provisioning_list_bundle_ids | List registered bundle identifiers |
provisioning_get_bundle_id | Get bundle ID details |
provisioning_create_bundle_id | Register a new bundle identifier |
provisioning_delete_bundle_id | Delete a bundle identifier |
provisioning_list_devices | List registered devices |
provisioning_register_device | Register a new device (UDID) |
provisioning_update_device | Update device name or status |
provisioning_list_certificates | List signing certificates |
provisioning_get_certificate | Get certificate details |
provisioning_revoke_certificate | Revoke a certificate |
provisioning_list_profiles | List provisioning profiles |
provisioning_get_profile | Get profile details |
provisioning_delete_profile | Delete a profile |
provisioning_create_profile | Create a provisioning profile |
provisioning_list_capabilities | List bundle ID capabilities |
provisioning_enable_capability | Enable a capability |
provisioning_disable_capability | Disable a capability |
Includes app info list/get/update, app info localizations, and EULA get/create/update tools.
Includes territories, availability, price points, price schedules, and App Store availability v2 tools.
Includes team member list/get/update/remove, invitations, visible apps, and visible app relationship updates.
Includes in-app event CRUD plus event localization list/create/update/delete.
Includes sales, financial, app summary, analytics report request, report, instance, snapshot, and segment tools.
| Tool | Description |
|---|---|
screenshots_list_sets | List screenshot sets |
screenshots_create_set | Create a screenshot set |
screenshots_delete_set | Delete a screenshot set |
screenshots_list | List screenshots in a set |
screenshots_upload | Upload a screenshot |
screenshots_get | Get screenshot details |
screenshots_delete | Delete a screenshot |
screenshots_reorder | Reorder screenshots in a set |
screenshots_list_preview_sets | List app preview sets |
screenshots_create_preview_set | Create a preview set |
screenshots_delete_preview_set | Delete a preview set |
screenshots_upload_preview | Upload an app preview |
screenshots_get_preview | Get preview details |
screenshots_list_previews | List previews in a preview set |
screenshots_upload_batch | Upload screenshots in a batch |
screenshots_delete_preview | Delete a preview |
| Tool | Description |
|---|---|
custom_pages_list | List custom product pages |
custom_pages_get | Get page details |
custom_pages_create | Create a custom page |
custom_pages_update | Update a custom page |
custom_pages_delete | Delete a custom page |
custom_pages_list_versions | List page versions |
custom_pages_create_version | Create a page version |
custom_pages_list_localizations | List version localizations |
custom_pages_create_localization | Create a localization |
custom_pages_update_localization | Update a localization |
| Tool | Description |
|---|---|
ppo_list_experiments | List A/B test experiments |
ppo_get_experiment | Get experiment details |
ppo_create_experiment | Create an experiment |
ppo_update_experiment | Update/start/stop experiment |
ppo_delete_experiment | Delete an experiment |
ppo_list_treatments | List experiment treatments |
ppo_create_treatment | Create a treatment variant |
ppo_list_treatment_localizations | List treatment localizations |
ppo_create_treatment_localization | Create treatment localization |
| Tool | Description |
|---|---|
promoted_list | List promoted purchases for an app |
promoted_get | Get promotion details |
promoted_create | Create a promotion |
promoted_update | Update promotion (visibility/order) |
promoted_delete | Delete a promotion |
promoted_upload_image | Upload promoted purchase image |
promoted_get_image | Get promoted purchase image |
promoted_delete_image | Delete promoted purchase image |
promoted_get_image_for_purchase | Get image for a promoted purchase |
Includes App Store review attachment upload, get, delete, and list tools.
| Tool | Description |
|---|---|
metrics_app_perf | Get app performance/power metrics |
metrics_build_perf | Get build performance metrics |
metrics_build_diagnostics | List diagnostics for a build |
metrics_get_diagnostic_logs | Get diagnostic logs |
You: "Release version 2.2.0 of my app with build 456"
Claude will:
1. app_versions_create(app_id, platform: "IOS", version_string: "2.2.0")
2. app_versions_attach_build(version_id, build_id)
3. app_versions_set_review_details(version_id, contact_email: "...")
4. app_versions_submit_for_review(version_id)
5. app_versions_create_phased_release(version_id) # after approval
You: "Create a beta group 'External Testers' and distribute the latest build"
Claude will:
1. beta_groups_create(app_id, name: "External Testers")
2. builds_list(app_id, limit: 1) # find latest
3. builds_set_beta_localization(build_id, locale: "en-US", whats_new: "...")
4. beta_groups_add_testers(group_id, tester_ids: [...])
You: "Show me all 1-star reviews from the last week and draft responses"
Claude will:
1. reviews_list(app_id, rating: 1, sort: "-createdDate", limit: 50)
2. reviews_create_response(review_id, response_body: "...") # for each
You: "Switch to ClientCorp and check their latest build status"
Claude will:
1. company_switch(company: "ClientCorp")
2. apps_list(limit: 5)
3. builds_list(app_id, limit: 1)
4. builds_get_processing_state(build_id)
| Constraint | Details |
|---|---|
| No emojis | Metadata fields (What's New, Description, Keywords) must not contain emoji characters |
| Version state | App Store Connect validates editable states for metadata updates. Rejected and metadata-rejected versions can be edited for resubmission; published or in-review versions may be rejected by Apple. |
| JWT expiry | Tokens expire after 20 minutes — the server auto-refreshes them |
| Rate limits | Apple enforces per-account rate limits (documentation) |
| Locale format | Use standard codes: en-US, ru, de-DE, ja, zh-Hans |
Sources/asc-mcp/
├── EntryPoint.swift # Entry point, --workers filtering
├── Core/
│ ├── Application.swift # MCP server setup & initialization
│ └── ASCError.swift # Custom error types
├── Helpers/ # JSON formatting, pagination, safe helpers
├── Models/ # API request/response models
│ ├── AppStoreConnect/ # Apps, versions, localizations
│ ├── Builds/ # Builds, beta details, beta groups
│ ├── AppLifecycle/ # Version lifecycle models
│ ├── InAppPurchases/ # IAP models
│ ├── Subscriptions/ # Subscriptions, offer codes, win-back
│ ├── Marketing/ # Screenshots, custom pages, PPO, promoted
│ ├── Metrics/ # Performance metrics, diagnostics
│ ├── Analytics/ # Sales/financial reports
│ ├── Provisioning/ # Bundle IDs, devices, certificates
│ ├── Shared/ # Shared upload/image types
│ └── ... # AppEvents, AppInfo, Pricing, Users
├── Services/
│ ├── HTTPClient.swift # Actor-based HTTP with retry logic
│ ├── JWTService.swift # ES256 JWT token generation
│ └── CompaniesManager.swift # Multi-account management
└── Workers/ # MCP tool implementations (36 Swift worker classes + MainWorker router)
├── MainWorker/WorkerManager # Central tool registry & routing
├── CompaniesWorker/ # company_* tools
├── AuthWorker/ # auth_* tools
├── AppsWorker/ # apps_* tools
├── AccessibilityWorker/ # accessibility_* tools
├── WebhooksWorker/ # webhooks_* tools
├── XcodeCloudWorker/ # xcode_cloud_* tools
├── BuildsWorker/ # builds_* tools
├── BuildProcessingWorker/ # builds_*_processing tools
├── BuildBetaDetailsWorker/ # builds_*_beta_* tools
├── AppLifecycleWorker/ # app_versions_* tools
├── ReviewsWorker/ # reviews_* tools
├── BetaGroupsWorker/ # beta_groups_* tools
├── BetaFeedbackWorker/ # beta_feedback_* tools
├── BetaTestersWorker/ # beta_testers_* tools
├── InAppPurchasesWorker/ # iap_* tools
├── SubscriptionsWorker/ # subscriptions_* tools
├── OfferCodesWorker/ # subscriptions offer-code tools
├── IntroductoryOffersWorker/ # subscriptions intro-offer tools
├── PromotionalOffersWorker/ # subscriptions promotional-offer tools
├── WinBackOffersWorker/ # subscriptions win-back tools
├── SandboxTestersWorker/ # sandbox_* tools
├── BetaAppWorker/ # beta_app_* tools
├── PreReleaseVersionsWorker/ # pre_release_* tools
├── BetaLicenseAgreementsWorker/ # beta_license_* tools
├── ProvisioningWorker/ # provisioning_* tools
├── AppInfoWorker/ # app_info_* tools
├── PricingWorker/ # pricing_* tools
├── UsersWorker/ # users_* tools
├── AppEventsWorker/ # app_events_* tools
├── AnalyticsWorker/ # analytics_* tools
├── ScreenshotsWorker/ # screenshots_* tools
├── CustomProductPagesWorker/ # custom_pages_* tools
├── ProductPageOptimizationWorker/ # ppo_* tools
├── PromotedPurchasesWorker/ # promoted_* tools
├── ReviewAttachmentsWorker/ # review_attachments_* tools
└── MetricsWorker/ # metrics_* tools
Sendable, proper actor isolationWorkerManager routes tool calls by name prefix (zero config)companies.json exists and is valid JSON.p8 key file paths are absolute and the files exist.build/release/asc-mcp.p8 file is the original download (not modified)apps_update_metadata sends the metadata PATCH to App Store Connect after local text, locale, and URL validation. Apple decides whether the current version state is editable. Rejected and metadata-rejected versions can be edited and resubmitted; published, in-review, or otherwise locked versions may return an Apple API error.
Use builds_get_processing_status to inspect the current processing state and builds_check_readiness to verify App Store/TestFlight readiness. Apple's build processing typically takes 5-30 minutes but can be longer during peak times.
The HTTP client automatically retries with exponential backoff on 429 responses. If you consistently hit limits, reduce the frequency of API calls or use pagination with smaller page sizes.
swift build # Debug build
swift build -c release # Release build (optimized)
swift package clean # Clean build artifacts
.build/debug/asc-mcp --test # Runs built-in integration tests
Worker+Handlers.swiftWorker+ToolDefinitions.swiftgetTools() methodhandleTool() switchWorkerManager auto-routes by prefix — no changes needed thereWorkers/MyWorker/MyWorker.swift, MyWorker+ToolDefinitions.swift, MyWorker+Handlers.swiftWorkerManager.swiftWorkerManager.registerWorkers()getMyTools() helper methodWe welcome contributions! See Contributing Guide for details.
This project is licensed under the MIT License. See the LICENSE file for details.
This is an unofficial, community-maintained tool and is not affiliated with or endorsed by Apple Inc.
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
Secure MCP server for MySQL database interaction, queries, and schema management
English-first Korean equity intelligence MCP — DART filings, foreign-holder 5%-rule flows, activist filings, KRX news. F