# appstore-connect-mcp

Wires your AI assistant into the App Store Connect API: TestFlight builds, reviews, metadata and sales numbers without leaving the editor.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 52
- Author: ryaker
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/ryaker/appstore-connect-mcp
- Updated: 2026-08-28
- HTML: https://affpapa.org/en/nevibecode/mcp/appstore-connect-mcp

## What it does

The server runs through `npx`, so there is nothing to clone or compile. Its tools cover the App Store Connect API: list apps and version states, edit localizations and release notes, pull TestFlight builds, manage beta groups and testers, read customer reviews and draft replies, fetch download and revenue metrics by region.

Two auth paths exist. The local one signs requests with an API key, so you need `APPLE_KEY_ID`, `APPLE_ISSUER_ID` and `APPLE_PRIVATE_KEY` holding the contents of your `.p8` file. Generate that key in App Store Connect under Users and Access → Integrations → App Store Connect API, with an Admin or App Manager role. No `.p8` key, no server — the signature depends on it.

The optional `APPLE_BUNDLE_ID` and `APPLE_APP_STORE_ID` narrow every tool to a single app. Set `OAUTH_ENABLED` when you host the server remotely and authenticate through OAuth 2.0.

## Requirements
- Needs: Node.js (commands run via npx)
- Environment variables: `APPLE_KEY_ID`, `APPLE_ISSUER_ID`, `APPLE_PRIVATE_KEY`, `APPLE_BUNDLE_ID`, `APPLE_APP_STORE_ID`, `OAUTH_ENABLED`, `OAUTH_ISSUER`, `OAUTH_AUDIENCE`, `OAUTH_JWKS_URI`, `SERVER_URL` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env APPLE_KEY_ID=<APPLE_KEY_ID> --env APPLE_ISSUER_ID=<APPLE_ISSUER_ID> --env APPLE_PRIVATE_KEY=<APPLE_PRIVATE_KEY> --env APPLE_BUNDLE_ID=<APPLE_BUNDLE_ID> --env APPLE_APP_STORE_ID=<APPLE_APP_STORE_ID> --transport stdio appstore-connect-mcp -- npx -y @ryaker/appstore-connect-mcp
```
Replace <…> with your own values. 5 more environment variables are in the server README

### Codex

**Platform CLI**
```bash
codex mcp add appstore-connect-mcp --env APPLE_KEY_ID=<APPLE_KEY_ID> --env APPLE_ISSUER_ID=<APPLE_ISSUER_ID> --env APPLE_PRIVATE_KEY=<APPLE_PRIVATE_KEY> --env APPLE_BUNDLE_ID=<APPLE_BUNDLE_ID> --env APPLE_APP_STORE_ID=<APPLE_APP_STORE_ID> -- npx -y @ryaker/appstore-connect-mcp
```
Replace <…> with your own values. 5 more environment variables are in the server README

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "appstore-connect-mcp": {
            "command": "npx",
            "args": [
                "-y",
                "@ryaker/appstore-connect-mcp"
            ],
            "env": {
                "APPLE_KEY_ID": "<APPLE_KEY_ID>",
                "APPLE_ISSUER_ID": "<APPLE_ISSUER_ID>",
                "APPLE_PRIVATE_KEY": "<APPLE_PRIVATE_KEY>",
                "APPLE_BUNDLE_ID": "<APPLE_BUNDLE_ID>",
                "APPLE_APP_STORE_ID": "<APPLE_APP_STORE_ID>"
            }
        }
    }
}
```
Replace <…> with your own values. 5 more environment variables are in the server README

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "appstore-connect-mcp": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "@ryaker/appstore-connect-mcp"
            ],
            "env": {
                "APPLE_KEY_ID": "<APPLE_KEY_ID>",
                "APPLE_ISSUER_ID": "<APPLE_ISSUER_ID>",
                "APPLE_PRIVATE_KEY": "<APPLE_PRIVATE_KEY>",
                "APPLE_BUNDLE_ID": "<APPLE_BUNDLE_ID>",
                "APPLE_APP_STORE_ID": "<APPLE_APP_STORE_ID>"
            }
        }
    }
}
```
Replace <…> with your own values. 5 more environment variables are in the server README

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e APPLE_KEY_ID=<APPLE_KEY_ID> -e APPLE_ISSUER_ID=<APPLE_ISSUER_ID> -e APPLE_PRIVATE_KEY=<APPLE_PRIVATE_KEY> -e APPLE_BUNDLE_ID=<APPLE_BUNDLE_ID> -e APPLE_APP_STORE_ID=<APPLE_APP_STORE_ID> appstore-connect-mcp npx -y @ryaker/appstore-connect-mcp
```
Replace <…> with your own values. 5 more environment variables are in the server README

## When to use it
- check processing status of the newest TestFlight builds
- pull complaints out of recent one-star reviews
- fix release notes for one specific locale
- add a tester to a beta group
- export download and revenue trends by region

## Example prompts
- List my latest TestFlight builds and where each one sits in processing
- Gather the recent one-star reviews and summarize what users complain about
- Rewrite the release notes for version 1.2.0 in English (US)

## Similar
- [mobile-mcp](https://affpapa.org/en/nevibecode/mcp/mobile-mcp.md) — MCP server · ★ 9946
- [mobilerun](https://affpapa.org/en/nevibecode/mcp/mobilerun.md) — MCP server · ★ 9751
- [e2e](https://affpapa.org/en/nevibecode/mcp/e2e.md) — MCP server · ★ 11912
- [XcodeBuildMCP](https://affpapa.org/en/nevibecode/mcp/xcodebuildmcp.md) — MCP server · ★ 6505
- [ShipSwift](https://affpapa.org/en/nevibecode/mcp/shipswift.md) — MCP server · ★ 3244
- [agent-device](https://affpapa.org/en/nevibecode/mcp/agent-device.md) — MCP server · ★ 5149

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
