zelentsov-dev/asc-mcp

šŸ’» Developer Tools
0 Views
0 Installs

šŸ  šŸŽ - App Store Connect API server with 208 tools for managing apps, builds, TestFlight, subscriptions, reviews, and more — directly from any MCP client.

Quick Install

One-Click IDE Configuration
claude_desktop_config.json
{
  "mcpServers": {
    "zelentsov-dev-asc-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "zelentsov-dev-asc-mcp"
      ]
    }
  }
}
Or

Using an AI coding agent (Claude Code, Cursor, etc.)? Copy a ready-made prompt that tells it to fetch the setup instructions and install this server for you.

Documentation Overview

App Store Connect MCP Server

A local Model Context Protocol server for the App Store Connect API.
Manage apps, builds, TestFlight, reviews, and more from Codex, Claude, and other MCP clients on macOS.

Swift 6.2+ macOS 15 CI tested MCP Compatible MIT License CI


Overview

asc-mcp is a Swift-based MCP server that connects a local macOS MCP client to the App Store Connect API. It exposes 502 tools across 33 App Store tool domains + 2 core domains, enabling you to automate iOS and macOS release workflows through natural language.

Configuration examples are included for Codex, Claude Code, Claude Desktop, Gemini CLI, VS Code with GitHub Copilot, Continue, Cursor, and Devin Desktop (formerly Windsurf). Client configuration is documented; release CI verifies installation, MCP initialization, and tool discovery on macOS rather than launching every third-party client.

New here? Follow the Quick Start. The remaining sections are reference material for advanced configuration, tool selection, and contributors.

Key capabilities

  • Release and metadata — versions, localizations, builds, review submissions, phased rollout, and Xcode Cloud
  • TestFlight and uploads — beta groups, testers, feedback, recruitment, build delivery, processing, and export compliance
  • Monetization — in-app purchases, subscriptions, pricing, availability, offer codes, and promotional offers
  • Marketing — screenshots, previews, custom product pages, product page optimization, and promoted purchases
  • Accounts and provisioning — multiple App Store Connect teams, users, bundle IDs, devices, certificates, profiles, and capabilities
  • Feedback and operations — customer reviews, webhooks, accessibility declarations, analytics, metrics, and diagnostics
  • Safer automation — read-only mode, confirmation safeguards, strict pagination, and mutation recovery guidance
  • Auditable API coverage — a versioned Apple OpenAPI contract and release-time drift checks

Platform Support

asc-mcp is a local stdio server: the MCP client starts it on the same computer. A client being available on Linux or Windows does not make this Swift server cross-platform.

EnvironmentStatusNotes
macOS 15.6+ with Xcode 26.xRecommendedRelease CI specifically uses GitHub's macOS 15 runner with Xcode 26.2
macOS 14.0-15.5Declared deployment target onlyBuild and runtime are unverified; a separately installed Swift 6.2+ toolchain may be needed
LinuxNot supported yetPorting work and Linux CI are not complete
WindowsNot supportedCurrent source dependencies and Swift MCP stdio transport are not Windows-compatible

See Apple's Xcode system requirements for the macOS versions supported by each Xcode release.

Web and cloud sessions do not automatically inherit a local MCP configuration. Run the MCP client locally on a compatible Mac, or use a client feature that explicitly keeps execution on that Mac.

Quick Start

The recommended setup stores App Store Connect credentials once in a private local file. MCP clients then need only the path to the asc-mcp executable.

1. Install asc-mcp

brew install mint
mint install zelentsov-dev/asc-mcp@v4.1.3
~/.mint/bin/asc-mcp --version

2. Create an App Store Connect API key

  1. Open App Store Connect → Users and Access → Integrations → Team Keys.
  2. Generate a key with the least-privileged role that covers your workflow. App Manager or Admin is needed only when the corresponding operations require it.
  3. Download the .p8 file. Apple allows it to be downloaded only once.
  4. Copy the Key ID and Issuer ID.

3. Save the credentials locally

Create private configuration directories, then move the downloaded .p8 file into ~/.keys/. Replace the source path and filename in the second command:

mkdir -p ~/.config/asc-mcp ~/.keys
chmod 700 ~/.config/asc-mcp ~/.keys
mv /path/to/downloaded/AuthKey_XXXXXXXXXX.p8 ~/.keys/

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"
    }
  ]
}

Replace /Users/you with your actual home-directory path. Keep both files outside the repository and restrict access:

chmod 600 ~/.config/asc-mcp/companies.json
chmod 600 /Users/you/.keys/AuthKey_XXXXXXXXXX.p8

[!CAUTION] Never commit companies.json, a .p8 key, or raw credentials to Git. Revoke the App Store Connect key immediately if it is exposed.

4. Connect your MCP client

Choose one client. You do not need to configure every client.

Codex

codex mcp add asc-mcp -- ~/.mint/bin/asc-mcp
codex mcp list

Claude Code

claude mcp add \
  --transport stdio \
  --scope user \
  asc-mcp \
  -- ~/.mint/bin/asc-mcp

claude mcp get asc-mcp
claude mcp list

For Claude Desktop, Gemini CLI, VS Code, Continue, Cursor, and Devin Desktop, use the ready-to-copy examples in MCP Client Setup.

5. Try it

Restart a GUI client after changing its configuration, open its MCP tool list, and ask:

List my App Store Connect apps.

If the connection or request fails, see Troubleshooting.

Installation

Mint on macOS (recommended)

Mint installs the pinned release from source and keeps the executable at ~/.mint/bin/asc-mcp.

brew install mint
mint install zelentsov-dev/asc-mcp@v4.1.3

Update or reinstall the pinned release:

mint install zelentsov-dev/asc-mcp@v4.1.3 --force

Stable users should install a version tag. Installing main or develop is intended only for maintainers and pre-release testing.

Build from source

Use Xcode 26.x on a compatible macOS version, or install a standalone Swift 6.2+ toolchain.

git clone https://github.com/zelentsov-dev/asc-mcp.git
cd asc-mcp
swift build -c release

The executable is .build/release/asc-mcp. If you copy it elsewhere, also copy the adjacent resource bundle:

cp .build/release/asc-mcp /usr/local/bin/asc-mcp
cp -R .build/release/asc-mcp_asc-mcp.bundle /usr/local/bin/

The bundle contains the versioned OpenAPI operation contract used by release checks.

Upgrading from an older release

From v4.0.x

