MCP server: One MCP server.

Яндекс.Директ

@pavelsibaMCP server · External

API Яндекс.Директа v5: кампании, объявления, фразы, ставки, минус-фразы, статистика

Online advertisingv1.8.0AGPL-3.0TypeScript
Freeno charge per call

Runs on your machine from its package; the steps are below.

What it does

  1. Reads
  2. Writes
  3. High impact

At most: moves money, runs code or commands, deletes data, or sends messages for you.

What it costs

Free

Odel charges nothing per call. The publisher may charge for its own service.

Runs locally over stdio

This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).

npmyandex-direct-mcp-plusv1.8.0

Run

npx -y yandex-direct-mcp-plus

MCP client config

{
  "mcpServers": {
    "server": {
      "command": "npx",
      "args": [
        "-y",
        "yandex-direct-mcp-plus"
      ]
    }
  }
}
README10 min read

yandex-direct-mcp-plus

Ведение контекстной рекламы Яндекс.Директа из диалога с ассистентом: собрать кампанию, разобрать поисковые запросы, вычистить минус-фразы, поправить ставки и посмотреть расход — не переключаясь между разделами кабинета. Работает в любом MCP-клиенте: Claude Code, Claude Desktop, Cursor и другие.

npm License: AGPL v3 Node

  • 59 инструментов, из них 25 только читают. Кампании и стратегии, группы, объявления и модерация, ключевые фразы и ставки, минус-фразы и общие наборы, быстрые ссылки, уточнения, изображения, визитки, корректировки ставок, ретаргетинг, аудиторные и динамические цели, фиды, расписание показов, статистика, поисковые запросы, баланс и справочники.
  • Деньги — в рублях, на вводе и на выводе; в микроединицы API сервер переводит сам. Поддержан агентский режим (Client-Login).
  • ID — строками ("1915016273214320641"): 64-битные идентификаторы Директа не помещаются в число JavaScript и молча теряют точность.
  • Реклама боевая. Тестовой среды у Директа больше нет — какие инструменты тратят деньги и что удаляют необратимо, перечислено в разделе Что меняет данные.
  • Телеметрии нет. Сервер не отправляет никуда ничего, кроме запросов к API Яндекса.

Содержание

Что можно делать

Обычным текстом в чате — инструменты сервер подставляет сам:

Собери кампанию «Летняя распродажа»: бюджет 5000 ₽/день, старт 1 мая, показы будни 9–21
Добавь минус-фразы «бесплатно» и «скачать» в кампанию 12345, не затерев остальные
Посмотри поисковые запросы за месяц и предложи, что заминусовать
Подними ставку до 25 ₽ там, где CTR выше 8%, а показов меньше сотни
Что изменилось в кампаниях со вчера?
Покажи расход по кампаниям за неделю и баланс аккаунта
Найди код региона для Новосибирска

Полный список — в разделе Инструменты.

Установка

Понадобятся Node.js не ниже 22 и OAuth-токен Директа (где взять). Отдельно ставить сервер не нужно: клиент сам запускает пакет через npx и общается с ним по stdio.

Claude Code

bash
claude mcp add yandex-direct -e YANDEX_DIRECT_TOKEN=ваш_токен -- npx -y yandex-direct-mcp-plus

Claude Desktop, Cursor и другие клиенты

В конфиг MCP-серверов клиента (claude_desktop_config.json, .cursor/mcp.json и т. п.) добавляется запись:

json
{
  "mcpServers": {
    "yandex-direct": {
      "command": "npx",
      "args": ["-y", "yandex-direct-mcp-plus"],
      "env": { "YANDEX_DIRECT_TOKEN": "ваш_токен" }
    }
  }
}

Агентскому токену в env нужен ещё YANDEX_DIRECT_LOGIN — см. Токен.

Из исходников

bash
git clone git@github.com:Pavelsiba/yandex-direct-mcp-plus.git
cd yandex-direct-mcp-plus
npm ci
npm run build

В конфиге клиента вместо npx тогда стоит "command": "node", а в args — абсолютный путь к dist/app/index.js.

Удалённый сервер

