App Store Connect MCP Server
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:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
App Store Connect MCP ServerCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- 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>
bashclaude 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"></a>
<a href="https://developer.apple.com/macos/"></a>
<a href="https://modelcontextprotocol.io"></a>
<a href="LICENSE"></a>
<a href="https://github.com/zelentsov-dev/asc-mcp/actions"></a>
</p>
<p align="center">
<strong>Works with:</strong><br/>
<a href="https://claude.ai/code"></a>
<a href="https://claude.ai/download"></a>
<a href="https://code.visualstudio.com"></a>
<a href="https://cursor.com"></a>
<a href="https://windsurf.com"></a>
<a href="https://github.com/openai/codex"></a>
<a href="https://ai.google.dev"></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:
…
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