Version 4.1 keeps every existing tool name, required input, projection key, and array shape. Xcode Cloud read tools now reject undocumented arguments and validate returned links, paging, relationship lineage, and included resources more strictly. New *Present projection fields distinguish Apple-omitted arrays from present empty arrays while legacy array fields remain arrays. Newly exposed nested *_limit inputs must be paired with their matching include value, and continuation calls must repeat the original request scope unchanged. The new product and workflow delete tools default to a safe preview and require the latest preview receipt plus exact inventory confirmation before permanent deletion.

From v3.18.x

Version 4 keeps every existing tool name and worker filter, but destructive Marketing and review-attachment calls now require an exact confirmation ID before any Apple request:

Existing toolNew required confirmation
custom_pages_deleteconfirm_page_id
ppo_delete_experimentconfirm_experiment_id
promoted_deleteconfirm_promoted_purchase_id
review_attachments_deleteconfirm_attachment_id
screenshots_delete_set, screenshots_delete_preview_setconfirm_set_id
screenshots_deleteconfirm_screenshot_id
screenshots_delete_previewconfirm_preview_id

ppo_update_experiment also requires confirm_experiment_id when state is supplied. Calls that update only name or traffic proportion remain unchanged. After an unknown or committed_unverified mutation result, use the returned inspection action before retrying.

Remove undocumented top-level arguments from existing Marketing and review-attachment calls. Version 4 rejects unknown keys before any network request instead of silently ignoring them.

Configuration

Credentials

The default ~/.config/asc-mcp/companies.json file shown in the Quick Start is recommended because it works consistently for terminal and GUI clients without duplicating secrets in every client configuration.

For multiple companies, add more entries:

{
  "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 Company",
      "key_id": "YYYYYYYYYY",
      "issuer_id": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
      "key_path": "/Users/you/.keys/AuthKey_YYYYYYYYYY.p8"
    }
  ]
}

vendor_number is required only for analytics_sales_report, analytics_financial_report, and analytics_app_summary. Find it in App Store Connect → Sales and Trends → Reports.

Environment-variable alternative

Environment variables are useful for automation, but GUI apps launched from Finder may not inherit your shell environment. The file-based setup above is simpler for most users.

Single company:

export ASC_KEY_ID=XXXXXXXXXX
export ASC_ISSUER_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
export ASC_PRIVATE_KEY_PATH=/Users/you/.keys/AuthKey_XXXXXXXXXX.p8
export ASC_COMPANY_NAME="My Company"                 # optional
export ASC_VENDOR_NUMBER=YOUR_VENDOR_NUMBER          # optional, analytics only

Multiple companies:

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=/Users/you/.keys/AuthKey_XXXXXXXXXX.p8

export ASC_COMPANY_2_NAME="Client Company"
export ASC_COMPANY_2_KEY_ID=YYYYYYYYYY
export ASC_COMPANY_2_ISSUER_ID=yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
export ASC_COMPANY_2_KEY_PATH=/Users/you/.keys/AuthKey_YYYYYYYYYY.p8

Numbering starts at 1. Each consecutive entry must provide both ASC_COMPANY_{N}_KEY_ID and ASC_COMPANY_{N}_ISSUER_ID; scanning stops at the first missing pair.

Configuration resolution order

The server resolves credentials in this order:

  1. --companies /absolute/path/to/companies.json
  2. Constructor parameter for programmatic embedding
  3. ASC_MCP_COMPANIES=/absolute/path/to/companies.json
  4. Default configuration file locations, including ~/.config/asc-mcp/companies.json
  5. ASC_COMPANY_1_KEY_ID and the other numbered multi-company variables
  6. ASC_KEY_ID, ASC_ISSUER_ID, and a private-key variable for one company

MCP Client Setup

All examples below assume a Mint installation and the recommended companies.json credential file. Replace /Users/you with your actual home-directory path. GUI clients generally require an absolute executable path.

ClientConfiguration scopeNotes
CodexUser config by CLI; optional trusted-project configShared by local Codex clients on the same Mac
Claude Codeuser, local, or project scopeuser is simplest for a personal App Store utility
Claude DesktopUser-level desktop configRestart after editing
Gemini CLIUser settingsLocal stdio server
VS Code with GitHub CopilotUser profile or .vscode/mcp.jsonConfirm server trust on first start
ContinueWorkspace .continue/mcpServers/Separate from native VS Code MCP configuration
CursorUser or project mcp.jsonUse an absolute command path
Devin Desktop (formerly Windsurf)User MCP configKeep no more than 100 active tools
Codex CLI, IDE extension, and desktop client

Recommended CLI registration:

codex mcp add asc-mcp -- ~/.mint/bin/asc-mcp
codex mcp list
codex mcp get asc-mcp --json

The same local MCP configuration is shared by Codex clients on that Mac. The user configuration is $CODEX_HOME/config.toml, which defaults to ~/.codex/config.toml:

[mcp_servers.asc-mcp]
command = "/Users/you/.mint/bin/asc-mcp"
startup_timeout_sec = 20
tool_timeout_sec = 60
enabled = true

For a project-specific setup, place the same table in .codex/config.toml; Codex loads project configuration only after the project is trusted. If you use shell credentials instead of companies.json, explicitly forward them:

env_vars = ["ASC_KEY_ID", "ASC_ISSUER_ID", "ASC_PRIVATE_KEY_PATH"]

Restart a GUI client after changing the configuration, then use its MCP view or /mcp to confirm that asc-mcp is active. See the official Codex MCP documentation.

Claude Code

Register once for all local projects:

claude mcp add \
  --transport stdio \
  --scope user \
  asc-mcp \
  -- ~/.mint/bin/asc-mcp

claude mcp get asc-mcp
claude mcp list

Use --scope local for only the current project or --scope project to create a shared .mcp.json. Project servers require trust approval. Never place raw App Store Connect credentials in a committed .mcp.json.

Claude stores user and local MCP entries in ~/.claude.json; .claude/settings.json is not the global MCP registry. Use /mcp inside Claude Code to inspect or reconnect the server. See the official Claude Code MCP documentation.

Claude Desktop

Add the server to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "asc-mcp": {
      "command": "/Users/you/.mint/bin/asc-mcp"
    }
  }
}

Quit and reopen Claude Desktop after saving the file.

Gemini CLI

Add the server to ~/.gemini/settings.json:

{
  "mcpServers": {
    "asc-mcp": {
      "command": "/Users/you/.mint/bin/asc-mcp"
    }
  }
}

The default Gemini MCP timeout is intentionally retained. See the official Gemini CLI MCP documentation.

