Skip to main content
Glama
stonoyan04

grafana-mcp-server

by stonoyan04

Grafana MCP Server

MCP-сервер на базе Model Context Protocol (MCP), который предоставляет ИИ-ассистентам доступ только на чтение ко всему, что уже видит ваш Grafana: метрикам Prometheus/Loki, источникам данных ClickHouse/Postgres/MySQL и дашбордам, которые уже собрала ваша команда. Задавайте вопросы на естественном языке и получайте ответы, подтверждённые реальными данными.

Работает с Claude Code, Claude Desktop и любым MCP-совместимым клиентом. Ваш проект может быть на любом языке — этот сервер работает независимо.

Как это работает

Your project (any language)     grafana-mcp-server            Grafana            Datasources
┌───────────────────┐          ┌──────────────────┐          ┌──────────┐       ┌────────────┐
│  Claude Code or   │  stdio   │  Builds the      │  HTTPS   │ /api/ds/ │──────>│ Prometheus │
│  Claude Desktop   │────MCP──>│  per-plugin      │────────->│  query   │──────>│ ClickHouse │
│                   │<─────────│  query model     │<─────────│          │──────>│ Postgres … │
└───────────────────┘          └──────────────────┘          └──────────┘       └────────────┘

Сервер общается только с HTTP API Grafana. Grafana проксирует запрос к источнику данных со своими учётными данными, поэтому ассистент никогда не получает пароль базы данных, и видит ровно то, что видит пользователь Grafana, — не больше. Все запросы выполняются только на чтение (чтобы это было гарантировано, используйте учётные данные с ролью Viewer).

Related MCP server: Grafana MCP Server

Требования

  • Node.js >= 18 или Docker (нужны только для запуска этого MCP-сервера)

  • Учётная запись Grafana, в которую можно войти — Google / SSO / пароль, что бы ни использовал ваш Grafana. Права администратора, сервисный аккаунт и API-токен не требуются: grafana-mcp-server login выполнит вход в браузере и передаст сессию серверу (см. Аутентификация). Токен сервисного аккаунта тоже подойдёт, если он у вас есть.

  • Установленный Chrome или Edge (используется только в качестве окна входа; ваш повседневный браузер может быть любым). Если ни одного из них нет, login переключится на пошаговоое копикопирование cookie в браузере по умолчанию.

Быстрый старт

Вариант A: Node.js

1. Клонируйте и соберите

git clone https://github.com/stonoyan04/grafana-mcp-server.git
cd grafana-mcp-server
npm install
npm run build

В результате будет скомпилированнный ссервер по пути dist/main.js.

2. Войдите

GRAFANA_URL=https://grafana.example.com npm run login

Если Chrome или Edge установлены (как браузер по умолчанию или просто присутствют на машине — это подходит почти всем, каким бы ни был ваш повседневный браузер), login открывает его dedicated окно — с отдельным одноразовым, не вашим обычным, профилем — на странице входа в Grafana. Войдите так же, как делаете это всегда. В тот момент, когда Grafana выдаст сессию, команда сохранит её, удалит из профиля, проверит и выведет:

[grafana-mcp-server] ✓ signed in as jane <jane@example.com>

Ничего копировать, никаких токенов, ничего секретного в конфиг-файле. Если Grafana стоит за Cloudflare Access, вы входите в него в том же окне, и его cookie тоже будет захвачена. Не закрывайте и try to not close window until you see ✓. Сессия хранится в ~/.grafana-mcp/sessions/<host>.json (режим 600).

Playwright умеет управлять только Chrome/Chromium и Edge (Arc, например, вообще не автоматизируется), поэтому login использует один из них как окно входа, независимо от вашего браузера по умолчанию — ваш браузер по умолчанию никогда не затрагивается. Только если ни Chrome, ни Edge не установлены, login откроет Grafana в вашем браузере по умолчанию и под руководством — сделай это 개인적 копи grafana_session из DevTools.

Почему отдельное окно, а не моя открытая вкладка? Браузер никогда не передаёт свои cookie командной строке — эта изоляция и есть суть браузера, — поэтому login управляет своим экземпляром в отдельном профиле и забирает сессию из него.

