Skip to main content
Glama
imfaisii

App Store Connect MCP Server

by imfaisii

App Store Connect MCP Server

Полный API App Store Connect в виде MCP-сервера. 1 263 операции, сгенерированные напрямую из официальной спецификации OpenAPI от Apple, доступные в Claude Code, Claude Desktop, Cursor и любом другом клиенте Model Context Protocol через всего 4 эффективных по токенам инструмента.

CI Model Context Protocol App Store Connect API 4.4.1 1263 operations 4 MCP tools Bun TypeScript License: MIT


Что такое App Store Connect MCP server?

app-store-connect-mcp — это open source сервер Model Context Protocol (MCP) для API App Store Connect. Установите его один раз, и ваш ИИ-агент сможет читать и записывать всё, что Apple предоставляет для ваших приложений и вашего аккаунта разработчика:

Листинги и метаданные App Store · сборки TestFlight, бета-группы и тестировщики · покупки внутри приложения · автоматически продлеваемые подписки, предложения и win-back предложения · таблицы лидеров Game Center, достижения и подбор соперников · рабочие процессы и сборки Xcode Cloud · профили подготовки, сертификаты, bundle ID и устройства · отправки на ревью App Review и детали ревью · отзывы клиентов и ответы на них · цены, доступность и территории · отчёты о продажах, финансах и аналитике · пользователи, роли и приглашения · App Clips, фоновые ресурсы и альтернативное распространение.

Большинство MCP-серверов App Store Connect вручную оборачивают два-три десятка конечных точек, а затем устаревают. Этот сервер сгенерирован из опубликованной спецификации OpenAPI от Apple, поэтому покрытие охватывает всю документированную поверхность, и он остаётся актуальным одной командой bun run generate.

В этом репозитории нет учётных данных. Вы предоставляете свой собственный ключ API App Store Connect во время выполнения через переменные окружения. Ничего не встраивается, не логируется и не передаётся никуда, кроме Apple.

Содержание


Related MCP server: App Store Connect MCP

Краткий обзор

Что это

MCP-сервер для полного API App Store Connect

Версия API

App Store Connect API 4.4.1 (OpenAPI 3.0.1)

Операций в каталоге

1 263 — по одной на путь + метод

Путей API

966

Тегов ресурсов

195

Зарегистрировано MCP-инструментов

4 мета-инструмента: asc_search, asc_schema, asc_call, asc_tags

Разбивка по методам

797 GET · 176 POST · 158 PATCH · 132 DELETE

Источник истины

ZIP-файл OpenAPI от Apple, включённый в репозиторий по адресу openapi/app-store-connect.openapi.json

Аутентификация

ES256 JWT, создаваемый во время выполнения из Issuer ID + Key ID + приватного ключа .p8

Базовый URL

https://api.appstoreconnect.apple.com (можно переопределить)

Транспорт

stdio

Среда выполнения

Bun 1.1+ и @modelcontextprotocol/sdk

Лицензия

MIT


Почему 4 инструмента вместо 1 263

Регистрация каждой операции OpenAPI как отдельного MCP-инструмента выгружает 1 263 полных JSON-схемы в контекстное окно модели. Это порядка сотен тысяч токенов, сожжённых до того, как агент выполнит какую-либо реальную работу — а многие клиенты просто отказываются принимать или обрезают такой большой список инструментов.

Этот сервер держит полный каталог внутренним и предоставляет поверх него небольшой стабильный интерфейс:

asc_search  →  find operations           (names, methods, paths, tags — no schemas)
asc_schema  →  describe one operation    (full input JSON Schema + call hint)
asc_call    →  execute one operation     (real request, or _dryRun)
asc_tags    →  list resource tags        (with operation counts, to narrow search)

Агент платит ровно за ту схему, которую собирается использовать, и ни за что больше. Типичный трёхшаговый процесс стоит несколько тысяч токенов вместо нескольких сотен тысяч.

Запасной выход (только для отладки)

export ASC_EXPOSE_ALL_TOOLS=1   # also register all 1,263 operations as individual MCP tools

Оставьте эту переменную неустановленной при обычном использовании. Она существует для отладки спецификации и чрезвычайно дорога по контексту.


Четыре MCP-инструмента