VS Code with GitHub Copilot

Run MCP: Add Server from the Command Palette and choose the user profile for a personal setup. For a workspace setup, create .vscode/mcp.json:

{
  "servers": {
    "asc-mcp": {
      "type": "stdio",
      "command": "/Users/you/.mint/bin/asc-mcp"
    }
  }
}

Confirm that you trust the local server when VS Code first starts it. Do not commit user-specific paths or secrets in a shared workspace file. See the official VS Code MCP documentation.

Continue

Continue does not use .vscode/mcp.json. Create .continue/mcpServers/asc-mcp.json in the workspace:

{
  "mcpServers": {
    "asc-mcp": {
      "command": "/Users/you/.mint/bin/asc-mcp"
    }
  }
}

MCP tools are available in Continue agent mode. See the official Continue MCP documentation.

Cursor

Use ~/.cursor/mcp.json for all projects or .cursor/mcp.json for one project:

{
  "mcpServers": {
    "asc-mcp": {
      "command": "/Users/you/.mint/bin/asc-mcp"
    }
  }
}

Restart or refresh the MCP server from Cursor settings after editing the file. See the official Cursor MCP documentation.

Devin Desktop (formerly Windsurf)

Add the server to ~/.codeium/windsurf/mcp_config.json. This example enables a 72-tool release subset, below Cascade's 100-tool limit:

{
  "mcpServers": {
    "asc-mcp": {
      "command": "/Users/you/.mint/bin/asc-mcp",
      "args": [
        "--workers",
        "apps,builds,export_compliance,versions,reviews"
      ]
    }
  }
}

You can also disable individual tools in the client. Server-side worker filtering is recommended because it keeps the active catalog predictable. See the official Devin Desktop MCP documentation.

[!IMPORTANT] command must point to the real executable. GUI clients often do not inherit shell aliases, PATH changes, or environment variables. Use an absolute path and prefer the default companies.json credential file.

Worker Filtering

The server exposes 502 tools across 33 App Store tool domains + 2 core domains. Some MCP clients impose a tool limit; Cascade in Devin Desktop currently allows 100 active tools. Use the 35 --workers filter keys to enable only the workers you need:

# Only load apps, builds, and version lifecycle tools
asc-mcp --workers apps,builds,versions

# App Store release preparation subset (99 tools, including always-on and build sub-workers)
asc-mcp --workers apps,accessibility,builds,export_compliance,versions,app_info,screenshots

# TestFlight review helpers can be loaded separately (49 tools)
asc-mcp --workers apps,builds,beta_app,pre_release

# Monetization focus
asc-mcp --workers apps,iap,subscriptions,pricing,promoted,review_submissions

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.

Read-Only Mode

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.

OpenAPI Contract and Drift Tooling

Use the operation-contract command to compare the actual credential-free WorkerManager catalog with the semantic manifest and the pinned Apple App Store Connect OpenAPI specification. The production manifest records exact Apple operationId, HTTP method, path, invocation-scoped input bindings, typed fixed values, response lineage, local workflows, implementation state, deprecated aliases, and deliberately deferred operations. The command does not load App Store Connect credentials or start the MCP server.

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
spec_entry="$(unzip -Z1 /tmp/asc-openapi/spec.zip | grep -E '(^|/)openapi\.oas[^/]*\.json$')"
test "$(echo "$spec_entry" | grep -c .)" -eq 1
unzip -p /tmp/asc-openapi/spec.zip "$spec_entry" > /tmp/asc-openapi/openapi.oas.json

swift run asc-mcp openapi-contract-check \
  --spec /tmp/asc-openapi/openapi.oas.json \
  --json-output /tmp/asc-openapi/operation-contract.json \
  --markdown-output /tmp/asc-openapi/operation-contract.md \
  --strict

The manifest is pinned to Apple API 4.4.1 by version, SHA-256, path count, and operation count. It currently maps 476 Apple operations, explicitly defers 424, and scopes out 363, covering all 1,263 operations without overlap. CI fails when the Apple document changes, a mapped operation moves or disappears, a public tool or worker drifts from the manifest, an input field loses its binding, response lineage becomes invalid, or a deferred decision expires. Unexposed optional Apple parameters are warnings so they remain visible in the generated backlog.

Manifest schema v2 also accounts for every optional Apple query and request-body input as publicly bound, internally controlled, intentionally omitted with a reviewed reason, or still unclassified. The checked-in optionalInputCoveragePin records the exact current totals and a SHA-256 digest of the sorted input identities and dispositions; --strict rejects a missing pin or any count- or identity-level drift. The pin makes phased remediation auditable and regression-safe, but it is not a claim that every optional Apple input is already public. The v4.1.3 pin is 2,905 total: 1,122 bound, 40 internally controlled, 1,743 intentionally omitted, and 0 unclassified. Its identity SHA-256 is c975f4e4eebb62ec87864a73fbf72bb8841f644108e54e6ffb25168bcf2a2766.

--strict is the merge- and tag-time release gate. Every declared target or broken tool remains an error in reports, and a regression test pins their exact state. The current baseline has no target or broken implementations and no implementation drift, so any implementation that leaves asBuilt, any structural contract error, or any optional-input coverage drift blocks both merges and releases. --structural-strict remains available only for local phased remediation work.

This gate proves operation identity, top-level MCP field ownership, required Apple inputs, typed internal values, and response source/pointer lineage. Full MCP type/enum/range parity and complete typed response schemas remain separate optimization phases; the current mapping status is 469 partial and 33 deprecated.

The older openapi-coverage command remains available for the high-level domain report in ASC-OPENAPI-COVERAGE-GENERATED.md. The operation contract is the authoritative release gate.

Available worker names:

