Skip to main content
Glama
Lermont

yadirect-mcp

by Lermont

Yandex Direct MCP Server — отчёты и безопасное создание кампаний для AI-агентов

Python MCP Yandex Direct API CI License

yadirect-mcp — локальный MCP-сервер для Яндекс Директа, который подключает рекламную отчётность и защищённую настройку кампаний к Claude Code, OpenAI Codex, Hermes Agent, ZCode и другим MCP-совместимым AI-агентам.

Вместо десятков низкоуровневых методов API агент получает шесть понятных инструментов для аналитики и один опциональный инструмент для создания кампании. Инструмент здесь соответствует задаче, а не методу API: например, direct_account_settings за один вызов читает корректировки, ретаргетинг и общие минус-фразы — три сервиса, которые в разборе кампании нужны вместе. Большие отчёты сохраняются в TSV, а в контекст модели возвращаются только сводка и preview — это экономит токены и не обрезает данные.

IMPORTANT

По умолчанию сервер работает в режимеreport: все доступные инструменты только читают данные. Режим создания кампаний включается явно через YD_MODE=campaign_setup, требует preview и точного подтверждения и никогда автоматически не запускает показы.

Для чего нужен yadirect-mcp

  • Выгружать статистику Яндекс Директа естественным языком прямо из AI-агента.

  • Получать список клиентов агентства и кампаний рекламодателя.

  • Строить отчёты по показам, кликам, расходу, CTR, CPC, конверсиям и другим полям Reports API.

  • Читать настройки, которых в отчётах нет: корректировки ставок, условия ретаргетинга, общие наборы минус-фраз.

  • Проверять коды регионов до того, как они уедут в кампанию или в запрос частотности.

  • Сохранять полные выгрузки на диск и читать их постранично без повторного расхода баллов API.

  • Подготавливать текстово-графическую кампанию с группами, объявлениями и ключевыми фразами.

  • Проверять план кампании до записи и создавать объекты только после явного согласия пользователя.

  • Ограничивать доступ AI-агента белым списком клиентских логинов.

Проект полезен агентствам, PPC-специалистам, performance-маркетологам, аналитикам и разработчикам AI-автоматизаций для Яндекс Директа.

Related MCP server: yandex-marketing-mcp

Ключевые возможности

Возможность

Как реализовано

Безопасный режим по умолчанию

В YD_MODE=report write-инструмент даже не регистрируется в MCP

Агентский токен, много клиентов

client_login передаётся в каждый клиентский вызов

Большие отчёты без переполнения контекста

Полный TSV сохраняется на диск, модель получает totals и первые строки

Частотность Вордстата

direct_wordstat собирает спрос по фразам, пишет полный список на диск и отдаёт сводку

Настройки мимо отчётов

direct_account_settings читает корректировки, ретаргетинг и общие минус-фразы; секции независимы

Гео без угадывания

direct_regions ищет код по названию и проверяет готовые коды, которые Директ принимает молча

Корректные агрегаты

CTR, CPC и CR пересчитываются из суммарных метрик, а не складываются по строкам

Онлайн- и офлайн-отчёты

Поддержаны ответы 200, очередь 201 и ожидание 202 с retryIn

Контроль очереди

Семафор на логин и лимит YD_MAX_INFLIGHT от 1 до 5

Видимость баллов API

Заголовок Units добавляется к ответу инструмента

Защита от чужого кабинета

YD_ALLOWED_LOGINS ограничивает допустимые логины

Защищённая запись

Preview → точная confirmation-фраза → последовательное создание объектов

Без неожиданного запуска рекламы

Сервер не вызывает resume; созданная кампания остаётся неактивной

Как это работает

flowchart LR
    U["Пользователь"] --> A["Claude Code / Codex / Hermes / ZCode"]
    A <-->|"MCP over stdio"| M["yadirect-mcp"]
    M <-->|"JSON API v5 / Reports API / Вордстат v4"| Y["Яндекс Директ"]
    M -->|"полный TSV"| F["Локальная папка отчётов"]
    M -->|"totals + preview + path"| A

