Как я подключил Claude к Яндекс Директу через MCP и разгрузил утро понедельника. direct api.. direct api. mcp.. direct api. mcp. Node.JS.. direct api. mcp. Node.JS. искусственный интеллект.. direct api. mcp. Node.JS. искусственный интеллект. Яндекс API.. direct api. mcp. Node.JS. искусственный интеллект. Яндекс API. яндекс директ.
https://habrastorage.org/r/w1560/getpro/habr/upload_files/48e/086/f7f/48e086f7f6dc1868c87327d735b491c3.png

Управление контекстной рекламой — это много механической работы. Открыть статистику, выгрузить срез, свести два периода в таблице, заметить просевшую кампанию, пойти в другой отчёт, поднять минус‑слова, вернуться, поправить ставку. Каждый шаг по отдельности занимает приличное количество времени, с учетом того, что в больших РК этот процесс еще и подвисает (буквально подвисает, на больших отчетах статистика может грузиться минуты). Все вместе половина рабочего дня уходит на то, чтобы просто понять, что происходит в аккаунте. И таких аккаунтов у специалистов/фрилансеров обычно больше одного, у меня сейчас, например — 7.

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

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

Последние полгода я достаточно активно работал с различными ИИ и решил, что созрел на то что бы сделать свой сервис, который снимет эти проблемы. Логика, как я её видел, должна была быть простой — даёшь ИИ доступ к АПИ Директа, а дальше он сам делает всю магию, и я просто запросами в чате получаю все необходимые данные и управляю кампаниями.
Что может быть проще?)

На деле все это оказалось сильно тяжелей, дороже и больней, но итог есть, и им хочется поделиться. Ниже расскажу про то, как устроен сервис и с какими подводными камнями я столкнулся пока его делал.

Что такое MCP и почему я выбрал именно его

Как я писал выше, путь к нему был тернистым: начиналось все с выгрузок экселей, после них — веб интерфейс и финал — как раз MCP.

MCP (Model Context Protocol) — открытый стандарт, по которому ИИ‑ассистент подключается к внешним сервисам. Ассистент получает набор настоящих инструментов: «запросить статистику кампании за период», «найти неэффективные расходы», «поставить корректировку ставок». Модель сама решает, какой инструмент вызвать, с какими аргументами, и получает структурированный ответ.

Разница с обычным чатом простая. Спросите ChatGPT «как у меня дела в Директе» — он про ваш аккаунт не знает ничего и ответит общими словами. С MCP‑коннектором он сначала вызовет get_master_dashboard, получит реальные KPI, потом find_budget_leaks — и ответит по вашим данным конкретными цифрами.

Что важно — для этого не нужно грузить в него десятки экселей, просто один раз дать доступ и все, управление и анализ прямо из чата.

Что было не так с веб‑интерфейсом? На самом деле ничего, веб‑интерфейс — отличное решение для верхнеуровневого мониторинга показателей, эдакий светофор основных показателей с самыми базовыми элементами управления. Изначально я пробовал добавить в него весь функционал, но достаточно быстро понял, что это чрезмерно усложняет и визуал, и взаимодействие с данными, и в таком сетапе выступал просто дублером самого Директа. Поэтому в финальном решении он остался, но скорее во вспомогательной роли.

Немаловажный нюанс — чтобы интегрировать ИИ в сайт его нужно подключить по АПИ, и в такой схеме за каждый запрос придется заплатить. В случае же с MCP весь этот функционал вкладывается в уже рабочую подписку и не берет дополнительно десятки и сотни долларов в виде токенов.

Архитектура: одно ядро на три потребителя

Главное решение — провайдер‑паттерн и общее ядро.

Весь доступ к Direct API спрятан за интерфейсом DirectProvider — это 55 методов: getCampaigns, getCampaignStats, setBidAdjustments, setCampaignStrategy и так далее. Есть две реализации: ApiProvider (реальный Direct API v5) и MockProvider (рабочие моки с заложенными проблемами — на них удобно разрабатывать и показывать демо). Аналитика — поиск неэффективных расходов, тренды, аудит аккаунта, ИИ‑автопилот — работает только через этот интерфейс и не знает, откуда пришли данные.

Поверх одного ядра — три независимых потребителя:
· веб‑приложение (дашборд, аналитика)
· Telegram‑бот (быстрые отчёты по клику)
· MCP‑сервер (для Claude и ChatGPT).

MCP‑сервер живёт в двух транспортах с общей регистрацией инструментов:

