App Store Connect MCP Server

by zelentsov-dev

508 downloads Not rated yet
GitHub

About

MCP server for App Store Connect API with 208 tools across 25 workers. Manage apps, builds, TestFlight, in-app purchases, subscriptions, reviews, provisioning, screenshots, analytics, and more - directly from Claude, Cursor, VS Code, or any MCP client. Multi-account support, work

Explore

- 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

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name App Store Connect MCP Server
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository


brew install mint
mint install zelentsov-dev/[email protected]

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.

brew install mint

mint install zelentsov-dev/[email protected]

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

Create ~/.config/asc-mcp/companies.json:

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.

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)

<details>
<summary><strong>Claude Code (CLI)</strong></summary>

bash
claude mcp add asc-mcp -- ~/.mint/bin/asc-mcp

Or add to .mcp.json (project) / .claude/settings.json (global) with env vars:

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

</details>

<details>
<summary><strong>Claude Desktop</strong></summary>

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

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

</details>

<details>
<summary><strong>Codex CLI</strong></summary>

Add to ~/.codex/config.toml:

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.

</details>

<details>
<summary><strong>Gemini CLI</strong></summary>

Add to ~/.gemini/settings.json:

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

</details>

<details>
<summary><strong>VS Code (Copilot / Continue)</strong></summary>

Add to .vscode/mcp.json:

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

</details>

<details>
<summary><strong>Cursor</strong></summary>

Add to Cursor settings → MCP Servers:

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

</details>

<details>
<summary><strong>Windsurf</strong></summary>

Add to ~/.codeium/windsurf/mcp_config.json:

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 ~109 tools by default, so you must use --workers to select a subset. See Worker Filtering below.

</details>

> [!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.

company_list

List all configured companies

company_switch

Switch active company for API operations

company_current

Get current active company info

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

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

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

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

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_beta_group

Add build to beta group

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

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

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

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_create_review_screenshot

Create review screenshot

subscriptions_list

List subscriptions in a group

subscriptions_get

Get subscription details

208 tools organized across 25 workers (use --workers to filter — see Worker Filtering):

<details>
<summary><strong>Company Management</strong> — 3 tools</summary>

| Tool | Description |
|------|-------------|
| company_list | List all configured companies |
| company_switch | Switch active company for API operations |
| company_current | Get current active company info |

</details>

<details>
<summary><strong>Authentication</strong> — 4 tools</summary>

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

</details>

<details>
<summary><strong>Apps Management</strong> — 9 tools</summary>

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

</details>

<details>
<summary><strong>Builds</strong> — 4 tools</summary>

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

</details>

<details>
<summary><strong>Build Processing</strong> — 4 tools</summary>

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

</details>

<details>
<summary><strong>TestFlight Beta Details</strong> — 8 tools</summary>

| 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_beta_group | Add build to beta group |

</details>

<details>
<summary><strong>TestFlight Beta Groups</strong> — 9 tools</summary>

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

</details>

<details>
<summary><strong>App Version Lifecycle</strong> — 13 tools</summary>

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

</details>

<details>
<summary><strong>Customer Reviews</strong> — 7 tools</summary>

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

</details>

<details>
<summary><strong>In-App Purchases</strong> — 17 tools</summary>

| 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_create_review_screenshot | Create review screenshot |

</details>

<details>
<summary><strong>Subscriptions</strong> — 15 tools</summary>

| 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_submit | Submit subscription for review |

</details>

<details>
<summary><strong>Offer Codes</strong> — 7 tools</summary>

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

</details>

<details>
<summary><strong>Win-Back Offers</strong> — 5 tools</summary>

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

</details>

<details>
<summary><strong>Provisioning</strong> — 17 tools</summary>

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

</details>

<details>
<summary><strong>Screenshots & Previews</strong> — 12 tools</summary>

| 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_create | Reserve a screenshot upload |
| 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_create_preview | Reserve a preview upload |
| screenshots_delete_preview | Delete a preview |

</details>

<details>
<summary><strong>Custom Product Pages</strong> — 10 tools</summary>

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

</details>

<details>
<summary><strong>Product Page Optimization (A/B Tests)</strong> — 9 tools</summary>

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

</details>

<details>
<summary><strong>Promoted Purchases</strong> — 5 tools</summary>

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

</details>

<details>
<summary><strong>Performance Metrics</strong> — 4 tools</summary>

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

</details>

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "app store connect mcp server": {
            "asc-mcp": {
                "command": "/Users/YOU/.mint/bin/asc-mcp",
                "env": {
                    "ASC_KEY_ID": "YOUR_KEY_ID",
                    "ASC_ISSUER_ID": "YOUR_ISSUER_ID",
                    "ASC_PRIVATE_KEY_PATH": "/path/to/AuthKey.p8"
                }
            }
        }
    }
}

McpServers

{
    "asc-mcp": {
        "command": "/Users/YOU/.mint/bin/asc-mcp",
        "env": {
            "ASC_KEY_ID": "YOUR_KEY_ID",
            "ASC_ISSUER_ID": "YOUR_ISSUER_ID",
            "ASC_PRIVATE_KEY_PATH": "/path/to/AuthKey.p8"
        }
    }
}

<p align="center">
<h1 align="center">App Store Connect MCP Server</h1>
<p align="center">
A Model Context Protocol server for the App Store Connect API.<br/>
Manage apps, builds, TestFlight, reviews, and more — directly from Claude.
</p>
</p>

<p align="center">
<a href="https://swift.org">Swift 6.2+</a>
<a href="https://developer.apple.com/macos/">macOS 14.0+</a>
<a href="https://modelcontextprotocol.io">MCP Compatible</a>
<a href="LICENSE">MIT License</a>
<a href="https://github.com/zelentsov-dev/asc-mcp/actions">CI</a>
</p>

<p align="center">
<strong>Works with:</strong><br/>
<a href="https://claude.ai/code">Claude Code</a>
<a href="https://claude.ai/download">Claude Desktop</a>
<a href="https://code.visualstudio.com">VS Code</a>
<a href="https://cursor.com">Cursor</a>
<a href="https://windsurf.com">Windsurf</a>
<a href="https://github.com/openai/codex">Codex CLI</a>
<a href="https://ai.google.dev">Gemini CLI</a>
</p>

---

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 208 tools across 25 workers, 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

Quick Start

# 1. Install via Mint
brew install mint
mint install zelentsov-dev/[email protected]

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 | 16.0+ (for building) |
| App Store Connect API Key | Create one here |

Installation

Option A: Mint (recommended)

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/[email protected]

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/[email protected]      # specific tag

To update to the latest version:

mint install zelentsov-dev/[email protected] --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):

Option A: Environment Variables (recommended for MCP clients)

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:

…

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.