asc-mcp
Обзор
asc-mcp — это MCP-сервер на Swift, который подключает локальный macOS MCP-клиент к App Store Connect API. Он предоставляет 502 инструмента в 33 доменах инструментов App Store + 2 основных доменах, что позволяет автоматизировать процессы релизов iOS и macOS с помощью естественного языка.
Примеры конфигурации включены для Codex, Claude Code, Claude Desktop, Gemini CLI, VS Code с GitHub Copilot, Continue, Cursor и Devin Desktop (ранее Windsurf). Конфигурация клиентов документирована; CI релиза проверяет установку, инициализацию MCP и обнаружение инструментов на macOS, а не запускает каждый сторонний клиент.
Впервые здесь? Следуйте разделу Быстрый старт. Остальные разделы — справочный материал по расширенной конфигурации, выбору инструментов и для контрибьюторов.
Ключевые возможности
Релиз и метаданные — версии, локализации, сборки, отправка на ревью, поэтапное развертывание и Xcode Cloud
TestFlight и загрузки — бета-группы, тестировщики, обратная связь, рекрутинг, доставка сборок, обработка и соответствие экспортным требованиям
Монетизация — покупки внутри приложения, подписки, цены, доступность, коды предложений и промо-предложения
Маркетинг — скриншоты, превью, кастомные страницы продукта, оптимизация страницы продукта и продвигаемые покупки
Аккаунты и провижининг — несколько команд App Store Connect, пользователи, Bundle ID, устройства, сертификаты, профили и возможности
Обратная связь и операции — отзывы клиентов, вебхуки, декларации доступности, аналитика, метрики и диагностика
Безопасная автоматизация — режим только для чтения, защитные подтверждения, строгая пагинация и рекомендации по восстановлению после мутаций
Проверяемое покрытие API — версионируемый контракт Apple OpenAPI и проверки расхождений во время релиза
Related MCP server: App Store Connect MCP
Поддержка платформ
asc-mcp — это локальный stdio-сервер: MCP-клиент запускает его на том же компьютере. Наличие клиента для Linux или Windows не делает этот Swift-сервер кроссплатформенным.
Окружение | Статус | Примечания |
macOS 15.6+ с Xcode 26.x | Рекомендуется | CI релиза использует runner macOS 15 от GitHub с Xcode 26.2 |
macOS 14.0-15.5 | Только заявленный deployment target | Сборка и выполнение не проверены; может потребоваться отдельно установленный инструментарий Swift 6.2+ |
Linux | Пока не поддерживается | Работа по переносу и Linux CI не завершены |
Windows | Не поддерживается | Текущие зависимости исходного кода и транспорт Swift MCP |
См. системные требования Apple к Xcode для версий macOS, поддерживаемых каждым выпуском Xcode.
Веб- и облачные сессии не наследуют автоматически локальную конфигурацию MCP. Запускайте MCP-клиент локально на совместимом Mac или используйте функцию клиента, которая явно сохраняет выполнение на этом Mac.
Быстрый старт
Рекомендуемая настройка сохраняет учетные данные App Store Connect один раз в приватном локальном файле. После этого MCP-клиентам нужен только путь к исполняемому файлу asc-mcp.
1. Установите asc-mcp
brew install mint
mint install zelentsov-dev/asc-mcp@v4.1.6
~/.mint/bin/asc-mcp --version2. Создайте ключ API App Store Connect
Откройте App Store Connect → Пользователи и доступ → Интеграции → Ключи команд.
Создайте ключ с ролью с минимальными привилегиями, которая покрывает ваш процесс. Роль App Manager или Admin нужна только тогда, когда соответствующие операции этого требуют.
Скачайте файл
.p8. Apple позволяет скачать его только один раз.Скопируйте Key ID и Issuer ID.
3. Сохраните учетные данные локально
Создайте приватные каталоги конфигурации, затем переместите скачанный файл .p8 в ~/.keys/. Замените исходный путь и имя файла во второй команде:
mkdir -p ~/.config/asc-mcp ~/.keys
chmod 700 ~/.config/asc-mcp ~/.keys
mv /path/to/downloaded/AuthKey_XXXXXXXXXX.p8 ~/.keys/Создайте ~/.config/asc-mcp/companies.json:
{
"companies": [
{
"id": "my-company",
"name": "My Company",
"key_id": "XXXXXXXXXX",
"issuer_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"key_path": "/Users/you/.keys/AuthKey_XXXXXXXXXX.p8"
}
]
}Замените /Users/you на фактический путь к вашему домашнему каталогу. Храните оба файла вне репозитория и ограничьте доступ:
chmod 600 ~/.config/asc-mcp/companies.json
chmod 600 /Users/you/.keys/AuthKey_XXXXXXXXXX.p8[!CAUTION] Никогда не коммитьте
companies.json, ключ.p8или сырые учетные данные в Git. Немедленно отзовите ключ App Store Connect, если он был раскрыт.
4. Подключите ваш MCP-клиент
Выберите один клиент. Вам не нужно настраивать каждый клиент.
Codex
codex mcp add asc-mcp -- ~/.mint/bin/asc-mcp
codex mcp listClaude Code
claude mcp add \
--transport stdio \
--scope user \
asc-mcp \
-- ~/.mint/bin/asc-mcp
claude mcp get asc-mcp
claude mcp listДля Claude Desktop, Gemini CLI, VS Code, Continue, Cursor и Devin Desktop используйте готовые примеры в разделе Настройка MCP-клиента.
5. Попробуйте
Перезапустите GUI-клиент после изменения его конфигурации, откройте список его MCP-инструментов и спросите:
List my App Store Connect apps.Если подключение или запрос не удается, см. раздел Устранение неполадок.
Установка
Mint на macOS (рекомендуется)
Mint устанавливает закрепленный релиз из исходного кода и сохраняет исполняемый файл в ~/.mint/bin/asc-mcp.
brew install mint
mint install zelentsov-dev/asc-mcp@v4.1.6Обновите или переустановите закрепленный релиз:
mint install zelentsov-dev/asc-mcp@v4.1.6 --forceПользователям стабильных версий следует устанавливать тег версии. Установка main или develop предназначена только для мейнтейнеров и предрелизного тестирования.
Сборка из исходного кода
Используйте Xcode 26.x на совместимой версии macOS или установите отдельный инструментарий Swift 6.2+.
git clone https://github.com/zelentsov-dev/asc-mcp.git
cd asc-mcp
swift build -c releaseИсполняемый файл — .build/release/asc-mcp. Если вы копируете его в другое место, также скопируйте соседний ресурсный бандл:
cp .build/release/asc-mcp /usr/local/bin/asc-mcp
cp -R .build/release/asc-mcp_asc-mcp.bundle /usr/local/bin/Бандл содержит версионируемый контракт операций OpenAPI, используемый проверками релиза.
Обновление с более старой версии
Версия 4.1 сохраняет все существующие имена инструментов, обязательные входные данные, ключи проекции и форму массивов. Инструменты чтения Xcode Cloud теперь отклоняют недокументированные аргументы и более строго проверяют возвращаемые ссылки, пагинацию, происхождение связей и включенные ресурсы. Новые поля проекции *Present различают массивы, опущенные Apple, и присутствующие пустые массивы, в то время как устаревшие поля массивов остаются массивами. Недавно добавленные вложенные входные параметры *_limit должны использоваться вместе с соответствующим значением include, а последующие вызовы должны повторять исходную область запроса без изменений. Новые инструменты удаления продуктов и процессов по умолчанию используют безопасный предпросмотр и требуют последней квитанции предпросмотра и точного подтверждения инвентаря перед окончательным удалением.
Версия 4 сохраняет все существующие имена инструментов и фильтры воркеров, но деструктивные вызовы Marketing и вложений к обзорам теперь требуют точный ID подтверждения перед любым запросом к Apple:
Существующий инструмент | Новое обязательное подтверждение |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ppo_update_experiment также требует confirm_experiment_id, если указан state. Вызовы, обновляющие только имя или долю трафика, остаются без изменений. После результата мутации unknown или committed_unverified используйте возвращенное действие проверки перед повторной попыткой.
Удалите недокументированные аргументы верхнего уровня из существующих вызовов Marketing и вложений к обзорам. Версия 4 отклоняет неизвестные ключи до любого сетевого запроса, а не молча игнорирует их.
Конфигурация
Учетные данные
Рекомендуется использовать файл ~/.config/asc-mcp/companies.json по умолчанию, показанный в разделе «Быстрый старт», поскольку он одинаково работает для терминальных и GUI-клиентов без дублирования секретов в каждой конфигурации клиента.
Для нескольких компаний добавьте дополнительные записи:
{
"companies": [
{
"id": "my-company",
"name": "My Company",
"key_id": "XXXXXXXXXX",
"issuer_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"key_path": "/Users/you/.keys/AuthKey_XXXXXXXXXX.p8",
"vendor_number": "YOUR_VENDOR_NUMBER"
},
{
"id": "client-company",
"name": "Client Company",
"key_id": "YYYYYYYYYY",
"issuer_id": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
"key_path": "/Users/you/.keys/AuthKey_YYYYYYYYYY.p8"
}
]
}vendor_number требуется только для analytics_sales_report, analytics_financial_report и analytics_app_summary. Его можно найти в App Store Connect → Продажи и тенденции → Отчеты.
Переменные окружения полезны для автоматизации, но GUI-приложения, запущенные из Finder, могут не наследовать окружение вашей оболочки. Описанная выше настройка на основе файла проще для большинства пользователей.
Одна компания:
export ASC_KEY_ID=XXXXXXXXXX
export ASC_ISSUER_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
export ASC_PRIVATE_KEY_PATH=/Users/you/.keys/AuthKey_XXXXXXXXXX.p8
export ASC_COMPANY_NAME="My Company" # optional
export ASC_VENDOR_NUMBER=YOUR_VENDOR_NUMBER # optional, analytics onlyНесколько компаний:
export ASC_COMPANY_1_NAME="My Company"
export ASC_COMPANY_1_KEY_ID=XXXXXXXXXX
export ASC_COMPANY_1_ISSUER_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
export ASC_COMPANY_1_KEY_PATH=/Users/you/.keys/AuthKey_XXXXXXXXXX.p8
export ASC_COMPANY_2_NAME="Client Company"
export ASC_COMPANY_2_KEY_ID=YYYYYYYYYY
export ASC_COMPANY_2_ISSUER_ID=yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
export ASC_COMPANY_2_KEY_PATH=/Users/you/.keys/AuthKey_YYYYYYYYYY.p8Нумерация начинается с 1. Каждая последовательная запись должна содержать и ASC_COMPANY_{N}_KEY_ID, и ASC_COMPANY_{N}_ISSUER_ID; сканирование останавливается на первой отсутствующей паре.
Сервер определяет учетные данные в следующем порядке:
--companies /absolute/path/to/companies.jsonПараметр конструктора для программного встраивания
ASC_MCP_COMPANIES=/absolute/path/to/companies.jsonСтандартные расположения файлов конфигурации, включая
~/.config/asc-mcp/companies.jsonASC_COMPANY_1_KEY_IDи другие нумерованные переменные для нескольких компанийASC_KEY_ID,ASC_ISSUER_IDи переменная закрытого ключа для одной компании
Настройка MCP-клиента
Все примеры ниже предполагают установку через Mint и рекомендуемый файл учетных данных companies.json. Замените /Users/you на фактический путь к вашему домашнему каталогу. GUI-клиентам, как правило, требуется абсолютный путь к исполняемому файлу.
Клиент | Область конфигурации | Примечания |
Codex | Конфигурация пользователя через CLI; опционально конфигурация доверенного проекта | Общая для локальных клиентов Codex на одном Mac |
Claude Code | Область |
|
Claude Desktop | Конфигурация рабочего стола на уровне пользователя | Перезапустите после редактирования |
Gemini CLI | Пользовательские настройки | Локальный |
VS Code with GitHub Copilot | Профиль пользователя или | Подтвердите доверие к серверу при первом запуске |
Continue | Рабочая область | Отдельно от встроенной конфигурации MCP в VS Code |
Cursor | Пользовательский или проектный | Используйте абсолютный путь к команде |
Devin Desktop (formerly Windsurf) | Пользовательская конфигурация MCP | Держите не более 100 активных инструментов |
Рекомендуемая регистрация в CLI:
codex mcp add asc-mcp -- ~/.mint/bin/asc-mcp
codex mcp list
codex mcp get asc-mcp --jsonОдна и та же локальная конфигурация MCP используется всеми клиентами Codex на этом Mac. Пользовательская конфигурация находится в $CODEX_HOME/config.toml, по умолчанию — ~/.codex/config.toml:
[mcp_servers.asc-mcp]
command = "/Users/you/.mint/bin/asc-mcp"
startup_timeout_sec = 20
tool_timeout_sec = 60
enabled = trueДля настройки в рамках проекта поместите ту же таблицу в .codex/config.toml; Codex загружает конфигурацию проекта только после того, как проекту доверяют. Если вы используете учётные данные оболочки вместо companies.json, явно передайте их:
env_vars = ["ASC_KEY_ID", "ASC_ISSUER_ID", "ASC_PRIVATE_KEY_PATH"]Перезапустите GUI-клиент после изменения конфигурации, затем используйте его представление MCP или /mcp, чтобы убедиться, что asc-mcp активен. См. официальную документацию Codex MCP.
Зарегистрируйте один раз для всех локальных проектов:
claude mcp add \
--transport stdio \
--scope user \
asc-mcp \
-- ~/.mint/bin/asc-mcp
claude mcp get asc-mcp
claude mcp listИспользуйте --scope local только для текущего проекта или --scope project, чтобы создать общий .mcp.json. Серверы проекта требуют подтверждения доверия. Никогда не помещайте необработанные учётные данные App Store Connect в коммитимый .mcp.json.
Claude хранит записи MCP user и local в ~/.claude.json; .claude/settings.json не является глобальным реестром MCP. Используйте /mcp внутри Claude Code для проверки или переподключения сервера. См. официальную документацию Claude Code MCP.
Добавьте сервер в ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"asc-mcp": {
"command": "/Users/you/.mint/bin/asc-mcp"
}
}
}Завершите работу и снова откройте Claude Desktop после сохранения файла.
Добавьте сервер в ~/.gemini/settings.json:
{
"mcpServers": {
"asc-mcp": {
"command": "/Users/you/.mint/bin/asc-mcp"
}
}
}Тайм-аут MCP по умолчанию для Gemini намеренно сохранён. См. официальную документацию Gemini CLI MCP.
Выполните MCP: Add Server из палитры команд и выберите профиль пользователя для личной настройки. Для настройки рабочей области создайте .vscode/mcp.json:
{
"servers": {
"asc-mcp": {
"type": "stdio",
"command": "/Users/you/.mint/bin/asc-mcp"
}
}
}Подтвердите, что доверяете локальному серверу, когда VS Code запустит его впервые. Не коммитьте пользовательские пути или секреты в общий файл рабочей области. См. официальную документацию VS Code MCP.
Continue не использует .vscode/mcp.json. Создайте .continue/mcpServers/asc-mcp.json в рабочей области:
{
"mcpServers": {
"asc-mcp": {
"command": "/Users/you/.mint/bin/asc-mcp"
}
}
}Инструменты MCP доступны в режиме агента Continue. См. официальную документацию Continue MCP.
Используйте ~/.cursor/mcp.json для всех проектов или .cursor/mcp.json для одного проекта:
{
"mcpServers": {
"asc-mcp": {
"command": "/Users/you/.mint/bin/asc-mcp"
}
}
}Перезапустите или обновите MCP-сервер в настройках Cursor после редактирования файла. См. официальную документацию Cursor MCP.
Добавьте сервер в ~/.codeium/windsurf/mcp_config.json. Этот пример включает подмножество релиза из 72 инструментов, что ниже лимита Cascade в 100 инструментов:
{
"mcpServers": {
"asc-mcp": {
"command": "/Users/you/.mint/bin/asc-mcp",
"args": [
"--workers",
"apps,builds,export_compliance,versions,reviews"
]
}
}
}Вы также можете отключить отдельные инструменты в клиенте. Рекомендуется фильтрация воркеров на стороне сервера, поскольку она сохраняет активный каталог предсказуемым. См. официальную документацию Devin Desktop MCP.
[!IMPORTANT]
commandдолжен указывать на реальный исполняемый файл. GUI-клиенты часто не наследуют алиасы оболочки, изменения PATH или переменные окружения. Используйте абсолютный путь и предпочитайте файл учётных данныхcompanies.jsonпо умолчанию.
Фильтрация воркеров
Сервер предоставляет 502 инструмента в 33 доменах инструментов App Store + 2 основных доменах. Некоторые MCP-клиенты накладывают ограничение на количество инструментов; Cascade в Devin Desktop в настоящее время допускает 100 активных инструментов. Используйте 35 ключей фильтра --workers, чтобы включить только нужные вам воркеры:
# Only load apps, builds, and version lifecycle tools
asc-mcp --workers apps,builds,versions
# App Store release preparation subset (99 tools, including always-on and build sub-workers)
asc-mcp --workers apps,accessibility,builds,export_compliance,versions,app_info,screenshots
# TestFlight review helpers can be loaded separately (49 tools)
asc-mcp --workers apps,builds,beta_app,pre_release
# Monetization focus
asc-mcp --workers apps,iap,subscriptions,pricing,promoted,review_submissionsВоркеры company и auth всегда включены независимо от фильтра (они обеспечивают базовую функциональность мультиаккаунта и аутентификации).
Когда включён builds, он автоматически включает подворкеры build_processing и build_beta.
Режим только для чтения
Используйте --read-only, когда нужна безопасная проверка без изменений в App Store Connect:
asc-mcp --read-only
asc-mcp --read-only --workers apps,builds,reviews,analyticsВ этом режиме остаются доступными инструменты чтения, такие как *_list, *_get, *_search, *_status, *_verify, *_parse, *_triage, auth_*, аналитика и метрики. Инструменты, которые могут создавать, обновлять, загружать, отправлять, выпускать, удалять, отзывать, очищать, отменять или иным образом изменять App Store Connect, блокируются до запуска их обработчика-воркера. company_switch остаётся доступным, поскольку он изменяет только локальный активный контекст компании.
OpenAPI-контракт и инструменты для отслеживания расхождений
Используйте команду operation-contract, чтобы сравнить фактический каталог WorkerManager без учётных данных с семантическим манифестом и закреплённой спецификацией OpenAPI Apple App Store Connect. Производственный манифест фиксирует точные Apple operationId, HTTP-метод, путь, привязки входных данных в рамках вызова, типизированные фиксированные значения, происхождение ответов, локальные рабочие процессы, состояние реализации, устаревшие алиасы и намеренно отложенные операции. Команда не загружает учётные данные App Store Connect и не запускает MCP-сервер.
rm -rf /tmp/asc-openapi
mkdir -p /tmp/asc-openapi
curl -L --fail -o /tmp/asc-openapi/spec.zip \
https://developer.apple.com/sample-code/app-store-connect/app-store-connect-openapi-specification.zip
spec_entry="$(unzip -Z1 /tmp/asc-openapi/spec.zip | grep -E '(^|/)openapi\.oas[^/]*\.json$')"
test "$(echo "$spec_entry" | grep -c .)" -eq 1
unzip -p /tmp/asc-openapi/spec.zip "$spec_entry" > /tmp/asc-openapi/openapi.oas.json
swift run asc-mcp openapi-contract-check \
--spec /tmp/asc-openapi/openapi.oas.json \
--json-output /tmp/asc-openapi/operation-contract.json \
--markdown-output /tmp/asc-openapi/operation-contract.md \
--strictМанифест закреплён за Apple API 4.4.1 по версии, SHA-256, количеству путей и количеству операций. В настоящее время он сопоставляет 476 операций Apple, явно откладывает 424 и исключает 363, покрывая все 1 263 операции без пересечений. CI завершается ошибкой, когда изменяется документ Apple, сопоставленная операция перемещается или исчезает, публичный инструмент или воркер отклоняется от манифеста, поле ввода теряет привязку, происхождение ответа становится недействительным или истекает срок отложенного решения. Неоткрытые необязательные параметры Apple являются предупреждениями, поэтому они остаются видимыми в сгенерированном бэклоге.
Схема манифеста v2 также учитывает каждый необязательный входной параметр Apple в запросе и теле запроса как публично привязанный, внутренне контролируемый, намеренно пропущенный с проверенной причиной или всё ещё неклассифицированный. Зафиксированный в репозитории optionalInputCoveragePin записывает точные текущие итоги и SHA-256-дайджест отсортированных идентификаторов и статусов входных данных; --strict отклоняет отсутствующий пин или любое расхождение на уровне количества или идентификаторов. Пин делает поэтапное исправление аудируемым и безопасным с точки зрения регрессий, но это не утверждение, что каждый необязательный входной параметр Apple уже публичен. Пин v4.1.3 составляет 2 905 всего: 1 122 привязанных, 40 внутренне контролируемых, 1 743 намеренно пропущенных и 0 неклассифицированных. Его идентификационный SHA-256: c975f4e4eebb62ec87864a73fbf72bb8841f644108e54e6ffb25168bcf2a2766.
--strict — это шлюз релиза на этапе слияния и тегирования. Каждый объявленный инструмент target или broken остаётся ошибкой в отчётах, а регрессионный тест фиксирует их точное состояние. Текущий базовый уровень не содержит реализаций target или broken и не имеет расхождений реализации, поэтому любая реализация, которая покидает asBuilt, любая структурная ошибка контракта или любое расхождение покрытия необязательных входных данных блокирует как слияния, так и релизы. --structural-strict остаётся доступным только для локальной поэтапной работы по исправлению.
Этот шлюз подтверждает идентичность операции, владение полями верхнего уровня MCP, обязательные входные данные Apple, типизированные внутренние значения и происхождение источника/указателя ответа. Полное соответствие типов/перечислений/диапазонов MCP и полные типизированные схемы ответов остаются отдельными фазами оптимизации; текущий статус сопоставления — 469 частичных и 33 устаревших.
Более старая команда openapi-coverage остаётся доступной для отчёта по доменам высокого уровня в ASC-OPENAPI-COVERAGE-GENERATED.md. Операционный контракт является авторитетным шлюзом релиза.
Доступные имена воркеров:
Worker | Prefix | Tools | Description |
|
| 3 | Управление несколькими аккаунтами |
|
| 4 | Инструменты для JWT-токенов |
|
| 10 | Списки приложений, метаданные, локализации, ID ключевых слов для поиска |
|
| 6 | Декларации доступности App Store |
|
| 11 | Уведомления вебхуков, диагностика доставки и вспомогательные инструменты для получателей |
|
| 42 | Продукты Xcode Cloud, управление workflow, запуски сборок, артефакты, проблемы, результаты тестов и SCM |
|
| 4 | Управление сборками |
|
| 10 | Родительские объекты загрузки сборок, файлы, безопасные передачи и восстановление |
|
| 4 | Состояния сборок, шифрование |
|
| 11 | Декларации шифрования, загрузка документов, привязка сборок, готовность |
|
| 11 | Локализации TestFlight, уведомления |
|
| 17 | Жизненный цикл версий, возрастные рейтинги, отправка, релиз |
|
| 8 | Отзывы клиентов и ответы на них |
|
| 15 | Группы TestFlight и критерии набора по публичным ссылкам |
|
| 8 | Скриншоты обратной связи TestFlight, отправка отчетов о сбоях, журналы сбоев |
|
| 12 | Управление тестерами |
|
| 59 | Внутриигровые покупки, версионируемые метаданные, цены, доступность, коды предложений, материалы для ревью |
|
| 99 | Версии подписок и групп, цены, доступность планов, предложения, материалы |
|
| 3 | Тестеры песочницы |
|
| 10 | Локализации бета-приложений и ревью |
|
| 3 | Предрелизные версии |
|
| 3 | Лицензионные соглашения бета-тестирования |
|
| 17 | Bundle ID, устройства, сертификаты |
|
| 10 | Информация о приложении, категории, EULA |
|
| 9 | Территории, цены |
|
| 10 | Участники команды, роли |
|
| 9 | События в приложении, локализации |
|
| 11 | Отчеты о продажах/финансовые отчеты, аналитика |
|
| 19 | Скриншоты, превью, наборы и проверенный порядок |
|
| 17 | Кастомные страницы продукта, версии, локализации и ключевые слова для поиска |
|
| 15 | Эксперименты по оптимизации страницы продукта, варианты и локализации |
|
| 10 | Продвигаемые внутриигровые покупки и проверенный порядок |
|
| 4 | Вложения для ревью App Store |
|
| 9 | Общие отправки на ревью App Store и элементы отправки |
|
| 9 | Метрики производительности, диагностика и метрики использования TestFlight |
Размер каталога инструментов
Конфигурация | Tools | ~Tokens |
Все воркеры (по умолчанию) | 502 | ~60,000 |
Релизный workflow: | ~72 | ~8,900 |
Монетизация: | 184 | ~21,100 |
TestFlight: | ~63 | ~7,100 |
Маркетинг: | ~78 | ~8,800 |
| 17 | ~2,100 |
Самые тяжелые воркеры: Subscriptions (99 инструментов), InAppPurchases (59 инструментов), Xcode Cloud (42 инструмента), Screenshots (19 инструментов), Provisioning (17 инструментов).
Точная стоимость зависит от сериализации, токенизатора и стратегии обнаружения инструментов MCP-хоста. Современные клиенты могут откладывать получение схем до тех пор, пока они не понадобятся. Используйте --workers, когда клиент устанавливает лимит на количество инструментов или когда нужен меньший и более сфокусированный каталог.
Доступные инструменты
502 инструмента, организованных в 33 доменах инструментов App Store + 2 основных доменах (используйте 35 ключей фильтра --workers — см. Фильтрация воркеров):
Инструмент | Описание |
| Список всех настроенных компаний |
| Переключение активной компании для операций API |
| Получить информацию о текущей активной компании |
Инструмент | Описание |
| Сгенерировать JWT-токен для доступа к API |
| Локальная проверка стандартного JWT с командным ключом: подпись ES256, настроенные |
| Принудительно обновить JWT-токен |
| Получить статус кэша JWT-токена |
Tool | Description |
| Список всех приложений с фильтрацией |
| Получение подробной информации о приложении |
| Поиск приложений по имени или Bundle ID |
| Список всех версий с состояниями |
| Получение локализованных метаданных для версии |
| Список канонических идентификаторов поисковых ключевых слов App Store для таргетинга на пользовательские страницы |
| Обновление метаданных (What's New, описание и т. д.) |
| Список локализаций со статусом контента |
| Создание новой локализации для версии |
| Удаление локализации из версии |
Tool | Description |
| Список деклараций доступности для приложения |
| Получение одной декларации доступности |
| Создание декларации для семейства устройств |
| Обновление флагов поддержки или публикация декларации |
| Удаление декларации |
| Список идентификаторов связей декларации для приложения |
Tool | Description |
| Список вебхуков для приложения |
| Получение вебхука по ID |
| Создание конфигурации вебхука |
| Обновление полей вебхука |
| Удаление вебхука |
| Список попыток доставки |
| Повторная доставка существующей доставки |
| Отправка тестового пинга |
| Проверка |
| Разбор и нормализация необработанной полезной нагрузки уведомления вебхука |
| Формирование практического плана разбора для событий вебхука или сбоев доставки |
Tool | Description |
| Список продуктов Xcode Cloud |
| Получение продукта Xcode Cloud |
| Предпросмотр или окончательное удаление продукта Xcode Cloud с защитными механизмами подтверждения |
| Получение продукта Xcode Cloud, связанного с приложением |
| Получение приложения, связанного с продуктом Xcode Cloud |
| Список основных репозиториев, прикрепленных к продукту |
| Список дополнительных репозиториев, прикрепленных к продукту |
| Список рабочих процессов для продукта |
| Список запусков сборки для продукта |
| Получение рабочего процесса |
| Создание рабочего процесса Xcode Cloud |
| Обновление рабочего процесса Xcode Cloud |
| Предпросмотр или окончательное удаление рабочего процесса с защитными механизмами подтверждения |
| Получение репозитория, используемого рабочим процессом |
| Список запусков сборки для рабочего процесса |
| Получение запуска сборки |
| Запуск или пересборка сборки Xcode Cloud |
| Список действий сборки для запуска |
| Список сборок App Store Connect, созданных запуском |
| Получение действия сборки |
| Получение запуска сборки, которому принадлежит действие сборки |
| Список артефактов для действия |
| Список проблем для действия |
| Список результатов тестов для действия |
| Получение артефакта |
| Получение проблемы |
| Получение результата теста |
| Список доступных версий Xcode |
| Получение версии Xcode |
| Список версий macOS, совместимых с версией Xcode |
| Список доступных версий macOS |
| Получение версии macOS |
| Список версий Xcode, совместимых с версией macOS |
| Список SCM-провайдеров |
| Получение SCM-провайдера |
| Список репозиториев для SCM-провайдера |
| Список SCM-репозиториев |
| Получение SCM-репозитория |
| Список git-ссылок репозитория |
| Список pull request'ов репозитория |
| Получение git-ссылки |
| Получение pull request'а |
Tool | Description |
| Список бета-отзывов о сбоях |
| Получение одного бета-отзыва о сбое |
| Чтение журнала сбоя для отзыва |
| Чтение журнала сбоя по ID журнала сбоя |
| Удаление бета-отзыва о сбое |
| Список бета-отзывов со скриншотами |
| Получение одного бета-отзыва со скриншотом |
| Удаление бета-отзыва со скриншотом |
Tool | Description |
| Список сборок с состояниями обработки |
| Получение подробной информации о сборке |
| Поиск сборки по номеру версии |
| Получение сборок для конкретной версии приложения |
Инструмент | Описание |
| Список родительских объектов Build Upload приложения с фильтрами, разреженными полями, включениями и строгой пагинацией |
| Получить один Build Upload с диагностикой обработки и опционально включёнными ресурсами |
| Создать родительский объект Build Upload без повторного выполнения неоднозначного POST |
| Удалить родительский объект Build Upload после точного подтверждения ID |
| Список резервирований файлов в рамках одного Build Upload со строгой пагинацией |
| Получить один Build Upload File и его состояние доставки |
| Зарезервировать один конкретный файл без повторного выполнения неоднозначного POST |
| Зафиксировать изменения контрольной суммы или состояния загрузки, сохраняя пропуски и null раздельно |
| Перенести новое или существующее резервирование из неизменяемого локального снимка |
| Выполнить создание родительского объекта, резервирование, перенос, фиксацию и сверку обработки |
Составные загрузки сохраняют один и тот же MD5-отпечаток в нижнем регистре от резервирования до восстановления. Явные инструкции возобновления и продолжения после восстановления содержат expected_md5; следующий вызов сверяет с ним свежий неизменяемый снимок перед любым запросом к Apple или переносом. Существующее резервирование, уже помеченное как UPLOAD_COMPLETE или COMPLETE, принимается только если MD5 поля sourceFileChecksums.file от Apple совпадает с этим снимком; отсутствующие, неподдерживаемые или несовпадающие свидетельства сохраняются для проверки без дополнительного переноса, фиксации или удаления. Предварительно подписанные операции повторяются только если их метод — PUT; перенаправления, POST и неизвестные методы не воспроизводятся повторно. Если неоднозначное создание однозначно восстановлено, рабочий процесс останавливается и возвращает ID ресурса для явного продолжения. Учётные данные для переноса остаются скрытыми, если только include_sensitive_details не включён явно при прямом чтении.
Tool | Description |
| Получить текущее состояние обработки |
| Установить соответствие требованиям шифрования |
| Получить подробный статус обработки |
| Проверить, готова ли сборка к отправке на рассмотрение |
Tool | Description |
| Список деклараций о шифровании приложения со строгой пагинацией |
| Получить одну декларацию без устаревших полей URL документа |
| Создать анкету декларации о шифровании для приложения |
| Зарезервировать, перенести, зафиксировать и опросить документ из одного неизменяемого локального снимка |
| Получить безопасные метаданные доставки без подписанных URL, токенов или заголовков загрузки |
| Применить низкоуровневый nullable-патч для контрольной суммы или состояния загрузки |
| Возобновить резервирование AWAITING_UPLOAD с точными байтами и его MD5-квитанцией в нижнем регистре |
| Проверить наличие документа и классифицировать его состояние доставки |
| Получить декларацию, прикреплённую в данный момент к сборке |
| Прикрепить одобренную декларацию и проверить связь |
| Оценить только шлюз выпуска сборки по экспортному соответствию |
Tool | Description |
| Получить конфигурацию TestFlight для сборки |
| Обновить настройки TestFlight |
| Задать текст «Что нового» для TestFlight |
| Список всех локализаций TestFlight |
| Получить бета-группы для сборки |
| Получить отдельных тестировщиков для сборки |
| Отправить уведомление бета-тестировщикам |
| Добавить сборку в бета-группы |
| Добавить отдельных тестировщиков в сборку |
| Удалить отдельных тестировщиков из сборки |
| Список отдельных тестировщиков, назначенных на сборку |
Tool | Description |
| Список бета-групп TestFlight для приложения |
| Создать новую бета-группу |
| Обновить настройки бета-группы |
| Удалить бета-группу |
| Добавить тестировщиков в бета-группу |
| Удалить тестировщиков из бета-группы |
| Список тестировщиков в бета-группе |
| Добавить сборки в бета-группу |
| Удалить сборки из бета-группы |
| Получить критерии набора по публичной ссылке, прикреплённые к бета-группе |
| Создать критерии набора по семейству устройств и версии ОС |
| Заменить или явно очистить фильтры набора |
| Удалить критерии набора после точного подтверждения ID критерия |
| Список семейств устройств и версий ОС, которые Apple в настоящее время разрешает |
| Проверить, есть ли в группе сборка, совместимая с её критериями |
Включает инструменты для списка/поиска/получения/создания/удаления тестировщиков, связей с приложениями, приглашений, назначения бета-групп, назначения сборок и удаления из приложения.
Tool | Description |
| Создать новую версию приложения |
| Список версий с фильтрацией по состоянию |
| Получить подробную информацию о версии |
| Прочитать анкету возрастного рейтинга App Info |
| Список рассчитанных возрастных рейтингов по территориям |
| Обновить атрибуты версии |
| Прикрепить сборку к версии |
| Отправить на рассмотрение в App Store |
| Отменить текущее рассмотрение |
| Выпустить одобренную версию |
| Создать поэтапный выпуск |
| Получить информацию о поэтапном выпуске и ID |
| Приостановить/возобновить/завершить развёртывание |
| Удалить подходящий запланированный поэтапный выпуск с подтверждением точного ID и защитой от неизвестного исхода |
| Задать контактные данные для рассмотрения |
| Настроить декларацию возрастного рейтинга |
| Удалить редактируемую версию приложения с подтверждением точного ID и защитой от неизвестного исхода |
Инструмент | Описание |
| Получить отзывы с фильтрацией и постраничной выдачей |
| Получить сведения о конкретном отзыве |
| Получить отзывы для конкретной версии |
| Сводная статистика отзывов |
| Ответить на отзыв клиента |
| Удалить ответ |
| Получить ответ на отзыв |
| Обобщить темы отзывов и оценки |
Инструмент | Описание |
| Список покупок в приложении для приложения |
| Получить сведения об IAP |
| Создать новый IAP |
| Обновить атрибуты IAP |
| Удалить IAP |
| Список локализаций IAP |
| Создать локализацию IAP |
| Обновить локализацию IAP |
| Удалить локализацию IAP |
| Отправить IAP на проверку |
| Список групп подписок |
| Получить сведения о группе подписок |
| Удобная для ИИ опись IAP для приложения |
| Список ценовых точек с учётом территорий |
| Список выравниваний ценовых точек |
| Получить график цен |
| Задать график цен |
| Сводка текущих и запланированных цен |
| Найти кандидатов ценовых точек для предложений |
| Задать доступность по территориям |
| Получить доступность по IAP или идентификатору доступности |
| Список доступных территорий |
| Получить состояние продвигаемой покупки |
| Список кодов предложений IAP |
| Получить код предложения IAP |
| Создать код предложения IAP |
| Обновить код предложения IAP |
| Деактивировать код предложения IAP |
| Список цен предложений с учётом территорий |
| Сгенерировать одноразовые коды предложений |
| Список пакетов одноразовых кодов |
| Получить пакет одноразовых кодов |
| Обновить пакет одноразовых кодов |
| Деактивировать пакет одноразовых кодов |
| Получить сгенерированные значения одноразовых кодов |
| Создать пользовательский код предложения |
| Получить сведения о пользовательском коде |
| Обновить пользовательский код |
| Деактивировать пользовательский код |
| Получить скриншот для проверки |
| Загрузить скриншот для проверки |
| Удалить скриншот для проверки |
| Загрузить рекламное изображение |
| Получить рекламное изображение |
| Удалить рекламное изображение |
| Список рекламных изображений |
| Создать проверяемую версию метаданных IAP |
| Получить версию IAP и её статус проверки |
| Список проверяемых версий для IAP |
| Список локализаций, принадлежащих версии IAP |
| Создать локализацию для версии IAP |
| Получить локализацию версии IAP |
| Обновить допускающие null текстовые поля в локализации версии IAP |
| Удалить локализацию версии IAP |
| Получить единственное изображение, связанное с версией IAP |
| Список всех ресурсов изображений, принадлежащих версии IAP, со строгой поддержкой продолжения |
| Загрузить, зафиксировать и согласовать неизменяемое изображение версии IAP |
| Получить ресурс изображения IAP в рамках версии |
| Удалить изображение IAP в рамках версии |
Прежние инструменты локализации, отправки на проверку и изображений, привязанные к продукту, остаются доступными для вызова ради совместимости. Apple 4.4.1 объявляет устаревшими iap_list_localizations, iap_create_localization, iap_update_localization, iap_delete_localization, iap_submit_for_review, iap_upload_image, iap_get_image, iap_delete_image и iap_list_images; успешные ответы указывают на заменяющие инструменты, привязанные к версии. Для создания локализации, загрузки рекламного изображения и отправки на проверку сначала используйте iap_list_versions, вызывайте iap_create_version только когда нужна новая версия метаданных, и передавайте этот идентификатор версии последующему инструменту версии. Эти вызовы совместимости никогда не создают и не выбирают версию автоматически.
Если Apple, возможно, приняла создание версии или локализации версии, но ответ утерян или не может быть декодирован, инструмент возвращает write_outcome: not_confirmed и retrySafe: false с запрошенным идентификатором и шагами проверки через list/get. Проверьте перед повторной попыткой, чтобы избежать дублирования ресурсов метаданных.
Включает версии метаданных подписок и групп, локализации и изображения, принадлежащие версиям, доступность с учётом типа плана, цены с учётом территорий, ценовые точки и скорректированные выравнивания, чтение продвигаемых покупок, вспомогательные инструменты инвентаризации и ценообразования, вводные предложения, промо-предложения, коды предложений, одноразовые/пользовательские коды, win-back предложения и скриншоты для проверки. Все прежние публичные функции offer_codes_*, intro_offers_*, promo_offers_* и winback_* доступны через subscriptions_*.
Apple 4.4.1 также объявляет устаревшими прежние инструменты локализации, изображений и отправки на проверку, привязанные к продукту или группе. Они остаются доступными для вызова ради совместимости, при успехе возвращают явные указания по замене и никогда не создают и не выбирают версию метаданных автоматически. Новые интеграции должны использовать subscriptions_create_version или subscriptions_create_group_version, соответствующие инструменты локализации/изображений версии и общий процесс review_submissions_*.
Создание версии подписки, версии группы, локализации и доступности плана использует тот же контракт восстановления без идемпотентности: неоднозначная запись Apple возвращает write_outcome: not_confirmed, retrySafe: false, запрошенный fingerprint и детерминированные указания по проверке через collection/get.
Следующие имена остаются доступными для совместимости, но Apple 4.4.1 объявляет устаревшим их прежний ресурс subscriptionAvailability в пользу учитывающего тип плана ресурса subscriptionPlanAvailabilities:
Tool | Статус совместимости |
| Устаревшее чтение доступности (legacy) |
| Устаревшая запись доступности (legacy) |
| Устаревший список территорий (legacy) |
| Устаревший вспомогательный инструмент; можно опустить подписки за пределами первой включённой страницы отношений, он не является авторитетной полной описью |
Tool | Описание |
| Список тестировщиков песочницы |
| Обновление настроек тестировщика песочницы |
| Очистка истории покупок для тестировщиков песочницы |
Tool | Описание |
| Список локализаций бета-приложения |
| Создание локализации бета-приложения |
| Получение локализации бета-приложения |
| Обновление локализации бета-приложения |
| Удаление локализации бета-приложения |
| Отправка сборки на бета-ревью |
| Список заявок на бета-ревью |
| Получение заявки на бета-ревью |
| Получение сведений о ревью бета-приложения |
| Обновление сведений о ревью бета-приложения |
Включает список предрелизных версий, сведения о них и связанные сборки.
Включает список соглашений о бета-лицензиях, получение и обновление.
Tool | Описание |
| Список зарегистрированных идентификаторов пакетов |
| Получение сведений об идентификаторе пакета |
| Регистрация нового идентификатора пакета |
| Удаление идентификатора пакета |
| Список зарегистрированных устройств |
| Регистрация нового устройства (UDID) |
| Обновление имени или статуса устройства |
| Список сертификатов подписи |
| Получение сведений о сертификате |
| Отзыв сертификата |
| Список профилей подготовки (provisioning profiles) |
| Получение сведений о профиле |
| Удаление профиля |
| Создание профиля подготовки |
| Список возможностей идентификатора пакета |
| Включение возможности |
| Отключение возможности |
Включает список/получение/обновление информации о приложении, локализации информации о приложении и инструменты получения/создания/обновления EULA.
Включает территории, доступность, ценовые точки, ценовые расписания и инструменты доступности App Store v2.
Включает список/получение/обновление/удаление участников команды, приглашения, видимые приложения и обновления связей видимых приложений.
Включает CRUD для событий в приложении, а также список/создание/обновление/удаление локализаций событий.
Включает инструменты продаж, финансов, сводки по приложению, запроса отчётов аналитики, отчётов, экземпляров, снимков и сегментов.
Tool | Описание |
| Список наборов снимков экрана |
| Получение набора снимков экрана по ID |
| Создание набора снимков экрана |
| Удаление набора снимков экрана |
| Список снимков экрана в наборе |
| Загрузка снимка экрана |
| Получение сведений о снимке экрана |
| Удаление снимка экрана |
| Изменение порядка снимков экрана в наборе |
| Список наборов превью приложения |
| Получение набора превью приложения по ID |
| Создание набора превью |
| Удаление набора превью |
| Загрузка превью приложения |
| Получение сведений о превью |
| Список превью в наборе превью |
| Изменение порядка всех превью в наборе с проверкой членства и пост-проверкой (postflight) |
| Пакетная загрузка снимков экрана |
| Удаление превью |
Tool | Описание |
| Список пользовательских страниц продукта |
| Получение сведений о странице |
| Создание пользовательской страницы |
| Обновление пользовательской страницы |
| Удаление пользовательской страницы |
| Список версий страницы |
| Получение версии страницы по ID |
| Создание версии страницы |
| Обновление версии страницы |
| Список локализаций версии |
| Получение локализации по ID |
| Создание локализации |
| Обновление локализации |
| Удаление локализации после точного подтверждения |
| Список ID поисковых ключевых слов, назначенных локализации |
| Добавление связей поисковых ключевых слов |
| Удаление связей поисковых ключевых слов после точного подтверждения |
Tool | Описание |
| Список A/B-экспериментов |
| Список V2-экспериментов для версии App Store |
| Получение сведений об эксперименте |
| Создание эксперимента |
| Обновление/запуск/остановка эксперимента |
| Удаление эксперимента |
| Список вариантов эксперимента |
| Получение варианта по ID |
| Создание варианта |
| Обновление варианта |
| Удаление варианта после точного подтверждения |
| Список локализаций варианта |
| Получение локализации варианта по ID |
| Создание локализации варианта |
| Удаление локализации варианта после точного подтверждения |
Инструмент | Описание |
| Список продвигаемых покупок для приложения |
| Получение сведений о продвижении |
| Создание продвижения |
| Обновление видимости продвижения или состояния «включено» |
| Удаление продвижения |
| Замена и проверка полного порядка продвигаемых покупок для приложения |
| Устарел: возвращает рекомендации по миграции; конечная точка отсутствует в закреплённой спецификации Apple OpenAPI 4.4.1 |
| Устарел: возвращает рекомендации по миграции; конечная точка отсутствует в закреплённой спецификации Apple OpenAPI 4.4.1 |
| Устарел: возвращает рекомендации по миграции; конечная точка отсутствует в закреплённой спецификации Apple OpenAPI 4.4.1 |
| Устарел: возвращает рекомендации по миграции; связь отсутствует в закреплённой спецификации Apple OpenAPI 4.4.1 |
Включает инструменты загрузки, получения, удаления и просмотра вложений для рецензирования App Store.
Инструмент | Описание |
| Список общих отправок на рецензирование для приложения |
| Получение одной общей отправки на рецензирование |
| Создание общей отправки на рецензирование для приложения и платформы |
| Список элементов, прикреплённых к отправке на рецензирование |
| Прикрепление версии рецензируемого ресурса к отправке |
| Обновление nullable-состояния |
| Удаление элемента из отправки |
| Отправка всех прикреплённых элементов на рецензирование |
| Отмена поданной общей отправки на рецензирование |
review_submissions_add_item сообщает об успехе, только если ответ Apple подтверждает допустимый идентификатор элемента и точное соответствие запрошенному имени связи, типу JSON:API и идентификатору ресурса. Любое несоответствие возвращается как неподтверждённая запись с шагами восстановления отправки и списка элементов.
Инструмент | Описание |
| Получение метрик производительности/энергопотребления приложения |
| Получение метрик производительности сборки |
| Список диагностических данных для сборки |
| Получение диагностических журналов |
| Получение метрик TestFlight по сбоям, сеансам и отзывам для приложения в разрезе бета-тестеров |
| Получение метрик TestFlight по сбоям, сеансам и отзывам для бета-группы в разрезе бета-тестеров |
| Получение просмотров публичной ссылки, результатов принятия, несоответствий критериям и долей опросов |
| Получение метрик использования TestFlight одним тестером в приложении |
| Получение метрик TestFlight для сборки: сбои, установки, сеансы, отзывы и приглашения |
Примеры использования
Полный рабочий процесс релиза
You: "Release version 2.2.0 of my app with build 456"
Claude will:
1. app_versions_create(app_id, platform: "IOS", version_string: "2.2.0")
2. app_versions_attach_build(version_id, build_id)
3. app_versions_set_review_details(version_id, contact_email: "...")
4. app_versions_submit_for_review(version_id)
5. app_versions_create_phased_release(version_id) # after approvalРаспространение через TestFlight
You: "Create a beta group 'External Testers' and distribute the latest build"
Claude will:
1. beta_groups_create(app_id, name: "External Testers")
2. builds_list(app_id, limit: 1) # find latest
3. builds_set_beta_localization(build_id, locale: "en-US", whats_new: "...")
4. beta_groups_add_testers(group_id, tester_ids: [...])Управление рецензированием
You: "Show me all 1-star reviews from the last week and draft responses"
Claude will:
1. reviews_list(app_id, rating: 1, sort: "-createdDate", limit: 50)
2. reviews_create_response(review_id, response_body: "...") # for eachРабочий процесс с несколькими компаниями
You: "Switch to ClientCorp and check their latest build status"
Claude will:
1. company_switch(company: "ClientCorp")
2. apps_list(limit: 5)
3. builds_list(app_id, limit: 1)
4. builds_get_processing_state(build_id)Ограничения API
Ограничение | Сведения |
Без эмодзи | Поля метаданных (What's New, Description, Keywords) не должны содержать символы эмодзи |
Состояние версии | App Store Connect проверяет доступность состояний для редактирования при обновлении метаданных. Версии со статусами rejected и metadata-rejected можно редактировать и отправлять повторно; опубликованные версии и версии на проверке могут быть отклонены Apple. |
Срок действия JWT | Токены истекают через 20 минут — сервер обновляет их автоматически |
Лимиты запросов | Apple применяет лимиты запросов на аккаунт (документация) |
Формат локали | Используйте стандартные коды: |
Архитектура
Sources/asc-mcp/
├── EntryPoint.swift # Entry point, --workers filtering
├── Core/
│ ├── Application.swift # MCP server setup & initialization
│ └── ASCError.swift # Custom error types
├── Helpers/ # JSON formatting, pagination, safe helpers
├── Models/ # API request/response models
│ ├── AppStoreConnect/ # Apps, versions, localizations
│ ├── Builds/ # Builds, beta details, beta groups
│ ├── AppLifecycle/ # Version lifecycle models
│ ├── InAppPurchases/ # IAP models
│ ├── Subscriptions/ # Subscriptions, offer codes, win-back
│ ├── Marketing/ # Screenshots, custom pages, PPO, promoted
│ ├── Metrics/ # Performance metrics, diagnostics
│ ├── Analytics/ # Sales/financial reports
│ ├── Provisioning/ # Bundle IDs, devices, certificates
│ ├── Shared/ # Shared upload/image types
│ └── ... # AppEvents, AppInfo, Pricing, Users
├── Services/
│ ├── HTTPClient.swift # Actor-based HTTP with retry logic
│ ├── JWTService.swift # ES256 JWT token generation
│ └── CompaniesManager.swift # Multi-account management
└── Workers/ # MCP tool implementations (39 Swift worker classes + MainWorker router)
├── MainWorker/WorkerManager # Central tool registry & routing
├── CompaniesWorker/ # company_* tools
├── AuthWorker/ # auth_* tools
├── AppsWorker/ # apps_* tools
├── AccessibilityWorker/ # accessibility_* tools
├── WebhooksWorker/ # webhooks_* tools
├── XcodeCloudWorker/ # xcode_cloud_* tools
├── BuildsWorker/ # builds_* tools
├── BuildUploadsWorker/ # build_uploads_* tools
├── BuildProcessingWorker/ # builds_*_processing tools
├── ExportComplianceWorker/ # export_compliance_* tools
├── BuildBetaDetailsWorker/ # builds_*_beta_* tools
├── AppLifecycleWorker/ # app_versions_* tools
├── ReviewsWorker/ # reviews_* tools
├── BetaGroupsWorker/ # beta_groups_* tools
├── BetaFeedbackWorker/ # beta_feedback_* tools
├── BetaTestersWorker/ # beta_testers_* tools
├── InAppPurchasesWorker/ # iap_* tools
├── SubscriptionsWorker/ # subscriptions_* tools
├── OfferCodesWorker/ # subscriptions offer-code tools
├── IntroductoryOffersWorker/ # subscriptions intro-offer tools
├── PromotionalOffersWorker/ # subscriptions promotional-offer tools
├── WinBackOffersWorker/ # subscriptions win-back tools
├── SandboxTestersWorker/ # sandbox_* tools
├── BetaAppWorker/ # beta_app_* tools
├── PreReleaseVersionsWorker/ # pre_release_* tools
├── BetaLicenseAgreementsWorker/ # beta_license_* tools
├── ProvisioningWorker/ # provisioning_* tools
├── AppInfoWorker/ # app_info_* tools
├── PricingWorker/ # pricing_* tools
├── UsersWorker/ # users_* tools
├── AppEventsWorker/ # app_events_* tools
├── AnalyticsWorker/ # analytics_* tools
├── ScreenshotsWorker/ # screenshots_* tools
├── CustomProductPagesWorker/ # custom_pages_* tools
├── ProductPageOptimizationWorker/ # ppo_* tools
├── PromotedPurchasesWorker/ # promoted_* tools
├── ReviewAttachmentsWorker/ # review_attachments_* tools
├── ReviewSubmissionsWorker/ # review_submissions_* tools
└── MetricsWorker/ # metrics_* toolsПринципы проектирования
Строгая конкурентность Swift 6 — все воркеры и сервисы являются
Sendable, с корректной изоляцией акторовHTTP-клиент на основе акторов — потокобезопасный, с экспоненциальной задержкой и логикой повторных попыток
Маршрутизация по префиксам —
WorkerManagerмаршрутизирует вызовы инструментов по префиксу имени (без конфигурации)Минимум зависимостей — только MCP Swift SDK
Устранение неполадок
Выполните
~/.mint/bin/asc-mcp --version, чтобы проверить установку независимо от MCP-клиента.Убедитесь, что MCP-клиент использует абсолютный путь к установленному исполняемому файлу.
Для Codex выполните
codex mcp listиcodex mcp get asc-mcp --json.Для Claude Code выполните
claude mcp get asc-mcpиclaude mcp list.Проверьте либо настроенный файл
companies.json, либо переменные окружения, используемые выбранной конфигурацией.Убедитесь, что путь к каждому ключу
.p8является абсолютным и файл существует.Перезапустите графические клиенты после изменения их MCP-конфигурации, затем просмотрите журнал вывода MCP клиента.
Убедитесь, что Key ID и Issuer ID совпадают с указанными в App Store Connect
Убедитесь, что файл
.p8— это оригинальная загрузка (не изменённая)Проверьте, что ключ API не был отозван
JWT-токены обновляются автоматически, но если ключ недействителен, все запросы будут завершаться ошибкой
apps_update_metadata отправляет PATCH-запрос с метаданными в App Store Connect после локальной проверки текста, локали и URL. Apple решает, доступно ли текущее состояние версии для редактирования. Версии со статусами rejected и metadata-rejected можно редактировать и отправлять повторно; опубликованные версии, версии на проверке или иным образом заблокированные могут вернуть ошибку Apple API.
Используйте builds_get_processing_status для проверки текущего состояния обработки и builds_check_readiness для проверки готовности к App Store/TestFlight. Обработка сборки Apple обычно занимает 5–30 минут, но в пиковые периоды может быть дольше.
HTTP-клиент автоматически повторяет запросы с экспоненциальной задержкой при ответах 429. Если вы постоянно упираетесь в лимиты, снизьте частоту вызовов API или используйте пагинацию с меньшим размером страниц.
Получение помощи
Прежде чем открывать отчёт, поищите в существующих issue. Если проблема новая, откройте issue и укажите:
версию macOS и способ установки;
название и версию MCP-клиента;
выбранное значение
--workers, если оно задано;точный текст ошибки и минимально воспроизводимый запрос.
Перед публикацией удалите из логов Key ID, Issuer ID, закрытые ключи, подписанные URL, токены и данные учётной записи. Сообщайте об уязвимостях безопасности в приватном порядке, следуя SECURITY.md. По вопросам вклада в код см. CONTRIBUTING.md.
Разработка
Сборка
swift build # Debug build
swift build -c release # Release build (optimized)
swift package clean # Clean build artifactsТестовый режим
.build/debug/asc-mcp --test # Runs built-in integration testsДобавление нового инструмента
Создайте метод-обработчик в соответствующем файле
Worker+Handlers.swiftДобавьте определение инструмента в
Worker+ToolDefinitions.swiftЗарегистрируйте его в методе
getTools()воркераДобавьте case маршрутизации в switch
handleTool()воркераWorkerManagerавтоматически маршрутизирует по префиксу — там изменения не нужны
Добавление нового воркера
Создайте каталог:
Workers/MyWorker/Создайте 3 файла:
MyWorker.swift,MyWorker+ToolDefinitions.swift,MyWorker+Handlers.swiftДобавьте свойство воркера и его инициализацию в
WorkerManager.swiftДобавьте правило маршрутизации в
WorkerManager.registerWorkers()Добавьте вспомогательный метод
getMyTools()
Участие в разработке
Мы приветствуем ваш вклад! Подробнее см. в Руководстве по участию.
Лицензия
Этот проект распространяется под лицензией MIT. Подробности см. в файле LICENSE.
Благодарности
Model Context Protocol — спецификация протокола и Swift SDK
App Store Connect API — официальный REST API Apple
Это неофициальный инструмент, поддерживаемый сообществом, не связан с Apple Inc. и не одобрен ею.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
- app-managerOAuthapp.lance
App Store Connect operator for AI agents: icons, TestFlight builds, listings, IAP, rejection fixes.
MCP server for Appcircle mobile CI/CD platform.
One MCP endpoint for Claude, GPT & Gemini: 100+ tools + no-code connectors + agent workers.
Related MCP Servers
- AlicenseAqualityDmaintenanceA Model Context Protocol (MCP) server for Apple's App Store Connect API. Manage your iOS, macOS, tvOS, and visionOS apps directly from Claude, Cursor, or any MCP-compatible client.528924MIT
- AlicenseAqualityCmaintenanceA Model Context Protocol (MCP) server that connects Cursor, Claude Desktop, and other MCP clients to the official App Store Connect API—so you can manage iOS/macOS apps, TestFlight, in-app subscriptions, and store metadata via chat or automated tool calls.6913913MIT
- AlicenseAqualityAmaintenanceAn opinionated MCP server for App Store Connect that provides 13 curated tools, slash-command workflows, and a Claude Skill to manage apps, reviews, sales, and pre-submission audits via natural language.41110MIT
- AlicenseNot gradedqualityAmaintenanceA Model Context Protocol server that exposes the entire Apple App Store Connect API (1,200+ operations) as MCP tools, enabling AI assistants to query apps, manage builds, handle submissions, read analytics, and more.30MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/zelentsov-dev/asc-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server