Тот же сервер можно поднять по HTTP на своей машине — в Docker, за nginx с HTTPS — и подключаться к нему по адресу из claude.ai, с телефона или из Claude Desktop без установки Node. Вход закрыт секретом. Настройка — docs/deploy.md.

Токен

OAuth-токен выпускается для приложения, зарегистрированного в Яндекс OAuth, с доступом к API Директа. Подробности — регистрация приложения и получение токена. Доступ к API нужно запросить в интерфейсе Директа — заявку рассматривают от часа до нескольких суток.

Сервер берёт настройки только из окружения процесса, которое ему передаёт клиент:

  • YANDEX_DIRECT_TOKEN — OAuth-токен. Без него сервер запускается, но любой вызов инструмента возвращает ошибку.
  • YANDEX_DIRECT_LOGIN — логин рекламодателя, уходит в заголовок Client-Login. Нужен только агентскому токену: без него запросы идут в собственный кабинет агентства, а не в кабинет клиента.

Что меняет данные

Тестовой среды у Яндекс.Директа больше нет: песочница отключена с июля 2026, и любой вызов идёт по боевому аккаунту. Отлаживать сценарии приходится на отдельной кампании, оставленной черновиком, — показов она не даёт и потому не тратит бюджет, пока не пройдёт модерацию и не будет включена.

У каждого пишущего инструмента есть параметр dry_run. С dry_run: true вызов проверяет параметры схемой, выполняет нужные ему чтения и возвращает тела запросов, которые ушли бы в Директ, ничего не отправляя.

Граница проходит не по «чтение или запись», а по скорости, с которой действие превращается в деньги.

Только читают все list_*, get_* и справочники. Вызвать их безопасно всегда.

Тратят бюджет или запускают показы:

ИнструментЧем именно
manage_campaignsresume — включает показы остановленной кампании
manage_adsresume и moderate — возвращает объявления в показ
moderate_adsОтправляет объявления на модерацию, после неё начнутся показы
update_campaignМеняет дневной бюджет
set_keyword_bidsМеняет ставки, то есть цену клика
set_strategyМеняет стратегию — переписывает всю экономику кампании
add_bid_adjustmentsЗаводит корректировку: +N% к ставке на срезе аудитории
set_bid_adjustmentsМеняет коэффициент существующей корректировки

Удаляют необратимо — эти инструменты помечены аннотацией DESTRUCTIVE, и хороший MCP-клиент спросит подтверждение перед вызовом:

manage_campaigns (delete), manage_ads (delete), manage_keywords (delete), delete_ad_groups, delete_ad_extensions, delete_sitelinks, delete_vcards, delete_bid_adjustments, delete_retargeting_lists, manage_ad_images (delete), manage_dynamic_targets (delete), set_audience_targets (delete), manage_negative_keyword_shared_sets (delete).

Сюда же — set_campaign_negative_keywords и set_ad_group_negative_keywords в режиме replace: он затирает прежний список минус-фраз целиком. Именно поэтому у них нет режима по умолчанию — mode приходится назвать явно. Так же устроен set_priority_goals: replace и remove убирают цели стратегии, а любая смена целей перезапускает её обучение.

Остальные инструменты создают и правят объекты. Пока кампания не прошла модерацию и не включена, показов по ней нет и бюджет не расходуется.

Чего API не умеет. Смарт-баннеры и динамические объявления Директ через API не создаёт с 22 мая 2026, визитки — тоже: в WSDL методы есть, боевой API отвечает ошибкой 3500. Такие объекты заводятся в интерфейсе Директа, а дальше сервер с ними работает: кампании читает и правит, визитки читает и удаляет. Единую перфоманс-кампанию сервер пока только читает.

Инструменты

В таблицах — первое предложение описания, которое сервер отдаёт модели; таблицы собираются из кода, поэтому список всегда полный.

Кампании и стратегии

