yandex-direct-mcp
Health Warn
- License — License: Apache-2.0
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Fail
- process.env — Environment variable access in scripts/http-tests.ts
- network request — Outbound network request in scripts/http-tests.ts
- Hardcoded secret — Potential hardcoded credential in scripts/http-tests.ts
- process.env — Environment variable access in scripts/sandbox-e2e.ts
- network request — Outbound network request in src/client.ts
- process.env — Environment variable access in src/index.ts
- process.env — Environment variable access in src/loadEnv.ts
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
MCP server for Yandex Direct API: campaigns, ads, keywords, bids, reports. Click.ru proxy or direct OAuth with sandbox. Docs in Russian.
Yandex Direct MCP
MCP-сервер для Yandex Direct JSON API v5 на Bun + TypeScript.
49 инструментов: кампании (включая ЕПК, стратегии торгов и цели Метрики), группы объявлений, объявления (текстовые и комбинаторные), расширения (быстрые ссылки, уточнения), изображения, ставки, корректировки ставок, ключевые фразы, отчёты, справочники.
Требования
- Bun 1.1+
Установка
git clone https://github.com/ai-hub-open/yandex-direct-mcp.git
cd yandex-direct-mcp
bun install
Настройка
Скопируйте .env.example в .env и заполните один из двух режимов (переменные окружения имеют приоритет над .env):
A. Прямой режим — свой OAuth-токен Яндекс.Директа:
YANDEX_DIRECT_TOKEN=y0__...
YANDEX_DIRECT_SANDBOX=false # true — песочница
По умолчанию используется версия API v501 (обязательна для ЕПК); переключить можно через YANDEX_DIRECT_API_VERSION=v5.
B. Через прокси Click.ru — OAuth-токен Яндекса не нужен:
CLICK_RU_PROXY=true
CLICK_RU_TOKEN=<API-токен из профиля click.ru>
CLICK_RU_CLIENT_LOGIN=<логин аккаунта Яндекс.Директа>
CLICK_RU_USER_ID=<ID пользователя click.ru> # только при работе из мастер-аккаунта
Токен создаётся в профиле https://click.ru/userinfo.html → поле «API Token» → «Создать». Аккаунт Яндекс.Директа должен быть подключён в Click.ru. Справка: https://help.click.ru/81, https://api.click.ru/V0/docs/.
Прокси Click.ru работает только с продакшн-API Яндекса (песочница недоступна).
Запуск
bun run src/index.ts # stdio — для локальных MCP-клиентов
MCP_AUTH_TOKEN=<секрет> bun run src/index.ts --http # HTTP-сервер на :3000
В HTTP-режиме MCP_AUTH_TOKEN обязателен — см. HTTP-режим.
Тесты
Обязательный гейт перед изменениями — мок-тесты (тела запросов к API, без сети) и тесты HTTP-транспорта (авторизация, CORS):
bun run test
E2E-прогон на песочнице (создаёт и удаляет тестовые кампании; нужны YANDEX_DIRECT_TOKEN и YANDEX_DIRECT_SANDBOX=true):
bun run test:sandbox
Ограничения песочницы Яндекса (в проде их нет; часть лечится пересозданием песочницы в кабинете — Инструменты → Настройки API → Песочница). E2E помечает такие шаги как «пропуск», а не как ошибку:
adgroups.addвозвращает ID, но группа не появляется вadgroups.get, аads.addотвечает «Группа объявлений не найдена» — заливка объявлений в песочнице непроверяема;bidmodifiers.addвозвращает ID, ноbidmodifiers.getвсегда пуст при любом фильтре;- сервис
sitelinksотвечает «Сервис временно недоступен».
Подключение к Claude Code
.mcp.json в корне вашего проекта (см. также .mcp.json.example):
{
"mcpServers": {
"yandex-direct": {
"command": "bun",
"args": ["run", "/абсолютный/путь/к/yandex-direct-mcp/src/index.ts"],
"env": {
"CLICK_RU_PROXY": "true",
"CLICK_RU_TOKEN": "<ваш токен>",
"CLICK_RU_CLIENT_LOGIN": "<логин Директа>"
}
}
}
}
Для прямого режима в 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и сообщи результат.
HTTP-режим
MCP_TRANSPORT=http MCP_PORT=3000 MCP_AUTH_TOKEN=<секрет> bun run src/index.ts
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) — один инстанс обслуживает несколько клиентов:
X-Yandex-Token: <OAuth> X-Click-Ru-Token: <токен>
X-Yandex-Sandbox: true|false X-Click-Ru-User-Id: <ID>
X-Yandex-Api-Version: v501|v5 X-Client-Login: <логин Директа>
X-Click-Ru-Base-Url: <база API Click.ru>
В режиме Click.ru по HTTP обязательны все три заголовка. Сервер можно запустить без кред в .env — тогда каждый запрос обязан нести заголовки.
⚠️ Безопасность: при публикации в сеть держите MCP_AUTH_TOKEN заданным и закройте порт за reverse-proxy с TLS. Запуск с MCP_ALLOW_ANONYMOUS=true на MCP_HOST=0.0.0.0 открывает кабинет всем, кто дотянется до порта.
Docker
cp .env.example .env # заполните ключи и MCP_AUTH_TOKEN
docker compose up -d --build
curl http://localhost:3000/healthz
Инструменты (49)
- Campaigns: get / add / update / delete / suspend / resume — текстовые кампании и ЕПК (единая перформанс-кампания), стратегии торгов с недельным бюджетом, счётчики Метрики и приоритетные цели
- AdGroups: get / add / update / delete — включая группы ЕПК (UnifiedAdGroup)
- Ads: get / add / add_responsive (комбинаторное объявление ЕПК) / update (текстовые и комбинаторные) / delete / suspend / resume / moderate
- AdImages: add (с кропом) / get
- Sitelinks: add / get / delete — наборы быстрых ссылок
- AdExtensions: add / get / delete — уточнения
- BidModifiers: devices / regional / retargeting / demographics / set / delete / get — корректировки ставок на запись и чтение
- Keywords: get / add / update / delete / suspend / resume
- KeywordBids: set / get — ставки по фразам и данные аукциона (объёмы трафика, цены)
- Reports: campaign / ad / search_queries / custom (произвольный тип и набор столбцов)
- Dictionaries: regions / currencies / interests / all
Предпросмотр записи (dry-run)
Любой инструмент, меняющий кабинет, принимает dry_run: true — вернёт тело запроса, которое ушло бы в API, и ничего не изменит. Валидация параметров при этом выполняется полностью, так что предпросмотр ловит ошибки до записи:
{ "name": "yandex_direct_campaigns_add", "arguments": { "name": "Тест", "start_date": "2026-08-01", "dry_run": true } }
Что осознанно вне этого моста
Мост покрывает только API Яндекс.Директа. Смежные задачи живут в других контурах и сюда не встраиваются:
- Вордстат (подбор семантики, частотность, прогноз бюджета) — отдельный API Яндекса, не Директ. Остаётся за скиллом или отдельным MCP.
- Метрика как сервис (создание целей, чтение статистики, сегменты) — отдельный API Метрики. Мост Директа привязывает цель по готовому ID (
counter_ids,priority_goals,goal_idв стратегиях) — на этом граница.
Причина: «одно подключение к Яндексу = Директ + Метрика + Вордстат» — это уровень пакета или прокси (например Click.ru), а не одного сервера. Смешение трёх API в одном мосте увеличивает связность и зону отказа.
Лицензия
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found