Полнотекстовый поиск по operationId, имени, пути, тегам, методу и описанию. Возвращает ранжированные результаты без JSON-схем.

Параметр

Тип

Обязательный

Описание

query

string

необязательный*

Свободный текст, например "list apps", "beta testers", "sales reports", "/v1/builds"

tag

string

необязательный*

Точный фильтр по тегу OpenAPI, например Apps, Builds, BetaGroups

method

string

необязательный

GET, POST, PATCH, DELETE, PUT

limit

integer

необязательный

Максимум результатов, по умолчанию 15, максимум 50

* Как минимум один из query, tag или method.

{ "query": "list apps", "method": "GET", "limit": 5 }

asc_schema — опишите одну операцию

Возвращает полную входную JSON-схему операции, список её параметров пути, список параметров запроса и callHint, показывающий, как её вызвать.

Параметр

Тип

Обязательный

Описание

operation

string

да

OperationId или сгенерированное имя инструмента, например apps_getCollection

asc_call — выполните операцию

Параметр

Тип

Обязательный

Описание

operation

string

да

OperationId или сгенерированное имя инструмента

args

object

необязательный

Параметры пути, параметры запроса, body, _dryRun. Дополнительные свойства разрешены

_dryRun

boolean

необязательный

Разрешить метод/путь/запрос/тело без обращения к Apple

Поля пути и запроса работают как вложенные внутри args, так и как ключи верхнего уровня рядом с operation. Записи JSON:API помещаются в body.

// read
{ "operation": "apps_getCollection", "args": { "limit": 10, "fields[apps]": "name,bundleId,sku" } }

// dry run — no network call, shows the resolved request
{ "operation": "apps_getCollection", "_dryRun": true, "args": { "limit": 10 } }

// write (JSON:API document)
{
  "operation": "betaGroups_createInstance",
  "args": {
    "body": {
      "data": {
        "type": "betaGroups",
        "attributes": { "name": "Internal QA" },
        "relationships": { "app": { "data": { "type": "apps", "id": "1234567890" } } }
      }
    }
  }
}

asc_tags — ориентируйтесь внутри API

Параметр

Тип

Обязательный

Описание

limit

integer

необязательный

Максимум тегов, по умолчанию все 195, отсортированы по количеству операций

Обработка ответов

  • JSON-ответы возвращаются в разобранном виде.

  • Ответы CSV, XML и text возвращаются как текст.

  • Gzip и бинарные загрузки (финансовые отчёты, отчёты о продажах) возвращаются в base64 с encoding, contentType, byteLength и примечанием о декодировании.

  • Ответы длиной более ~120 000 символов обрезаются с подсказкой сузить filter[…], fields[…] или limit.

  • HTTP 4xx/5xx отображаются как ошибки MCP с сохранением тела ошибки Apple, чтобы агент мог прочитать строку detail от Apple и самостоятельно исправиться.


Покрытие: каждый ресурс App Store Connect

Все 1 263 операции по 195 тегам ресурсов. Количество указано как операции на тег.

Приложения, листинги и метаданные App Store — ~250 операций

Apps (86) · AppStoreVersions (30) · AppInfos (20) · AppCustomProductPageLocalizations (12) · AppStoreVersionExperiments (12) · AppStoreVersionLocalizations (12) · AppEncryptionDeclarations (8) · AppEventLocalizations (8) · AppStoreVersionExperimentTreatmentLocalizations (7) · AppCategories (6) · AppCustomProductPages (6) · AppEvents (6) · AppPreviewSets (6) · AppScreenshotSets (6) · AppStoreVersionExperimentTreatments (6) · EndUserLicenseAgreements (6) · AppCustomProductPageVersions (5) · AppInfoLocalizations (4) · AppPreviews (4) · AppScreenshots (4) · AppEventScreenshots (4) · AppEventVideoClips (4) · AccessibilityDeclarations (4) · AndroidToIosAppMappingDetails (4) · AppTags (3) · AppStoreVersionPhasedReleases (3) · AgeRatingDeclarations (1) · AppStoreVersionPromotions (1) · AppStoreVersionReleaseRequests (1) · RoutingAppCoverages (4)

TestFlight и бета-тестирование — ~90 операций

