mcp-appstore-connect

mcp-appstore-connect

Enables AI assistants to manage Apple App Store Connect operations including app management, TestFlight, analytics, reviews, subscriptions, and more through 54 tools.

Category
Visit Server

README

MCP App Store Connect

npm version License: MIT

An MCP (Model Context Protocol) server for Apple's App Store Connect API. This server enables AI assistants to manage iOS/macOS apps, TestFlight, analytics, reviews, subscriptions, and more.

54 tools available for comprehensive App Store Connect automation.

Features

  • App Management: List apps, get app details, view app versions
  • TestFlight: Manage builds, beta testers, and beta groups
  • Customer Reviews: List reviews, respond to reviews
  • Analytics: Access sales reports, finance reports, and analytics data
  • Version Management: Create versions, update metadata, submit for review
  • Subscriptions & IAP: Manage subscription groups, in-app purchases, and pricing
  • Metadata Management: Update app descriptions, keywords, what's new, app name, subtitle, privacy policy
  • Build Management: Set builds for versions, submit for beta review, manage beta localizations
  • App Review: Configure review details, age ratings, and phased releases
  • Pricing & Availability: Set app pricing, categories, and territory availability

Prerequisites

  1. Apple Developer Account with App Store Connect access
  2. API Key from App Store Connect:
    • Go to App Store Connect
    • Navigate to Users and Access > Integrations > App Store Connect API
    • Click Generate API Key (requires Admin role)
    • Select Admin or App Manager access
    • Download the .p8 private key file (you can only download it once!)
    • Note your Issuer ID and Key ID

Required Environment Variables

Variable Description Required
APP_STORE_ISSUER_ID Your Issuer ID from App Store Connect (found in Users and Access > Integrations) Yes
APP_STORE_KEY_ID The Key ID of your API key Yes
APP_STORE_PRIVATE_KEY Contents of your .p8 file with newlines as \n One of these
APP_STORE_PRIVATE_KEY_PATH Absolute path to your .p8 private key file One of these

Installation & Setup

Claude Code

Add to your Claude Code MCP settings:

Via CLI:

claude mcp add-json appstore-connect '{
  "command": "npx",
  "args": ["-y", "mcp-appstore-connect"],
  "env": {
    "APP_STORE_ISSUER_ID": "your-issuer-id",
    "APP_STORE_KEY_ID": "your-key-id",
    "APP_STORE_PRIVATE_KEY_PATH": "/absolute/path/to/AuthKey_XXXXX.p8"
  }
}'

Or manually edit ~/.claude/settings.json:

{
  "mcpServers": {
    "appstore-connect": {
      "command": "npx",
      "args": ["-y", "mcp-appstore-connect"],
      "env": {
        "APP_STORE_ISSUER_ID": "your-issuer-id",
        "APP_STORE_KEY_ID": "your-key-id",
        "APP_STORE_PRIVATE_KEY_PATH": "/absolute/path/to/AuthKey_XXXXX.p8"
      }
    }
  }
}

Cursor

Add to your Cursor MCP settings (~/.cursor/mcp.json):

{
  "mcpServers": {
    "appstore-connect": {
      "command": "npx",
      "args": ["-y", "mcp-appstore-connect"],
      "env": {
        "APP_STORE_ISSUER_ID": "your-issuer-id",
        "APP_STORE_KEY_ID": "your-key-id",
        "APP_STORE_PRIVATE_KEY_PATH": "/absolute/path/to/AuthKey_XXXXX.p8"
      }
    }
  }
}

Windsurf

Add to your Windsurf MCP configuration (~/.windsurf/mcp.json):

{
  "mcpServers": {
    "appstore-connect": {
      "command": "npx",
      "args": ["-y", "mcp-appstore-connect"],
      "env": {
        "APP_STORE_ISSUER_ID": "your-issuer-id",
        "APP_STORE_KEY_ID": "your-key-id",
        "APP_STORE_PRIVATE_KEY_PATH": "/absolute/path/to/AuthKey_XXXXX.p8"
      }
    }
  }
}

Claude Desktop

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "appstore-connect": {
      "command": "npx",
      "args": ["-y", "mcp-appstore-connect"],
      "env": {
        "APP_STORE_ISSUER_ID": "your-issuer-id",
        "APP_STORE_KEY_ID": "your-key-id",
        "APP_STORE_PRIVATE_KEY_PATH": "/absolute/path/to/AuthKey_XXXXX.p8"
      }
    }
  }
}

Using Private Key Content Instead of Path

If you prefer to use the key content directly (useful for CI/CD or environments without file access):

{
  "mcpServers": {
    "appstore-connect": {
      "command": "npx",
      "args": ["-y", "mcp-appstore-connect"],
      "env": {
        "APP_STORE_ISSUER_ID": "your-issuer-id",
        "APP_STORE_KEY_ID": "your-key-id",
        "APP_STORE_PRIVATE_KEY": "-----BEGIN PRIVATE KEY-----\nMIGT...your-key-content...\n-----END PRIVATE KEY-----"
      }
    }
  }
}