WorkerPrefixToolsDescription
companycompany_3Multi-account management
authauth_4JWT token tools
appsapps_10App listing, metadata, localizations, search keyword IDs
accessibilityaccessibility_6App Store accessibility declarations
webhookswebhooks_11Webhook notifications, delivery diagnostics, and receiver helpers
xcode_cloudxcode_cloud_42Xcode Cloud products, workflow management, build runs, artifacts, issues, test results, and SCM
buildsbuilds_4Build management
build_uploadsbuild_uploads_10Build upload parents, files, safe transfers, and recovery
build_processingbuilds_get_processing_*, builds_update_encryption, builds_check_readiness4Build states, encryption
export_complianceexport_compliance_11Encryption declarations, document uploads, build linkage, readiness
build_betabuilds_*_beta_*, individual tester build tools11TestFlight localizations, notifications
versionsapp_versions_17Version lifecycle, age ratings, submit, release
reviewsreviews_8Customer reviews and responses
beta_groupsbeta_groups_15TestFlight groups and public-link recruitment criteria
beta_feedbackbeta_feedback_8TestFlight feedback screenshots, crash submissions, crash logs
beta_testersbeta_testers_12Tester management
iapiap_59In-app purchases, versioned metadata, pricing, availability, offer codes, review assets
subscriptionssubscriptions_99Subscription and group versions, pricing, plan availability, offers, assets
sandboxsandbox_3Sandbox testers
beta_appbeta_app_10Beta app localizations and review
pre_releasepre_release_3Pre-release versions
beta_licensebeta_license_3Beta license agreements
provisioningprovisioning_17Bundle IDs, devices, certificates
app_infoapp_info_10App info, categories, EULA
pricingpricing_9Territories, pricing
usersusers_10Team members, roles
app_eventsapp_events_9In-app events, localizations
analyticsanalytics_11Sales/financial reports, analytics
screenshotsscreenshots_19Screenshots, previews, sets, and verified ordering
custom_pagescustom_pages_17Custom product pages, versions, localizations, and search keywords
ppoppo_15Product page optimization experiments, treatments, and localizations
promotedpromoted_10Promoted in-app purchases and verified ordering
review_attachmentsreview_attachments_4App Store review attachments
review_submissionsreview_submissions_9Generic App Store review submissions and submission items
metricsmetrics_9Performance metrics, diagnostics, and TestFlight usage metrics

Tool Catalog Size

When an MCP client eagerly loads every tool definition, the approximate schema footprint is:

ConfigurationTools~Tokens
All workers (default)502~60,000
Release workflow: apps,builds,export_compliance,versions,reviews~72~8,900
Monetization: apps,iap,subscriptions,pricing184~21,100
TestFlight: apps,builds,beta_groups,beta_testers~63~7,100
Marketing: apps,screenshots,custom_pages,ppo,promoted~78~8,800
--workers apps17~2,100

Heaviest workers: Subscriptions (99 tools), InAppPurchases (59 tools), Xcode Cloud (42 tools), Screenshots (19 tools), Provisioning (17 tools).

Exact cost depends on the MCP host's serialization, tokenizer, and tool-discovery strategy. Modern clients may defer schemas until they are needed. Use --workers when the client enforces a tool limit or when you want a smaller, more focused catalog.

Available Tools

502 tools organized across 33 App Store tool domains + 2 core domains (use the 35 --workers filter keys — see Worker Filtering):

