{
  "markdown": "# yandex-direct-mcp-plus\n\nВедение контекстной рекламы Яндекс.Директа из диалога с ассистентом: собрать кампанию, разобрать поисковые запросы, вычистить минус-фразы, поправить ставки и посмотреть расход — не переключаясь между разделами кабинета. Работает в любом MCP-клиенте: Claude Code, Claude Desktop, Cursor и другие.\n\n[![npm](https://img.shields.io/npm/v/yandex-direct-mcp-plus.svg)](https://www.npmjs.com/package/yandex-direct-mcp-plus)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node](https://img.shields.io/badge/node-%3E%3D22-green.svg)](https://nodejs.org)\n\n- **60 инструментов**, из них 25 только читают. Кампании и стратегии, группы, объявления и модерация, ключевые фразы и ставки, минус-фразы и общие наборы, быстрые ссылки, уточнения, изображения, визитки, корректировки ставок, ретаргетинг, аудиторные и динамические цели, фиды, расписание показов, статистика, поисковые запросы, баланс и справочники.\n- **Деньги — в рублях**, на вводе и на выводе; в микроединицы API сервер переводит сам. Поддержан агентский режим (`Client-Login`).\n- **ID — строками** (`\"1915016273214320641\"`): 64-битные идентификаторы Директа не помещаются в число JavaScript и молча теряют точность. Здесь это стережёт правило линтера, а не внимательность.\n- **Реклама боевая.** Тестовой среды у Директа больше нет — какие инструменты тратят деньги и что удаляют необратимо, перечислено в разделе [Что меняет данные](#что-меняет-данные).\n- **Телеметрии нет.** Сервер не отправляет никуда ничего, кроме запросов к API Яндекса.\n\n## Содержание\n\n- [Что можно делать](#что-можно-делать) — примеры запросов обычным текстом\n- [Установка](#установка) — Claude Code, Claude Desktop, Cursor, из исходников\n- [Токен](#токен) — как получить и какие переменные окружения нужны\n- [Что меняет данные](#что-меняет-данные) — что тратит бюджет и что необратимо\n- [Инструменты](#инструменты-60) — полный список с описаниями\n- [Разработка](#разработка) — сборка, тесты, архитектура\n\n## Что можно делать\n\nОбычным текстом в чате — инструменты сервер подставляет сам:\n\n```\nСобери кампанию «Летняя распродажа»: бюджет 5000 ₽/день, старт 1 мая, показы будни 9–21\nДобавь минус-фразы «бесплатно» и «скачать» в кампанию 12345, не затерев остальные\nПосмотри поисковые запросы за месяц и предложи, что заминусовать\nПодними ставку до 25 ₽ там, где CTR выше 8%, а показов меньше сотни\nЧто изменилось в кампаниях со вчера?\nПокажи расход по кампаниям за неделю и баланс аккаунта\nНайди код региона для Новосибирска\n```\n\nПолный список — [60 инструментов](#инструменты-60) ниже.\n\n## Установка\n\nНужен Node.js 22+ и OAuth-токен Яндекс.Директа — [как его получить](#токен).\n\n### Claude Code\n\n```bash\nclaude mcp add yandex-direct -e YANDEX_DIRECT_TOKEN=ваш_токен -- npx -y yandex-direct-mcp-plus\n```\n\n### Claude Desktop, Cursor и другие клиенты\n\n```json\n{\n  \"mcpServers\": {\n    \"yandex-direct\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"yandex-direct-mcp-plus\"],\n      \"env\": {\n        \"YANDEX_DIRECT_TOKEN\": \"ваш_токен\"\n      }\n    }\n  }\n}\n```\n\n### Из исходников\n\n```bash\ngit clone git@github.com:Pavelsiba/yandex-direct-mcp-plus.git\ncd yandex-direct-mcp-plus\nnpm ci && npm run build\n```\n\nДальше тот же конфиг, но `\"command\": \"node\"` и путь к `dist/app/index.js` вместо `npx`.\n\n## Токен\n\nOAuth-токен выпускается для приложения, зарегистрированного в [Яндекс OAuth](https://oauth.yandex.ru/), с доступом к API Директа. Подробности — [регистрация приложения и получение токена](https://yandex.ru/dev/direct/doc/ru/token). Доступ к API нужно [запросить в интерфейсе Директа](https://yandex.ru/dev/direct/doc/ru/access-request) — заявку рассматривают от часа до нескольких суток.\n\n| Переменная | Обязательна | Назначение |\n|------------|:-----------:|------------|\n| `YANDEX_DIRECT_TOKEN` | да | OAuth-токен Яндекс.Директ |\n| `YANDEX_DIRECT_LOGIN` | нет | Логин клиента для агентских токенов (заголовок `Client-Login`). Обязателен, если токен агентский |\n| `YANDEX_DIRECT_POLYGON_CAMPAIGN_ID` | нет | Только для `npm run test:int`: ID кампании-полигона, оставленной черновиком. Сетевые тесты пишут в неё и ни во что другое; без переменной они пропускаются |\n\n## Что меняет данные\n\nТестовой среды у Яндекс.Директа больше нет: песочница отключена с июля 2026, и любой вызов идёт по боевому аккаунту. Отлаживать сценарии приходится на отдельной кампании, оставленной черновиком, — показов она не даёт и потому не тратит бюджет, пока не пройдёт модерацию и не будет включена.\n\nГраница проходит не по «чтение или запись», а по скорости, с которой действие превращается в деньги.\n\n**25 инструментов только читают** — все `list_*`, `get_*` и справочники. Вызвать их безопасно всегда.\n\n**Тратят бюджет или запускают показы** — восемь:\n\n| Инструмент | Чем именно |\n|------------|------------|\n| `manage_campaigns` | `resume` — включает показы остановленной кампании |\n| `manage_ads` | `resume` и `moderate` — возвращает объявления в показ |\n| `moderate_ads` | Отправляет объявления на модерацию, после неё начнутся показы |\n| `update_campaign` | Меняет дневной бюджет |\n| `set_keyword_bids` | Меняет ставки, то есть цену клика |\n| `set_strategy` | Меняет стратегию — переписывает всю экономику кампании |\n| `add_bid_adjustments` | Заводит корректировку: +N% к ставке на срезе аудитории |\n| `set_bid_adjustments` | Меняет коэффициент существующей корректировки |\n\n**Удаляют необратимо** — эти инструменты помечены аннотацией `DESTRUCTIVE`, и хороший MCP-клиент спросит подтверждение перед вызовом:\n\n`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`).\n\nСюда же — `set_campaign_negative_keywords` и `set_ad_group_negative_keywords` в режиме `replace`: он затирает прежний список минус-фраз целиком. Именно поэтому у них нет режима по умолчанию — `mode` приходится назвать явно. Так же устроен `set_priority_goals`: `replace` и `remove` убирают цели стратегии, а любая смена целей перезапускает её обучение.\n\nОстальные инструменты создают и правят объекты. Пока кампания не прошла модерацию и не включена, показов по ней нет и бюджет не расходуется.\n\n## Инструменты (60)\n\n**Кампании**\n\n| Инструмент | Описание |\n|------------|----------|\n| `list_campaigns` | Список кампаний (фильтр по статусу/типу, пагинация) |\n| `get_campaign` | Детальная информация о кампании по ID |\n| `create_campaign` | Создать кампанию (бюджет в рублях, выбор стратегии, часовой пояс, UTM-разметка) |\n| `update_campaign` | Обновить название/бюджет/UTM-разметку и/или статус (SUSPEND/RESUME/ARCHIVE/UNARCHIVE) |\n| `manage_campaigns` | suspend/resume/archive/unarchive/delete для списка кампаний |\n| `get_strategy` | Получить стратегию текстово-графической кампании |\n| `set_strategy` | Сменить стратегию: ручная, максимум кликов, средняя цена клика/конверсии, оплата за конверсию |\n| `set_priority_goals` | Цели стратегии и их ценность в рублях: добавить, убрать или заменить список |\n| `get_time_targeting` | Расписание показов: часовой пояс, часы по дням недели, праздники |\n| `set_time_targeting` | Задать расписание показов и почасовые коэффициенты (заменяет целиком) |\n\n**Группы объявлений**\n\n| Инструмент | Описание |\n|------------|----------|\n| `list_ad_groups` | Группы объявлений выбранных кампаний |\n| `create_ad_group` | Создать группу с таргетингом по регионам |\n| `delete_ad_groups` | Удалить группы по ID |\n| `set_ad_group_negative_keywords` | Минус-фразы группы: `mode` обязателен — `replace`, `add` или `remove` |\n\n**Объявления**\n\n| Инструмент | Описание |\n|------------|----------|\n| `list_ads` | Объявления в группах |\n| `create_text_ad` | Создать текстовое объявление (≤56/≤30/≤81) |\n| `update_text_ad` | Обновить заголовок/текст/ссылку |\n| `manage_ads` | suspend/resume/archive/unarchive/moderate/delete |\n| `moderate_ads` | Отправить объявления на модерацию |\n\n**Ключевые слова и ставки**\n\n| Инструмент | Описание |\n|------------|----------|\n| `list_keywords` | Ключевые фразы в группах (ставки в рублях) |\n| `add_keywords` | Добавить ключевые фразы |\n| `update_keywords` | Изменить текст фразы и подстановочные переменные `{param1}`/`{param2}` |\n| `set_keyword_bids` | Установить ставки (поиск/сети, рубли) на фразах/группах/кампаниях |\n| `get_keyword_auction` | Аукцион по фразам: ставки и списываемые цены по позициям, ставки конкурентов, цена входа (рубли) |\n| `manage_keywords` | suspend/resume/delete |\n| `set_campaign_negative_keywords` | Минус-фразы кампании: `mode` обязателен — `replace`, `add` или `remove` |\n| `get_campaign_negative_keywords` | Получить минус-фразы кампаний |\n\n**Быстрые ссылки, уточнения и корректировки**\n\n| Инструмент | Описание |\n|------------|----------|\n| `list_sitelinks` | Получить наборы быстрых ссылок |\n| `set_sitelinks` | Создать новый набор быстрых ссылок |\n| `delete_sitelinks` | Удалить наборы быстрых ссылок |\n| `list_ad_extensions` | Получить уточнения (callouts) |\n| `add_ad_extensions` | Создать уточнения |\n| `delete_ad_extensions` | Удалить уточнения |\n| `manage_ad_images` | Загрузить, получить или удалить изображения |\n| `get_bid_adjustments` | Получить корректировки: устройства, пол и возраст, аудитории, регионы, платёжеспособность, размещение |\n| `add_bid_adjustments` | Создать корректировки на кампаниях или группах |\n| `set_bid_adjustments` | Изменить коэффициенты существующих корректировок |\n| `delete_bid_adjustments` | Удалить корректировки по ID |\n\n**Аудитории, цели и фиды**\n\n| Инструмент | Описание |\n|------------|----------|\n| `list_retargeting_lists` | Получить условия ретаргетинга и подбора аудитории |\n| `add_retargeting_list` | Создать условие ретаргетинга |\n| `update_retargeting_lists` | Изменить название, описание и правила условий (правила заменяются целиком) |\n| `delete_retargeting_lists` | Удалить условия ретаргетинга |\n| `list_audience_targets` | Получить аудиторные цели |\n| `set_audience_targets` | add/set_bids/suspend/resume/delete аудиторных целей |\n| `list_dynamic_targets` | Получить динамические цели |\n| `manage_dynamic_targets` | add/set_bids/suspend/resume/delete динамических целей |\n| `list_feeds` | Получить товарные фиды |\n| `list_negative_keyword_shared_sets` | Получить общие наборы минус-фраз |\n| `manage_negative_keyword_shared_sets` | add/update/delete общих наборов |\n| `link_negative_keyword_sets` | Привязать общие наборы к кампаниям и группам объявлений |\n\n**Статистика, аккаунт, справочники**\n\n| Инструмент | Описание |\n|------------|----------|\n| `get_statistics` | Статистика за период (показы, клики, расход, CTR, CPC) |\n| `get_search_queries` | Фактические поисковые запросы для подбора минус-фраз |\n| `get_changes` | Проверить изменения кампаний, групп, объявлений и справочников |\n| `list_vcards` | Получить виртуальные визитки |\n| `add_vcard` | Создать виртуальную визитку |\n| `delete_vcards` | Удалить визитки по ID |\n| `list_businesses` | Получить профили организаций Яндекс Бизнеса |\n| `get_account_balance` | Баланс аккаунта (Live API v4) |\n| `get_regions` | Справочник кодов регионов (225 = Россия), с вложенностью по запросу |\n| `list_time_zones` | Справочник часовых поясов для расписания показов |\n\n## Разработка\n\n```bash\nnpm install\nnpm run build      # tsc → dist/\nnpm test           # vitest (моки fetch)\nnpm run dev        # tsx --conditions=development src/app/index.ts\nnpm run lint       # biome\nnpm run typecheck  # tsc --noEmit\nnpm run lint:dead  # knip\n```\n\nКод разложен по слоям `app → tools → shared`; инструмент — это каталог\n`src/tools/<домен>/` с `schema.ts`, `handler.ts` и `tool.ts`. Подробности —\nв [docs/architecture.md](docs/architecture.md).\n\n## Происхождение и благодарности\n\nПроект начат на коде [`theYahia/yandex-direct-mcp`](https://github.com/theYahia/yandex-direct-mcp) под лицензией MIT. Расширение с 20 до 48 инструментов и перевод ID на строки — работа [**Maxim (DrSeedon)**](https://github.com/DrSeedon), [PR #7](https://github.com/theYahia/yandex-direct-mcp/pull/7); в npm эта версия не публиковалась. Дальше проект развивается самостоятельно и апстрим не отслеживает.\n\nИстория до отделения от апстрима (версии 3.0.0–5.0.0, включая вклад DrSeedon) — в [docs/CHANGELOG-upstream.md](docs/CHANGELOG-upstream.md); дальнейшие изменения — в [CHANGELOG.md](CHANGELOG.md). План — в [docs/roadmap.md](docs/roadmap.md), архитектура — в [docs/architecture.md](docs/architecture.md).\n\n## Лицензия\n\nMIT — см. [LICENSE](LICENSE). Уведомление об авторских правах исходного проекта сохранено.\n",
  "bytes": 12654,
  "sha": "05456098cc73f8bd5542f62a910d4a8d59bf6bf3b534c6a08cc56091808e232f",
  "repo_slug": "pavelsiba/yandex-direct-mcp-plus",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_pavelsiba_yandex_direct_mcp_pl_eb89ea25/readme"
}