Yandex Ads MCP Server
MCP-сервер для управления рекламой в Яндекс Директе, сегментами в Яндекс Аудиториях, аналитикой в Яндекс Метрике и подбором ключевых слов через Wordstat API.
152 инструмента для полного цикла управления рекламой из AI-ассистентов (Claude Code, Cursor, Windsurf и др.).
Возможности
Быстрый старт
1. Установка
git clone https://github.com/Yurich-ru/yandex-ads-mcp.git
cd yandex-ads-mcp
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
2. Настройка токенов
Скопируйте .env.example в .env и заполните:
cp .env.example .env
3. Подключение к Claude Code
Добавьте в ~/.claude.json (секция mcpServers):
{
"yandex-ads": {
"type": "stdio",
"command": "/path/to/yandex-ads-mcp/venv/bin/python",
"args": ["/path/to/yandex-ads-mcp/server.py"],
"env": {
"YD_OAUTH_TOKEN": "YOUR_TOKEN",
"YC_FOLDER_ID": "YOUR_FOLDER_ID"
}
}
}
Перезапустите Claude Code.
Получение токенов
OAuth-токен для Директа, Метрики и Аудиторий
Один токен используется для Директа, Метрики и Аудиторий — если все сервисы живут в одном Яндекс-аккаунте.
Сервисы в разных аккаунтах? OAuth-токен привязан к аккаунту, поэтому одним токеном два аккаунта не покрыть. Выпустите токен в каждом аккаунте и разложите их по переменным:
YD_OAUTH_TOKEN— аккаунт с кабинетом Директа,YD_METRIKA_TOKEN/YD_AUDIENCE_TOKEN— аккаунт с Метрикой и Аудиториями.
Шаг 1: Создать OAuth-приложение
- Зайдите на https://oauth.yandex.ru/
- Нажмите "Зарегистрировать новое приложение"
- Redirect URI: выберите "Подставить URL для разработки" (
https://oauth.yandex.ru/verification_code) - В разделе "Доступ к данным" отметьте:
- Яндекс Директ →
direct:api(управление рекламой) - Яндекс Метрика →
metrika:read(чтение данных) иmetrika:write(управление целями) - Яндекс Аудитории → создание/редактирование сегментов и чтение параметров сегментов
- Яндекс Cloud →
cloud:auth(для Wordstat API)
- Яндекс Директ →
- Сохраните — запомните Client ID
Если приложение уже создано без прав Аудиторий — отредактируйте его на https://oauth.yandex.ru/, добавьте доступ к Яндекс Аудиториям и получите новый токен (шаг 2). Без этого инструменты
yd_audience_*возвращают403 access_denied.
Шаг 2: Получить токен
Откройте в браузере (подставьте свой Client ID):
https://oauth.yandex.ru/authorize?response_type=token&client_id=YOUR_CLIENT_ID
Авторизуйтесь → токен будет в адресной строке после access_token=.
Шаг 3: Подать заявку на API Директа
- Зайдите в Яндекс Директ → Настройки → API
- Нажмите "Получить доступ к API"
- Укажите Client ID приложения
- Опишите назначение: "Управление рекламными кампаниями через собственное приложение"
- Ожидайте одобрения (обычно несколько часов)
Folder ID для Wordstat API
Wordstat API работает через Yandex Cloud. Нужен платёжный аккаунт (карта не списывается, есть бесплатная квота).
Шаг 1: Зарегистрироваться в Yandex Cloud
- Зайдите на https://console.yandex.cloud/
- Создайте платёжный аккаунт (привяжите карту)
Шаг 2: Получить Folder ID
- В консоли Cloud → выберите каталог (обычно
default) - Скопируйте ID каталога (формат:
b1gxxxxxxxxxx)
Шаг 3: Назначить роль
- Перейдите в каталог → "Права доступа"
- Назначьте своему пользователю роль
search-api.executor
Шаг 4: Убедиться что OAuth-токен имеет scope cloud:auth
Если при создании приложения не добавляли Yandex Cloud — отредактируйте приложение на https://oauth.yandex.ru/ → добавьте cloud:auth → получите новый токен.
Переменные окружения
Безопасность и работа с боевыми кабинетами
Все защитные механизмы — opt-in через env-переменные (см. таблицу выше). С дефолтными настройками поведение не меняется по сравнению с базовым MCP-сервером.
- Read-only режим (
YD_READONLY=true) — агент видит и анализирует данные, но физически не может создать/изменить/удалить кампании, ставки, счётчики или цели. Блокировка происходит до сетевого вызова. - Confirm-режим (
YD_CONFIRM=true) — любой изменяющий вызов сначала возвращает превью операции; чтобы выполнить, нужно повторить вызов сconfirm=true. В схемах мутирующих инструментов автоматически появляется параметрconfirm. - Мульти-аккаунт — у инструментов Директа есть необязательный аргумент
client_loginдля выбора кабинета на уровне вызова (передаётся черезcontextvars, безопасно для конкурентных вызовов);YD_ALLOWED_LOGINSограничивает, к каким логинам агент вообще имеет доступ. Два режима:- агентский — логин субклиента передаётся в заголовке
Client-Loginс основным токеном; - несколько самостоятельных кабинетов (не агентство) — у каждого кабинета свой токен в
YD_DIRECT_TOKENS=логин:токен,...;client_loginс таким логином переключает токен.yd_direct_accounts_getпоказывает все доступные кабинеты с живой проверкой.
- агентский — логин субклиента передаётся в заголовке
- Partial-success — изменяющие ответы Директа разбираются на per-item
Errors/Warningsи сводятся в поле_partial_success, чтобы наполовину провалившаяся массовая операция не выглядела как успех. - Retry / backoff — экспоненциальный backoff на 429/5xx для вызовов Direct API, с уважением заголовка
Retry-After. Балансы очков Direct API из заголовкаUnitsлогируются (WARN если осталось менее 5%). - IAM-токен — TTL берётся из ответа Yandex Cloud IAM (
expiresAt), а не из захардкоженных 11 часов. - Логи по умолчанию не пишутся на диск — файл
yandex-ads.logсоздаётся только при заданномYD_LOG_FILE. Тела запросов/ответов пишутся только приYD_LOG_BODIES=true(могут содержать данные кампаний; токены никогда не логируются).
Рекомендуемая конфигурация для агента, работающего с боевыми кабинетами:
YD_READONLY=true # либо
YD_CONFIRM=true # для интерактивного подтверждения мутаций
YD_ALLOWED_LOGINS=client1,client2 # для агентского аккаунта
Офлайн-проверка защитной обвязки (без сети и токенов): python3 test_safety.py.
Полный список инструментов
Яндекс Директ — Кампании
Яндекс Директ — Группы объявлений
Яндекс Директ — Объявления
Для изменения комбинаторного объявления передайте в yd_ads_update набор заголовков и текстов в
responsive_ad. Поля titles (1–7) и texts (1–3) обязательны; также нужен href или
business_id. Быстрые ссылки прикрепляются через responsive_ad.sitelink_set_id. Не смешивайте
responsive_ad с полями старого текстового формата в одном объявлении. Комбинаторные объявления
обновляются через обязательную для этого типа версию Direct API v501.
{
"ads": [{
"id": 123456,
"responsive_ad": {
"titles": ["Основной заголовок", "Дополнительный заголовок"],
"texts": ["Текст объявления"],
"href": "https://example.com",
"sitelink_set_id": 123456
}
}]
}
Яндекс Директ — Ключевые фразы и автотаргетинг
Автотаргетинг создаётся как специальный критерий ---autotargeting, а его настройки передаются
в autotargeting_settings. Для изменения существующего критерия сначала получите его ID через
yd_keywords_get, затем вызовите yd_keywords_update:
{
"keywords": [{
"id": 123456789,
"autotargeting_settings": {
"categories": {
"exact": "YES",
"narrow": "YES",
"alternative": "NO",
"accessory": "NO",
"broader": "NO"
},
"brand_options": {
"with_advertiser_brand": "YES",
"with_competitors_brand": "NO",
"without_brands": "YES"
}
}
}]
}
Яндекс Директ — Ставки
Яндекс Директ — Минус-фразы
Яндекс Директ — Расширения
Яндекс Директ — Визитки
Яндекс Директ — Изображения и видео
Яндекс Директ — Фиды
Яндекс Директ — Ретаргетинг
Яндекс Директ — Отчёты и справочники
Яндекс Директ — Управление площадками и стратегией
Яндекс Метрика — Счётчики
Яндекс Метрика — Цели
Яндекс Метрика — Отчёты
Яндекс Метрика — Сегменты, фильтры, доступы
Яндекс Метрика — Метки и аннотации
Яндекс Метрика — Офлайн-данные
Яндекс Аудитории — Сегменты
Яндекс Аудитории — Доступы и пиксели
Wordstat API
Лицензия
MIT