Сервер использует локальный stdio-транспорт. MCP-клиент сам запускает Python-процесс, передаёт ему переменные окружения и завершает его вместе с сессией. Логи пишутся только в stderr, потому что stdout зарезервирован протоколом MCP.

Инструменты MCP

direct_list_clients

Возвращает логины клиентов агентства, ClientId, название и валюту. Метод использует agencyclients.get без заголовка Client-Login.

Параметр:

  • limit — максимум клиентов, по умолчанию 1000.

direct_campaigns

Возвращает ID, имя, тип, состояние и статус кампаний клиента.

Параметры:

  • client_login — логин рекламодателя;

  • include_archived — включить архивные кампании, по умолчанию false.

direct_regions

Справочник регионов Директа (dictionaries.get, словарь GeoRegions): поиск кода по названию и обратная проверка готовых кодов.

Параметры:

  • query — часть названия, например Москва, Ростов, Татарстан; регистр и «ё» не важны;

  • ids — коды для обратной проверки;

  • client_login — нужен только агентскому токену: Директ требует заголовок Client-Login на клиентских методах;

  • limit — сколько совпадений вернуть, от 1 до 200.

Нужен хотя бы один из query / ids: справочник целиком инструмент не отдаёт — это тысячи записей в контекст модели. Сам справочник загружается один раз на процесс, повторные вызовы баллов не тратят.

Смысл инструмента в том, что Директ коды регионов не проверяет. geo_ids: [999999] не вызовет ошибку — Вордстат вернёт частотность не по тому региону, а неверный RegionIds так же молча сузит показы. Поэтому каждое совпадение приходит с путём до корня: «Москва» — это и город 213, и «Москва и область» 1, и без родителей их не различить. Коды, которых нет в справочнике, возвращаются отдельным списком unknown_ids с предупреждением.

{
  "query": "москва",
  "matches": [
    {"id": 213, "name": "Москва", "type": "City", "parent_id": 1,
     "path": ["Весь мир", "Россия", "Москва и область"]},
    {"id": 1, "name": "Москва и область", "type": "Region", "parent_id": 225,
     "path": ["Весь мир", "Россия"]}
  ],
  "total_matches": 2,
  "truncated": false
}

direct_account_settings

Настройки кабинета, которых нет в Reports API: корректировки ставок (bidmodifiers.get), условия ретаргетинга (retargetinglists.get) и общие наборы минус-фраз (negativekeywordsharedsets.get).

Параметры:

  • client_login — логин рекламодателя;

  • sections — какие секции читать: bid_modifiers, retargeting_lists, negative_keyword_sets; пусто — все три;

  • campaign_ids — для каких кампаний смотреть корректировки; пусто — сервер сам возьмёт неархивные кампании клиента, но не более 50.

Инструмент закрывает разрыв в диагностике: отчёт покажет статистику в разрезе Device, Gender, Age, но не покажет выставленный коэффициент, а «нет мобильных конверсий» и «на мобильные стоит −100%» — это разные диагнозы. То же с общими минус-фразами: набор применён ко всем группам и не виден ни в одном отчёте.

Секции независимы: ошибка в одной приходит полем error внутри неё, остальные возвращаются как есть — нет доступа к ретаргетингу не должно означать потерю уже прочитанных корректировок. bidmodifiers.get принимает не более 10 кампаний за вызов, поэтому список режется на пачки автоматически. Если кампаний больше 50, ответ содержит truncated и campaigns_total, а не молча усечённую выборку. Длинные наборы минус-фраз приходят с полным keywords_count и первыми 50 фразами.

direct_report

Формирует отчёт через Reports API, сохраняет TSV и возвращает путь, число строк, колонки, итоги и preview.

Основные параметры:

  • client_login — логин рекламодателя;

  • date_from, date_to — период в формате YYYY-MM-DD;

  • fields — поля отчёта, например Date, CampaignName, Impressions, Clicks, Cost;

  • report_type — тип отчёта, по умолчанию CUSTOM_REPORT;

  • goals — ID целей Метрики;

  • attribution_models — модели атрибуции;

  • filters — фильтры Reports API;

  • order_by — сортировка;

  • limit — ограничение числа строк;

  • include_vat — суммы с НДС или без него.

