Apple Store Connect
Apple App Store Connect - MCP server for Xcode Cloud operations
Ask AI about Apple Store Connect
Powered by Claude Β· Grounded in docs
I know everything about Apple Store Connect. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Apple Store Connect
MCP server for the Apple App Store Connect API β Xcode Cloud CI, app management, customer reviews, and sales reports.
Works with Claude Code, Cursor, Windsurf, and any MCP-compatible client.
How it works
sequenceDiagram
participant C as MCP Client<br/>(Claude Code, Cursorβ¦)
participant S as asc-mcp
participant A as App Store Connect API
C->>S: initialize (stdio)
S-->>C: serverInfo + capabilities
C->>S: tools/list
S-->>C: 11 tools with JSON Schema
C->>S: tools/call list_products
S->>S: generate JWT (ES256, cached 15m)
S->>A: GET /v1/ciProducts
A-->>S: JSON:API response
S-->>C: pretty JSON result
Architecture
graph TD
Client["MCP Client<br/>(Claude Code / Cursor / Windsurf)"]
Server["AscMcpServer<br/>tools.rs β rmcp #[tool_router]"]
HttpClient["AscClient<br/>client.rs + client_endpoints.rs"]
Auth["Credentials<br/>auth.rs β ES256 JWT cache"]
Models["models/<br/>JSON:API types"]
API["App Store Connect API v1<br/>api.appstoreconnect.apple.com"]
Client -->|stdio MCP protocol| Server
Server --> HttpClient
HttpClient --> Auth
HttpClient --> Models
HttpClient -->|HTTPS| API
Features
- Xcode Cloud CI/CD β list products, workflows, build runs, actions; trigger builds
- App management β list and inspect apps
- Customer reviews β fetch with full auto-pagination
- Sales reports β download and parse gzip-compressed TSV reports
- JWT auth β ES256 tokens generated and cached for 15 minutes
- Rate-limit handling β automatic retry with
Retry-Afterrespect (3 attempts) - Zero config β three env vars and you're running
Installation
cargo install menot-you-mcp-asc
Or via npm (runs native binary):
npx @menot-you/mcp-asc
Or via pip:
pip install menot-you-mcp-asc
Or build from source:
git clone https://github.com/menot-you/apple-store-connect
cd apple-store-connect
cargo install --path .
Configuration
Generate an API key at App Store Connect β Users and Access β Integrations β App Store Connect API.
| Variable | Description |
|---|---|
ASC_KEY_ID | Key ID shown in App Store Connect |
ASC_ISSUER_ID | Issuer ID shown at the top of the API keys page |
ASC_PRIVATE_KEY_PATH | Path to the .p8 file downloaded from App Store Connect |
Usage
Claude Code
Add to ~/.claude/claude_desktop_config.json:
{
"mcpServers": {
"asc-mcp": {
"command": "asc-mcp",
"env": {
"ASC_KEY_ID": "YOUR_KEY_ID",
"ASC_ISSUER_ID": "YOUR_ISSUER_ID",
"ASC_PRIVATE_KEY_PATH": "/path/to/AuthKey_XXXX.p8"
}
}
}
}
Cursor / Windsurf / other MCP clients
Same structure β add to your client's MCP server config file.
Available Tools
Xcode Cloud
graph LR
list_products --> get_product
get_product --> list_workflows
list_workflows --> list_build_runs
list_workflows --> start_build
list_build_runs --> get_build_run
get_build_run --> list_build_actions
| Tool | Parameters | Description |
|---|---|---|
list_products | β | List all Xcode Cloud CI products |
get_product | product_id | Get details of a specific CI product |
list_workflows | product_id | List workflows for a CI product |
list_build_runs | workflow_id | List build runs for a workflow |
get_build_run | build_run_id | Get details of a specific build run |
start_build | workflow_id, git_reference_id | Trigger a new build |
list_build_actions | build_run_id | List actions inside a build run |
Apps & Reviews
| Tool | Parameters | Description |
|---|---|---|
list_apps | β | List all apps in App Store Connect |
get_app | app_id | Get details of a specific app |
list_customer_reviews | app_id | List customer reviews for an app |
Sales Reports
| Tool | Parameters | Description |
|---|---|---|
get_sales_report | vendor_number, report_type, report_sub_type, frequency, report_date | Download and parse a sales report |
report_type values: SALES, SUBSCRIPTION, SUBSCRIPTION_EVENT
frequency values: DAILY, WEEKLY, MONTHLY, YEARLY
report_date format: YYYY-MM-DD
Token lifecycle
stateDiagram-v2
[*] --> NoToken
NoToken --> Generating: first request
Generating --> Cached: JWT signed (ES256)
Cached --> Cached: elapsed < 15m β reuse
Cached --> Generating: elapsed β₯ 15m β refresh
Apple allows 20-minute tokens; this server uses 15-minute TTL for a 5-minute clock-skew buffer.
Development
cargo test # 47 tests, no credentials needed
cargo clippy -- -D warnings
cargo fmt --check
cargo doc --no-deps
Tests use wiremock for real HTTP-level mocking β no Apple account required.
See CONTRIBUTING.md for the full guide and ARCHITECTURE.md for the design walkthrough.
License
AGPL-3.0-or-later β see the LICENSE file for details.
