Grafana MCP позволяет агенту мониторинга читать дашборды и запрашивать метрики через официальный сервер grafana/mcp-grafana, который работает под токеном сервисного аккаунта с ограниченными ролями. Режим --disable-write закрывает изменения, а ответ агента сверяют с графиком в самой Grafana. Подход уместен дежурной команде, которой нужен быстрый пересказ состояния системы с проверкой по первоисточнику.
Что открываем агенту
Сервер mcp-grafana от Grafana Labs работает с токеном сервисного аккаунта из переменной GRAFANA_SERVICE_ACCOUNT_TOKEN; флаг --disable-write включает режим только чтения, а --enabled-tools управляет категориями инструментов.
Представим дежурного инженера: ночью срабатывает оповещение, и он спрашивает агента, что происходило с задержкой сервиса за последний час. Агент ищет нужный дашборд, формирует запрос к Prometheus и пересказывает результат. Всё это чтение, и для него хватает узкого набора прав. Менять правила оповещений, создавать инциденты и править дашборды агент вправе только в отдельном, заранее оговорённом режиме.
Репозиторий grafana/mcp-grafana описывает категории инструментов: дашборды, запросы к Prometheus, логи Loki, оповещения, источники данных, инциденты и On-call, а также ряд дополнительных. Конфигурацию сервера разбирает раздел документации Grafana: транспорты stdio, SSE и streamable-http, TLS, работа с несколькими организациями. Общую логику сервера инструментов вы найдёте в статье про MCP-сервер с инструментами компании; здесь разговор о мониторинге.
Дашборды и метрики — разные вещи. Дашборд даёт готовое представление, подготовленное людьми, а запрос к источнику данных создаёт агент, и его правильность зависит от выбранной метрики и меток. Для первого этапа достаточно, чтобы агент находил дашборд и пересказывал отдельные панели, а свободные запросы включайте, когда сверка на нескольких примерах пройдена.
Служебный аккаунт
В Grafana заведите отдельный сервисный аккаунт для агента и выпустите ему токен с понятным именем и сроком жизни. Документация сервера допускает и вход по логину с паролем, но токен сервисного аккаунта удобнее: его отзывают отдельно и прав у него ровно столько, сколько назначено. Старая переменная GRAFANA_API_KEY помечена как устаревшая, поэтому в новых настройках её применять незачем. Для ротации без перезапуска сервера есть вариант GRAFANA_SERVICE_ACCOUNT_TOKEN_FILE, где значение берётся из файла.
| Действие агента | Нужное право | Рекомендация |
|---|---|---|
| Чтение дашбордов | dashboards:read с областью по UID или папке | Выдавайте на нужные папки, а доступ ко всем дашбордам оставляйте на исключения |
| Запрос метрик Prometheus | datasources:query на конкретный источник | Ограничьте источником, который нужен задаче |
| Поиск источника данных по имени | datasources:read | Нужно, чтобы агент нашёл UID источника перед запросом |
| Чтение правил оповещений | alert.rules:read | Включайте, если агент объясняет причины срабатывания |
| Создание и правка дашбордов | dashboards:create и dashboards:write | Оставьте выключенным на первом этапе |
README проекта допускает быстрый путь через встроенную роль вроде Editor, когда детальная настройка прав неудобна. Для эксперимента на тестовом стенде это приемлемо, для рабочей Grafana нужны узкие права по таблице выше. Базовая роль Viewer по общим правилам Grafana читает дашборды, но объём её доступа к источникам данных проверьте на тестовом стенде до выдачи. Если в Grafana несколько организаций, заведите аккаунт в той организации, где живут нужные дашборды, и проверьте, что в других организациях у него нет членства. Отдельный токен на каждую среду, тестовую и рабочую, упрощает расследование: по имени токена сразу видно, откуда пришёл запрос.
Запуск и инструменты
README предлагает три способа запуска: через uvx mcp-grafana, готовым бинарным файлом или в контейнере. Для контейнера нужен транспорт stdio, его задают ключом -t stdio. Адрес Grafana и токен передают переменными окружения, секрет лежит в менеджере секретов, а в клиенте агента указывается лишь команда запуска. Контейнерный вариант удобен тем, что версию сервера закрепляют тегом образа. Если дашборды Grafana стоят за корпоративным входом или собственным центром сертификации, пригодятся настройки клиентского TLS из документации сервера: подключение идёт по защищённому каналу, а сертификаты проверяются как положено. Для сервера с транспортом streamable-http добавьте шифрование и на его стороне, иначе токены клиентов пойдут по открытому каналу. Заодно включите проверку самих клиентов флагом --server-auth-token: по README, на нелокальном адресе без неё сервер стартует, но пишет в журнал ошибку безопасности.
- Создайте сервисный аккаунт и токен с правами чтения на тестовой организации Grafana.
- Запустите сервер с флагом
--disable-writeи передайте адрес и токен через переменные окружения. - Подключите сервер к клиенту агента и откройте список инструментов: убедитесь, что записывающие действия отсутствуют.
- Сузьте категории через
--enabled-tools: некоторые категории по умолчанию отключены, остальные оставляйте только нужные. - Выполните пробный запрос и сверьте результат с графиком, как описано в следующем разделе.
Флаг --disable-write, по описанию проекта, блокирует создание и обновление дашбордов, создание инцидентов, изменение правил оповещений, запись аннотаций и сырые SQL-запросы. Запросы PromQL и LogQL при этом остаются доступными, а вот инструменты сырого SQL в режиме чтения убираются: они выполняют любой запрос без разбора и способны писать. Флаг --enable-query возвращает их, и включать его разумно лишь тогда, когда учётные данные источника заведомо читающие. Флаг страхует от случайной записи, но токен всё равно выдают без прав записи: страховка на двух уровнях надёжнее.
Какие метрики вашей системы дежурному нужно пересказывать быстрее всего?
Сверка с графиком
Ответ агента о метриках проверяют по первоисточнику. Возьмите три-четыре панели, значения которых вам известны, и задайте агенту вопросы о них: максимум за последний час, момент скачка, сравнение с прошлой неделей. Откройте ту же панель в Grafana на том же интервале и сравните числа и время.
Типичные расхождения лежат в трёх местах: часовой пояс, шаг агрегации и выбор метки. Агент мог взять метрику по другому сервису, посчитать среднее вместо максимума или сместить интервал. Эти ошибки выглядят убедительно в тексте и заметны лишь рядом с графиком. Логи Loki проверяются по тому же принципу: агент называет выражение запроса и интервал, человек повторяет их в разделе Explore. Поэтому в каждом ответе требуйте текст запроса и интервал: так видно, что именно было спрошено.
Закрепите границу ответственности: агент формулирует запрос и пересказывает результат, сервер выполняет вызов с правами аккаунта, а вывод об аварии и действия принимает дежурный. Автономная правка оповещений агентом остаётся за пределами схемы: если когда-нибудь понадобится запись, её выпускают как отдельный инструмент с подтверждением человека и отдельным токеном.
Допуск и поддержка
Перед рабочим доступом соберите короткий протокол: какой токен, какие категории инструментов включены, какие панели проверены, каковы расхождения. Решение о допуске принимает владелец мониторинга, а дежурные получают короткую памятку: что агент умеет, чего требовать в ответе и как отключить сервер, если пересказ начал расходиться с графиками. Журнал вызовов ведите на стороне клиента агента или своей обвязки и храните рядом с протоколом, чтобы спорный пересказ можно было разобрать по тексту запроса.
При обновлении версии сервера повторяйте пробные вопросы: набор инструментов и их поведение могут меняться. Токен перевыпускайте по графику, а при подозрении на утечку отзывайте сразу в Grafana. Правила отзыва прав и срока жизни ключей описаны в статье про OAuth и токены в MCP; безопасный запуск контейнера — в материале про MCP в Docker.
Если нужно встроить агента в процесс дежурств с оповещениями, эскалацией и приёмкой, расскажите о задаче на странице про автоматизацию бизнес-процессов. Состав работ зависит от числа источников данных, ролей дежурных, организаций Grafana и требований к журналу.
Заведите тестовый сервисный аккаунт с чтением одной папки дашбордов, запустите mcp-grafana с --disable-write и задайте три вопроса по панелям, значения которых уже известны. Результат проверки запишите в протокол: дата, версия сервера, вопросы, найденные расхождения. Допуск обсуждайте, когда пересказ совпал с графиком во всех трёх случаях.