BetaGroups (21) · BetaTesters (16) · BetaAppLocalizations (7) · BetaBuildLocalizations (7) · PreReleaseVersions (6) · BetaAppReviewDetails (5) · BetaAppReviewSubmissions (5) · BetaLicenseAgreements (5) · BuildBetaDetails (5) · BetaAppClipInvocations (4) · BetaFeedbackCrashSubmissions (4) · BetaRecruitmentCriteria (3) · BetaAppClipInvocationLocalizations (3) · BetaFeedbackScreenshotSubmissions (2) · BetaCrashLogs (1) · BetaRecruitmentCriterionOptions (1) · BetaTesterInvitations (1) · BuildBetaNotifications (1)

Сборки и загрузка — ~50 операций

Builds (30) · BuildBundles (8) · BuildUploads (5) · BuildUploadFiles (3) · DiagnosticSignatures (1)

Покупки и подписки внутри приложения — ~200 операций

Subscriptions (32) · InAppPurchases (25) · SubscriptionGroups (10) · InAppPurchaseOfferCodes (9) · SubscriptionOfferCodes (9) · InAppPurchaseImages (8) · InAppPurchaseLocalizations (8) · InAppPurchasePriceSchedules (8) · InAppPurchaseVersions (8) · SubscriptionGroupLocalizations (8) · SubscriptionImages (8) · SubscriptionLocalizations (8) · SubscriptionVersions (8) · SubscriptionPlanAvailabilities (6) · SubscriptionPromotionalOffers (6) · WinBackOffers (6) · InAppPurchaseAppStoreReviewScreenshots (4) · InAppPurchaseAvailabilities (4) · InAppPurchaseOfferCodeOneTimeUseCodes (4) · SubscriptionAppStoreReviewScreenshots (4) · SubscriptionAvailabilities (4) · SubscriptionGroupVersions (4) · SubscriptionOfferCodeOneTimeUseCodes (4) · SubscriptionPricePoints (4) · InAppPurchaseOfferCodeCustomCodes (3) · SubscriptionIntroductoryOffers (3) · SubscriptionOfferCodeCustomCodes (3) · PromotedPurchases (4) · InAppPurchasePricePoints (2) · SubscriptionGracePeriods (2) · SubscriptionPrices (2) · InAppPurchaseContents (1) · InAppPurchaseSubmissions (1) · SubscriptionGroupSubmissions (1) · SubscriptionSubmissions (1) · SandboxTesters (2) · SandboxTestersClearPurchaseHistoryRequest (1)

Game Center — ~330 операций

GameCenterDetails (42) · GameCenterGroups (29) · GameCenterLeaderboardSets (27) · GameCenterLeaderboards (21) · GameCenterAchievements (19) · GameCenterAchievementLocalizations (14) · GameCenterActivities (14) · GameCenterLeaderboardLocalizations (12) · GameCenterLeaderboardSetLocalizations (12) · GameCenterMatchmakingRuleSets (11) · GameCenterMatchmakingQueues (10) · GameCenterAppVersions (9) · GameCenterAchievementImages (8) · GameCenterChallenges (8) · GameCenterLeaderboardImages (8) · GameCenterLeaderboardSetImages (8) · GameCenterLeaderboardSetMemberLocalizations (8) · GameCenterActivityVersions (7) · GameCenterActivityLocalizations (6) · GameCenterChallengeLocalizations (6) · GameCenterChallengeVersions (6) · GameCenterMatchmakingRules (6) · GameCenterEnabledVersions (5) · плюс версии достижений/таблиц лидеров/активностей/испытаний, изображения, релизы, команды подбора игроков, тесты наборов правил, отправки записей и отправки достижений игроков

Xcode Cloud (непрерывная интеграция) — ~50 операций

CiProducts (13) · CiBuildActions (9) · CiWorkflows (8) · CiBuildRuns (6) · ScmRepositories (6) · CiMacOsVersions (4) · CiXcodeVersions (4) · ScmProviders (4) · CiArtifacts (1) · CiIssues (1) · CiTestResults (1) · ScmGitReferences (1) · ScmPullRequests (1)

Сертификаты, идентификаторы и профили — ~45 операций

BundleIds (11) · Profiles (10) · Certificates (7) · MerchantIds (7) · PassTypeIds (7) · Devices (4) · BundleIdCapabilities (3)

