Skip to main content
Glama
App Store Connect MCP Server

App Store Connect MCP Server

by yunyang088

App Store Connect MCP Server

A Model Context Protocol server for the App Store Connect API. It lets AI assistants manage apps, versions, localizations, screenshots, creative assets, in-app purchases, pricing and availability, App Review details, TestFlight, bundle IDs, devices, users, and analytics reports.

npm

Forked from JoshuaRileyDev/app-store-connect-mcp-server (archived).

Setup

Create an API key in App Store Connect → Users and Access → Integrations, download the .p8 file, and note the Key ID and Issuer ID.

Add the server to your MCP client config (e.g. claude_desktop_config.json):

{
  "mcpServers": {
    "app-store-connect": {
      "command": "npx",
      "args": ["-y", "@yunyang088/app-store-connect-mcp-server"],
      "env": {
        "APP_STORE_CONNECT_KEY_ID": "YOUR_KEY_ID",
        "APP_STORE_CONNECT_ISSUER_ID": "YOUR_ISSUER_ID",
        "APP_STORE_CONNECT_P8_PATH": "/path/to/AuthKey_XXXXXXXXXX.p8",
        "APP_STORE_CONNECT_VENDOR_NUMBER": "OPTIONAL"
      }
    }
  }
}

For Claude Code:

claude mcp add app-store-connect \
  -e APP_STORE_CONNECT_KEY_ID=YOUR_KEY_ID \
  -e APP_STORE_CONNECT_ISSUER_ID=YOUR_ISSUER_ID \
  -e APP_STORE_CONNECT_P8_PATH=/path/to/AuthKey_XXXXXXXXXX.p8 \
  -- npx -y @yunyang088/app-store-connect-mcp-server

APP_STORE_CONNECT_VENDOR_NUMBER is optional. When set, the sales and finance report tools are enabled.

Related MCP server: App Store Connect MCP Server

Tools

Area

Tools

Apps

list_apps, get_app_info

Versions

create_app_store_version, list_app_store_versions, update_app_store_version, set_app_store_version_build

Version localizations

list_app_store_version_localizations, get_app_store_version_localization, create_app_store_version_localization, update_app_store_version_localization

App info localizations (name / subtitle)

list_app_info_localizations, create_app_info_localization, update_app_info_localization

Screenshots

list_app_screenshot_sets, create_app_screenshot_set, list_app_screenshots, upload_app_screenshot, delete_app_screenshot

Asset Library (iOS 27 creative assets, iPhone Duo)

get_asset_library_ref_data, list_asset_library_media, upload_asset_library_media, create_asset_placement, list_asset_placements, reorder_asset_placements, delete_asset_placement, delete_asset_library_media

In-app purchases

list_in_app_purchases, get_in_app_purchase, create_in_app_purchase, update_in_app_purchase, delete_in_app_purchase, list_in_app_purchase_versions, create_in_app_purchase_version

In-app purchase localizations

list_in_app_purchase_localizations, create_in_app_purchase_localization, update_in_app_purchase_localization, delete_in_app_purchase_localization

In-app purchase price, availability & review

list_in_app_purchase_price_points, set_in_app_purchase_price, get_in_app_purchase_price_schedule, get_in_app_purchase_availability, set_in_app_purchase_availability, upload_in_app_purchase_review_screenshot

App Review information

get_app_store_review_detail, create_app_store_review_detail, update_app_store_review_detail

Age rating & categories

get_age_rating_declaration, update_age_rating_declaration, list_app_categories, get_app_info_categories, update_app_info_categories

App price & availability

list_territories, list_app_price_points, get_app_price_schedule, set_app_price_schedule, get_app_availability, set_app_availability, update_territory_availability

TestFlight

list_beta_groups, list_group_testers, add_tester_to_group, remove_tester_from_group, list_beta_feedback_screenshots, get_beta_feedback_screenshot

Bundle IDs

list_bundle_ids, get_bundle_id_info, create_bundle_id, enable_bundle_capability, disable_bundle_capability

Devices & users

list_devices, list_users

Analytics

create_analytics_report_request, list_analytics_report_requests, list_analytics_reports, list_analytics_report_instances, list_analytics_report_segments, download_analytics_report_segment

Sales & finance (vendor number required)

download_sales_report, download_finance_report

Xcode

list_schemes