Поддерживаемые типы включают CUSTOM_REPORT, ACCOUNT_PERFORMANCE_REPORT, CAMPAIGN_PERFORMANCE_REPORT, ADGROUP_PERFORMANCE_REPORT, AD_PERFORMANCE_REPORT, CRITERIA_PERFORMANCE_REPORT, SEARCH_QUERY_PERFORMANCE_REPORT и REACH_AND_FREQUENCY_PERFORMANCE_REPORT.

Пример результата:

{
  "path": "D:/yadirect-reports/client1_2026-06-01_2026-06-30_r_8f3a1c9d.tsv",
  "rows": 18234,
  "columns": ["Date", "CampaignName", "Impressions", "Clicks", "Cost"],
  "totals": {
    "Impressions": 1204331,
    "Clicks": 43012,
    "Cost": 1250430.5,
    "Ctr": 3.57,
    "AvgCpc": 29.07
  },
  "preview": [{"Date": "2026-06-01", "CampaignName": "Поиск | Москва"}],
  "preview_truncated": true,
  "units": {"spent": 12, "rest": 23695, "daily": 64000}
}

direct_read_report

Читает ранее сохранённый TSV без нового обращения к API. Доступ разрешён только внутри YD_OUT_DIR и только для файлов .tsv.

Параметры:

  • path — абсолютный путь из ответа direct_report;

  • offset — первая строка, начиная с 0;

  • limit — размер страницы от 1 до 1000.

direct_wordstat

Частотность Яндекс Вордстата: сколько раз за месяц искали фразу, какие запросы искали вместе с ней и какие похожие. Нужен на сборке семантики, при разборе статуса «Мало показов» и когда в отчёте надо отделить падение спроса от падения кампании.

Параметры:

  • phrases — до 50 фраз за вызов; операторы Директа работают (!, кавычки, +);

  • geo_ids — регионы Директа, например [225] — Россия, [213] — Москва; пусто — без ограничения по региону;

  • min_shows — отбросить подсказки с частотностью ниже порога;

  • top — сколько подсказок каждого вида показать в ответе, от 1 до 100.

Полный список уходит в YD_OUT_DIR тем же TSV, что и отчёты, и читается через direct_read_report. В ответ приходит сводка по каждой фразе: частотность самой фразы, количество вложенных и похожих запросов, топ тех и других.

client_login не нужен — данные Вордстата общие для всех кабинетов. Shows означает спрос в поиске за месяц, а не прогноз показов кампании: shows: 0 — спроса нет, shows: null вместе с полем note — Вордстат не ответил по этой фразе.

Метод живёт в устаревшем API v4, потому что аналога в v5 нет. Отсюда два следствия: в песочнице (YD_SANDBOX) инструмент недоступен, а баллы v4 считаются отдельно от v5 и в поле units не попадают. Отчёты Вордстата удаляются из очереди аккаунта сразу после выгрузки, в том числе когда вызов завершился ошибкой.

direct_campaign_setup

Доступен только при YD_MODE=campaign_setup. Создаёт одну новую TextCampaign, группы, текстовые объявления и ключевые фразы.

Параметры:

  • client_login — логин рекламодателя;

  • campaign — объект CampaignAddItem без Id;

  • ad_groups — группы без CampaignId, с локальными массивами Ads и Keywords;

  • confirmation — точная строка из confirmation_required после одобрения preview.

Первый вызов всегда выполняется без confirmation и ничего не записывает. После проверки плана пользователь явно подтверждает операцию, и агент повторяет тот же вызов с полученной строкой.

Ресурсы MCP: база знаний по Директу

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

  • direct://kb — оглавление;

  • direct://kb/<имя> — документ.

Документ

О чём

server-capabilities

Что тулы сервера умеют и чего не делают, обход для автотаргетинга, порядок работы

launch-checklist

Чек-лист первичной настройки: вводные от клиента, структура аккаунта, кампания, группы, объявления, UTM

tech-limits

Лимиты символов и фраз, требования модерации