App Review и отправки — ~20 операций

ReviewSubmissions (6) · AppStoreReviewDetails (5) · AppStoreReviewAttachments (4) · ReviewSubmissionItems (3) · AppStoreVersionSubmissions (1)

Ценообразование, доступность и территории — ~25 операций

AppPriceSchedules (8) · AppAvailabilities (4) · AppPricePoints (3) · Nominations (5) · Territories (1) · TerritoryAvailabilities (1) · EndAppAvailabilityPreOrders (1)

Отчёты и аналитика — ~15 операций

AnalyticsReportRequests (5) · AnalyticsReportInstances (3) · AnalyticsReports (3) · AnalyticsReportSegments (1) · SalesReports (1) · FinanceReports (1)

Отзывы покупателей — 6 операций

CustomerReviews (3) · CustomerReviewResponses (3)

Пользователи и доступ — ~15 операций

Users (9) · UserInvitations (6) · Actors (2)

App Clips — ~30 операций

AppClipDefaultExperiences (11) · AppClipDefaultExperienceLocalizations (6) · AppClips (5) · AppClipHeaderImages (4) · AppClipAdvancedExperienceImages (3) · AppClipAdvancedExperiences (3) · AppClipAppStoreReviewDetails (3)

Фоновые ресурсы — ~15 операций

BackgroundAssets (5) · BackgroundAssetVersions (4) · BackgroundAssetUploadFiles (3) · плюс конечные точки релизов App Store, внутреннего и внешнего бета-тестирования

Альтернативное распространение (DMA в ЕС) — ~15 операций

AlternativeDistributionPackageVersions (5) · AlternativeDistributionDomains (4) · AlternativeDistributionKeys (4) · AlternativeDistributionPackages (4) · MarketplaceWebhooks (4) · MarketplaceSearchDetails (3) · AlternativeDistributionPackageDeltas (1) · AlternativeDistributionPackageVariants (1)

Вебхуки — 8 операций

Webhooks (6) · WebhookDeliveries (1) · WebhookPings (1)

Запустите asc_tags в любой момент, чтобы получить актуальный точный список.


Требования

  • Bun версии 1.1 или новее

  • Ключ API App Store Connect: Issuer ID, Key ID и файл закрытого ключа .p8

  • MCP-клиент, поддерживающий stdio: Claude Code, Claude Desktop, Cursor, Windsurf, VS Code с MCP-расширением, Zed или ваш собственный агент


Получите ключ API App Store Connect

  1. Войдите в App Store Connect.

  2. Перейдите в Users and Access → Integrations → App Store Connect API.

  3. Нажмите +, чтобы сгенерировать ключ. Выберите наименьшую роль, покрывающую ваш сценарий использования (Developer, App Manager или Admin для управления пользователями).

  4. Скопируйте Issuer ID (UUID, отображается один раз в верхней части страницы).

  5. Скопируйте Key ID (10 символов).

  6. Скачайте файл закрытого ключа .p8. Apple позволяет скачать его только один раз. Храните его вне вашего репозитория, например ~/.appstoreconnect/AuthKey_XXXXXXXXXX.p8, и выполните chmod 600 для него.

Пошаговая инструкция от Apple: Creating API keys for App Store Connect API.


Установка в Claude Code

git clone https://github.com/imfaisii/asc-mcp.git
cd asc-mcp
bun install
bun run smoke     # offline catalog check + server boot — no credentials needed

Зарегистрируйте сервер глобально:

claude mcp add app-store-connect \
  -s user \
  -t stdio \
  -e ASC_ISSUER_ID=your-issuer-uuid \
  -e ASC_KEY_ID=your-key-id \
  -e ASC_PRIVATE_KEY_PATH=$HOME/.appstoreconnect/AuthKey_XXXXXXXXXX.p8 \
  -- bun run /ABS/PATH/to/asc-mcp/src/index.ts

Проверьте и перезапустите:

claude mcp get app-store-connect
claude mcp list

Начните новую сессию Claude Code. Инструменты появятся как mcp__app-store-connect__asc_search, …asc_schema, …asc_call и …asc_tags.


Установка в Claude Desktop