Notes:

  • upload_app_screenshot handles the full reserve → upload → commit flow for a local PNG.

  • create_app_screenshot_set expects display types with the APP_ prefix, e.g. APP_IPHONE_67.

  • Asset Library flow: upload_asset_library_media (reserve → upload → commit → wait for processing) → create_asset_placement on a version localization.

    • Product page header: PRODUCT_PAGE_HEADER_ASSET, 21:9 3840×1646 PNG. Search results: APP_STORE_SEARCH_RESULTS_ASSET, 3:2 up to 3840×2560. A 16:9 5244×2950 PNG universal asset fits both. Both use placement group DEFAULT_PROFILE, one per localization; upload with category CREATIVE_ASSETS.

    • iPhone Duo screenshots have no legacy screenshotDisplayType; upload with category APP_SCREENSHOTS_AND_PREVIEWS and place as APP_SCREENSHOT in group IPHONE_DUO_PROFILE (2853×2007 / 2034×1398, or portrait).

    • get_asset_library_ref_data returns the live specs and placement groups.

  • When a new version is being prepared, the app has two app infos (live and editable). App info localization tools now resolve the editable one, so name/subtitle edits go to the version being prepared.

  • In-app purchase flow: create_in_app_purchase → create_in_app_purchase_localization per locale → list_in_app_purchase_price_points (e.g. territory: USA, customerPrice: "0.99") → set_in_app_purchase_price → set_in_app_purchase_availability → upload_in_app_purchase_review_screenshot.

    • Since API 4.4.1, localizations belong to an in-app purchase version. A new in-app purchase comes with version 1 in PREPARE_FOR_SUBMISSION; given only inAppPurchaseId, the localization tool posts to that draft version (v2) and falls back to the deprecated v1 endpoint if there is none. Update/delete try v2 first and fall back to v1 on 404.

    • Price and availability tools replace the whole schedule / territory list. excludeTerritoryIds: ["CHN"] selects every territory except mainland China. Territory IDs in both lists are checked, so a typo such as CN is rejected instead of being ignored.

    • The first in-app purchase of an app has to be submitted together with an app version on the App Store Connect website; there is no submission tool here.

  • set_app_availability creates the app's availability once (POST /v2/appAvailabilities, every territory listed with available true/false). After it exists, use update_territory_availability with IDs from get_app_availability.

  • set_app_price_schedule with free: true looks up the 0.00 price point in the base territory (default USA).

  • Age rating and category tools resolve the app's editable app info when given appId.

  • Analytics flow: request → reports → instances → segments → download. Only one ONGOING request is allowed per app.

Development

git clone https://github.com/yunyang088/app-store-connect-mcp-server.git
cd app-store-connect-mcp-server
npm install
npm run build   # compile TypeScript to dist/
npm start       # run the server on stdio

License

MIT

Available Tools

36 tools
add_tester_to_groupB

Add a new tester to a beta group

Inputs: email (required), groupId (required), lastName (required), firstName (required).

create_analytics_report_requestC

Create a new analytics report request for an app

Inputs: appId (required), accessType.

create_app_info_localizationA

Create a new app info localization (localized app name/subtitle). Provide either appInfoId directly, or appId to resolve the current (non-REPLACED) app info automatically.

Inputs: locale (required), name, appId, subtitle, +4 more.

create_app_screenshot_setA

Create a new screenshot set for an app store version localization. The screenshotDisplayType must carry the APP_ prefix, e.g. APP_IPHONE_65, APP_IPHONE_67, APP_IPAD_PRO_3GEN_129 (a bare value like IPHONE_65 is rejected with a 409 error).

Inputs: screenshotDisplayType (required), appStoreVersionLocalizationId (required).

create_app_store_versionB

Create a new app store version for an app

Inputs: appId (required), platform (required), versionString (required), buildId, +3 more.

create_app_store_version_localizationB

Create a new localization for an app store version (e.g. to add a new language)

Inputs: locale (required), appStoreVersionId (required), keywords, whatsNew, +4 more.

create_bundle_idB

Register a new bundle ID for app development

Inputs: name (required), platform (required), identifier (required), seedId.

delete_app_screenshotC

Delete a screenshot from a screenshot set

Inputs: appScreenshotId (required).

disable_bundle_capabilityB

Disable a capability for a bundle ID

Inputs: capabilityId (required).

download_analytics_report_segmentB

Download an analytics report segment and return it as TSV text (gzip is decompressed)

Inputs: segmentUrl (required), maxChars.

