--- title: appnova-app-store-connect-mcp emoji: ๐ŸŽ colorFrom: gray colorTo: red sdk: docker app_port: 7860 pinned: false --- # appnova-app-store-connect-mcp **App Store Connect MCP server for Claude** โ€” manage your iOS app's entire lifecycle with natural language. No Docker, no Python, no pip. Just add 4 lines to your Claude config and start talking to your App Store. 48 tools ยท 14 categories ยท Hosted on Hugging Face Spaces ยท Free --- ## Quick Start โ€” Zero Setup (Recommended) No installation required. The server is already running on Hugging Face Spaces. > ๐Ÿ“– **Full installation guide with screenshots and troubleshooting:** [docs/installation.md](docs/installation.md) ### 1. Get your App Store Connect API credentials Go to [App Store Connect โ†’ Users and Access โ†’ Integrations](https://appstoreconnect.apple.com/access/integrations/api) and create an API key with **Admin** or **App Manager** role. You'll need: - **Issuer ID** โ€” shown at the top of the API Keys page - **Key ID** โ€” shown next to your key - **Private key** โ€” download the `.p8` file (only downloadable once) - **Vendor Number** โ€” from [Payments and Financial Reports](https://appstoreconnect.apple.com/finance/reports/overview) ### 2. Add to your Claude client #### Claude Desktop Edit `~/Library/Application Support/Claude/claude_desktop_config.json`: ```json { "mcpServers": { "appstore": { "url": "https://haikuku-appnova-app-store-connect-mcp.hf.space/mcp", "headers": { "x-appstore-issuer-id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "x-appstore-key-id": "XXXXXXXXXX", "x-appstore-private-key": "-----BEGIN PRIVATE KEY-----\\nMIGH...\\n-----END PRIVATE KEY-----", "x-appstore-vendor-number": "12345678" } } } } ``` #### Claude Code Add to `.mcp.json` in your project root: ```json { "mcpServers": { "appstore": { "type": "http", "url": "https://haikuku-appnova-app-store-connect-mcp.hf.space/mcp", "headers": { "x-appstore-issuer-id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "x-appstore-key-id": "XXXXXXXXXX", "x-appstore-private-key": "-----BEGIN PRIVATE KEY-----\\nMIGH...\\n-----END PRIVATE KEY-----", "x-appstore-vendor-number": "12345678" } } } } ``` ### 3. Restart your Claude client That's it. Ask Claude: *"List my apps"* to verify the connection. --- ## How to format the private key Open your `.p8` file โ€” it looks like this: ``` -----BEGIN PRIVATE KEY----- MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg... -----END PRIVATE KEY----- ``` **Important:** In the JSON config you must use `\\n` (two characters: backslash + n) instead of real line breaks. Using a single `\n` creates an actual newline which breaks HTTP headers. Use this one-liner to get the correctly formatted value: ```bash awk '{printf "%s\\n", $0}' AuthKey_XXXXXXXXXX.p8 | sed '$ s/\\n$//' ``` Paste the output directly as the `x-appstore-private-key` value. --- ## Optional: Pin a default app Add `x-appstore-app-id` to skip calling `select_app` every session: ```json "headers": { "x-appstore-issuer-id": "...", "x-appstore-key-id": "...", "x-appstore-private-key": "...", "x-appstore-vendor-number": "...", "x-appstore-app-id": "6502225088" } ``` Use either the numeric App Store ID or bundle ID (e.g. `com.example.yourapp`). --- ## Security Your credentials are sent as HTTP headers directly to the server and used exclusively to sign JWT tokens for Apple's API. They are **not logged, not stored, and not shared**. Each request is fully isolated โ€” credentials from one user never touch another user's session. The server is open source: [github.com/alperduzgun/appnova-app-store-connect-mcp](https://github.com/alperduzgun/appnova-app-store-connect-mcp) If you prefer to host it yourself, see the [Self-Hosting](#self-hosting) section below. --- ## What You Can Do ### App Store Optimization (ASO) | Tool | Description | |------|-------------| | `get_locales` | List all localizations with IDs โ€” lightweight index, call first | | `get_locale_metadata` | Full metadata for one locale: name, subtitle, keywords, description, what's new | | `update_info` | Update app name and/or subtitle (always editable, any version state) | | `update_version` | Update keywords, description, what's new (requires PREPARE_FOR_SUBMISSION) | | `list_custom_product_pages` | List all Custom Product Pages with version state and visibility | | `get_custom_product_page` | Full CPP detail including per-locale promotional text | ### Reviews & Ratings | Tool | Description | |------|-------------| | `get_reviews` | Fetch reviews sorted by newest; filter by star rating (1โ€“5) | | `get_ratings` | Average rating, total count, sample size | | `respond_to_review` | Post a new developer response | | `update_review_response` | Edit an existing response in-place (preserves timestamp) | | `delete_review_response` | Delete a response before re-posting | ### Analytics & Sales | Tool | Description | |------|-------------| | `get_analytics` | Impressions, page views, app units, conversion rate, sessions, crashes โ€” daily breakdown up to 365 days | | `get_sales` | Downloads, redownloads, updates, IAP, subscriptions, revenue โ€” daily breakdown up to 365 days | ### Finance Reports | Tool | Description | |------|-------------| | `get_finance_report` | Monthly proceeds by territory and currency for a specific month | | `get_finance_summary` | Aggregated proceeds across the last N months (default 3, max 12) | ### Subscriptions | Tool | Description | |------|-------------| | `list_subscription_groups` | All subscription groups and their products | | `create_subscription_group` | Create a new subscription group | | `create_subscription` | Create a subscription product (weekly โ†’ yearly) | | `create_subscription_localization` | Add localized name and description to a subscription | ### In-App Purchases | Tool | Description | |------|-------------| | `list_in_app_purchases` | All IAPs: consumable, non-consumable, non-renewing | | `create_in_app_purchase` | Create a new IAP product | | `create_iap_localization` | Add localized display name and description | | `delete_in_app_purchase` | Delete a draft IAP | ### Pricing | Tool | Description | |------|-------------| | `get_iap_price_points` | All available price tiers for an IAP in a territory | | `set_iap_price` | Set IAP price by price point ID | | `set_iap_price_by_amount` | Set IAP price by dollar amount โ€” auto-matches tier | | `get_subscription_price_points` | All available price tiers for a subscription | | `set_subscription_price` | Set subscription price by price point ID | | `set_subscription_price_by_amount` | Set subscription price by dollar amount โ€” auto-matches tier | ### App Versions & Submission | Tool | Description | |------|-------------| | `list_app_versions` | Recent versions with state (READY_FOR_SALE, IN_REVIEW, etc.) | | `create_app_version` | Create a new version in PREPARE_FOR_SUBMISSION state | | `submit_for_review` | Submit a version for App Review | | `cancel_submission` | Withdraw an in-progress submission | ### Phased Release | Tool | Description | |------|-------------| | `get_phased_release` | Current phased rollout status for a version | | `create_phased_release` | Enable 7-day phased rollout (1%โ†’2%โ†’5%โ†’10%โ†’20%โ†’50%โ†’100%) | | `update_phased_release` | Pause, resume, or complete rollout immediately | ### TestFlight | Tool | Description | |------|-------------| | `list_builds` | Recent builds with processingState, version, expiration | | `list_beta_groups` | All beta groups with public link info | | `add_beta_tester` | Invite a tester to a beta group | | `remove_beta_tester` | Remove a tester from a beta group | ### In-App Events | Tool | Description | |------|-------------| | `list_app_events` | All promotional events with state (DRAFT/LIVE/ARCHIVED) and localizations | ### Bundle ID Capabilities | Tool | Description | |------|-------------| | `get_bundle_id_info` | Numeric ID, platform, name, and seed ID for a bundle identifier | | `list_bundle_id_capabilities` | All active capabilities (Sign in with Apple, Push, IAP, etc.) | | `enable_bundle_id_capability` | Enable a capability โ€” idempotent, safe to call repeatedly | | `disable_bundle_id_capability` | Remove a capability by resource ID | ### App Selection | Tool | Description | |------|-------------| | `list_apps` | All apps in your account | | `select_app` | Set the active app by numeric ID or bundle ID | | `get_active_app` | Show the currently selected app | --- ## Example Workflows **ASO audit across all locales:** ``` "Get all my app's locale metadata and tell me which ones are missing keywords or have subtitles under 20 characters" ``` **Review triage:** ``` "Show me all 1-star reviews from the last 50 and draft a response for each one that mentions a crash" ``` **Revenue summary:** ``` "Give me a finance summary for the last 3 months and compare monthly trends" ``` **Release workflow:** ``` "Create a new 2.5.0 version, update the what's new text for en-US and tr, then submit for review" ``` **Capability check:** ``` "List all active capabilities for com.example.myapp and confirm Sign in with Apple is enabled" ``` --- ## Requirements - App Store Connect API key with **Admin** or **App Manager** role - Claude Desktop 0.10+ (or any MCP client that supports HTTP transport with custom headers) --- ## Self-Hosting Want to run the server yourself? Full source code and setup instructions at [github.com/alperduzgun/appnova-app-store-connect-mcp](https://github.com/alperduzgun/appnova-app-store-connect-mcp). --- ## License MIT