Добавьте это в claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "app-store-connect": {
      "command": "bun",
      "args": ["run", "/ABS/PATH/to/asc-mcp/src/index.ts"],
      "env": {
        "ASC_ISSUER_ID": "your-issuer-uuid",
        "ASC_KEY_ID": "your-key-id",
        "ASC_PRIVATE_KEY_PATH": "/ABS/PATH/to/AuthKey_XXXXXXXXXX.p8"
      }
    }
  }
}

Перезапустите Claude Desktop.


Установка в Cursor, Windsurf, VS Code и другие MCP-клиенты

Подойдёт любой клиент, запускающий stdio MCP-сервер. Формат всегда одинаков — mcp.example.json в этом репозитории — готовый шаблон для копирования.

Cursor — ~/.cursor/mcp.json (глобально) или .cursor/mcp.json (для проекта):

{
  "mcpServers": {
    "app-store-connect": {
      "command": "bun",
      "args": ["run", "/ABS/PATH/to/asc-mcp/src/index.ts"],
      "env": {
        "ASC_ISSUER_ID": "your-issuer-uuid",
        "ASC_KEY_ID": "your-key-id",
        "ASC_PRIVATE_KEY_PATH": "/ABS/PATH/to/AuthKey_XXXXXXXXXX.p8"
      }
    }
  }
}

Windsurf — ~/.codeium/windsurf/mcp_config.json, тот же блок mcpServers.

VS Code — .vscode/mcp.json с блоком servers, использующим те же command, args и env.

Ваш собственный агент — запустите bun run src/index.ts и общайтесь по MCP через stdio. Будет выглядеть, будто он завис в обычном терминале; это stdio-сервер, ожидающий клиента, и это нормально.


Переменные окружения

Переменная

Обязательная

Назначение

ASC_ISSUER_ID

да

Issuer ID (UUID) из App Store Connect

ASC_KEY_ID

да

Key ID (10 символов)

ASC_PRIVATE_KEY_PATH

да*

Абсолютный путь к файлу закрытого ключа .p8

ASC_PRIVATE_KEY

да*

Содержимое PEM в одну строку, вместо пути к файлу (удобно в CI)

ASC_BASE_URL

нет

По умолчанию https://api.appstoreconnect.apple.com

ASC_EXPOSE_ALL_TOOLS

нет

1 регистрирует все 1 263 операции как отдельные MCP-инструменты. Только для отладки

* Укажите ровно одну из переменных ASC_PRIVATE_KEY_PATH или ASC_PRIVATE_KEY.

Эти псевдонимы также принимаются: APP_STORE_CONNECT_ISSUER_ID, APP_STORE_CONNECT_KEY_ID, APP_STORE_CONNECT_PRIVATE_KEY_PATH, APP_STORE_CONNECT_PRIVATE_KEY.

Скопируйте .env.example в .env для локальных оболочек. .env* и *.p8 уже находятся в .gitignore.


Как агент использует сервер

1. asc_tags                                     # optional: orient inside 195 resource tags
2. asc_search { query: "list apps" }            # find candidate operations
3. asc_schema { operation: "apps_getCollection" }  # read the exact input schema
4. asc_call   { operation: "apps_getCollection", args: { limit: 10 } }

Для любых операций записи сначала выполните пробный запуск:

{ "operation": "appStoreVersions_updateInstance", "_dryRun": true, "args": { "id": "…", "body": { } } }

_dryRun возвращает разрешённый метод, путь, параметры пути, запрос и тело без обращения к Apple, чтобы агент мог проверить собственный запрос до его отправки.


Примеры запросов

После подключения сервера всё это работает на обычном языке:

  • «Список моих приложений с их bundle ID и SKU.»

  • «Покажи последние 5 сборок TestFlight для MyApp и кому они были распространены.»

  • «Создай группу бета-тестирования TestFlight под названием Internal QA для MyApp и добавь этих трёх тестировщиков.»

  • «Какая текущая версия MyApp в App Store в каждой локализации и в каких отсутствует описание?»

  • «Загрузи отчёт о продажах за этот месяц и сведи количество единиц по территориям.»

  • «Перечисли все автообновляемые подписки в моей группе подписок с их ценовыми точками.»

  • «Какие профили подготовки истекают в ближайшие 30 дней?»

  • «Покажи мою последнюю отправку на App Review и причину отклонения.»

  • «Получи последние отзывы покупателей с 1 или 2 звёздами и подготовь ответы.»

  • «Запусти рабочий процесс Xcode Cloud под названием Release и сообщи статус сборки.»

  • «Каким из моих покупок внутри приложения не хватает скриншота для ревью?»

  • «Добавь UDID этого устройства в мой аккаунт и перегенерируй профиль разработки.»