Company Management — 3 tools
ToolDescription
company_listList all configured companies
company_switchSwitch active company for API operations
company_currentGet current active company info
Authentication — 4 tools
ToolDescription
auth_generate_tokenGenerate JWT token for API access
auth_validate_tokenLocally validate a standard team-key JWT: ES256 signature, configured kid/iss, App Store Connect audience, issued-at and expiration claims, and the 20-minute maximum lifetime. This makes no Apple API call and does not prove server acceptance.
auth_refresh_tokenForce refresh JWT token
auth_token_statusGet JWT token cache status
Apps Management — 10 tools
ToolDescription
apps_listList all applications with filtering
apps_get_detailsGet detailed app information
apps_searchSearch apps by name or Bundle ID
apps_list_versionsList all versions with states
apps_get_metadataGet localized metadata for a version
apps_list_search_keywordsList canonical App Store search keyword IDs for custom-page targeting
apps_update_metadataUpdate metadata (What's New, description, etc.)
apps_list_localizationsList localizations with content status
apps_create_localizationCreate a new localization for a version
apps_delete_localizationDelete a localization from a version
Accessibility Declarations — 6 tools
ToolDescription
accessibility_listList accessibility declarations for an app
accessibility_getGet one accessibility declaration
accessibility_createCreate a declaration for a device family
accessibility_updateUpdate support flags or publish a declaration
accessibility_deleteDelete a declaration
accessibility_list_relationshipsList declaration relationship IDs for an app
Webhook Notifications — 11 tools
ToolDescription
webhooks_listList webhooks for an app
webhooks_getGet a webhook by ID
webhooks_createCreate a webhook configuration
webhooks_updateUpdate webhook fields
webhooks_deleteDelete a webhook
webhooks_list_deliveriesList delivery attempts
webhooks_redeliverRedeliver an existing delivery
webhooks_pingSend a test ping
webhooks_verify_signatureVerify x-apple-signature against the exact raw payload body
webhooks_parse_payloadParse and normalize a raw webhook notification payload
webhooks_triage_eventProduce an actionable triage plan for webhook events or delivery failures
Xcode Cloud — 42 tools
ToolDescription
xcode_cloud_products_listList Xcode Cloud products
xcode_cloud_products_getGet an Xcode Cloud product
xcode_cloud_products_deletePreview or permanently delete an Xcode Cloud product with confirmation safeguards
xcode_cloud_app_product_getGet the Xcode Cloud product associated with an app
xcode_cloud_product_app_getGet the app associated with an Xcode Cloud product
xcode_cloud_product_primary_repositories_listList primary repositories attached to a product
xcode_cloud_product_additional_repositories_listList additional repositories attached to a product
xcode_cloud_product_workflows_listList workflows for a product
xcode_cloud_product_build_runs_listList build runs for a product
xcode_cloud_workflows_getGet a workflow
xcode_cloud_workflows_createCreate an Xcode Cloud workflow
xcode_cloud_workflows_updateUpdate an Xcode Cloud workflow
xcode_cloud_workflows_deletePreview or permanently delete a workflow with confirmation safeguards
xcode_cloud_workflow_repository_getGet the repository used by a workflow
xcode_cloud_workflow_build_runs_listList build runs for a workflow
xcode_cloud_build_runs_getGet a build run
xcode_cloud_build_runs_startStart or rebuild an Xcode Cloud build
xcode_cloud_build_run_actions_listList build actions for a run
xcode_cloud_build_run_builds_listList App Store Connect builds created by a run
xcode_cloud_actions_getGet a build action
xcode_cloud_action_build_run_getGet the build run that owns a build action
xcode_cloud_action_artifacts_listList artifacts for an action
xcode_cloud_action_issues_listList issues for an action
xcode_cloud_action_test_results_listList test results for an action
xcode_cloud_artifacts_getGet an artifact
xcode_cloud_issues_getGet an issue
xcode_cloud_test_results_getGet a test result
xcode_cloud_xcode_versions_listList available Xcode versions
xcode_cloud_xcode_versions_getGet an Xcode version
xcode_cloud_xcode_version_macos_versions_listList macOS versions compatible with an Xcode version
xcode_cloud_macos_versions_listList available macOS versions
xcode_cloud_macos_versions_getGet a macOS version
xcode_cloud_macos_version_xcode_versions_listList Xcode versions compatible with a macOS version
xcode_cloud_scm_providers_listList SCM providers
xcode_cloud_scm_providers_getGet an SCM provider
xcode_cloud_scm_provider_repositories_listList repositories for an SCM provider
xcode_cloud_scm_repositories_listList SCM repositories
xcode_cloud_scm_repositories_getGet an SCM repository
xcode_cloud_scm_repository_git_references_listList repository git references
xcode_cloud_scm_repository_pull_requests_listList repository pull requests
xcode_cloud_scm_git_references_getGet a git reference
xcode_cloud_scm_pull_requests_getGet a pull request
TestFlight Beta Feedback — 8 tools
ToolDescription
beta_feedback_list_crashesList beta crash feedback submissions
beta_feedback_get_crashGet one beta crash feedback submission
beta_feedback_get_crash_logRead crash log for a submission
beta_feedback_get_crash_log_by_idRead crash log by crash log ID
beta_feedback_delete_crashDelete a beta crash feedback submission
beta_feedback_list_screenshotsList beta screenshot feedback submissions
beta_feedback_get_screenshotGet one beta screenshot feedback submission
beta_feedback_delete_screenshotDelete a beta screenshot feedback submission
Builds — 4 tools
ToolDescription
builds_listList builds with processing states
builds_getGet detailed build information
builds_find_by_numberFind build by version number
builds_list_for_versionGet builds for specific app version
Build Uploads — 10 tools
ToolDescription
build_uploads_listList an app's Build Upload parents with filters, sparse fields, includes, and strict pagination
build_uploads_getGet one Build Upload with processing diagnostics and optional included resources
build_uploads_createCreate a Build Upload parent without replaying an ambiguous POST
build_uploads_deleteDelete a Build Upload parent after exact ID confirmation
build_uploads_list_filesList file reservations under one Build Upload with strict pagination
build_uploads_get_fileGet one Build Upload File and its delivery state
build_uploads_reserve_fileReserve one exact file without replaying an ambiguous POST
build_uploads_commit_fileCommit checksum or uploaded-state changes with omission and null preserved separately
build_uploads_upload_fileTransfer a new or existing reservation from an immutable local snapshot
build_uploads_uploadRun parent creation, reservation, transfer, commit, and processing reconciliation

Compound uploads retain the same lowercase MD5 fingerprint from reservation through recovery. Explicit resume and recovered-continuation instructions carry expected_md5; the next invocation verifies a fresh immutable snapshot against it before any Apple request or transfer. An existing reservation already marked UPLOAD_COMPLETE or COMPLETE is accepted only when Apple's sourceFileChecksums.file MD5 matches that snapshot; missing, unsupported, or mismatched evidence is retained for inspection without another transfer, commit, or delete. Presigned operations retry only when their method is PUT; redirects, POST, and unknown methods are not replayed. If an ambiguous create is uniquely recovered, the workflow stops and returns its resource ID for explicit continuation. Transfer credentials stay redacted unless include_sensitive_details is explicitly enabled on a direct read.

Build Processing — 4 tools
ToolDescription
builds_get_processing_stateGet current processing state
builds_update_encryptionSet encryption compliance
builds_get_processing_statusGet detailed processing status
builds_check_readinessCheck if build is ready for submission
Export Compliance — 11 tools
ToolDescription
export_compliance_list_declarationsList an app's encryption declarations with strict pagination
export_compliance_get_declarationGet one declaration without deprecated document URL fields
export_compliance_create_declarationCreate an encryption declaration questionnaire for an app
export_compliance_create_documentReserve, transfer, commit, and poll a document from one immutable local snapshot
export_compliance_get_documentGet safe delivery metadata without signed URLs, tokens, or upload headers
export_compliance_update_documentApply a low-level nullable checksum or uploaded-state patch
export_compliance_upload_documentResume an AWAITING_UPLOAD reservation with exact bytes and its lowercase MD5 receipt
export_compliance_inspect_documentInspect document presence and classify its delivery state
export_compliance_get_build_declarationGet the declaration currently attached to a build
export_compliance_attach_build_declarationAttach an approved declaration and verify the relationship
export_compliance_check_release_readinessEvaluate only the build's export-compliance release gate
TestFlight Beta Details — 11 tools
ToolDescription
builds_get_beta_detailGet TestFlight configuration for build
builds_update_beta_detailUpdate TestFlight settings
builds_set_beta_localizationSet What's New for TestFlight
builds_list_beta_localizationsList all TestFlight localizations
builds_get_beta_groupsGet beta groups for a build
builds_get_beta_testersGet individual testers for a build
builds_send_beta_notificationSend notification to beta testers
builds_add_to_beta_groupsAdd build to beta groups
builds_add_individual_testersAdd individual testers to a build
builds_remove_individual_testersRemove individual testers from a build
builds_list_individual_testersList individual testers assigned to a build
TestFlight Beta Groups — 15 tools
ToolDescription
beta_groups_listList TestFlight beta groups for an app
beta_groups_createCreate a new beta group
beta_groups_updateUpdate beta group settings
beta_groups_deleteDelete a beta group
beta_groups_add_testersAdd testers to a beta group
beta_groups_remove_testersRemove testers from a beta group
beta_groups_list_testersList testers in a beta group
beta_groups_add_buildsAdd builds to a beta group
beta_groups_remove_buildsRemove builds from a beta group
beta_groups_get_recruitment_criteriaGet the public-link recruitment criteria attached to a beta group
beta_groups_create_recruitment_criteriaCreate device-family and OS-version recruitment criteria
beta_groups_update_recruitment_criteriaReplace or explicitly clear recruitment filters
beta_groups_delete_recruitment_criteriaDelete recruitment criteria after exact criterion-ID confirmation
beta_groups_list_recruitment_optionsList device families and OS versions Apple currently permits
beta_groups_check_recruitment_compatibilityCheck whether a group has a build compatible with its criteria
TestFlight Beta Testers — 12 tools

Includes tester list/search/get/create/delete, app relationships, invitations, beta group assignment, build assignment, and app removal tools.

App Version Lifecycle — 17 tools
ToolDescription
app_versions_createCreate a new app version
app_versions_listList versions with state filtering
app_versions_getGet detailed version information
app_versions_get_age_rating_declarationRead the App Info age rating questionnaire
app_versions_list_territory_age_ratingsList calculated age ratings by territory
app_versions_updateUpdate version attributes
app_versions_attach_buildAttach build to version
app_versions_submit_for_reviewSubmit for App Store review
app_versions_cancel_reviewCancel ongoing review
app_versions_releaseRelease approved version
app_versions_create_phased_releaseCreate gradual rollout
app_versions_get_phased_releaseGet phased release info and ID
app_versions_update_phased_releasePause/resume/complete rollout
app_versions_delete_phased_releaseDelete an eligible planned phased release with exact-ID confirmation and unknown-outcome safety
app_versions_set_review_detailsSet reviewer contact info
app_versions_update_age_ratingConfigure age rating declaration
app_versions_deleteDelete an editable app version with exact-ID confirmation and unknown-outcome safety
Customer Reviews — 8 tools
ToolDescription
reviews_listGet reviews with filtering and pagination
reviews_getGet specific review details
reviews_list_for_versionGet reviews for a specific version
reviews_statsAggregated review statistics
reviews_create_responseRespond to a customer review
reviews_delete_responseDelete a response
reviews_get_responseGet response for a review
reviews_summarizationsSummarize review themes and ratings
In-App Purchases — 59 tools
ToolDescription
iap_listList in-app purchases for an app
iap_getGet IAP details
iap_createCreate a new IAP
iap_updateUpdate IAP attributes
iap_deleteDelete an IAP
iap_list_localizationsList IAP localizations
iap_create_localizationCreate IAP localization
iap_update_localizationUpdate IAP localization
iap_delete_localizationDelete IAP localization
iap_submit_for_reviewSubmit IAP for review
iap_list_subscriptionsList subscription groups
iap_get_subscription_groupGet subscription group details
iap_inventoryAI-friendly IAP inventory for an app
iap_list_price_pointsList territory-aware price points
iap_list_price_point_equalizationsList price point equalizations
iap_get_price_scheduleGet price schedule
iap_set_price_scheduleSet price schedule
iap_pricing_summarySummarize current and scheduled prices
iap_prepare_offer_pricesFind price point candidates for offers
iap_set_availabilitySet territory availability
iap_get_availabilityGet availability by IAP or availability ID
iap_list_available_territoriesList available territories
iap_get_promoted_purchaseGet promoted purchase state
iap_list_offer_codesList IAP offer codes
iap_get_offer_codeGet an IAP offer code
iap_create_offer_codeCreate an IAP offer code
iap_update_offer_codeUpdate an IAP offer code
iap_deactivate_offer_codeDeactivate an IAP offer code
iap_list_offer_code_pricesList territory-aware offer prices
iap_generate_one_time_codesGenerate one-time offer codes
iap_list_one_time_codesList one-time code batches
iap_get_one_time_codeGet a one-time code batch
iap_update_one_time_codeUpdate a one-time code batch
iap_deactivate_one_time_codeDeactivate a one-time code batch
iap_get_one_time_code_valuesGet generated one-time code values
iap_create_custom_codeCreate a custom offer code
iap_get_custom_codeGet custom code details
iap_update_custom_codeUpdate a custom code
iap_deactivate_custom_codeDeactivate a custom code
iap_get_review_screenshotGet review screenshot
iap_upload_review_screenshotUpload review screenshot
iap_delete_review_screenshotDelete review screenshot
iap_upload_imageUpload promotional image
iap_get_imageGet promotional image
iap_delete_imageDelete promotional image
iap_list_imagesList promotional images
iap_create_versionCreate a reviewable IAP metadata version
iap_get_versionGet an IAP version and its review state
iap_list_versionsList reviewable versions for an IAP
iap_list_version_localizationsList localizations owned by an IAP version
iap_create_version_localizationCreate a localization for an IAP version
iap_get_version_localizationGet an IAP version localization
iap_update_version_localizationUpdate nullable text on an IAP version localization
iap_delete_version_localizationDelete an IAP version localization
iap_get_version_imageGet the singular image related to an IAP version
iap_list_version_imagesList every image resource owned by an IAP version with strict continuation support
iap_upload_version_imageUpload, commit, and reconcile an immutable IAP version image
iap_get_version_image_resourceGet a version-scoped IAP image resource
iap_delete_version_imageDelete a version-scoped IAP image

The legacy product-scoped localization, submission, and image tools remain callable for compatibility. Apple 4.4.1 deprecates iap_list_localizations, iap_create_localization, iap_update_localization, iap_delete_localization, iap_submit_for_review, iap_upload_image, iap_get_image, iap_delete_image, and iap_list_images; successful responses identify the versioned replacement tools. For localization creation, promotional image upload, and review submission, first use iap_list_versions, call iap_create_version only when a new metadata version is needed, and pass that version ID to the downstream versioned tool. These compatibility calls never create or select a version automatically.

If Apple may have accepted a version or version-localization create but the response is lost or cannot be decoded, the tool returns write_outcome: not_confirmed and retrySafe: false with the requested identity plus list/get inspection steps. Inspect before retrying to avoid duplicate metadata resources.

Subscriptions — 99 tools

Includes subscription and group metadata versions, version-owned localizations and images, plan-type-aware availability, territory-aware prices, price points and adjusted equalizations, promoted purchase reads, inventory/pricing helpers, intro offers, promotional offers, offer codes, one-time/custom codes, win-back offers, and review screenshots. All former public offer_codes_*, intro_offers_*, promo_offers_*, and winback_* functionality is exposed through subscriptions_*.

Apple 4.4.1 also deprecates the legacy product- or group-scoped localization, image, and submission tools. They remain callable for compatibility, return explicit replacement guidance on success, and never create or select a metadata version automatically. New integrations should use subscriptions_create_version or subscriptions_create_group_version, the corresponding version-localization/image tools, and the generic review_submissions_* workflow.

Subscription version, group-version, localization, and plan-availability creates use the same non-idempotent recovery contract: an ambiguous Apple write returns write_outcome: not_confirmed, retrySafe: false, the requested fingerprint, and deterministic collection/get inspection guidance.

The following names remain available for compatibility, but Apple 4.4.1 deprecates their legacy subscriptionAvailability resource in favor of plan-type-aware subscriptionPlanAvailabilities:

ToolCompatibility status
subscriptions_get_availabilityDeprecated legacy availability read
subscriptions_set_availabilityDeprecated legacy availability write
subscriptions_list_available_territoriesDeprecated legacy territory listing
subscriptions_inventoryDeprecated helper; can omit subscriptions beyond the first included relationship page and is not an authoritative complete inventory
Sandbox Testers — 3 tools
ToolDescription
sandbox_listList sandbox testers
sandbox_updateUpdate sandbox tester settings
sandbox_clear_purchase_historyClear purchase history for sandbox testers
Beta App — 10 tools
ToolDescription
beta_app_list_localizationsList beta app localizations
beta_app_create_localizationCreate beta app localization
beta_app_get_localizationGet beta app localization
beta_app_update_localizationUpdate beta app localization
beta_app_delete_localizationDelete beta app localization
beta_app_submit_for_reviewSubmit build for beta review
beta_app_list_submissionsList beta review submissions
beta_app_get_submissionGet beta review submission
beta_app_get_review_detailsGet beta app review details
beta_app_update_review_detailsUpdate beta app review details
Pre-Release Versions — 3 tools

Includes pre-release version listing, details, and associated builds.

Beta License Agreements — 3 tools

Includes beta license agreement list, get, and update.

Provisioning — 17 tools
ToolDescription
provisioning_list_bundle_idsList registered bundle identifiers
provisioning_get_bundle_idGet bundle ID details
provisioning_create_bundle_idRegister a new bundle identifier
provisioning_delete_bundle_idDelete a bundle identifier
provisioning_list_devicesList registered devices
provisioning_register_deviceRegister a new device (UDID)
provisioning_update_deviceUpdate device name or status
provisioning_list_certificatesList signing certificates
provisioning_get_certificateGet certificate details
provisioning_revoke_certificateRevoke a certificate
provisioning_list_profilesList provisioning profiles
provisioning_get_profileGet profile details
provisioning_delete_profileDelete a profile
provisioning_create_profileCreate a provisioning profile
provisioning_list_capabilitiesList bundle ID capabilities
provisioning_enable_capabilityEnable a capability
provisioning_disable_capabilityDisable a capability
App Info — 10 tools

Includes app info list/get/update, app info localizations, and EULA get/create/update tools.

Pricing — 9 tools

Includes territories, availability, price points, price schedules, and App Store availability v2 tools.

Users — 10 tools

Includes team member list/get/update/remove, invitations, visible apps, and visible app relationship updates.

App Events — 9 tools

Includes in-app event CRUD plus event localization list/create/update/delete.

Analytics — 11 tools

Includes sales, financial, app summary, analytics report request, report, instance, snapshot, and segment tools.

Screenshots & Previews — 19 tools
ToolDescription
screenshots_list_setsList screenshot sets
screenshots_get_setGet a screenshot set by ID
screenshots_create_setCreate a screenshot set
screenshots_delete_setDelete a screenshot set
screenshots_listList screenshots in a set
screenshots_uploadUpload a screenshot
screenshots_getGet screenshot details
screenshots_deleteDelete a screenshot
screenshots_reorderReorder screenshots in a set
screenshots_list_preview_setsList app preview sets
screenshots_get_preview_setGet an app preview set by ID
screenshots_create_preview_setCreate a preview set
screenshots_delete_preview_setDelete a preview set
screenshots_upload_previewUpload an app preview
screenshots_get_previewGet preview details
screenshots_list_previewsList previews in a preview set
screenshots_reorder_previewsReorder every preview in a set with membership and postflight verification
screenshots_upload_batchUpload screenshots in a batch
screenshots_delete_previewDelete a preview
Custom Product Pages — 17 tools
ToolDescription
custom_pages_listList custom product pages
custom_pages_getGet page details
custom_pages_createCreate a custom page
custom_pages_updateUpdate a custom page
custom_pages_deleteDelete a custom page
custom_pages_list_versionsList page versions
custom_pages_get_versionGet a page version by ID
custom_pages_create_versionCreate a page version
custom_pages_update_versionUpdate a page version
custom_pages_list_localizationsList version localizations
custom_pages_get_localizationGet a localization by ID
custom_pages_create_localizationCreate a localization
custom_pages_update_localizationUpdate a localization
custom_pages_delete_localizationDelete a localization after exact confirmation
custom_pages_list_search_keywordsList search keyword IDs assigned to a localization
custom_pages_add_search_keywordsAdd search keyword relationships
custom_pages_remove_search_keywordsRemove search keyword relationships after exact confirmation
Product Page Optimization (A/B Tests) — 15 tools
ToolDescription
ppo_list_experimentsList A/B test experiments
ppo_list_version_experimentsList V2 experiments for an App Store version
ppo_get_experimentGet experiment details
ppo_create_experimentCreate an experiment
ppo_update_experimentUpdate/start/stop experiment
ppo_delete_experimentDelete an experiment
ppo_list_treatmentsList experiment treatments
ppo_get_treatmentGet a treatment by ID
ppo_create_treatmentCreate a treatment variant
ppo_update_treatmentUpdate a treatment variant
ppo_delete_treatmentDelete a treatment after exact confirmation
ppo_list_treatment_localizationsList treatment localizations
ppo_get_treatment_localizationGet a treatment localization by ID
ppo_create_treatment_localizationCreate treatment localization
ppo_delete_treatment_localizationDelete a treatment localization after exact confirmation
Promoted Purchases — 10 tools
ToolDescription
promoted_listList promoted purchases for an app
promoted_getGet promotion details
promoted_createCreate a promotion
promoted_updateUpdate promotion visibility or enabled state
promoted_deleteDelete a promotion
promoted_reorderReplace and verify the complete promoted-purchase order for an app
promoted_upload_imageDeprecated: returns migration guidance; the endpoint is absent from pinned Apple OpenAPI 4.4.1
promoted_get_imageDeprecated: returns migration guidance; the endpoint is absent from pinned Apple OpenAPI 4.4.1
promoted_delete_imageDeprecated: returns migration guidance; the endpoint is absent from pinned Apple OpenAPI 4.4.1
promoted_get_image_for_purchaseDeprecated: returns migration guidance; the relationship is absent from pinned Apple OpenAPI 4.4.1
Review Attachments — 4 tools

Includes App Store review attachment upload, get, delete, and list tools.

Review Submissions — 9 tools
ToolDescription
review_submissions_listList generic review submissions for an app
review_submissions_getGet one generic review submission
review_submissions_createCreate a generic review submission for an app and platform
review_submissions_list_itemsList items attached to a review submission
review_submissions_add_itemAttach a reviewable resource version to a submission
review_submissions_update_itemUpdate nullable resolved or removed state on a submitted item
review_submissions_remove_itemRemove an item from a submission
review_submissions_submitSubmit all attached items for review
review_submissions_cancelCancel a submitted generic review submission

review_submissions_add_item reports success only when Apple's response confirms a valid item ID and exactly the requested relationship name, JSON:API type, and resource ID. Any mismatch is returned as an unconfirmed write with submission and item-list recovery steps.

Performance Metrics — 9 tools
ToolDescription
metrics_app_perfGet app performance/power metrics
metrics_build_perfGet build performance metrics
metrics_build_diagnosticsList diagnostics for a build
metrics_get_diagnostic_logsGet diagnostic logs
metrics_app_beta_tester_usageGet app TestFlight crash, session, and feedback metrics by beta tester
metrics_group_beta_tester_usageGet beta-group TestFlight crash, session, and feedback metrics by beta tester
metrics_group_public_link_usageGet public-link views, acceptance outcomes, criteria failures, and survey ratios
metrics_tester_usageGet one tester's TestFlight usage metrics within an app
metrics_build_beta_usageGet build TestFlight crash, install, session, feedback, and invitation metrics

Usage Examples

Complete Release Workflow

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

TestFlight Distribution

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: [...])