· stdio — для локальной разработки;

· хостовый HTTP (Streamable HTTP) — как роут внутри Next.js, без отдельного процесса. Пользователь добавляет в Claude URL вида https://app.marketscore.ru/api/mcp как удалённый коннектор.

Авторизация — OAuth 2.1, у каждого пользователя своя. Человек добавляет просто URL, Claude сам открывает вход, пользователь авторизуется и разрешает доступ. Токен Яндекса остаётся на нашей стороне и ассистенту не передаётся — наружу уходят только результаты вызовов.

Подводные камни Direct API

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

Чтобы получить этот доступ нужно показать Яндексу работающее приложение, к которому нужно выдать также демо доступ и показать его пользу для конечных пользователей. Иными словами, нельзя сделать сервис для себя, тебя сразу стимулируют к тому, чтобы делиться этим. И это только начало, про технические трудности — ниже. И честно скажу, техническую часть мне помогал писать коллега клод код.

Тихие ошибки записи

Самая дорогая по времени находка. Сервисы .add / .update / .set отвечают HTTP 200, даже когда правка не применилась. Ошибка лежит внутри, в Results[].Errors, а верхнеуровневого error в ответе нет.

Мой низкоуровневый клиент сначала проверял только верхний error и считал такой ответ успехом. Итог: ассистент «ставит бюджет», рапортует «готово», а в кабинете ничего не изменилось. Поймал случайно — попросил поставить дневной бюджет на кампанию с автостратегией. Лечится тем, что клиент собирает пер‑элементные Errors и явно бросает исключение. С тех пор правило: на запись у Direct API нельзя верить статусу 200, надо читать тело.

Дневной бюджет несовместим с автостратегией

Продолжение предыдущего. Direct отбивает дневной бюджет на автостратегии кодом [6000] — «дневной бюджет можно использовать только совместно с ручными стратегиями». А недельный бюджет, наоборот, живёт только внутри автостратегии. То есть на вопрос «поставь бюджет N» правильного ответа без уточнения нет. Сделал так, что ассистент сам уточняет — дневной или недельный — и подсказывает, что доступно на текущей стратегии.

Корректировок на планшет в API не существует

Кажется логичным, что устройства — это десктоп, мобильные и планшеты. На запись Direct принимает MobileAdjustment и DesktopAdjustment, а TabletAdjustment просто нет: Яндекс относит планшеты к десктопу. Попытка задать корректировку на планшет возвращает «условия в корректировках пересекаются». Теперь на такой запрос ассистент честно говорит, что через API нельзя, и предлагает внести вручную.

Историю изменений Direct не отдаёт

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

Что в итоге умеет ассистент

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

Как и писал выше, в сервис зашито 3 блока каждый их которых я сейчас использую на дейли основе:

· Telegram‑бот — для супер оперативной утренней выгрузки, понять есть ли крит события

· веб‑приложение — собирает широкими мазками самые значимые факторы, влияющие на компании

· MCP‑сервер через клод — собственно говоря, само управление и генерация отчетов.

Из классного — с ИИ можно общаться обычным языком, он сам считывает запрос:

· «Где у меня уходят деньги впустую за последние 14 дней?»

· «Покажи кампании с ROAS меньше 1 и предложи, что отключить.»

· «Поставь кампанию X на паузу.»

· «Задай недельный бюджет 50 000 ₽ для кампании Y.»

· «Собери сводку по аккаунту за неделю.»

https://habrastorage.org/r/w1560/getpro/habr/upload_files/e95/38d/9b6/e9538d9b6729e12ceb549bc53ac8dadc.png

Поверх сырых данных — слой ИИ‑выводов: прогноз расхода и оценка, на сколько хватит баланса; разбор просадки конверсий по составляющим (трафик, конверсия, цена клика); аудит аккаунта со score 0–100; готовый еженедельный бриф одним вызовом. Для агентств — обзор сразу по всем подключённым аккаунтам.

Вместо вывода

Я начинал это не как продукт, а как попытку снять с себя большой пласт рутинной работы руками. Комбинация mcp+tg+веб‑интерфейс оказалась оптимальной, потому что каждый из этих инструментов закрывает отдельную задачу и вместе полностью выполняет то, что я хотел — минимум ручного копания кампаний. Можно оставаться внутри клода, а вся сложность — доступ к API, обработка его странностей, аналитика — прячется за набором инструментов.

Автор: Marketscore

Источник