Скрипты

Команда

Назначение

bun install

Установить зависимости

bun run generate

Пересобрать generated/tools.json и generated/manifest.json из поставляемой спецификации OpenAPI

bun run start

Запустить stdio MCP-сервер

bun run smoke

Сгенерировать, проверить инвентаризацию каталога, запустить сервер. Выполняет живой GET /v1/apps только если учётные данные есть в окружении

bun run typecheck

tsc --noEmit

bun run live

Проверка учётных данных в реальном времени через GET /v1/apps


Обновление спецификации OpenAPI от Apple

Apple поставляет zip-архив. Включите JSON в проект, перегенерируйте, проверьте:

curl -fsSL -o /tmp/asc-openapi.zip \
  "https://developer.apple.com/sample-code/app-store-connect/app-store-connect-openapi-specification.zip"
unzip -p /tmp/asc-openapi.zip '*.json' > openapi/app-store-connect.openapi.json
bun run generate
bun run smoke

generated/ — это результат сборки. Никогда не редактируйте его вручную — вместо этого перегенерируйте.

Примечание о покрытии: «полная поверхность» означает каждую операцию в опубликованном Apple zip-архиве OpenAPI для включённой версии. Если конечная точка описана в документации Apple для людей, но отсутствует в zip-архиве, она появится здесь после того, как Apple обновит zip-архив, и вы перегенерируете.


Структура проекта

asc-mcp/
├── openapi/
│   └── app-store-connect.openapi.json   # Apple's spec, vendored (source of truth)
├── generated/
│   ├── tools.json                       # 1263-operation catalog (build output)
│   └── manifest.json                    # counts, tags, spec version
├── src/
│   ├── index.ts                         # MCP stdio server, 4 meta-tools
│   ├── catalog.ts                       # search / resolve over the catalog
│   ├── client.ts                        # fetch wrapper, response shaping
│   ├── auth.ts                          # ES256 JWT, in-memory cache
│   └── types.ts
├── scripts/
│   ├── generate-tools.ts                # OpenAPI → catalog
│   ├── smoke.ts                         # offline inventory + boot check
│   └── live-check.ts                    # live GET /v1/apps
├── assets/                              # README graphics
├── mcp.example.json
├── .env.example
└── package.json

Модель безопасности

  • В этом репозитории не хранится ничего секретного. Учётные данные берутся только из переменных окружения.

  • .gitignore исключает *.p8, AuthKey_*.p8 и .env*.

  • JWT подписываются по алгоритму ES256 локально вашим .p8, имеют аудиторию appstoreconnect-v1, действительны 20 минут (максимум, установленный Apple), кэшируются только в памяти и обновляются за 60 секунд до истечения срока действия.

  • Результаты, которые инструменты возвращают модели, никогда не содержат учётные данные.

  • Единственный сетевой адрес — ASC_BASE_URL, который по умолчанию указывает на API-хост Apple.

  • Если вы когда-нибудь случайно закоммитите .p8, немедленно отзовите этот ключ в App Store Connect и создайте новый.

О том, как сообщить об уязвимости, см. SECURITY.md.


Устранение неполадок

Missing credentials / ASC_ISSUER_ID not set MCP-клиент не передал переменные окружения. Поместите переменные в блок env клиента, а не в профиль вашей оболочки — GUI-приложения, такие как Claude Desktop и Cursor, не наследуют окружение вашей оболочки.

HTTP 401 NOT_AUTHORIZED Issuer ID, Key ID и .p8 должны относиться к одному и тому же ключу. Убедитесь, что Key ID совпадает с именем файла (AuthKey_<KeyID>.p8) и что ключ не отозван.

HTTP 403 FORBIDDEN_ERROR Роль ключа слишком узкая для этой операции. Для управления пользователями и финансовых отчётов требуются роли выше Developer.

HTTP 409 со строкой detail в формате JSON:API Apple отклоняет структуру документа. Выполните тот же вызов с _dryRun: true, сравните с выводом asc_schema и исправьте body.

