Skip to main content
Glama

mcp-grafana

npm CI licence

A safe-by-default Model Context Protocol server for Grafana. It lets an agent explore and operate Grafana — search dashboards, read the dashboard JSON model, list and query datasources (Prometheus / Loki / SQL), inspect alert rules and annotations, and (in higher modes) create/update dashboards and folders, write annotations, and delete.

Part of the dockndevai MCP server suite — one governance model across all of them.

mcp-grafana — safe by default: read-only exposes 11 tools; raising the access mode unlocks writes and (gated) deletes

What it gives an agent

The server starts read-only (see Safe by default); higher-capability tools are only registered when you raise the mode.

Tool

For

Needs mode

get_health

check the instance is up, version

read-only

search

find dashboards & folders by name/tag (get UIDs)

read-only

list_dashboards / list_folders

enumerate dashboards / folders

read-only

get_dashboard

the full dashboard JSON model + meta

read-only

list_datasources / get_datasource

datasources (secrets redacted)

read-only

query_datasource

run PromQL / LogQL / SQL via the unified query API

read-only

list_alert_rules

Grafana-managed alert rules

read-only

list_annotations

events overlaid on graphs

read-only

create_or_update_dashboard

upsert a dashboard (versioned, reversible)

read-write

create_folder

create a folder

read-write

create_annotation

mark a deploy/incident on graphs

read-write

delete_dashboard / delete_folder / delete_annotation

delete (irreversible)

admin + GRAFANA_ALLOW_DELETE

Related MCP server: Grafana FastMCP Server

Install

npx -y @dockndevai/mcp-grafana

You need a Grafana service account token (Administration → Service accounts → Add service account → Add token). Give it the least role that works — Viewer for read-only use, Editor to create/update, Admin only if you must delete.

Configure

{
  "mcpServers": {
    "grafana": {
      "command": "npx",
      "args": ["-y", "@dockndevai/mcp-grafana"],
      "env": {
        "GRAFANA_URL": "http://localhost:3000",
        "GRAFANA_TOKEN": "glsa_...",
        "GRAFANA_MODE": "read-only"
      }
    }
  }
}

See docs/CLIENTS.md for Claude Code / Cursor / Codex / VS Code / Windsurf snippets, and .env.example for every supported variable.

Safe by default

The access model is enforced by src/security.ts — defence in depth on top of the service-account token's own role:

  • GRAFANA_MODE — read-only (default) → read-write → admin. A tool is registered only if the mode allows its capability. Read-only exposes the 11 read tools; edits need read-write; deletes need admin.

  • GRAFANA_ALLOW_DELETE — deletes are irreversible, so on top of admin mode they also require this flag.

  • GRAFANA_FOLDER_ALLOWLIST / GRAFANA_PROTECTED_FOLDERS — confine which folders can be written to; mark folders (e.g. production) that may be read but never modified or deleted. Matched by folder UID or title. Writes check the target folder and, when overwriting, the folder the dashboard currently sits in; create_annotation checks the folder of the dashboard it attaches to; deletes resolve the target's folder first. The General (root) folder is scoped like any other (name it General in the allowlist or protected list). A protected folder also protects its sub-folders, and delete_folder refuses if a protected folder is nested inside. Anything that cannot be resolved is refused.

  • GRAFANA_DATASOURCE_ALLOWLIST — restrict which datasources query_datasource may hit.

  • GRAFANA_DRY_RUN — validate and log writes without executing them.

  • GRAFANA_AUDIT_LOG — a JSON audit line per guarded operation, on stderr (default on).

  • Interactive confirmation — when the client supports MCP elicitation, deleting a dashboard/folder/annotation prompts the human to approve before it runs. The prompt shows the tool, the exact arguments and a fingerprint; the target's version is pinned across the prompt and the action is refused if it changed; a prompt nobody answers is a refusal. Clients that can't elicit fall back to the GRAFANA_ALLOW_DELETE gate.

  • GRAFANA_REQUIRE_HUMAN_APPROVAL — default false. When true, deletes are refused if the client cannot elicit (instead of falling back to the GRAFANA_ALLOW_DELETE gate alone).

  • Secrets are never returned — datasource secureJsonData, passwords and tokens are stripped from every response.

Interactive confirmation — the agent asks to delete a dashboard; the server pauses and asks the human via MCP elicitation. Declining leaves the dashboard untouched; approving proceeds.

See SECURITY.md.

Working with dashboards & queries

Conventions for the dashboard JSON model, panel/target shapes, PromQL/LogQL/SQL query patterns, folder organisation and safe editing live in the bundled skill: .claude/skills/grafana-dashboards-and-queries/SKILL.md. Agents that load it can build and edit dashboards to a consistent standard without being re-taught each time.

Developing

npm install
npm run build
GRAFANA_URL=http://localhost:3000 GRAFANA_TOKEN=glsa_… node dist/index.js
# introspect without a live Grafana:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | GRAFANA_TOKEN=x node dist/index.js

Licence

MIT

Available Tools

11 tools
get_dashboardGet dashboardA
Read-onlyIdempotent

Return the full dashboard JSON model (panels, targets, templating, time) plus meta (folder, version, url) for a dashboard UID. This is the model you edit and pass back to create_or_update_dashboard.

Inputs: uid (required).

get_datasourceGet datasourceA
Read-onlyIdempotent

Return a single datasource by UID (secrets redacted).

Inputs: uid (required).

get_folderGet folderC
Read-onlyIdempotent

Return a folder's details by UID.

Inputs: uid (required).

get_healthGrafana healthA
Read-onlyIdempotent

Check the Grafana instance is reachable and return its version and database status.

Inputs: no named parameters.

list_alert_rulesList alert rulesA
Read-onlyIdempotent

List Grafana-managed alert rules (via the provisioning API): title, condition, folder, state.

Inputs: no named parameters.

list_annotationsList annotationsB
Read-onlyIdempotent

List annotations (events overlaid on graphs), optionally within a time range or by tag.

Inputs: to, from, tags, limit.

list_dashboardsList dashboardsB
Read-onlyIdempotent

List dashboards (optionally filtered by tag). Shorthand for search with type=dash-db.

Inputs: tag, limit.

list_datasourcesList datasourcesA
Read-onlyIdempotent

List configured datasources (uid, name, type, url). Secrets (secureJsonData, passwords, tokens) are never returned. Use the uid with query_datasource.

Inputs: no named parameters.

list_foldersList foldersA
Read-onlyIdempotent

List dashboard folders with their UIDs and titles.

Inputs: no named parameters.

query_datasourceQuery a datasourceA
Read-onlyIdempotent

Run a query against a datasource through Grafana's unified query API and return the result frames. For Prometheus/Loki set expr (PromQL / LogQL); for SQL datasources set rawSql. Reading data only — this never mutates anything. Use a bounded time range and a small maxDataPoints to keep results manageable.

Inputs: datasourceUid (required), to, expr, from, +2 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 11 tools

    Disambiguation4/5

    Most tools have distinct resource+action purposes (get_health, get_dashboard, get_folder, get_datasource, query_datasource, list_alert_rules, list_annotations). The only real overlap is list_dashboards vs search, but the description explicitly frames list_dashboards as shorthand for search with type=dash-db, which mitigates the ambiguity.

    Naming Consistency4/5

    Names follow a clear verb_noun convention (list_*, get_*, query_*), making the pattern predictable. 'search' is the lone deviation without an explicit noun, and 'get_health' is slightly idiosyncratic, but overall consistency is strong.

    Tool Count5/5

    11 tools is well within the ideal 3-15 range for a Grafana integration. Each tool maps to a concrete resource or operation, and none feel redundant or filler.

    Completeness3/5

    Read coverage is broad (dashboards, folders, datasources, alert rules, annotations, health), but the surface is almost entirely read-only. Notably, get_dashboard references passing the model back to 'create_or_update_dashboard,' a tool that does not exist, and there is no create/update/delete for dashboards, folders, annotations, or alert rules — a meaningful lifecycle gap.

    Maintenance

    ActivityActive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      C
      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
      694 npm
      3
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables MCP-compatible agents to interact with Grafana instances for searching, creating, and updating dashboards, exploring logs via Loki, querying datasources, managing alerts, incidents, and on-call shifts, and accessing observability data.
      8
      Apache 2.0
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI agents to query Grafana dashboards, alerts, and datasources for observability insights and incident investigation.
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      Enables AI assistants to query Grafana datasources (Prometheus/Loki metrics and SQL databases like ClickHouse/Postgres/MySQL) and search or inspect dashboards through natural language, using read-only access to Grafana's API.
      6
      MIT