App Store Connect MCP Server
Manage iOS, macOS, tvOS, and visionOS apps on the App Store via App Store Connect API, including app listing, version control, localizations, beta testing via TestFlight, screenshots, bundle IDs, devices, users, builds, categories, pricing, and per-territory pricing.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@App Store Connect MCP Serverlist my apps"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
App Store Connect MCP Server
A Model Context Protocol (MCP) server for Apple's App Store Connect API. Manage your iOS, macOS, tvOS, and visionOS apps directly from Claude, Cursor, or any MCP-compatible client.
Features
App Store Localizations - Full CRUD for version descriptions, keywords, and what's new
App Management - List and inspect apps across all platforms
Version Control - Create and manage app store versions
Beta Testing - Manage TestFlight groups and testers
Screenshot Management - Upload and organize app screenshots
Bundle ID Management - Full CRUD for bundle identifiers
Device Management - List and inspect registered devices
User Management - List and inspect team users
Build Management - List and inspect app builds
Category & Pricing - Browse categories, check pricing and availability
Pricing & PPP - Set per-territory pricing with Purchase Power Parity support
Secure by Default - ES256 JWT auth with automatic token refresh, credential redaction in logs
Table of Contents
Quick Start
# 1. Install
npm install -g asc-mcp
# 2. Set credentials (get from App Store Connect > Users and Access > Keys)
export APP_STORE_CONNECT_KEY_ID="YOUR_KEY_ID"
export APP_STORE_CONNECT_ISSUER_ID="YOUR_ISSUER_ID"
export APP_STORE_CONNECT_P8_PATH="/path/to/AuthKey.p8"
# 3. Add to your MCP client config and start using!Installation
npm (recommended)
npm install -g asc-mcpUsing npx
npx asc-mcpFrom Source
git clone https://github.com/SardorbekR/appstore-connect-mcp.git
cd appstore-connect-mcp
npm install
npm run buildConfiguration
Prerequisites: Get Your Apple API Credentials
Sign in to App Store Connect
Go to Users and Access → Integrations → App Store Connect API
Click Generate API Key (or use existing)
Select appropriate role (Admin or App Manager recommended)
Download the .p8 file - you can only download it once!
Note your Key ID (shown in the keys list)
Note your Issuer ID (shown at the top of the page)
Environment Variables
Variable | Required | Description |
| Yes | Your API Key ID (e.g., |
| Yes | Your Issuer ID (UUID format) |
| Yes* | Path to your |
| Yes* | Raw content of |
*One of P8_PATH or P8_CONTENT is required.
MCP Client Configuration
Add to your Claude Desktop config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"app-store-connect": {
"command": "asc-mcp",
"env": {
"APP_STORE_CONNECT_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_CONNECT_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_CONNECT_P8_PATH": "/absolute/path/to/AuthKey.p8"
}
}
}
}Add to your Cursor MCP settings (Settings → MCP Servers):
{
"mcpServers": {
"app-store-connect": {
"command": "npx",
"args": ["-y", "asc-mcp"],
"env": {
"APP_STORE_CONNECT_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_CONNECT_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_CONNECT_P8_PATH": "/absolute/path/to/AuthKey.p8"
}
}
}
}Add to your Continue configuration:
{
"mcpServers": {
"app-store-connect": {
"command": "asc-mcp",
"env": {
"APP_STORE_CONNECT_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_CONNECT_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_CONNECT_P8_PATH": "/absolute/path/to/AuthKey.p8"
}
}
}
}For CI/CD or containerized environments, you can pass the key content directly:
{
"mcpServers": {
"app-store-connect": {
"command": "asc-mcp",
"env": {
"APP_STORE_CONNECT_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_CONNECT_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_CONNECT_P8_CONTENT": "-----BEGIN PRIVATE KEY-----\nMIGT...your key here...AB12\n-----END PRIVATE KEY-----"
}
}
}
}Available Tools
Apps
Tool | Description | Parameters |
| List all apps in your account |
|
| Get details of a specific app |
|
Versions
Tool | Description | Parameters |
| List all versions for an app |
|
| Get version details |
|
| Create a new app version |
|
Version Localizations
Tool | Description | Parameters |
| List localizations for a version |
|
| Get localization details |
|
| Add a new locale |
|
| Update localization |
|
| Remove a locale |
|
App Info Localizations
Tool | Description | Parameters |
| List app info records |
|
| List name/subtitle localizations |
|
| Update app name, subtitle |
|
Beta Testing (TestFlight)
Tool | Description | Parameters |
| List beta groups for an app |
|
| List testers in a group |
|
| Add a tester to a group |
|
| Remove a tester from a group |
|
Screenshots
Tool | Description | Parameters |
| List screenshot sets |
|
| List screenshots in a set |
|
| Upload a new screenshot |
|
Bundle IDs
Tool | Description | Parameters |
| List all bundle IDs |
|
| Get bundle ID details |
|
| Register a new bundle ID |
|
| Update bundle ID name |
|
| Delete a bundle ID |
|
Devices
Tool | Description | Parameters |
| List registered devices |
|
| Get device details |
|
Users
Tool | Description | Parameters |
| List team users |
|
| Get user details |
|
Builds
Tool | Description | Parameters |
| List builds for an app |
|
| Get build details |
|
Categories & Pricing
Tool | Description | Parameters |
| List app categories |
|
| Get app pricing info |
|
| Get app territory availability |
|
Pricing (PPP)
Tool | Description | Parameters |
| List all territories with currencies |
|
| List available price tiers for an app |
|
| Get PPP equivalent prices across countries |
|
| Set per-territory manual pricing (replaces entire schedule) |
|
Usage Examples
List Your Apps
"Show me all my apps in App Store Connect"
Claude will use list_apps to retrieve and display your apps.
Update App Description
"Update the English description for version 2.0 of MyApp to: 'A revolutionary app that simplifies your daily tasks.'"
Claude will:
Find the app using
list_appsGet the version using
list_app_versionsFind the English localization using
list_version_localizationsUpdate it using
update_version_localization
Add Japanese Localization
"Add Japanese localization to MyApp version 2.0 with description '素晴らしいアプリです' and keywords 'アプリ,便利,簡単'"
Claude will use create_version_localization with locale ja.
Add a Beta Tester
"Add john@example.com as a beta tester to the Internal Testing group for MyApp"
Claude will:
Find the app and beta group using
list_beta_groupsAdd the tester using
add_beta_tester
Set PPP Pricing
"Show me the equivalent prices for my $9.99 tier in India, Brazil, and Turkey"
Claude will:
Find the $9.99 price point using
list_app_price_pointsGet equivalent prices using
get_price_point_equalizationsShow you the PPP-adjusted prices in each territory
"Set my app to $9.99 in the US and use PPP pricing for India and Brazil"
Claude will use set_app_prices with the appropriate price point IDs for each territory.
Check Version Status
"What's the status of all versions of MyApp?"
Claude will use list_app_versions to show version states (PREPARE_FOR_SUBMISSION, IN_REVIEW, READY_FOR_SALE, etc.)
Security
Credential Handling
Private keys are never logged or exposed in error messages
JWT tokens are automatically redacted from any error output
Issuer IDs (UUIDs) are redacted from logs
Token caching minimizes key usage (15-min tokens, refreshed at 10 min)
Path Validation
P8 file paths are validated against directory traversal attacks (
..not allowed)Only absolute paths are resolved
Best Practices
Never commit credentials - Use environment variables or a secrets manager
Restrict API key permissions - Use minimal required role (App Manager for most operations)
Rotate keys periodically - Generate new API keys and revoke old ones
Secure your .p8 file - Set file permissions to
600(owner read/write only)
chmod 600 /path/to/AuthKey.p8Troubleshooting
"Configuration error: APP_STORE_CONNECT_KEY_ID environment variable is required"
Ensure all required environment variables are set:
APP_STORE_CONNECT_KEY_IDAPP_STORE_CONNECT_ISSUER_IDAPP_STORE_CONNECT_P8_PATHorAPP_STORE_CONNECT_P8_CONTENT
"Failed to read private key"
Verify the path in
APP_STORE_CONNECT_P8_PATHis correct and absoluteCheck file permissions:
ls -la /path/to/AuthKey.p8Ensure the file is a valid
.p8from Apple (starts with-----BEGIN PRIVATE KEY-----)
"Authentication failed"
This usually means:
The API key was revoked in App Store Connect
The Key ID or Issuer ID doesn't match the .p8 file
The .p8 file is corrupted or incomplete
"Rate limit exceeded"
The server includes built-in rate limiting (50 requests/minute). If you hit Apple's limits:
Wait for the indicated retry time
Batch your operations when possible
The server automatically retries with exponential backoff
Tools Not Appearing in Claude
Verify the server is running: check Claude Desktop logs
Ensure the config file path is correct for your OS
Restart Claude Desktop after config changes
Development
Prerequisites
Node.js 20+
npm or pnpm
Setup
# Clone the repository
git clone https://github.com/SardorbekR/appstore-connect-mcp.git
cd appstore-connect-mcp
# Install dependencies
npm install
# Build
npm run build
# Run tests
npm test
# Lint
npm run lint
# Type check
npm run typecheckProject Structure
src/
├── index.ts # MCP server entry point
├── auth/
│ └── jwt.ts # JWT token generation & caching
├── api/
│ ├── client.ts # HTTP client with retry logic
│ └── types.ts # TypeScript interfaces
├── tools/
│ ├── index.ts # Tool registry
│ ├── apps.tools.ts
│ ├── versions.tools.ts
│ ├── localizations.tools.ts
│ ├── app-info.tools.ts
│ ├── beta.tools.ts
│ ├── screenshots.tools.ts
│ ├── bundle-ids.tools.ts
│ ├── devices.tools.ts
│ ├── users.tools.ts
│ ├── builds.tools.ts
│ └── categories.tools.ts
└── utils/
├── errors.ts # Error classes with redaction
└── validation.ts # Zod schemasRunning Locally
# Development mode with auto-reload
npm run dev
# Or run the built version
npm startContributing
Fork the repository
Create a feature branch:
git checkout -b feature/my-featureMake your changes and add tests
Run
npm testandnpm run lintSubmit a pull request
License
MIT License - see LICENSE for details.
Links
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/SardorbekR/appstore-connect-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server