Now I need to read the section-drafts fully to get the complete text (it was truncated in the JSON). Let me check if there's a complete version.
The section drafts were cut off at L1 in the autonomy section. I have enough context from the outline to reconstruct the remaining sections. Let me produce the full markdown with 4 internal links inserted naturally.
Зачем мне MCP, если есть Ads Manager
У меня днём банк, вечерами студия. Восемь рекламных кабинетов Meta, шесть клиентов Google Ads, семь GA4-property, семь Instagram-аккаунтов. Каждый день я переключаюсь между тремя интерфейсами, и каждое переключение съедает минуту-две на логин, фильтры, даты, аккаунт. Умножьте на пять клиентов и на утро-вечер, получите час рутины которую можно убить одной фразой в Claude.
Формулировка задачи была простой: спросил Claude, получил ответ. Без переключения между вкладками, без клацанья по Ads Manager. Нужен CPL за вчера по конкретному клиенту? Один вопрос. Нужно паузнуть кампанию которая сливает в 23:00? Одна команда. MCP-сервер превращает Claude в командную строку для рекламы.
Почему не SaaS? Потому что своё решение приоритетнее платной подписки. Wazzup, Albato, amoCRM, каждый хочет $30-100/мес, каждый покрывает одну функцию. MCP-сервер: ноль recurring cost, полный контроль, всё в одном месте. К платному я прихожу только если реально нет выхода, а здесь выход нашёлся за выходные.
Этот пост не для enterprise с командой DevOps и бюджетом на Datadog. Он для solo-founder или маленькой студии до десяти клиентов, где один человек тянет рекламу, аналитику и продажи. Если вы управляете чужими рекламными кабинетами и каждый вечер заходите в три разных дашборда, вот как я это закрыл.
Три коммита: от нуля до 22 tools за выходные
Первый коммит: scaffold + Meta Ads (7 tools) + Google Ads (5 tools). Итого 14 инструментов. Стек минимальный: @modelcontextprotocol/sdk, zod для валидации, stdio transport, Node 20. Никаких фреймворков поверх, никаких абстракций ради абстракций. Один файл index.ts, один package.json, один .env. Claude Code помог собрать scaffold за пару часов.
Второй коммит в тот же день: GA4 (3 tools) + GTM (5 tools), стало 22. Здесь важный момент: для Google Ads и для GA4+GTM я использую два разных OAuth-клиента. Один из GCP-проекта M.Sight со скоупом adwords, другой из проекта m-hub со скоупами analytics.readonly + tagmanager. Они не пересекаются, не конфликтуют, refresh-токены живут отдельно. Это не случайность, а осознанное решение: разные продукты Google, разные permissions, не стоит мешать в одну кучу.
Третий коммит был про баг. dotenv при загрузке печатает в stdout красивый tip: ◇ injected env (12) from .env. Выглядит мило в терминале, но MCP-клиент парсит stdout как JSON-RPC. Результат: Unexpected token '◇'. Claude Desktop просто не мог подключиться. Фикс: включить quiet-mode для dotenv, чтобы он не трогал stdout. Три строчки кода, час дебага.
Урок из этих трёх коммитов: MCP-сервер это не месяц архитектуры. Это выходные с конкретной болью и Claude Code под рукой. Если у вас есть API-ключи и понимание что вы хотите автоматизировать, порог входа минимальный.
Полный инвентарь: 29 tools по группам и зачем каждый нужен бизнесу
На момент написания в сервере 29 tools, разбитых на шесть групп. Каждый tool это одна конкретная операция которую раньше я делал руками. Не demo, не hello-world.
Meta Ads (7 tools): list_campaigns, get_insights, set_status, update_budget, launch_boost, list_ad_accounts, list_ig_posts. Ключевые сценарии: в 23:00 вижу что кампания сливает, пишу Claude «пауза кампания X», done. Утром хочу поднять бюджет на 20%, не открывая Ads Manager. Или запустить boost на пост из Instagram прямо из чата.
Instagram (7 tools): list_media, list_comments, reply_comment, hide_comment, list_conversations, list_messages, send_message. Модерация комментариев и DM из одного окна. Когда у тебя семь IG-аккаунтов, переключаться между ними в приложении Instagram значит терять по 30 секунд на каждый свитч.
Google Ads (5 tools): list_customers, list_campaigns, get_insights, set_status, update_budget. Особенность: я переписал всё на чистый fetch к Google Ads REST API v22. Выкинул пакет google-ads-api@23, который тянул устаревший protobuf v17, глотал ошибки и добавлял 1378 строк зависимостей. Чистый REST работает проще и прозрачнее.
GA4 (3 tools): list_properties, run_report, get_realtime. Аналитика без открытия GA4. Кто работал с server-side GTM и GA4 в production, знает сколько времени уходит на ручные проверки тегов и отчётов.
GTM (5 tools): list_accounts, list_containers, list_tags, list_triggers, list_variables. Управление тегами без UI Google Tag Manager.
M.Flow context (2 tools): данные о тенантах и бизнес-контексте. Связка MCP с внутренней системой студии.
Токены и безопасность: System User, AES-256, три ловушки
С Meta-токенами я долго танцевал. Стандартный User Access Token живёт 60 дней, нужны cron-продления, обмены, и всё равно раз в два месяца что-то ломается. В начале июня я сгенерировал System User в Meta Business Manager с правом Full Control и 42 scopes. Токен бессрочный. Танцы закончились.
Но есть ловушка. Meta показывает длинный список галочек при генерации System User. Каждый scope это отдельная галочка. Забудете pages_manage_ads или instagram_manage_messages, и tool просто молча не работает. Не ошибка, не warning, просто пустой ответ. Я потерял два часа пока понял что забыл один scope из сорока двух.
Для хранения токенов в базе я использую AES-256-GCM шифрование. OAuth-токены рекламных аккаунтов шифруются перед записью в Supabase, ключ шифрования лежит в ENV (32-byte hex). RLS scope через SECURITY DEFINER функцию, которая ограничивает доступ по tenant membership. Это не паранойя: в мае 2026 NSA выпустила отдельный advisory по безопасности MCP, а аудиты обнаружили тысячи API-ключей, утёкших через MCP-серверы без нормальной аутентификации. Solo-оператор с write-доступом к рекламным кабинетам клиентов не может позволить себе «ну это же localhost».
Третья ловушка: IG Business Login. При OAuth callback сервер обменивает short-lived token (живёт час) на long-lived (60 дней). На Vercel этот обмен иногда падал. Callback откатывался на short-token. Через час токен умирал, а Meta refresh принимает только long-lived, восстановить нельзя. Аккаунт тихо умирал. Решение: retry с тремя попытками при обмене + ежедневный cron refresh в 02:00 UTC как страховка.
Мониторинг: как узнать что tool упал, когда ты один
В протоколе MCP нет стандарта health check. Это значит что если tool упал, вы узнаете об этом только когда попытаетесь его вызвать. Для команды из десяти человек это терпимо, кто-то заметит. Для solo-оператора это слепая зона.
Я сделал heartbeat-мониторинг. Таблица studio_heartbeats в Supabase, MCP-сервер пингует раз в минуту пока открыт Claude Code, cron-задачи пингуют при запуске. В командном центре (личный дата-центр на /owner/panel) виджет показывает статус каждого компонента: зелёный если пинг свежий, жёлтый если опаздывает, красный если молчит больше пяти минут. Auto-refresh каждые 45 секунд.
Command Center собирает в одном месте MCP, агентов, cron-задачи, инфраструктуру. Это не продукт для клиентов, это моя приборная панель. Никто из клиентов её не видит, но без неё я слеп.
История которая научила: GTM не работал пять дней и никто не заметил. Компонент GoogleTagManager лежал в layout, но переменная NEXT_PUBLIC_GTM_ID не была добавлена в Vercel. Компонент молча возвращал null, аналитика не собиралась. Пять дней тишины. После этого я добавил правило: при подключении любого NEXT_PUBLIC_* сразу проверять vercel env ls. Мониторинг нужен не только для MCP, он нужен для всего что может молча сломаться.
Obsidian vault как knowledge layer для агентов
MCP-сервер управляет рекламой: читает метрики, паузит кампании, меняет бюджеты. Но управлять рекламой без контекста, это как водить машину глядя только на спидометр. Кто клиент, какой у него бизнес, какие решения принимались раньше, почему паузнули эту кампанию месяц назад. Этот контекст живёт в Obsidian vault.
Мой Obsidian хранит AI-Clon: психотип, манера речи, цели, ценности, feedback-правила. Когда digital-агент берёт задачу, он работает не в вакууме. Он знает что для одного клиента CTWA приоритетнее лендинга, что другой клиент один в продажах и не отвечает в выходные, что третий только запустился и CPL будет высоким первые две недели. Агент не просто паузит кампанию, он делает это с пониманием контекста бизнеса.
Digital-агенты (условная Аня-аналитик для GA4, условная Соня для SMM) берут задачи из очереди в Supabase и работают с полным vault-контекстом. Самое интересное: всё это работает на Claude Max-подписке, без pay-per-token API-счетов. Worker крутится на Mac, подхватывает задачу, запускает Claude Code CLI, агент читает vault и выполняет. Подробнее о том как AI-агенты работают в production я разбирал в отдельном посте. Ноль дополнительных расходов на inference.
Связка MCP + Obsidian, это то, чего я не нашёл ни в одном результате поиска. Есть туториалы «как сделать MCP-сервер», есть enterprise-кейсы от больших компаний. Но персональная база знаний как ресурс для AI-операций, это пустая ниша. А для solo-оператора это разница между тупым скриптом и системой которая понимает бизнес.
Уровни автономии: от read-only до автопилота рекламы (L0-L4)
Я думаю о MCP-инфраструктуре через аналогию с autonomous driving. Не потому что модно, а потому что это точно описывает путь от «читай мне цифры» до «управляй рекламой сам».
L0 (read-only): Claude читает GA4, показывает метрики, отвечает на вопросы. Это уже работает. Спросил «какой CTR у кампании X вчера» и получил ответ без открытия интерфейса.
L1 (советчик): агент утром читает GA4 + Google Ads + Meta insights, сверяет CPL по каналам с ROI из M.Flow, предлагает что выключить, где поднять бюджет, где запустить буст. Степан нажимает кнопку. Это текущий фокус разработки.
L2-L3 (автоматизация): агент сам паузит, меняет бюджет, запускает буст по заранее заданным правилам. Weekend pause cron уже делает это для одного кейса: пятница 21:00 пауза всех кампаний тенанта, понедельник 09:00 resume. Но CPL в понедельник x2-3 первые 6 часов, Meta теряет learning phase. Такие trade-off видишь только с реальными данными.
L4 (автопилот): анализирует рынок, собирает креатив, запускает кампании. M.Business, конечная цель. Ещё далеко, но фундамент из 29 tools с write-доступом делает это технически возможным. Тот же путь от автономного SEO-отдела на агентах масштабируется на рекламу, когда инструментарий готов.
MCP здесь не деталь реализации, а фундамент всей лестницы. Без write-tools агент остаётся наблюдателем.
Цифры: что дали 29 tools на практике
Пять клиентов, MRR 1.5M тенге (~$3K), один оператор. Без MCP нужен минимум один ассистент на рутину: утренний обход дашбордов, ручная пауза/resume кампаний, сверка метрик по кабинетам. MCP не заменяет стратегию, но убирает обезьянью работу.
Самый наглядный результат: CTWA-кампания Truck Auto, запущенная через MCP-tool launch_boost. $1.08 за диалог в WhatsApp vs $12.46 за лид через лендинг. Разрыв в 12 раз за 30 дней. Прямой WhatsApp обходит лендинг потому что человек не теряется на промежуточном шаге. Полный разбор этой воронки с трекингом click-to-WhatsApp до продажи показал что для высокого чека (грузовик за 14-33M тенге) CTWA ставим первой.
Weekend pause экономит ~$80 за выходные, но в понедельник CPL в 2-3 раза выше первые 6 часов. Для B2B с одним менеджером в продажах лучше не палить деньги когда некому отвечать. Но это trade-off, а не бесплатная оптимизация.
Портативность: один MCP-сервер работает в Claude Code, Claude Desktop, потенциально в Cursor и ChatGPT. Инвестиция в tools переносима между клиентами. Написал один раз, используешь везде.