Review Management

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

Multi-Company Workflow

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)

API Constraints

ConstraintDetails
No emojisMetadata fields (What's New, Description, Keywords) must not contain emoji characters
Version stateApp 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 expiryTokens expire after 20 minutes — the server auto-refreshes them
Rate limitsApple enforces per-account rate limits (documentation)
Locale formatUse standard codes: en-US, ru, de-DE, ja, zh-Hans

Architecture

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 (39 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
    ā”œā”€ā”€ BuildUploadsWorker/         #   build_uploads_* tools
    ā”œā”€ā”€ BuildProcessingWorker/      #   builds_*_processing tools
    ā”œā”€ā”€ ExportComplianceWorker/     #   export_compliance_* 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
    ā”œā”€ā”€ ReviewSubmissionsWorker/    #   review_submissions_* tools
    └── MetricsWorker/              #   metrics_* tools

Design Principles

  • Swift 6 strict concurrency — all workers and services are Sendable, proper actor isolation
  • Actor-based HTTP client — thread-safe with exponential backoff and retry logic
  • Prefix-based routing — WorkerManager routes tool calls by name prefix (zero config)
  • Minimal dependencies — only the MCP Swift SDK

Troubleshooting

Server not responding / MCP disconnection
  1. Run ~/.mint/bin/asc-mcp --version to verify the installation independently of the MCP client.
  2. Verify that the MCP client uses the absolute path to the installed executable.
  3. For Codex, run codex mcp list and codex mcp get asc-mcp --json.
  4. For Claude Code, run claude mcp get asc-mcp and claude mcp list.
  5. Check either the configured companies.json file or the environment variables used by your chosen setup.
  6. Ensure every .p8 key path is absolute and the file exists.
  7. Restart GUI clients after changing their MCP configuration, then inspect the client's MCP output log.
Authentication errors (401)
  1. Verify your Key ID and Issuer ID match what's shown in App Store Connect
  2. Ensure the .p8 file is the original download (not modified)
  3. Check that the API key hasn't been revoked
  4. JWT tokens auto-refresh, but if the key is invalid, all requests will fail
Metadata update rejected by App Store Connect state rules

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.

Build processing takes too long

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.

Rate limiting (429 errors)

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.

Getting Help

Before opening a report, search the existing issues. If the problem is new, open an issue and include:

  • macOS version and installation method;
  • MCP client name and version;
  • the selected --workers value, if any;
  • the exact error message and the smallest reproducible request.

Remove Key IDs, Issuer IDs, private keys, signed URLs, tokens, and account data from logs before posting them. Report security vulnerabilities privately by following SECURITY.md. For code contributions, see CONTRIBUTING.md.

Development

Building

swift build              # Debug build
swift build -c release   # Release build (optimized)
swift package clean      # Clean build artifacts

Test Mode

.build/debug/asc-mcp --test    # Runs built-in integration tests

Adding a New Tool

  1. Create handler method in the appropriate Worker+Handlers.swift
  2. Add tool definition in Worker+ToolDefinitions.swift
  3. Register in worker's getTools() method
  4. Add routing case in worker's handleTool() switch
  5. The WorkerManager auto-routes by prefix — no changes needed there

Adding a New Worker

  1. Create directory: Workers/MyWorker/
  2. Create 3 files: MyWorker.swift, MyWorker+ToolDefinitions.swift, MyWorker+Handlers.swift
  3. Add worker property and initialization in WorkerManager.swift
  4. Add routing rule in WorkerManager.registerWorkers()
  5. Add getMyTools() helper method

Contributing

We welcome contributions! See Contributing Guide for details.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Acknowledgments


This is an unofficial, community-maintained tool and is not affiliated with or endorsed by Apple Inc.

Related MCP Servers

Moxie-Docs-MCPā˜… Featured

MCP & Agent Skills for Automated Documentation, and codebase conventions + context

šŸ’» Developer Tools2 views
3KniGHtcZ/codebeamer-mcp

šŸ“‡ ā˜ļø šŸŽ 🪟 🐧 - Codebeamer ALM integration for managing work items, trackers, and projects. Provides 17 tools for reading and writing items, associations, references, comments, and risk management data via Codebeamer REST API v3.

šŸ’» Developer Tools1 views
21st-dev/Magic-MCP

Create crafted UI components inspired by the best 21st.dev design engineers.

šŸ’» Developer Tools0 views
a-25/ios-mcp-code-quality-server

šŸ“‡ šŸ  šŸŽ - iOS code quality analysis and test automation server. Provides comprehensive Xcode test execution, SwiftLint integration, and detailed failure analysis. Operates in both CLI and MCP server modes for direct developer usage and AI assistant integration.

šŸ’» Developer Tools0 views

Engagement

Views
0
Installs
0
Upvotes
0

Views and upvotes are unique per visitor network (hashed IP). Installs count copy actions.

Status

Health: Not checked yet

We have not completed a health check for this listing yet.

No check timestamp yet.

Unclaimed listing (imported or pending owner verification). Claim it →
ā˜… Spotlight Slot

Feature Your MCP Server

Get maximum visibility for your server across our directory, search results, and detail pages.

Spotlight Your Server

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to get the verified badge and attach your website.

Claim this listing

Promote this listing

Optional paid placement. Free listings stay free forever.

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.