api-contract

Обязательные поля Campaigns/AdGroups/Ads/Keywords, микроединицы, баллы и лимиты вызовов

campaign-types

Единая перфоманс-кампания, режим совместимости API v5

strategies-budgets

Стратегии, обучение, минимальные бюджеты, оплата за конверсии

metrika-goals

Счётчик и цели Метрики, ценность конверсии, модели атрибуции

keywords-negatives

Операторы фраз, правила минусовки, статус «Мало показов»

targeting-adjustments

Автотаргетинг, корректировки ставок, ретаргетинг

optimization-playbook

Донастройка: порядок разбора, пороги по CPA, частота проверок

report-recipes

Наборы полей direct_report под каждую задачу оптимизации

Источники — официальная справка Яндекс Директа и документация API v5, материалы eLama, публичная практика агентств. Ресурсы доступны в обоих режимах, включая report.

Требования

  • Windows 10/11, Linux или другая ОС с Python.

  • Python 3.11 или новее.

  • OAuth-токен Яндекс Директа с разрешением direct:api.

  • Доступ приложения к API Яндекс Директа.

  • MCP-клиент с поддержкой локального stdio.

Для агентского сценария нужен токен представителя агентства. Официальные инструкции: регистрация приложения, получение OAuth-токена и авторизационные токены.

CAUTION

OAuth-токен даёт доступ к реальным данным и действиям пользователя Яндекс Директа. Не добавляйте токен в Git, README, issue, логи или скриншоты.

Установка на Windows

1. Получите исходный код

Скачайте архив из GitHub Releases или клонируйте репозиторий:

git clone https://github.com/Lermont/yamcp.git
Set-Location yamcp

2. Создайте виртуальное окружение

py -3.11 -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\python.exe -m pip install .

Если команда py -3.11 недоступна, проверьте установленные версии через py -0p или используйте python -m venv .venv.

3. Подготовьте каталоги и секрет

Для текущей PowerShell-сессии:

$env:YD_TOKEN = "y0_your_token"
$env:YD_OUT_DIR = "D:/yadirect-reports"
$env:YD_MODE = "report"
New-Item -ItemType Directory -Force $env:YD_OUT_DIR

В cmd.exe:

set YD_TOKEN=y0_your_token
set YD_OUT_DIR=D:\yadirect-reports
set YD_MODE=report

Файл .env.example — только документированный шаблон. Приложение намеренно не загружает .env автоматически: переменные передаёт оболочка или MCP-клиент.

Установка на Linux

Для Debian/Ubuntu при необходимости установите Python и модуль venv:

sudo apt-get update
sudo apt-get install -y python3 python3-venv git

Затем установите сервер в изолированное окружение:

git clone https://github.com/Lermont/yamcp.git
cd yamcp
python3 -m venv .venv
.venv/bin/python -m pip install --upgrade pip
.venv/bin/python -m pip install .
mkdir -p "$HOME/yadirect-reports"

Для текущей shell-сессии:

export YD_TOKEN='y0_your_token'
export YD_OUT_DIR="$HOME/yadirect-reports"
export YD_MODE='report'

Для сервера или CI храните токен в секрет-хранилище, а не в репозитории. Не запускайте MCP-процесс как публичный сетевой сервис: текущая реализация рассчитана на локальный stdio.

Настройка переменных окружения

Переменная

Обязательна

По умолчанию

Назначение

YD_TOKEN

Да

OAuth-токен с доступом к Яндекс Директ API

YD_AGENCY_LOGIN

Нет

Логин агентства; информационная настройка

YD_ALLOWED_LOGINS

Нет

пусто

Разрешённые клиентские логины через запятую; пусто — любые

YD_OUT_DIR

Нет

./out

Каталог полных TSV-отчётов

YD_MAX_INFLIGHT

Нет

4

Одновременные офлайн-отчёты на логин, от 1 до 5

YD_INLINE_ROWS

Нет

30

Строки preview в MCP-ответе, от 0 до 1000

YD_REPORT_DEADLINE

Нет

600

Максимальное ожидание отчёта в секундах