Принудительно указать браузер: npm run login -- --browser chrome (или msedge, chromium после npx playwright install chromium, либо путь к Chromium-бинарнику). npm run login -- --paste читает cookie из stdin, не открывая браузера.

3. Настройка

Claude Code — одна команда, или эквивалентный блок .mcp.json:

claude mcp add grafana --scope user --env GRAFANA_URL=https://grafana.example.com -- node /home/john/grafana-mcp-server/dist/main.js
{
  "mcpServers": {
    "grafana": {
      "command": "node",
      "args": ["/home/john/grafana-mcp-server/dist/main.js"],
      "env": {
        "GRAFANA_URL": "https://grafana.example.com"
      }
    }
  }
}

Claude Desktop — тот же блок в конфигурационном файле:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Примечание: Замените /home/john/grafana-mcp-server на фактический путь, куда вы схлонировали репозиторий. Единственная обязательная настройка — GRAFANA_URL: учётные данные берётся из сессии, которую сохранил login. Перезапустите клиент после добавления сервера.

У вас токен сервисного аккаунта? Добавьте "GRAFANA_TOKEN": "glsa_…" в env и пропустите login. Или укажите GRAFANA_CREDENTIAL_FILE на файл с правами 0600, который его содержит, либо внедрите его из секрет-менеджера при запуске (например, charter secret exec … --exec -- node dist/main.js).

Вариант B: Docker

git clone https://github.com/stonoyan04/grafana-mcp-server.git
cd grafana-mcp-server
docker build -t grafana-mcp-server .
{
  "mcpServers": {
    "grafana": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-v", "/home/john/.grafana-mcp:/root/.grafana-mcp",
        "-e", "GRAFANA_URL=https://grafana.example.com",
        "grafana-mcp-server"
      ]
    }
  }
}

Запустите login на хост-машине (GRAFANA_URL=… npm run login из локальной копии Node, так как в контейнере нет браузера) и смонтируйте ~/.grafana-mcp в режиме чтения/записи, как это будут обновлённые сессии назад в контейнер. Либо вообще не монтируйте, а передайте -e GRAFANA_TOKEN=glsa_…, если у вас есть токен сервисного аккаунта.

Почему -i и не -t? MCP работает JSON по stdin/stdout. Ключ -i удерживает stdin открытым; TTY (-t) испортит поток.

Если Grafana за Cloudflare Access, смонтируйте свой хост-кэш токенов только для чтения — -v /home/john/.cloudflared:/root/.cloudflared:ro — и сначала выполните на хост-машине cloudflared access login https://grafana.example.com. Контейнер не может сам запускать cloudflared, поэтому он читает cмонтированный кэш (или CF_ACCESS_TOKEN); когда токен истечёт, снова выполните вход на хост-машине.

4. Исследуйте источники данных

List the Grafana datasources

Каждому инструменту запросов нужен uid источника данных, а тип источника данных определяет, какой инструмент использовать: query_metrics? напомню, для пострики, или: dashboards — (для): datasourceUid... На самом assemblage: query_sql for ClickHouse/Postgres/MySQL, query_metrics for Prometheus/Loki. list_datasources говорит и то и другое.

5. Начинайте задавать вопросы

How many messages per Kafka topic were produced in the last 7 days?   → query_metrics on Prometheus
Which dashboards mention "kafka"?                                     → search_dashboards
Show me the panel queries in that dashboard                           → get_dashboard
Run: SELECT count() FROM events WHERE created > now() - INTERVAL 1 DAY → query_sql on ClickHouse

Совет: get_dashboard возвращает необработанный SQL / PromQL за каждой панелью. Переиспользовать запрос, который человек уже написал и которому доверяет, лучше, чем писать с нуля.

Инструменты

Сервер предоставляет 6 инструментов только для чтения:

list_datasources

Выводит источники данных с uid, name, type и какой инструмент запросов применяется. Без параметров.

query_sql

Выполняет SQL-запрос к источником семейств данных через Grafana и получает строки.

Параметр

Тип

По умолчанию

Описание

datasourceUid

string

UID источника данных или его точное имя

sql

string

SQL, который нужно выполнить

from