Сервер «зависает» при запуске bun run start Так и должно быть. stdio MCP-сервер блокируется в ожидании клиента на stdin. Если нужна проверка, которая завершается, используйте bun run smoke.

Инструменты не отображаются в моём клиенте Перезапустите клиент после изменения его MCP-конфигурации и используйте абсолютный путь к src/index.ts. Убедитесь, что bun находится в PATH, который видит клиент (which bun), либо укажите абсолютный путь к бинарному файлу bun в качестве command.

Ответы обрезаются Полезная нагрузка более ~120 000 символов обрезается. Сузьте выборку с помощью fields[…], filter[…] и limit, а не выгружайте целые коллекции.


FAQ

Это официальный продукт Apple? Нет. Это независимый проект с открытым исходным кодом. «App Store Connect», «TestFlight», «Xcode» и «Game Center» — товарные знаки Apple Inc.

Сколько инструментов предоставляет этот MCP-сервер? По умолчанию четыре — asc_search, asc_schema, asc_call и asc_tags — на базе внутреннего каталога из 1 263 операций App Store Connect API. Установка ASC_EXPOSE_ALL_TOOLS=1 регистрирует каждый из 1 263 инструментов по отдельности, что полезно только для отладки.

Поддерживает ли он TestFlight? Да. Примерно 90 операций охватывают бета-группы, бета-тестеров, приглашения, локализации бета-сборок, подачу бета-приложений на ревью, отчёты о сбоях и критерии набора.

Может ли агент отправить моё приложение на ревью? Да. ReviewSubmissions, ReviewSubmissionItems, AppStoreVersionSubmissions и ресурсы с деталями ревью — всё это есть в каталоге. Сначала используйте _dryRun и держите человека в цикле для всего, что попадает в App Store.

Работает ли он с Cursor, Windsurf и VS Code? Да. Это обычный stdio MCP-сервер, поэтому его может запустить любой клиент Model Context Protocol.

Хранит ли он или передаёт мой ключ App Store Connect API? Нет. Ключ читается из окружения в момент вызова, используется для локальной подписи кратковременного JWT, и сам JWT уходит только на API-хост Apple.

Чем этот сервер отличается от других App Store Connect MCP-серверов? Большинство из них — написанные вручную обёртки вокруг небольшого подмножества эндпоинтов. Этот же генерирует каталог из официальной OpenAPI-спецификации Apple, поэтому покрытие — вся опубликованная поверхность API, а обновление — одна команда вместо переписывания.

Почему бы просто не дать модели 1 263 инструмента? Полные JSON-схемы для 1 263 операций стоят сотни тысяч контекстных токенов, а многие клиенты обрезают или отклоняют такие длинные списки. Подход «поиск → схема → вызов» стоит несколько тысяч токенов на задачу.

Можно ли использовать его в CI? Да. Укажите ASC_PRIVATE_KEY в виде встроенного PEM вместо пути к файлу, чтобы ни один .p8 не попал на диск раннера.

Справляется ли он с ограничениями частоты запросов App Store Connect API? Он не повторяет запросы за вас. Ответы и заголовки об ограничении частоты от Apple передаются без изменений, чтобы агент (или ваш код) мог решить, как снизить частоту.

Какая версия App Store Connect API включена в комплект? 4.4.1, OpenAPI 3.0.1. Чтобы перейти на новую версию, замените спецификацию на более новую и выполните bun run generate.


Участие в разработке

Приветствуются issues и pull requests. См. CONTRIBUTING.md. Важнее всего два правила: generated/ перегенерируется, а не редактируется вручную, и никакие учётные данные никогда не появляются в pull request.


Лицензия

MIT © imfaisii

Не аффилирован с Apple Inc. и не одобрен ею.


Ключевые слова: App Store Connect MCP · MCP-сервер для App Store Connect API · MCP-сервер для App Store Connect · Model Context Protocol Apple · TestFlight MCP · Xcode Cloud MCP · MCP для покупок внутри приложения · автоматизация App Store · Claude Code App Store Connect · Cursor MCP App Store Connect · автоматизация релизов iOS с помощью ИИ-агентов

Related MCP Connectors

Related MCP Servers