YD_SANDBOX

Нет

false

Использовать sandbox API Яндекс Директа

YD_LANG

Нет

ru

Язык ошибок API: ru или en

YD_MODE

Нет

report

report или campaign_setup

YD_DEFAULT_WEEKLY_BUDGET

Нет

пусто

Недельный бюджет кампании по умолчанию, в валюте кабинета; попадает в инструкции сервера

Рекомендуемая production-конфигурация начинается с YD_MODE=report и непустого YD_ALLOWED_LOGINS.

Подключение к Claude Code

Claude Code запускает локальные MCP-серверы по stdio. Все параметры Claude должны стоять до имени сервера, а команда запуска — после --.

Windows PowerShell

claude mcp add --scope user --transport stdio `
  --env "YD_TOKEN=y0_your_token" `
  --env "YD_AGENCY_LOGIN=my-agency" `
  --env "YD_ALLOWED_LOGINS=client-1,client-2" `
  --env "YD_OUT_DIR=D:/yadirect-reports" `
  --env "YD_MODE=report" `
  yandex-direct -- `
  "D:/path/to/yamcp/.venv/Scripts/python.exe" -m yadirect_mcp

Linux

claude mcp add --scope user --transport stdio \
  --env "YD_TOKEN=$YD_TOKEN" \
  --env "YD_AGENCY_LOGIN=my-agency" \
  --env "YD_ALLOWED_LOGINS=client-1,client-2" \
  --env "YD_OUT_DIR=$HOME/yadirect-reports" \
  --env "YD_MODE=report" \
  yandex-direct -- \
  /absolute/path/to/yamcp/.venv/bin/python -m yadirect_mcp

Проверка:

claude mcp list
claude mcp get yandex-direct

В интерактивной сессии выполните /mcp. Для командных отчётов, которые могут ждать очередь API, при необходимости добавьте в .mcp.json поле "timeout": 660000.

Официальная документация: Connect Claude Code to tools via MCP.

Подключение к OpenAI Codex

Codex CLI, IDE extension и Codex desktop используют общую MCP-конфигурацию config.toml. Пользовательский файл находится в ~/.codex/config.toml; конфигурацию одного доверенного проекта можно хранить в .codex/config.toml.

Windows

[mcp_servers.yandex-direct]
command = "D:/path/to/yamcp/.venv/Scripts/python.exe"
args = ["-m", "yadirect_mcp"]
cwd = "D:/path/to/yamcp"
startup_timeout_sec = 20
tool_timeout_sec = 660
default_tools_approval_mode = "writes"
env_vars = ["YD_TOKEN"]

[mcp_servers.yandex-direct.env]
YD_AGENCY_LOGIN = "my-agency"
YD_ALLOWED_LOGINS = "client-1,client-2"
YD_OUT_DIR = "D:/yadirect-reports"
YD_MODE = "report"
YD_LANG = "ru"

Перед запуском Codex задайте секрет в PowerShell:

$env:YD_TOKEN = "y0_your_token"
codex

Linux

[mcp_servers.yandex-direct]
command = "/absolute/path/to/yamcp/.venv/bin/python"
args = ["-m", "yadirect_mcp"]
cwd = "/absolute/path/to/yamcp"
startup_timeout_sec = 20
tool_timeout_sec = 660
default_tools_approval_mode = "writes"
env_vars = ["YD_TOKEN"]

[mcp_servers.yandex-direct.env]
YD_AGENCY_LOGIN = "my-agency"
YD_ALLOWED_LOGINS = "client-1,client-2"
YD_OUT_DIR = "/home/user/yadirect-reports"
YD_MODE = "report"
YD_LANG = "ru"

Проверьте сервер командой codex mcp list, а активные инструменты — командой /mcp внутри Codex. В desktop/IDE можно также открыть Settings → MCP servers, добавить STDIO-сервер и перезапустить клиент.

Официальная документация: Model Context Protocol in Codex.

Подключение к Hermes Agent

Hermes читает MCP-настройки из ~/.hermes/config.yaml. Для stdio-серверов Hermes передаёт только явно перечисленные переменные окружения, поэтому укажите все настройки в блоке env.

Linux

mcp_servers:
  yandex-direct:
    command: "/absolute/path/to/yamcp/.venv/bin/python"
    args: ["-m", "yadirect_mcp"]
    env:
      YD_TOKEN: "y0_your_token"
      YD_AGENCY_LOGIN: "my-agency"
      YD_ALLOWED_LOGINS: "client-1,client-2"
      YD_OUT_DIR: "/home/user/yadirect-reports"
      YD_MODE: "report"
      YD_LANG: "ru"
    timeout: 660
    connect_timeout: 20
    enabled: true

Windows

mcp_servers:
  yandex-direct:
    command: "D:/path/to/yamcp/.venv/Scripts/python.exe"
    args: ["-m", "yadirect_mcp"]
    env:
      YD_TOKEN: "y0_your_token"
      YD_OUT_DIR: "D:/yadirect-reports"
      YD_MODE: "report"
    timeout: 660
    connect_timeout: 20
    enabled: true

После изменения конфигурации запустите hermes chat или выполните /reload-mcp в активной сессии. Инструменты будут зарегистрированы с префиксом вида mcp_yandex_direct_*.

Ограничьте доступ к файлу конфигурации и не публикуйте его, если внутри находится токен. Официальная документация: Hermes Agent — MCP.

Подключение к ZCode

Откройте Settings → MCP Servers → New MCP Server и задайте:

  1. Scope: User или Workspace.

  2. Type: stdio.

  3. Command: абсолютный путь к Python из .venv.

  4. Arguments: -m и yadirect_mcp как два отдельных аргумента.

  5. Environment variables: минимум YD_TOKEN, YD_OUT_DIR и YD_MODE=report.

В режиме Full configuration можно вставить JSON:

{
  "mcpServers": {
    "yandex-direct": {
      "type": "stdio",
      "command": "D:/path/to/yamcp/.venv/Scripts/python.exe",
      "args": ["-m", "yadirect_mcp"],
      "env": {
        "YD_TOKEN": "y0_your_token",
        "YD_AGENCY_LOGIN": "my-agency",
        "YD_ALLOWED_LOGINS": "client-1,client-2",
        "YD_OUT_DIR": "D:/yadirect-reports",
        "YD_MODE": "report",
        "YD_LANG": "ru"
      }
    }
  }
}

ZCode также умеет импортировать MCP-серверы из конфигураций Claude Code, Codex CLI, OpenCode и generic .agents. Официальная документация: ZCode MCP Servers.

Другие MCP-клиенты

Cursor, Windsurf, Cline, Continue, OpenCode, VS Code и другие клиенты обычно принимают JSON-конфигурацию формата mcpServers. Названия меню и расположение файла отличаются, но параметры процесса одинаковы:

{
  "mcpServers": {
    "yandex-direct": {
      "command": "/absolute/path/to/yamcp/.venv/bin/python",
      "args": ["-m", "yadirect_mcp"],
      "env": {
        "YD_TOKEN": "y0_your_token",
        "YD_OUT_DIR": "/absolute/path/to/yadirect-reports",
        "YD_MODE": "report"
      }
    }
  }
}

Универсальные правила:

  • используйте абсолютный путь к Python из виртуального окружения;

  • выбирайте транспорт stdio, не HTTP и не SSE;

  • не добавляйте вывод в stdout между клиентом и сервером;

  • передавайте токен через секреты или окружение;

  • установите timeout вызова не меньше YD_REPORT_DEADLINE + 60 секунд;

  • после изменения режима перезапустите MCP-сервер, потому что набор инструментов определяется при старте.

Первый запрос к агенту

После подключения начните с безопасной проверки:

Используй yandex-direct. Покажи доступных клиентов агентства, ничего не изменяй.

Затем запросите отчёт:

Выгрузи для client-login статистику кампаний за июнь 2026:
дата, кампания, показы, клики и расход. Суммы нужны с НДС.
Покажи итоги и 10 первых строк, полный файл не вставляй в чат.

Для дальнейшего чтения:

Прочитай следующие 100 строк сохранённого отчёта через direct_read_report.
Не отправляй новый запрос в API.

Частотность для новой кампании:

Собери спрос по фразам «пластиковые окна», «остекление балкона», «окна пвх»
по Москве через direct_wordstat, отсеки всё ниже 100 показов.
Покажи сводку и скажи, что стоит брать в семантику, а что нет.

Создание кампании: безопасный сценарий

  1. Остановите активный MCP-процесс.

  2. Установите YD_MODE=campaign_setup.

  3. Желательно задайте один или несколько логинов в YD_ALLOWED_LOGINS.

  4. Перезапустите MCP-клиент и убедитесь, что появился direct_campaign_setup.

  5. Попросите агента собрать недостающие данные и сформировать preview.

  6. Проверьте бюджет, стратегию, регионы, даты, ссылки, тексты, ключевые фразы и минус-слова.

  7. Явно подтвердите создание только после проверки.

  8. После ответа проверьте status, созданные ID, warnings и errors.

  9. Проверьте кампанию в интерфейсе Яндекс Директа. Сервер не запускает показы.

Пример безопасного запроса:

Подготовь новую текстово-графическую кампанию для client-login.
Сначала задай вопросы о цели, географии, бюджете, сроках, стратегии,
счётчиках и целях Метрики, семантике, минус-словах и объявлениях.
Затем вызови direct_campaign_setup без confirmation и покажи полный preview.
Ничего не создавай без моего отдельного подтверждения.

Денежные поля JSON API при создании передаются в микроединицах: сумма в валюте × 1_000_000. Входные поля используют официальный регистр API: Name, StartDate, TextCampaign, RegionIds, TextAd, Keyword и т. д.

Операция API не атомарна. Если дочерний этап завершился ошибкой, ответ сохраняет уже созданные ID. Не повторяйте весь запрос вслепую: это может создать дубликат кампании.

Технические решения

Стабильный ReportName

Имя отчёта — хеш спецификации. Оно остаётся одинаковым между попытками polling, иначе каждый повтор мог бы создать новый офлайн-отчёт. Разные поля и фильтры получают разные имена.

Корректное ожидание Reports API

Сервер различает:

  • 200 — отчёт готов;

  • 201 — отчёт поставлен в очередь;

  • 202 — отчёт ещё формируется;

  • 400 — ошибка параметров или лимитов;

  • 500 — ошибка сервера Яндекс Директа.

Для 201 и 202 сервер читает retryIn, повторяет идентичный запрос и контролирует общий deadline. Лимиты Reports API описаны в официальной документации: одновременно в очереди может быть не больше пяти офлайн-отчётов на пользователя.

Экономия контекста модели

Полный TSV не возвращается в MCP-ответе. direct_report отдаёт:

  • абсолютный путь к файлу;

  • количество строк и названия колонок;

  • пересчитанные totals;

  • ограниченный preview;

  • информацию о баллах API.

Остальные строки читаются через direct_read_report без API-вызова.

Ограничения

  • Проект не является официальным продуктом Яндекса.

  • Нет Яндекс Метрики: токен Директа к её API доступа не даёт, нужен отдельный с правом metrika:read. Конверсии по целям при этом доступны — их отдаёт direct_report по параметру goals.

  • Вордстат работает через устаревший API v4 (в v5 аналога нет) и недоступен в песочнице.

  • Нет пакетной выгрузки сразу по всем логинам.

  • Не создаются ЕПК, медийные и мобильные кампании.

  • Не редактируются и не удаляются существующие объекты: корректировки ставок и условия ретаргетинга читаются, но не задаются.

  • Правила отбора условий ретаргетинга (Rules) не возвращаются — только состав списка, его тип и доступность.

  • Не выполняются resume, автоматический запуск показов и rollback.

  • Сервер предоставляет локальный stdio-транспорт, а не удалённый HTTP endpoint.

Диагностика

MCP-клиент не видит сервер

  1. Убедитесь, что путь в command абсолютный и файл существует.

  2. Выполните "<python>" -c "import yadirect_mcp; print('ok')" в той же среде.

  3. Проверьте наличие YD_TOKEN именно в окружении MCP-процесса.

  4. Проверьте, что аргументы переданы как -m, yadirect_mcp.

  5. Перезапустите клиент после изменения конфигурации.

YD_TOKEN не задан

Сервер не получил токен. .env автоматически не читается. Добавьте YD_TOKEN в env конфигурации MCP или экспортируйте переменную до запуска клиента.

Отчёт завершается по timeout клиента

Увеличьте timeout инструмента. Рекомендуемое значение — YD_REPORT_DEADLINE + 60 секунд. Для стандартного deadline 600 используйте 660 секунд или 660000 миллисекунд — в зависимости от формата клиента.

Логин заблокирован

Если ответ содержит Логин ... не разрешён, добавьте точный логин в YD_ALLOWED_LOGINS через запятую или исправьте опечатку. Для production не рекомендуется отключать whitelist без необходимости.

Ошибка Яндекс Директа

Ответ инструмента содержит error, а для DirectError также error_code и request_id. Сохраните request_id для обращения в поддержку и проверьте совместимость выбранных полей, типа отчёта и фильтров.

Разработка

Установите dev-зависимости:

python -m venv .venv
python -m pip install -e ".[dev]"

Запустите проверки:

python -m ruff check .
python -m pytest -q
python -m build
python -m twine check dist/*

Тесты покрывают polling 201 → 202 → 200, стабильность ReportName, заголовки API, обработку 400, пересчёт итогов, whitelist, проверку конфигурации, регистрацию read/write-инструментов по режиму, безопасный preview, валидацию родительских ID, передачу созданных ID и частичные ошибки. Для Вордстата отдельно проверяются транспорт v4 (токен в теле, ошибка с HTTP 200), разбиение длинного списка фраз на отчёты, удаление отчётов из очереди даже после сбоя и различение нулевого спроса от отсутствующего ответа. Для справочника регионов — ранжирование совпадений, нормализация «ё», путь до корня при битой и зацикленной ссылке на родителя, явный список неизвестных кодов и однократная загрузка словаря. Для настроек кабинета — разбиение кампаний на пачки по 10, изоляция упавшей секции, сохранность значения при неизвестном типе корректировки и видимость усечения выборки.

Правила участия описаны в CONTRIBUTING.md, выпуск версии — в RELEASING.md, политика безопасности — в SECURITY.md.

Roadmap

  • Яндекс Метрика: выгрузка на диск плюс компактная сводка.

  • Переезд Вордстата с устаревшего API v4 на Yandex Cloud Search API.

  • direct_report_batch для нескольких логинов с общим контролем очереди.

  • Дисковый кеш закрытых периодов с TTL по дате.

  • Экспорт Parquet для BI и аналитических пайплайнов.

  • Опциональный удалённый Streamable HTTP transport с отдельной аутентификацией.

Лицензия

Проект распространяется по лицензии MIT.

Названия Яндекс, Яндекс Директ, Claude, Codex, Hermes и ZCode принадлежат соответствующим правообладателям. Этот независимый проект не аффилирован с Яндексом, Anthropic, OpenAI, Nous Research или Zhipu AI.


Ключевые слова: Яндекс Директ MCP, Yandex Direct MCP server, API Яндекс Директа, Claude Code MCP, OpenAI Codex MCP, Hermes Agent MCP, ZCode MCP, AI-агент для контекстной рекламы, автоматизация PPC, отчёты Яндекс Директ, управление рекламными кампаниями.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    MCP server for managing Yandex Direct advertising, Yandex Metrica analytics, Wordstat keyword research, and Yandex Webmaster SEO tools, with self-configuring OAuth; provides 153 tools for complete ad and search workflows from AI assistants.
    100
    15
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for Yandex Metrica analytics: query web analytics metrics, goals, conversions, and raw API data using natural language from AI clients like Claude and Cursor.
    8
    444
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • MCP for Yandex Direct: manage ad campaigns & analytics from Claude or ChatGPT

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

  • MCP server connecting AI agents to non-custodial staking data across 130+ networks.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Lermont/yamcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server