string

now-6h

Начало диапазона (для макросов вида $__timeFilter)

to

string

now

Конец диапазона

Запрос, отправляемый в /api/ds/query, для каждого plugin grafana-clickhouse-datasource, datasourcevertamedia-clickhouse-datasource, а также для встроенных Postgres/MySQL/MSSQL — все используют разную схему.

query_metrics

Выполняет выражение PromQL или LogQL. Опустите параметр from для мгновенного запроса (instant query).

Параметр

Тип

По умолчанию

Описание

datasourceUid

string

UID источника данных или его точное имя

expr

string

Выражение PromQL / LogQL

from

string

Начало диапазона, например now-24h. Опустите для мгновенного запроса.

to

string

now

Конец диапазона / время вычисления

stepSeconds

number

300

Шаг запроса по диапазону

maxDataPoints

number

1000

Максимум точек на курс

5... search_dashboards

Параметр

Тип

По умолчанию

Описание

query

string

Подстрока заголовка

tag

string

Тег дашборда

limit

number

20

Максимальное количество результатов

1... get_dashboard

Параметр

Тип

Описание

uid

string

UID дашборда из search_dashboards

Возвращает все панели (flat rows), с каждой панелью — источник данных и сырой запрос, е variables, шаблонно переменные и default time range.

6... health

Проверяет связность и различает два слоя аутентификации: "failingLayer": "cloudflare" обозначает cloudflared access login (или повторите login); "failingLayer": "grafana" обозначает, что сохранённые сессия/учётные данные мертвы или имеют недостаточно прав — выполните grafana-mcp-server login. Сообщает, кем проходит учтетная запись, и количество доступных датабаз. Параметров нет. Вызовите его первым, если другой инструмент подряд отказал.

Data frames сплющиваются в простые строки, ключом поля (серия Prometheus дездамибируется по меткам), пределах до GRAFANA_MAX_ROWS.

Команды

Команда

Что делает

grafana-mcp-server (no args)

Запускает MCP-сервера на stdio — это именно то, что запускает MCт клиент

grafana-mcp-server login

Открывает ваш браузер по умолчанию (отдельный профиль), выполнит вход в Grafana и сохраняет сессию для сервера

grafana-mcp-server login --browser X

Принудительно chrome, msedge, arc, brave, vivaldi, chromium или путь к Chromium-подобному бинар

grafana-mcp-server login --paste

Сохраняет значение grafana_session, прочитанное из stdin, вместо открытия браузера

grafana-mcp-server logout

Удаляет сохранённую сессию

npm run login / npm run logout выполняют то же самое из локальной копии проекта.

Конфигурация

Вся конфигурация задаётся через переменные окружения. При использовании login достаточен только GRAFANA_URL.

Переменная

Обязательно

По умолчанию

Описание

GRAFANA_URL

Да

Базовый URL Grafana

GRAFANA_TOKEN

Нет

Токен сервисного аккаунта (glsa_…) или устаревший API-ключ → Bearer. Переопределяет сохранённую сессию.

GRAFANA_USERNAME / GRAFANA_PASSWORD

Нет

Базовая аутентификация

GRAFANA_SESSION

Нет

Значение cookie grafana_session (ротации нельзя сохранить из env — предпочите login)

GRAFANA_CREDENTIAL_FILE

Нет

Файл, содержащий любое из указанных выше значений; формат определяеся автоматически, перечитывается при каждом запросе, ротированные сессии записываются обратно

GRAFANA_SESSION_DIR

Нет

~/.grafana-mcp

Папка, где login хранит сессии (sessions/<host>.json) и свой браузерный профиль

GRAFANA_LOGIN_TIMEOUT

Нет

300000

Сколько login ждёт завершения вашего входа (мс)

GRAFANA_CF_ACCESS

Нет

auto

off полностью пропускает Cloudflare Access

CF_ACCESS_TOKEN

Нет

auto

Запасной Cloudflare Access JWT

ALLOWED_DATASOURCES

Нет

(all)

Разрешённый список uid или имён источников данных через запятую

GRAFANA_MAX_ROWS

Нет

500

Строк, возвращаемых на кадр (frame)

GRAFANA_REQUEST_TIMEOUT

Нет

60000

Тайм-аут запроса в миллисекундах

Приоритет учётных данных: GRAFANA_TOKENGRAFANA_USERNAME+PASSWORDGRAFANA_SSESSIONGRAFANA_CREDENTIAL_FILE → сессия, сохранённая login, → ~/.grafana-mcp-token, если он существует.

Разрешённый список источников данных

"ALLOWED_DATASOURCES": "OsirT4Bnz,Prometheus"

list_datasources скрывает всё остальное, а инстременты запросов отклоняют его.

Аутентификация

Grafana: вход с вашей учётной записью (login)

grafana-mcp-server login обеспечивает вход в вашу учётную запись и уверяет сесию на сервер. Он управляет Chrom или Edge — темом, которая установна, и используется только как окно входа, независимо от вашего браузера по умолчанию — через Playwrite в отдельном профиле по ~/.grafana-mcp/browser, открывает GRAFANA_URL/login и ждёт, пока вы входимі — Google, GitHub, SAML, LDAAP или простой чоль; интрумент никогда не видит и не вводит ваши верите ля. Когда Grafana устанают свою cookie grafana_session, интрумент:

  1. Копирует сиюсию (и cookie CF_Authorization, если перед Grafana есть Cloudflare Access) в ~/.grafana-mcp/sessions/<host>.json (0600),

  2. удаляет cookies Grafana из этого браузерного профиля, поэтому сервис станет единственным держателем сессии,

  3. вызывает на капиuser через собственную кодопую дорогу сервера и выполняет, кто вы.

Плеврайт может управлять только Chrome и Edge, а Arc всё вообще нельзя автоматизировать — поэтому окно входа всегда работает в Chrome/Edge и никогда в вашем браузере по умолчанию (остаётся нетронутым). Только если ни Chrome, ни Edge не установлены, login открывает Grafana в вашем браузере по умолчанию и пошагово проводит вас через копирование cookie grafana_session из DevTools один раз; при этом путь также попросит выйти из вкладки после этого, чтобы она не конкурировала за ротации сессии.

С этого момента сервер сам поддерживает сессию: Grafana отвечает на устаревшую сессию через 401 session.token.required, сервер вызывает POST /api/user/auth-tokens/rotate, атомарно сохраняет новую cookie и повторяет запрос. Поэтому сессия длится столько, сколько действует вход Grafana (по умолчанию 30 дней, 7 дней бездействия) — повторно выполните login в случаях, когда health сообщает failingLayer: "grafana".

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

Grafana ≥ 10 ротирует токен сессии каждые несколько минут, и новый получает только один клиент. Если вы скопируете grafana_session из DevTools, пока вкладка остаётся открытой, браузер первую ротирует её, и копия в течение минут перестаёт действовать — это классический синдром «cookie перестала работать». login избегает этого, забирая сессию из браузера; login --paste также действует, если вы затем выйдете (или очистите cookie) в вкладке, из которой копировали, потому что сервер сохраняет свои ротации.

Grafana: другие учётные данные

Учётные данные

Примечание

Токен сервисного аккаунта (glsa_…)

Никогда не ротируется. Требует администратора Grafana для создания (Администрирование → Сервисные аккаунты, роль Пользователь) — scripts/mint-token.sh <admin-session> автоматизирует это. Задать GRAFANA_TOKEN или завернуть его в GRAFANA_CREDENTIAL_FILE.

Basic auth

Только если фора входа включена — инстансы на Google/GitHub OAuth обычно не имеюют пароля для предоставления.

GRAFANA_SESSION енv

Значение сессии на прямую из env. Работает, но ротации нельзя записать обратно, поэтому он умиравает при первом ротации после перезапуска. Предпочитайте login.

scripts/verify.sh проверяет оба слоя и сообщает, что может видеть учётное — не выводя само значение.

Cloudflare Access (опционально)

Если Grafana находится за Cloudflare Zero Trust, каждый запрос также требует заголосов cf-access-token, либо edge перенаправит его на страницу входа до того, как Grafana увидет вызов. Сервер обрабатывает это автоматически:

  1. Считывает закешированный JWT из ~/.cloudflared/<hostname>-<audience>-token (записанный через cloudflared access login);

  2. Если отсутствует или истёк, запускает cloudflared access token --app=<GRAFANA_URL> (неинтерактивно);

  3. Использует cookie CF_Authorization, захваченную командой login (если не истекла);

  4. Взвращает к запасному CF_ACCESS_TOKEN;

  5. При 302, если edge вернет закешированный токени и повторит один раз с новым.

Tokени разъяснится лениво, для качдору — никогда не один раз при запуске — поэтому истекающий токен самовосстанавливается вместо того, чтобы качдый Чouser вадался осшибкой до перезапуска клиента. Установка cloudflared опциональна, но рекомендована: его токен обновляется сам, любой до тех пор, пока ваш вход в Cloudflare не lawfulness gone, тогда как cookie, захваченная login, истекает сроком действия policy (usually 24h) и требует повторого login.

brew install cloudflared            # macOS; see Cloudflare's docs for Linux
cloudflared access login https://grafana.example.com

Cloudflare не за логар за вас. Х фирmэй.

Cloudflare не за логар за вас в Grafana. CF JWT доказывает, что вам разрешено обращение к хосту; после этого Grafana требует своей учётной записи. Ответ 302 / HTML — это Cloudflare; ответ JSON 401 — это Grafana. health сообщает, кто такой.

Не за Cloudflare? Установите GRAFANA_CF_ACCESS=off, либо просто не ставьте cloudflared — сервер пропускает уровень, если токен не можно найдите.

Структура проекта

src/
  main.ts                        # Entry point — `login` / `logout` commands, or the stdio MCP server
  login.ts                       # Browser sign-in (Playwright over your default Chromium-based browser) → session store
  default-browser.ts             # Detect the default browser (macOS LaunchServices / xdg) and whether it can be driven
  session-store.ts               # ~/.grafana-mcp/sessions/<host>.json, 0600, atomic writes
  grafana-client.ts              # Grafana HTTP client: two auth layers, CF retry, session rotation, datasource cache
  auth.ts                        # Grafana credential resolution (token / basic / session / file / login store)
  cf-token.ts                    # Cloudflare Access token: cache → cloudflared → login cookie → env, lazy + retry
  query-model.ts                 # Per-plugin /api/ds/query bodies (ClickHouse, SQL, PromQL/LogQL)
  allowed-datasources.ts         # Datasource allowlist
  utils/
    frames.ts                    # Data frames → rows
    format-response.ts           # Truncation, error results
  tools/
    list-datasources.tool.ts     # list_datasources
    query-sql.tool.ts            # query_sql
    query-metrics.tool.ts        # query_metrics
    search-dashboards.tool.ts    # search_dashboards
    get-dashboard.tool.ts        # get_dashboard
    health.tool.ts               # health
scripts/
  verify.sh                      # Check both auth layers; list what the credential can see
  mint-token.sh                  # Turn a fresh admin browser session into a service-account token

License

MIT

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    C
    quality
    D
    maintenance
    Enables AI-powered integration with Grafana instances through 52 MCP tools for dashboard management, Prometheus/Loki queries, alerting, and administrative functions. Supports complete Grafana functionality including metrics exploration, log analysis, and incident response through natural language.
    80
    1
  • A
    license
    B
    quality
    B
    maintenance
    Enables AI assistants to interact with Grafana dashboards, datasources, alerts, incidents, and monitoring data through 43 comprehensive tools. Supports querying Prometheus metrics, Loki logs, managing incidents, and dashboard operations with full authentication support.
    43
    762
    3
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to query Prometheus metrics, monitor alerts, and analyze system health through read-only access to your Prometheus server with built-in query safety and optional AI-powered metric analysis.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Query Grafana logs, metrics, and dashboards from Cursor. Enables the AI to call your Grafana instance via tools without leaving the editor.
    8
    4
    Apache 2.0

View all related MCP servers

Related MCP Connectors

  • Renders interactive Chart.js charts and dashboards inline in AI conversations.

  • Provide real-time data querying and visualization by integrating Tako with your agents. Generate o…

  • Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/stonoyan04/grafana-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server