ИнструментОписание
list_campaignsСписок рекламных кампаний Яндекс.Директ с фильтрацией по статусу и типу.
get_campaignДетальная информация о кампании по ID: бюджет (руб), статус и пояснение к нему, даты, статистика, UTM-разметка, цели и их ценность (PriorityGoals), счётчики Метрики, модель атрибуции и прочие настройки.
create_campaignСоздать новую текстово-графическую кампанию.
update_campaignОбновить кампанию: название, бюджет (руб), UTM-разметку и/или статус (SUSPEND/RESUME/ARCHIVE/UNARCHIVE).
manage_campaignsЗапустить, остановить, архивировать, разархивировать или удалить кампании.
get_strategyПолучить текущую стратегию показов текстово-графической кампании вместе с целями (PriorityGoals), счётчиками и моделью атрибуции.
set_strategyИзменить стратегию текстово-графической кампании: ручная, максимум кликов, средняя цена клика или конверсии, оплата за конверсию.
set_priority_goalsЗадать цели стратегии кампании (PriorityGoals) и их ценность в рублях — по ним автостратегия оптимизирует ставки, в том числе «максимум конверсий» со служебным GoalId 13.
get_time_targetingВременной таргетинг кампании: часовой пояс, часы показов по дням недели, почасовые коэффициенты и настройка праздников.
set_time_targetingЗадать расписание показов кампании: дни, часы, почасовые коэффициенты, праздники и часовой пояс.

Группы объявлений

ИнструментОписание
list_ad_groupsГруппы объявлений выбранных кампаний: названия, регионы, статусы.
create_ad_groupСоздать группу объявлений в кампании с таргетингом по регионам (см. get_regions).
delete_ad_groupsУдалить группы объявлений по их ID.

Объявления

ИнструментОписание
list_adsОбъявления: заголовки, тексты, ссылки, статусы, тип и подтип объявления, привязанные сайтлинки, визитка и изображение.
create_text_adСоздать текстовое объявление: заголовок (≤56), второй заголовок (≤30), текст (≤81), ссылка.
update_text_adОбновить текстовое объявление: заголовок, текст, ссылка.
manage_adsДействие над объявлениями: suspend/resume/archive/unarchive/moderate/delete.
moderate_adsОтправить выбранные объявления на модерацию.

Ключевые фразы и ставки

ИнструментОписание
list_keywordsКлючевые фразы в группах объявлений: фразы, ставки (руб), статусы.
add_keywordsДобавить ключевые фразы в группу объявлений.
update_keywordsИзменить текст ключевых фраз и подстановочные переменные {param1}/{param2}.
manage_keywordsДействие над ключевыми фразами: suspend/resume/delete.
set_keyword_bidsУстановить ставки (поиск/сети, в рублях) на уровне фраз, групп или кампаний (сервис Bids).
get_keyword_auctionСколько стоит показ: ставки и списываемые цены по позициям, ставки конкурентов, минимальная цена входа.

Минус-фразы

ИнструментОписание
get_campaign_negative_keywordsПолучить текущие минус-фразы кампаний по их ID.
set_campaign_negative_keywordsМинус-фразы на уровне кампании.
set_ad_group_negative_keywordsМинус-фразы на уровне группы объявлений.
list_negative_keyword_shared_setsПолучить общие наборы минус-фраз аккаунта.
manage_negative_keyword_shared_setsСоздать, изменить или удалить общие наборы минус-фраз аккаунта.
link_negative_keyword_setsЗаменить привязки общих наборов минус-фраз у кампаний и/или групп объявлений.

Ассеты объявления

ИнструментОписание
list_sitelinksПолучить все или выбранные наборы быстрых ссылок.
set_sitelinksСоздать новый набор из 1–8 быстрых ссылок.
delete_sitelinksУдалить наборы быстрых ссылок по ID.
list_ad_extensionsПолучить уточнения (callouts) с их статусами и текстом.
add_ad_extensionsСоздать уточнения (callouts), каждый текст до 25 символов.
delete_ad_extensionsУдалить уточнения по ID.
manage_ad_imagesЗагрузить, получить или удалить изображения объявлений (AdImages).
list_vcardsПолучить виртуальные визитки по ID или найти их через объявления выбранных кампаний.
delete_vcardsУдалить визитки по ID; удаление необратимо.

Таргетинг и корректировки

