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

MCP-сервер для Яндекс Метрики решает проблему авторизации без клиентского секрета (через PKCE), что критично для CLI-инструментов, распространяемых через npm, и снимает необходимость вручную собирать запросы к Reporting API.
Если вы слышали про MCP, но не понимали, зачем он нужен на практике, этот разбор покажет конкретный сценарий: ИИ-агент (что такое ИИ-агент: программа, которая сама решает, какие действия выполнить для достижения цели, вызывая внешние инструменты без ручного управления) подключается к вашему счётчику Метрики и отвечает на вопросы об аналитике на человеческом языке. Код сервера открыт под лицензией MIT, написан на TypeScript. Ниже разбираю, что нужно для запуска, как устроена авторизация и на каких граблях API Метрики вы сэкономите время.
Что понадобится?
- Счётчик Яндекс Метрики с данными (подойдёт любой, к которому у вас есть доступ)
- Node.js установленный на машине (сервер запускается через
npx) - MCP-совместимый клиент с LLM (большая языковая модель): Claude Desktop, Cursor или любой другой хост, поддерживающий MCP
- Аккаунт Яндекс ID для OAuth-авторизации
- Время: 15 минут на установку и первый запрос, ещё 10 минут на настройку под свои задачи
Как устроен MCP и почему инструментов всего пять?
MCP (Model Context Protocol, протокол контекста модели) описывает, как приложение с LLM общается с внешними серверами. Вместо того чтобы встраивать интеграции в каждый чат-клиент, вы запускаете отдельный процесс-сервер. Хост подключается к нему по стандартному транспорту (обычно stdio), получает список инструментов с JSON-схемами, а модель сама решает, какой инструмент вызвать и с какими аргументами.
Ключевое проектное решение автора сервера: инструментов мало, но каждый гибкий. Метрика поддерживает сотни комбинаций измерений и метрик. Заводить под каждую отдельный инструмент бессмысленно. Поэтому вместо набора кнопок получилось пять инструментов:
run_reportгибкая обёртка над Reporting API: произвольные метрики, измерения, фильтры, сортировкаrun_comparisonсравнение двух периодов с абсолютной и процентной дельтойrun_drilldownпроваливание по дереву измерения (ОС, затем версии ОС и так далее)run_timeseriesметрики, разложенные в динамику по времениget_metadataобнаружение доступных счётчиков, целей и типовых полей, чтобы модель строила запрос по реальным именам, а не угадывала
Пошаговая инструкция
- Установите и запустите сервер одной командой:
npx yandex-metrica-mcp-server
-
Пройдите авторизацию. При первом запуске сервер откроет в браузере страницу Яндекс ID. Подтвердите доступ, скопируйте код со страницы и вставьте в терминал. Публичный
client_idуже вшит в пакет, отдельное OAuth-приложение регистрировать не нужно. -
Подключите сервер к MCP-клиенту. В настройках Claude Desktop или Cursor укажите путь к серверу как MCP-источник по транспорту stdio.
-
Задайте вопрос на обычном языке. Например: «Откуда пришёл трафик за прошлую неделю и сколько визитов дошло до цели?» ИИ-агент сам выберет нужный инструмент (
run_reportилиrun_comparison), сформирует запрос к API Метрики и вернёт ответ. -
Для сравнения периодов используйте формулировку вроде: «Сравни источники трафика за эту и прошлую неделю.» Агент вызовет
run_comparisonи покажет дельту.
Авторизация без секрета: почему это работает?
Здесь начинается самая нетривиальная часть. Сервер устанавливается через npx и работает на машине пользователя. Встроить client_secret в npm-пакет нельзя: всё, что попадает в пакет, публично.
Решение: Authorization Code + PKCE (RFC 7636, стандарт для публичных клиентов). Клиент генерирует случайный code_verifier, отправляет на сервер авторизации его хеш (code_challenge), а при обмене кода на токен предъявляет исходный verifier. Секрет не нужен, подлинность подтверждается знанием verifier.
Генерация пары выглядит так:
import { createHash, randomBytes } from 'node:crypto'
function base64Url(buf: Buffer): string {
return buf.toString('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=+$/, '')
}
export function generatePkce() {
const verifier = base64Url(randomBytes(48))
const challenge = base64Url(
createHash('sha256').update(verifier).digest()
)
return { verifier, challenge, method: 'S256' as const }
}
Обмен кода на токен отправляет секрет только если он есть:
const body = new URLSearchParams({
grant_type: 'authorization_code',
code,
client_id: clientId,
code_verifier: verifier,
redirect_uri: 'https://oauth.yandex.com/verification_code',
})
if (clientSecret) body.set('client_secret', clientSecret)
const res = await fetch('https://oauth.yandex.com/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body,
})
Токен кэшируется в файле с правами 0600 (читать может только владелец). Логин делается один раз.
Три грабли OAuth у Яндекса, которых нет в документации
Эти три проблемы автор обнаружил экспериментально, проверяя каждый шаг против oauth.yandex.com:
-
http://редиректы запрещены. Стандартный для CLI приём: поднять локальный сервер наhttp://127.0.0.1:<port>и поймать редирект с кодом. Яндекс такиеredirect_uriотклоняет. Поэтому используется out-of-band редирект: Яндекс показывает код на странице, пользователь копирует его в терминал. -
Refresh-токен требует секрет. Обмен authorization code на токен по PKCE проходит без секрета, и Яндекс выдаёт токен, живущий около года. Но
grant_type=refresh_tokenбезclient_secretЯндекс не принимает. Решение: раз токен живёт год, refresh публичному клиенту не нужен. По истечении пользователь просто логинится заново. Refresh включается только при подстановке собственного OAuth-приложения с секретом. -
Заголовок авторизации не
Bearer. На этом легко потерять час отладки. Подробности ниже в граблях API.
Промпт (то есть текстовый запрос к модели) в Claude Desktop: «Покажи топ-5 источников трафика за последние 7 дней для моего счётчика и сколько визитов из каждого источника дошли до цели "Заказ".»
Агент вызвал get_metadata, получил ID счётчика и имя цели, затем вызвал run_report с параметрами: метрики ym:s:visits, ym:s:goalXXXreaches, измерение ym:s:lastTrafficSource, сортировка по визитам, лимит 5, даты за последнюю неделю. В ответ вернул таблицу с пятью строками: источник, визиты, достижения цели. Всё без единого ручного запроса к API.
Забыли про формат заголовка авторизации. Яндекс API Метрики ожидает не стандартный Bearer, а OAuth <token>. Если отправить Bearer, получите 401 и потеряете время на отладку.
Пытаетесь использовать http://localhost как redirect_uri. Яндекс его отклонит. Используйте out-of-band редирект через verification_code.
Путаете имена полей Метрики. Поля начинаются с ym:s: (визиты) или ym:pv: (просмотры). Без вызова get_metadata модель будет угадывать имена и ошибаться.
Ожидаете refresh-токен без секрета. Если вы не регистрировали собственное OAuth-приложение с client_secret, refresh не работает. Но токен живёт около года, и для CLI-инструмента это не проблема.
Что делать с этим прямо сейчас, по ролям
Автору на Дзене. Если вы ведёте канал и отслеживаете трафик из поиска, MCP-сервер позволяет задавать вопросы о Метрике голосом, без дашбордов. «Какие статьи привели больше всего визитов из органики за месяц?» Ответ придёт в чат, не нужно разбираться в интерфейсе Метрики.
Маркетологу. Сравнение периодов и воронки по целям через run_comparison экономит рутину построения отчётов. Но готовый инструмент пока требует установки Node.js и работы в терминале.
Разработчику, который пишет свой MCP-сервер. Разбор PKCE-авторизации через Яндекс ID без секрета, самый ценный кусок. Код открыт, лицензия MIT, и три описанные грабли OAuth сэкономят часы отладки.
Этот MCP-сервер показывает, как на практике работает связка «ИИ-агент плюс внешний API»: не абстрактная демонстрация, а рабочий инструмент для реальной аналитики. Решение с PKCE без секрета грамотное и по сути единственное правильное для CLI-инструментов, распространяемых через npm. Оговорка: инструмент требует базового владения терминалом. Для нетехнического пользователя барьер входа пока высок, и до «нажми кнопку, получи отчёт» ещё далеко. Но если вы хотя бы раз запускали команду в консоли, 15 минут хватит.
Для тех, кто раньше не сталкивался: что такое ИИ-агент в контексте аналитики? Это программа, которая получает ваш вопрос на обычном языке, сама решает, какие данные запросить и через какой API, выполняет запрос и возвращает ответ. Вы не пишете код запроса, не помните имена полей, не разбираетесь с форматами. MCP-сервер для Метрики делает именно это: превращает набор API-эндпоинтов в пять понятных инструментов, а модель выбирает нужный сама.
Если вы разрабатываете собственный MCP-сервер над любым другим HTTP API, паттерн тот же: мало гибких инструментов лучше, чем сотня кнопок, а PKCE решает проблему секрета для любого распространяемого CLI.
Попробуйте AI-инструменты для авторов Дзена
Разбираем нейросети, которые реально помогают вести канал: аналитика, тексты, автоматизация рутины.
Перейти на dzen.guru
Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также
Meta открыла нейросеть для программирования Muse Spark 1.1 через собственный API: доступ пока только в США
Meta запустила Muse Spark 1.1, нейросеть для программирования с улучшенным поиском багов и поддержкой мультиагентных систем (когда несколько ИИ-агентов…

OpenAI два года скрывала от суда поиск по copyright-данным: найдено 78 млн диалогов
OpenAI на протяжении двух лет утверждала в суде, что технически не способна искать по собственным обучающим данным (training data, массивы текстов, на которых…

General Intuition привлекла $320 млн: робототехника и ИИ обойдутся без миллионов часов данных
Компания General Intuition привлекла 320 миллионов долларов на модель, обученную на видеоиграх, которая переносит навыки движения на реальных роботов после…
Комментарии