enable_bundle_capabilityB

Enable a capability for a bundle ID

Inputs: bundleIdId (required), capabilityType (required), settings.

get_app_infoB

Get detailed information about a specific app

Inputs: appId (required), include.

get_app_store_version_localizationA

Get detailed information about a specific app store version localization

Inputs: localizationId (required).

get_beta_feedback_screenshotA

Get detailed information about a specific beta feedback screenshot submission. By default, downloads and returns the screenshot image.

Inputs: feedbackId (required), includeBuilds, includeTesters, downloadScreenshot.

get_bundle_id_infoB

Get detailed information about a specific bundle ID

Inputs: bundleIdId (required), fields, include.

list_analytics_report_instancesA

List generated instances (daily/weekly/monthly files) of an analytics report. Flow: request -> reports -> instances -> segments -> download

Inputs: reportId (required), limit, granularity, processingDate.

list_analytics_report_requestsA

List existing analytics report requests for an app (check before creating; only one ONGOING request is allowed per app)

Inputs: appId (required).

list_analytics_reportsC

Get available analytics reports for a specific report request

Inputs: reportRequestId (required), limit, filter.

list_analytics_report_segmentsB

Get segments of an analytics report instance (contains download URLs)

Inputs: instanceId (required), limit.

list_app_info_localizationsA

List all app info localizations (localized app name/subtitle) for an app. Resolves the current (non-REPLACED) app info automatically.

Inputs: appId (required), limit.

list_appsA

Get a list of all apps in App Store Connect

Inputs: limit.

list_app_screenshotsB

List all screenshots in a screenshot set

Inputs: appScreenshotSetId (required), limit.

list_app_screenshot_setsB

List all screenshot sets for an app store version localization

Inputs: appStoreVersionLocalizationId (required), limit.

list_app_store_version_localizationsB

Get all localizations for a specific app store version

Inputs: appStoreVersionId (required), limit.

list_app_store_versionsB

Get all app store versions for a specific app

Inputs: appId (required), limit, filter.

list_beta_feedback_screenshotsB

List all beta feedback screenshot submissions for an app. This includes feedback with screenshots, device information, and tester comments. You can identify the app using either appId or bundleId.

Inputs: sort, appId, limit, buildId, +8 more.

list_beta_groupsA

Get a list of all beta groups (internal and external)

Inputs: limit.

list_bundle_idsB

Find and list bundle IDs that are registered to your team

Inputs: sort, limit, filter, include.

list_devicesC

Get a list of all devices registered to your team

Inputs: sort, limit, fields, filter.

list_group_testersB

Get a list of all testers in a specific beta group

Inputs: groupId (required), limit.

list_schemesB

List all available schemes in an Xcode project or workspace

Inputs: projectPath (required).

list_usersB

Get a list of all users registered on your App Store Connect team

Inputs: sort, limit, filter, include.

remove_tester_from_groupB

Remove a tester from a beta group

Inputs: groupId (required), testerId (required).

update_app_info_localizationB

Update a specific field in an app info localization (localized app name/subtitle)

Inputs: field (required), value (required), appInfoLocalizationId (required).

update_app_store_version_localizationB

Update a specific field in an app store version localization

Inputs: field (required), value (required), localizationId (required).

upload_app_screenshotB

Upload a local PNG file to a screenshot set. Runs the full three-step flow: reserve the screenshot, upload the file chunks, then commit with the md5 checksum.

Inputs: filePath (required), appScreenshotSetId (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 36 tools

    Disambiguation4/5

    Most tools target distinct resources and actions, with clear descriptions separating similar-sounding tools like list_app_info_localizations and list_app_store_version_localizations. However, the presence of multiple localization and analytics tools with similar names could cause misselection without careful reading.

    Naming Consistency5/5

    All tool names follow a consistent snake_case verb_noun pattern (e.g., list_apps, create_bundle_id, update_app_info_localization). Verbs are standard and used uniformly across resources.

    Tool Count3/5

    With 36 tools, the set is heavy for an MCP server, though the breadth of App Store Connect resources justifies some granularity. Many operations are resource-specific and could potentially be consolidated, making the count borderline excessive.

    Completeness3/5

    The server covers many resources but lacks full CRUD for several key areas: no app creation/update/delete, no beta group management (only tester add/remove), no device registration, and no user management. These notable gaps will limit agents in end-to-end workflows.

    Related MCP Connectors

    Related MCP Servers