ИнструментОписание
list_audience_targetsПолучить условия нацеливания на аудиторию по ID кампании, группы, ретаргетинга или интереса.
set_audience_targetsДобавить, остановить, возобновить, удалить аудиторные цели или изменить их ставки.
list_dynamic_targetsПолучить условия нацеливания динамических текстовых объявлений.
manage_dynamic_targetsСоздать, изменить ставки, остановить, возобновить или удалить динамические цели.
list_retargeting_listsПолучить условия ретаргетинга и подбора аудитории с правилами и областью применения.
add_retargeting_listСоздать условие ретаргетинга из целей Метрики, сегментов или интересов.
update_retargeting_listsИзменить название, описание и правила условий ретаргетинга.
delete_retargeting_listsУдалить условия ретаргетинга и подбора аудитории по ID; удаление необратимо.
get_bid_adjustmentsПолучить корректировки ставок кампании или группы: устройства, пол и возраст, аудитории, регионы, платёжеспособность, размещение.
add_bid_adjustmentsСоздать корректировки ставок на кампаниях или группах.
set_bid_adjustmentsИзменить коэффициенты существующих корректировок по их ID.
delete_bid_adjustmentsУдалить корректировки по их ID.

Отчёты

ИнструментОписание
get_statisticsСтатистика кампаний за период: показы, клики, расход (руб), CTR, CPC (ReportService, TSV).
get_search_queriesОтчёт по фактическим поисковым запросам для анализа и добавления минус-фраз.

Аккаунт и справочники

ИнструментОписание
get_account_balanceБаланс и финансовая информация аккаунта (Amount, Currency) через Live API v4.
list_businessesПолучить доступные профили организаций из Яндекс Бизнеса.
get_changesПроверить изменения кампаний, групп и объявлений начиная с указанного времени, а также изменения справочников (mode=dictionaries) и текущее время сервера Директа.
list_feedsПолучить товарные фиды, их источники, статусы обработки и связанные кампании.
get_regionsСправочник кодов регионов (GeoRegions) для таргетинга.
list_time_zonesСправочник часовых поясов (TimeZones) для set_time_targeting и create_campaign.

Разработка

bash
npm ci               # зависимости строго по lock-файлу
npm run dev          # сервер из исходников, без сборки
npm run build        # dist/ — то, что запускает MCP-клиент
npm test             # юнит-тесты, сеть подменена
npm run lint         # Biome: формат и линт
npm run typecheck    # типы в src, тестах и конфигах
npm run lint:dead    # knip: неиспользуемый код и зависимости
npm run docs:tools   # таблицы инструментов в README из реестра

Таблицы инструментов выше руками не правятся: после смены описания инструмента — npm run docs:tools, иначе юнит-тест покажет расхождение.

Сетевые тесты (npm run test:int) идут по боевому аккаунту и пишут только в кампанию-полигон, оставленную черновиком: её ID задаётся переменной YANDEX_DIRECT_POLYGON_CAMPAIGN_ID. Без переменной они пропускаются.

Код разложен по слоям app → tools → shared; инструмент — это каталог src/tools/<домен>/ с schema.ts, handler.ts и tool.ts. Подробности — в docs/architecture.md.

Происхождение и благодарности

Проект начат на коде theYahia/yandex-direct-mcp под лицензией MIT. Расширение с 20 до 48 инструментов и перевод ID на строки — работа Maxim (DrSeedon), PR #7; в npm эта версия не публиковалась. Дальше проект развивается самостоятельно и апстрим не отслеживает.

История изменений с отделения от апстрима — в CHANGELOG.md.

Лицензия

Copyright © 2026 Pavelsiba. GNU AGPL-3.0-only.

Пользоваться сервером, изменять его и разворачивать у себя можно свободно, в том числе в работе с клиентами. Кто предоставляет изменённый сервер другим людям по сети, обязан дать им исходный код своей версии (раздел 13 лицензии).

Версии до 1.7.0 включительно вышли под MIT и под ней остаются.

Pull request'ы принимаются вместе с передачей прав на вклад автору проекта (CLA) — без этого проект не сможет распоряжаться своим кодом. Перед большой правкой лучше завести issue.

Similar modules

Browse Online advertising