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, обработка его странностей, аналитика — прячется за набором инструментов.

Комментарии (2)


  1. gevals
    05.07.2026 13:28

    Во сколько обходится такое счастье? Ведь получается по итогу Claude всем управляет? Или на подписке работает?


  1. gl_uk
    05.07.2026 13:28

    Что ваши безопасники говорят, когда вы доверяете такие данные какому-то облаку?

    А ваши клиенты?

    Как проходит проверка на валидность данных?