Skip to main content
Glama

Overview

asc-mcp is a Swift-based MCP server that bridges Claude (or any MCP-compatible host) with the App Store Connect API. It exposes 339 tools across 35 worker domains, enabling you to automate your entire iOS/macOS release workflow through natural language.

Key capabilities

  • Multi-account — manage multiple App Store Connect teams from a single server

  • Full release pipeline — create versions, attach builds, submit for review, phased rollout

  • TestFlight automation — beta groups, testers, build distribution, localized What's New

  • Build management — track processing, encryption compliance, readiness checks

  • Customer reviews — list, respond, update, delete responses, aggregate statistics

  • In-app purchases — CRUD for IAPs, localizations, price points, review screenshots

  • Subscriptions — subscription CRUD, groups, localizations, prices, offer codes, win-back offers

  • Provisioning — bundle IDs, devices, certificates, profiles, capabilities

  • Marketing — screenshots, app previews, custom product pages, A/B testing (PPO), promoted purchases

  • Analytics & Metrics — sales/financial reports, analytics reports, performance metrics, diagnostics

  • Metadata management — localized descriptions, keywords, What's New across all locales

  • MCP 2025-11-25 surface — tool annotations, output schemas for stable tools, structured JSON results, and safe result-size metadata

  • OpenAPI drift tooling — generate coverage reports from Apple's official App Store Connect OpenAPI specification

Quick Start

# 1. Install via Mint
brew install mint
mint install zelentsov-dev/asc-mcp@v2.2.0

# 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.

Prerequisites

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

Installation

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@v2.2.0

# 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@v2.2.0     # specific tag

To update to the latest version:

mint install zelentsov-dev/asc-mcp@v2.2.0 --force

Option B: Build from Source

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:

cp .build/release/asc-mcp /usr/local/bin/asc-mcp

Configuration

1. App Store Connect API Key

  1. Go to App Store Connect → Users and Access → Integrations → Team Keys

  2. Click Generate API Key — select appropriate role (Admin or App Manager recommended)

  3. Download the .p8 private key file (you can only download it once!)

  4. Note the Key ID and Issuer ID

2. Companies Configuration

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_ID exists.

Option B: JSON Config File

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_number is required for analytics tools (analytics_sales_report, analytics_financial_report, analytics_app_summary). Find it in App Store Connect → Sales and Trends → Reports.

Configuration Priority

The server resolves configuration in this order:

  1. --companies /path/to/companies.json (CLI argument)

  2. Constructor parameter (programmatic)

  3. ASC_MCP_COMPANIES=/path/to/companies.json (env var pointing to JSON file)

  4. Default JSON file paths (~/.config/asc-mcp/companies.json, etc.)

  5. ASC_COMPANY_1_KEY_ID ... (multi-company env vars)

  6. ASC_KEY_ID + ASC_ISSUER_ID (single-company env vars)

3. MCP Host Configuration

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 339 tools by default, so you must use --workers to 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.p8 key paths are absolute.

Worker Filtering

The server exposes 339 tools across 35 worker domains. Some MCP clients impose a tool limit (e.g., Windsurf caps at 100). Use --workers to enable only the workers you need:

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

# Full release workflow subset (~60 tools, fits within any client limit)
asc-mcp --workers apps,builds,versions,reviews,beta_groups,iap

# Monetization focus
asc-mcp --workers apps,iap,subscriptions,offer_codes,winback,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.

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, 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 Drift Tooling

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

webhooks

webhooks_

8

Webhook notifications and deliveries

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_

24

In-app purchases, prices, review screenshots

subscriptions

subscriptions_

29

Subscription CRUD, groups, localizations, prices

offer_codes

offer_codes_

10

Subscription offer codes, one-time codes

winback

winback_

5

Win-back offers for subscriptions

intro_offers

intro_offers_

4

Subscription introductory offers

promo_offers

promo_offers_

6

Subscription promotional offers

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

Token Cost

When connected to an LLM client, tool definitions consume context tokens. Here's the approximate footprint:

Configuration

Tools

~Tokens

All workers (default)

339

~38,000

Release workflow: apps,builds,versions,reviews

~57

~7,000

Monetization: apps,iap,subscriptions,pricing

~78

~9,000

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: Xcode Cloud (30 tools), Subscriptions (29 tools), InAppPurchases (24 tools), Provisioning (17 tools), Screenshots (16 tools).

For Claude (200K context) ~38K tokens is about 19% of the window. For clients with smaller context windows, use --workers to reduce the footprint.

Available Tools

