App Store Connect MCP Server
MCP-сервер App Store Connect — Режим кода (Code Mode)
923 эндпоинта. 2 инструмента. Спецификация И ЕСТЬ реализация.
Проблема
Традиционные MCP-серверы оборачивают каждый API-эндпоинт в отдельный инструмент. API App Store Connect от Apple содержит 923 эндпоинта. Это означает 923 определения инструментов, более 100 тысяч токенов контекста и необходимость выпускать новую версию каждый раз, когда Apple добавляет новый эндпоинт.
Related MCP server: mcp-appstore-connect
Решение
Режим кода: 2 инструмента заменяют 923.
Инструмент | Что он делает |
| Пишите JS для запроса к спецификации OpenAPI от Apple. Находите эндпоинты, проверяйте параметры, читайте схемы. |
| Пишите JS для вызова API. Авторизация происходит автоматически. Объединяйте несколько вызовов. |
LLM пишет запрос. Спецификация И ЕСТЬ реализация. Добавление эндпоинтов = Apple обновляет свою спецификацию. С нашей стороны — ноль изменений в коде.
Traditional MCP: 923 endpoints → 923 tools → ~100K tokens → constant maintenance
Code Mode: 923 endpoints → 2 tools → ~1K tokens → zero maintenanceБыстрый старт
1. Получите учетные данные App Store Connect
Перейдите в App Store Connect → Пользователи и доступ → Интеграции → Ключи
Нажмите «+» для создания нового ключа (роль «Администратор» или «Финансы»)
Скачайте файл
.p8(его можно скачать только один раз!)Запишите свой ID ключа (Key ID) и ID эмитента (Issuer ID)
2. Установка через Claude Code
claude mcp add appstore-connect -s user \
-e APP_STORE_KEY_ID=YOUR_KEY_ID \
-e APP_STORE_ISSUER_ID=YOUR_ISSUER_ID \
-e APP_STORE_P8_PATH=/absolute/path/to/AuthKey_XXXXXXXXXX.p8 \
-e APP_STORE_VENDOR_NUMBER=YOUR_VENDOR_NUMBER \
-- npx -y @trialanderror-ai/appstore-connect-mcpФлаг -s user делает сервер доступным во всех ваших проектах. Уберите -e APP_STORE_VENDOR_NUMBER, если вам не нужны финансовые отчеты.
Или пропустите встроенную форму переменных окружения и задайте их в своей оболочке / конфигурации MCP (см. ниже).
3. Настройка учетных данных
Три обязательные переменные окружения (одна опциональная):
Переменная | Описание |
| 10-символьный ID ключа |
| UUID ID эмитента |
| Абсолютный путь к вашему файлу |
| Требуется для финансовых отчетов |
Настройка для Claude Code
Либо задайте переменные окружения в своей оболочке, либо передайте их через .mcp.json:
{
"mcpServers": {
"appstore-connect": {
"command": "npx",
"args": ["-y", "@trialanderror-ai/appstore-connect-mcp"],
"env": {
"APP_STORE_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_P8_PATH": "/path/to/AuthKey_XXXXXXXXXX.p8",
"APP_STORE_VENDOR_NUMBER": "YOUR_VENDOR_NUMBER"
}
}
}
}Настройка для Claude Desktop
Добавьте в ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"appstore-connect": {
"command": "npx",
"args": ["-y", "@trialanderror-ai/appstore-connect-mcp"],
"env": {
"APP_STORE_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_P8_PATH": "/path/to/AuthKey_XXXXXXXXXX.p8"
}
}
}
}Сборка из исходного кода (альтернатива)
git clone https://github.com/TrialAndErrorAI/appstore-connect-mcp
cd appstore-connect-mcp
npm install
npm run buildЗатем укажите в конфигурации MCP путь node /path/to/appstore-connect-mcp/dist/index.js вместо npx.
Примеры использования
Поиск эндпоинтов
search: "Find all endpoints related to customer reviews"LLM пишет:
const reviews = Object.entries(spec.paths)
.filter(([p]) => p.includes('customerReview'))
.map(([path, methods]) => ({
path,
methods: Object.keys(methods).map(m => m.toUpperCase())
}));
return reviews;Список ваших приложений
execute: "List all my apps"LLM пишет:
const apps = await api.request({ method: 'GET', path: '/v1/apps' });
return apps.data.map(a => ({ id: a.id, name: a.attributes.name }));Объединение нескольких вызовов
execute: "Get latest reviews for my first app"LLM пишет:
const apps = await api.request({ method: 'GET', path: '/v1/apps', params: { limit: '1' } });
const appId = apps.data[0].id;
const reviews = await api.request({
method: 'GET',
path: `/v1/apps/${appId}/customerReviews`,
params: { limit: '5', sort: '-createdDate' }
});
return {
app: apps.data[0].attributes.name,
reviews: reviews.data.map(r => ({
rating: r.attributes.rating,
title: r.attributes.title,
body: r.attributes.body
}))
};К чему вы получаете доступ
Ко всем 923 эндпоинтам API App Store Connect, включая:
Категория | Эндпоинты | Что вы получаете |
Метаданные приложения | 29 | Название, подзаголовок, ключевые слова, описание — чтение И запись |
Аналитика | 10 | Показы, просмотры страниц, загрузки, атрибуция источников |
Продажи и финансы | 2 | Доход, количество единиц, выручка по странам |
Отзывы клиентов | 5 | Рейтинги, текст отзывов, ответы на отзывы |
Подписки | 30 | Управление подписками, цены, группы, предложения |
Внутриигровые покупки | 29 | Управление IAP, промокоды |
Версии | 28 | Управление версиями, поэтапное развертывание |
Скриншоты | 12 | Загрузка, изменение порядка, управление наборами скриншотов |
A/B тестирование | 24 | Эксперименты со страницами продуктов, варианты тестирования |
Пользовательские страницы продуктов | 18 | Пользовательские целевые страницы для рекламных кампаний |
TestFlight | 23 | Бета-группы, тестировщики, сборки |
Ценообразование | 11 | Ценообразование по территориям, ценовые уровни |
Сборки | 29 | Управление сборками, состояние обработки |
См. API-COVERAGE.md для получения полной сгруппированной карты.
Как это работает
Claude writes JavaScript
│
▼
┌─────────────────────────────────────────────────┐
│ search({ code }) │
│ Sandbox executes code against OpenAPI spec │
│ 923 paths, 1337 schemas — pre-resolved $refs │
│ Returns: matching endpoints + parameters │
└─────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ execute({ code }) │
│ Sandbox executes code against auth'd client │
│ JWT injected — code never sees credentials │
│ Supports GET/POST/PATCH/DELETE + chaining │
│ Auto-decompresses gzipped report responses │
│ Returns: API response (truncated to 40K chars) │
└─────────────────────────────────────────────────┘Безопасность
Код выполняется в песочнице Node.js
vmНедоступны
fetch,require,process,eval,setTimeoutУчетные данные внедряются через привязку — они никогда не видны сгенерированному коду
Ответы обрезаются для предотвращения переполнения контекста
В качестве глобальных объектов доступны только
spec(поиск) илиapi(выполнение)
Архитектура
src/
├── auth/jwt-manager.ts — JWT with P8 key, ES256, 19-min cache
├── api/client.ts — HTTP client, rate limiting, gzip handling
├── spec/
│ ├── openapi.json — Apple's official spec (923 endpoints)
│ └── loader.ts — Loads + resolves $refs for flat traversal
├── executor/sandbox.ts — vm-based sandboxed execution
├── server/mcp-server.ts — MCP server (search, execute, test_connection)
└── index.ts — Entry pointПочему режим кода?
Традиционный MCP | Режим кода | |
Инструменты | 1 на эндпоинт (923) | 2 всего |
Токены контекста | ~100K+ | ~1K |
Добавление эндпоинтов | Новый инструмент + код + схема + релиз | Apple обновляет спецификацию. Ноль изменений. |
Цепочки вызовов | Повторный вход в LLM между каждым | Одно выполнение, несколько вызовов |
Обслуживание | Обновление 923 определений инструментов | Обновление 1 файла спецификации |
Вдохновлено паттерном Code Mode от Cloudflare.
Разработка
npm install # Install dependencies
npm run build # Compile + copy spec
npm run dev # Watch mode (tsx)
npm start # Run compiled server
npm run type-check # TypeScript checkЛицензия
MIT — Используйте, изменяйте, продавайте. Просто сделайте так, чтобы это работало.
Авторы
Создано Trial and Error Inc. Используется в продакшене RenovateAI, ИИ-приложением для дизайна интерьера для iOS, Android и веба. Паттерн режима кода от Cloudflare.
«Мы не реализуем отдельные эндпоинты. Мы реализуем возможность вызывать ЛЮБОЙ эндпоинт».
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
ASO analytics and App Store optimization tools for indie iOS developers and AI agents.
- app-managerOAuthapp.lance
App Store Connect operator for AI agents: icons, TestFlight builds, listings, IAP, rejection fixes.
Analyze and manage Apple Ads from your AI assistant with RevenueCat insights and safety controls.
Live App Store & Google Play data for AI agents: app discovery, ASO keywords, reviews.
Related MCP Servers
- AlicenseBqualityCmaintenanceEnables interaction with Apple's App Store Connect API through natural language to manage apps, beta testing, localizations, analytics, sales reports, and CI/CD workflows for iOS and macOS development.31123MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to manage Apple App Store Connect operations including app management, TestFlight, analytics, reviews, subscriptions, and more through 54 tools.614911MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to manage Apple App Store Connect through the official API, including apps, metadata, reviews, TestFlight, provisioning, users, and reports.MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to manage Apple App Store Connect resources like apps, builds, TestFlight, and reviews through natural language.2021MIT
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/TrialAndErrorAI/appstore-connect-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server