MCP server for Yandex Direct API: campaigns, ads, keywords, bids, reports. Click.ru or OAuth.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
💡 Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
MCP-сервер для Yandex Direct JSON API v5 на Bun + TypeScript.
50 инструментов: кампании (включая ЕПК, стратегии торгов и цели Метрики), группы объявлений, объявления (текстовые и комбинаторные), расширения (быстрые ссылки, уточнения), изображения, ставки и прогноз цены клика, корректировки ставок, ключевые фразы, отчёты, справочники.
Скопируйте .env.example в .env и заполните один из двух режимов (переменные окружения имеют приоритет над .env):
A. Прямой режим — свой OAuth-токен Яндекс.Директа:
По умолчанию используется версия API v501 (обязательна для ЕПК); переключить можно через YANDEX_DIRECT_API_VERSION=v5.
B. Через прокси Click.ru — OAuth-токен Яндекса не нужен:
Токен создаётся в профиле https://click.ru/userinfo.html → поле «API Token» → «Создать». Аккаунт Яндекс.Директа должен быть подключён в Click.ru. Справка: https://help.click.ru/81, https://api.click.ru/V0/docs/.
Прокси Click.ru работает только с продакшн-API Яндекса (песочница недоступна).
В HTTP-режиме MCP_AUTH_TOKEN обязателен — см. HTTP-режим.
Обязательный гейт перед изменениями — мок-тесты (тела запросов к API, без сети) и тесты HTTP-транспорта (авторизация, CORS):
Публикация автоматическая: при выпуске релиза на GitHub workflow прогоняет проверки, публикует пакет в npm и обновляет запись в реестре MCP. Тег релиза должен совпадать с версией в package.json (версия 0.5.0 → тег v0.5.0), иначе публикация останавливается. Версию поднимают в трёх местах: package.json, server.json (корневое поле и packages[0].version) и CHANGELOG.md.
Авторизация в обоих реестрах идёт через доверенного издателя по GitHub OIDC — долгоживущих токенов в секретах нет.
E2E-прогон на песочнице (создаёт и удаляет тестовые кампании; нужны YANDEX_DIRECT_TOKEN и YANDEX_DIRECT_SANDBOX=true):
Ограничения песочницы Яндекса (в проде их нет; часть лечится пересозданием песочницы в кабинете — Инструменты → Настройки API → Песочница). E2E помечает такие шаги как «пропуск», а не как ошибку:
adgroups.add возвращает ID, но группа не появляется в adgroups.get, а ads.add отвечает «Группа объявлений не найдена» — заливка объявлений в песочнице непроверяема;bidmodifiers.add возвращает ID, но bidmodifiers.get всегда пуст при любом фильтре;sitelinks отвечает «Сервис временно недоступен»..mcp.json в корне вашего проекта (см. также .mcp.json.example):
Для прямого режима в env вместо CLICK_RU_* укажите YANDEX_DIRECT_TOKEN.
📋 Инструкция для AI-агента — скопируйте и передайте своему агенту (Claude Code / Codex), подставив ключи:
Установи и подключи MCP-сервер «Yandex Direct»: склонируй
https://github.com/ai-hub-open/yandex-direct-mcp.git, проверь Bun (bun --version, если нет — установи с https://bun.sh), выполниbun installв корне репозитория. Зарегистрируй локальный stdio-MCP: командаbun, аргументыrun <абсолютный_путь_к_репо>/src/index.ts, переменные окружения — мои ключи:CLICK_RU_PROXY=true,CLICK_RU_TOKEN=<...>,CLICK_RU_CLIENT_LOGIN=<...>(илиYANDEX_DIRECT_TOKEN=<...>для прямого режима). Проверьtools/listи сообщи результат.
MCP_AUTH_TOKEN обязателен: без него сервер не стартует, потому что открытый эндпоинт даёт полный доступ к рекламному кабинету. Запросы должны нести Authorization: Bearer <секрет>. Если сервер закрыт reverse-proxy или слушает только localhost, запуск без авторизации подтверждается явно: MCP_ALLOW_ANONYMOUS=true.
Переменные: MCP_PORT (3000), MCP_HOST (0.0.0.0), MCP_AUTH_TOKEN, MCP_ALLOW_ANONYMOUS, MCP_ALLOWED_ORIGIN. CORS-заголовки по умолчанию не выдаются (MCP-клиенты ходят не из браузера) — разрешите конкретный источник через MCP_ALLOWED_ORIGIN, если он действительно нужен.
| Метод + путь | Назначение |
|---|---|
POST /mcp | JSON-RPC 2.0 запрос (или батч) |
GET /healthz | health check |
GET /mcp/tools | список инструментов (отладка) |
Multi-tenant: креды можно передавать заголовками на каждый запрос (перекрывают .env) — один инстанс обслуживает несколько клиентов:
В режиме Click.ru по HTTP обязательны все три заголовка. Сервер можно запустить без кред в .env — тогда каждый запрос обязан нести заголовки.
⚠️ Безопасность: при публикации в сеть держите MCP_AUTH_TOKEN заданным и закройте порт за reverse-proxy с TLS. Запуск с MCP_ALLOW_ANONYMOUS=true на MCP_HOST=0.0.0.0 открывает кабинет всем, кто дотянется до порта.
Любой инструмент, меняющий кабинет, принимает dry_run: true — вернёт тело запроса, которое ушло бы в API, и ничего не изменит. Валидация параметров при этом выполняется полностью, так что предпросмотр ловит ошибки до записи:
Любой отказ Директа возвращается агенту помеченным как ошибка, с причиной и следующим шагом — включая частичные отказы, когда запрос выполнен, но отдельные объекты не приняты. Пример реального ответа:
Ниже подсказки всегда идёт полный ответ API — для разбора нестандартных случаев.
Полное описание инструментов (tools/list) занимает около 16 800 токенов — 8,4% окна на 200k и 1,7% на 1M. Три четверти веса приходятся на JSON-схемы параметров, на текстовые описания — 17%.
Сокращённый режим (отдельные методы «список / описание / вызов») решено не вводить: выигрыш не оправдывает потерю штатной валидации аргументов на стороне клиента и лишние round-trip'ы, а доля окна не критична. Решение пересмотреть, если число инструментов заметно вырастет.
Замер воспроизводится:
Мост покрывает только API Яндекс.Директа. Смежные задачи живут в других контурах и сюда не встраиваются:
forecast_bids.counter_ids, priority_goals, goal_id в стратегиях) — на этом граница.Причина: «одно подключение к Яндексу = Директ + Метрика + Вордстат» — это уровень пакета или прокси (например Click.ru), а не одного сервера. Смешение трёх API в одном мосте увеличивает связность и зону отказа.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/yandex-direct-mcp)<a href="https://allmcps.com/mcp/yandex-direct-mcp"><img src="https://allmcps.com/api/badge/yandex-direct-mcp?style=directory" alt="Yandex Direct Mcp on AllMCPs" /></a>