339 tools organized across 35 worker domains (use --workers to filter — 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

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

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 (consumable, non-consumable, subscription)

iap_update

Update IAP attributes

iap_delete

Delete an in-app purchase

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_list_price_points

List available price points

iap_get_price_schedule

Get price schedule

iap_set_price_schedule

Set price schedule

iap_get_review_screenshot

Get review screenshot

iap_set_availability

Set territory availability

iap_get_availability

Get territory availability

iap_upload_image

Upload promotional image

iap_get_image

Get promotional image

iap_delete_image

Delete promotional image

iap_upload_review_screenshot

Upload review screenshot

iap_delete_review_screenshot

Delete review screenshot

iap_list_images

List promotional images

Tool

Description

subscriptions_list

List subscriptions in a group

subscriptions_get

Get subscription details

subscriptions_create

Create a new subscription

subscriptions_update

Update subscription

subscriptions_delete

Delete subscription

subscriptions_list_localizations

List subscription localizations

subscriptions_create_localization

Create localization

subscriptions_update_localization

Update localization

subscriptions_delete_localization

Delete localization

subscriptions_list_prices

List subscription prices

subscriptions_list_price_points

List available price points

subscriptions_create_group

Create subscription group

subscriptions_update_group

Update subscription group

subscriptions_delete_group

Delete subscription group

subscriptions_list_group_localizations

List subscription group localizations

subscriptions_create_group_localization

Create subscription group localization

subscriptions_get_group_localization

Get subscription group localization

subscriptions_update_group_localization

Update subscription group localization

subscriptions_delete_group_localization

Delete subscription group localization

subscriptions_delete_price

Delete subscription price

subscriptions_submit

Submit subscription for review

subscriptions_upload_image

Upload subscription image

subscriptions_get_image

Get subscription image

subscriptions_delete_image

Delete subscription image

subscriptions_upload_review_screenshot

Upload review screenshot

subscriptions_get_review_screenshot

Get review screenshot

subscriptions_delete_review_screenshot

Delete review screenshot

subscriptions_list_images

List subscription images

subscriptions_get_review_screenshot_for_subscription

Get review screenshot for a subscription

Tool

Description

offer_codes_list

List offer code configurations

offer_codes_create

Create offer code configuration

offer_codes_update

Update offer code (enable/disable)

offer_codes_deactivate

Deactivate all codes

offer_codes_list_prices

List prices for an offer code

offer_codes_generate_one_time

Generate one-time use codes (up to 10K)

offer_codes_list_one_time

List generated one-time codes

offer_codes_create_custom_code

Create a custom offer code

offer_codes_get_custom_code

Get custom offer code details

offer_codes_deactivate_custom_code

Deactivate a custom offer code

Tool

Description

winback_list

List win-back offers

winback_create

Create a win-back offer

winback_update

Update a win-back offer

winback_delete

Delete a win-back offer

winback_list_prices

List win-back offer prices

Tool

Description

intro_offers_list

List introductory offers for a subscription

intro_offers_create

Create an introductory offer

intro_offers_update

Update an introductory offer (end date only)

intro_offers_delete

Delete an introductory offer

Tool

Description

promo_offers_list

List promotional offers for a subscription

promo_offers_get

Get a promotional offer

promo_offers_create

Create a promotional offer

promo_offers_update

Update promotional offer prices

promo_offers_delete

Delete a promotional offer

promo_offers_list_prices

List prices for a promotional offer

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

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

Constraint

Details

No emojis

Metadata fields (What's New, Description, Keywords) must not contain emoji characters

Version state

Only versions in PREPARE_FOR_SUBMISSION state can be edited

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

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 (35 worker domains + MainWorker router)
    ├── MainWorker/WorkerManager    #   Central tool registry & routing
    ├── CompaniesWorker/            #   company_* tools
    ├── AuthWorker/                 #   auth_* tools
    ├── AppsWorker/                 #   apps_* tools
    ├── BuildsWorker/               #   builds_* tools
    ├── BuildProcessingWorker/      #   builds_*_processing tools
    ├── BuildBetaDetailsWorker/     #   builds_*_beta_* tools
    ├── AppLifecycleWorker/         #   app_versions_* tools
    ├── ReviewsWorker/              #   reviews_* tools
    ├── BetaGroupsWorker/           #   beta_groups_* tools
    ├── BetaTestersWorker/          #   beta_testers_* tools
    ├── InAppPurchasesWorker/       #   iap_* tools
    ├── SubscriptionsWorker/        #   subscriptions_* tools
    ├── OfferCodesWorker/           #   offer_codes_* tools
    ├── WinBackOffersWorker/        #   winback_* tools
    ├── IntroductoryOffersWorker/   #   intro_offers_* tools
    ├── PromotionalOffersWorker/   #   promo_offers_* tools
    ├── SandboxTestersWorker/      #   sandbox_* tools
    ├── BetaAppWorker/             #   beta_app_* 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
    └── 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 routingWorkerManager routes tool calls by name prefix (zero config)

  • Minimal dependencies — only the MCP Swift SDK

Troubleshooting

  1. Verify the binary path is correct in your MCP host config

  2. Check that companies.json exists and is valid JSON

  3. Ensure .p8 key file paths are absolute and the files exist

  4. Try running the binary directly to see error output: .build/release/asc-mcp

  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

You can only edit metadata for versions that are in PREPARE_FOR_SUBMISSION state. Versions in READY_FOR_SALE, IN_REVIEW, or WAITING_FOR_REVIEW are read-only. Create a new version first if needed.

Use builds_wait_for_processing with a reasonable timeout (default 1800s). 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.

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.

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
1wRelease cycle
9Releases (12mo)

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zelentsov-dev/asc-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server