Install from Source

git clone https://github.com/ahmetsina/mcp-appstore-connect.git
cd mcp-appstore-connect
npm install
npm run build

Then use the local path in your MCP config:

{
  "mcpServers": {
    "appstore-connect": {
      "command": "node",
      "args": ["/path/to/mcp-appstore-connect/dist/index.js"],
      "env": {
        "APP_STORE_ISSUER_ID": "your-issuer-id",
        "APP_STORE_KEY_ID": "your-key-id",
        "APP_STORE_PRIVATE_KEY_PATH": "/absolute/path/to/AuthKey_XXXXX.p8"
      }
    }
  }
}

Available Tools

Apps (3 tools)

Tool Description
list_apps List all apps in your account
get_app Get detailed app information
get_app_versions List app versions

TestFlight (6 tools)

Tool Description
list_builds List TestFlight builds
get_build Get build details
list_beta_testers List beta testers
add_beta_tester Add tester to beta group
remove_beta_tester Remove a beta tester
list_beta_groups List beta groups

Reviews (4 tools)

Tool Description
list_reviews Get customer reviews
get_review Get specific review
respond_to_review Reply to a review
delete_review_response Delete a response

Analytics (5 tools)

Tool Description
list_analytics_report_requests List analytics requests
create_analytics_report_request Create analytics request
list_analytics_reports List available reports
get_sales_reports_info Sales report info
get_finance_reports_info Finance report info

Versions (5 tools)

Tool Description
create_app_version Create new version
update_app_version Update version metadata
submit_for_review Submit for App Store review
get_app_store_state Check review status
get_version_localization Get localization info

Subscriptions & IAP (6 tools)

Tool Description
list_subscription_groups List subscription groups
list_subscriptions List subscriptions
get_subscription Get subscription details
list_in_app_purchases List IAPs
get_in_app_purchase Get IAP details
get_subscription_prices Get pricing info

Metadata (6 tools)

Tool Description
update_version_localization Update description, keywords, what's new, promotional text, URLs
create_version_localization Create localization for a new language
get_app_info Get app info ID for app-level localizations
list_app_info_localizations List localizations (name, subtitle, privacy policy)
update_app_info_localization Update app name, subtitle, privacy policy
create_app_info_localization Create app info localization for new language

Build Management (9 tools)

Tool Description
update_build Update build attributes (export compliance)
set_build_for_version Associate a build with an App Store version
submit_build_for_beta_review Submit build for TestFlight beta review
get_beta_review_status Get beta app review submission status
list_beta_build_localizations List "What to Test" notes
update_beta_build_localization Update "What to Test" notes
create_beta_build_localization Create "What to Test" for new locale
add_build_to_beta_group Add build to TestFlight group
remove_build_from_beta_group Remove build from beta group

App Review & Submission (9 tools)

Tool Description
get_app_store_review_detail Get review details (contact, demo account, notes)
update_app_store_review_detail Update review details for submission
create_app_store_review_detail Create review details for a version
get_age_rating_declaration Get age rating settings
update_age_rating_declaration Update age rating content declarations
get_phased_release Get phased release status
create_phased_release Create phased release (gradual rollout)
update_phased_release Pause, resume, or complete phased release
delete_phased_release Delete phased release configuration

Pricing & Categories (8 tools)

Tool Description
list_app_categories List available App Store categories
update_app_categories Update app's primary/secondary categories
list_territories List all territories with currency codes
list_app_price_points List price points for an app in a territory
get_app_price_schedule Get current price schedule
set_app_price_schedule Set app pricing
get_app_availability Get territories where app is available
set_app_availability Set app availability by territory

Resources

The server also exposes MCP resources:

  • appstore://apps - List of all apps
  • appstore://apps/{appId} - Specific app details
  • appstore://apps/{appId}/reviews - App reviews

Rate Limits

The App Store Connect API has rate limits:

  • ~3,600 requests per hour
  • ~300 requests per minute

The server automatically handles rate limiting with:

  • Rate limit header parsing
  • Exponential backoff on 429 errors
  • Warning logs when approaching limits

Error Handling

The server provides detailed error messages for:

  • Authentication failures (invalid credentials)
  • Rate limit exceeded
  • Invalid requests (400 errors)
  • Server errors (5xx with retry)

Development

# Run in development mode
npm run dev

# Type check
npm run typecheck

# Run tests
npm test

# Lint
npm run lint

# Build for production
npm run build

Troubleshooting

"Missing APP_STORE_ISSUER_ID" Error

Make sure all required environment variables are set in your MCP configuration. The path to your .p8 file must be an absolute path.

"Authentication failed" Error

  • Verify your Issuer ID and Key ID are correct
  • Ensure your API key has the required permissions (Admin or App Manager)
  • Check that your .p8 file is valid and hasn't been modified

"Rate limit exceeded" Error

The server will automatically retry with exponential backoff. If you consistently hit rate limits, reduce the frequency of your requests.

License

MIT

Author

Ahmet Sina Ustem (@ahmetsina)

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured