Skip to main content
Glama
TrialAndErrorAI

App Store Connect MCP Server

MCP-сервер App Store Connect — Режим кода (Code Mode)

923 эндпоинта. 2 инструмента. Спецификация И ЕСТЬ реализация.

TypeScript MCP SDK License: MIT API Version

Проблема

Традиционные MCP-серверы оборачивают каждый API-эндпоинт в отдельный инструмент. API App Store Connect от Apple содержит 923 эндпоинта. Это означает 923 определения инструментов, более 100 тысяч токенов контекста и необходимость выпускать новую версию каждый раз, когда Apple добавляет новый эндпоинт.

Related MCP server: mcp-appstore-connect

Решение

Режим кода: 2 инструмента заменяют 923.

Инструмент

Что он делает

search(code)

Пишите JS для запроса к спецификации OpenAPI от Apple. Находите эндпоинты, проверяйте параметры, читайте схемы.

execute(code)

Пишите 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

  1. Перейдите в App Store Connect → Пользователи и доступ → Интеграции → Ключи

  2. Нажмите «+» для создания нового ключа (роль «Администратор» или «Финансы»)

  3. Скачайте файл .p8 (его можно скачать только один раз!)

  4. Запишите свой 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. Настройка учетных данных

Три обязательные переменные окружения (одна опциональная):

Переменная

Описание

APP_STORE_KEY_ID

10-символьный ID ключа

APP_STORE_ISSUER_ID

UUID ID эмитента

APP_STORE_P8_PATH

Абсолютный путь к вашему файлу .p8

APP_STORE_VENDOR_NUMBER (опционально)

Требуется для финансовых отчетов

Настройка для 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.

Maintenance

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

Latest Blog Posts

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