Skip to content
MCP Shelf

Grafana MCP

View on GitHub

Dashboards, metrics, logs, alerts and incidents from your Grafana, in one server.

  • Started in our test
  • ★ 3.6K GitHub stars
  • 125.1K downloads a week
  • Last commit 26 Oct 2026

At a glance

Grafana Labs' own server works with a self-hosted Grafana or Grafana Cloud. The model can search and summarise dashboards, read panel queries, run PromQL against Prometheus and LogQL against Loki, search traces in Tempo, and read alert rules, incidents, OnCall schedules and annotations. Tools for ClickHouse, CloudWatch, Elasticsearch and other datasources are there too, switched off until you ask for them.

It can also change things: edit dashboards, create folders and alert rules, open incidents. Start it with --disable-write and a service account that only has viewer rights unless you want that. It sends anonymous usage counts to Grafana Labs unless you turn them off.

Made by
Grafana Labs
Licence
Apache-2.0
Latest version
2.1.1 (20 Oct 2026)
PyPI package
mcp-grafana
GitHub stars
3.6K
Downloads
125.1K a week
Last commit
26 Oct 2026
Tools
62
Runs on
Your computer

Our check: We ran this exact config on 27 Oct 2026: it started and answered with 62 tools.

What's in the pod: its tools

We found 62 tools when we started it on 27 Oct 2026. Every one of them only reads, so nothing changes unless you act on what it finds.

Only reads62 tools · Looks things up and changes nothing.

ToolWhat it is for
alerting_manage_routingReads notification policies, contact points and timings.
alerting_rules_readLists and inspects alert rules, with filters.
alerting_silences_readLists active and expired silences.
analyze_loki_labelsAudits a Loki label setup and points out labels that hurt query speed.
check_datasources_healthChecks whether datasources are answering.
diff_tempo_tracesCompares two traces span by span.
generate_deeplinkBuilds a link to a dashboard, panel or Explore view for you to open.
get_alert_groupDetails of one OnCall alert group.
get_annotation_tagsLists annotation tags.
get_annotationsAnnotations by dashboard, time range or tag.
get_assertionsAssertion summaries for an entity from Grafana's knowledge graph.
get_current_oncall_usersWho is on call now for a schedule.
get_dashboard_by_uidThe complete dashboard JSON. Large dashboards can fill the context window.
get_dashboard_panel_queriesEvery panel's title, query and datasource on a dashboard.
get_dashboard_propertyPulls out just part of a dashboard with a JSONPath expression.
get_dashboard_summaryA compact overview of a dashboard: panels, variables and metadata, without the full JSON.
get_datasourceDetails of one datasource.
get_docReads one Grafana documentation page.
get_incidentFull details of one incident.
get_oncall_shiftDetails of one OnCall shift.
get_panel_imageRenders a panel, a dashboard or an Explore view as a PNG.
get_pluginWhether a plugin is installed, and its version.
get_snapshotReads one snapshot and its dashboard.
get_tempo_traceFetches one trace by ID.
get_tempo_traceql_docsReturns TraceQL reference notes with examples.
grafana_api_requestCalls any Grafana API path with the server's credentials, for anything the other tools miss.
list_alert_groupsLists OnCall alert groups with filters.
list_dashboard_versionsSaved versions of a dashboard with author, time and message.
list_datasourcesLists the datasources Grafana is connected to.
list_incident_custom_fieldsThe custom fields set up for incidents.
list_incidentsLists Grafana Incident incidents, active or resolved.
list_loki_label_namesLists log label names.
list_loki_label_valuesLists the values of one log label.
list_oncall_schedulesLists OnCall schedules.
list_oncall_teamsLists OnCall teams.
list_oncall_usersLists OnCall users.
list_prometheus_label_namesLists label names for matching series.
list_prometheus_label_valuesLists the values one label takes.
list_prometheus_metric_metadataType, help text and unit for metrics.
list_prometheus_metric_namesLists metric names, filtered by a pattern.
list_provisioning_repositoriesLists Git Sync and other provisioning sources.
list_pyroscope_label_namesLists profile label names.
list_pyroscope_label_valuesLists the values of one profile label.
list_pyroscope_profile_typesLists the profile types a Pyroscope datasource holds.
list_snapshotsLists dashboard snapshots.
list_tempo_attribute_namesLists attribute names you can use in TraceQL.
list_tempo_attribute_valuesLists the values of one trace attribute.
query_loki_logsRuns a LogQL query against Loki or VictoriaLogs and returns log lines or metrics.
query_loki_patternsCommon log line patterns Loki has detected for a stream.
query_loki_statsCounts of streams, chunks and bytes for a selector, to size a query before running it.
query_prometheusRuns a PromQL query, instant or over a range, against Prometheus, Mimir, Thanos and similar.
query_prometheus_histogramWorks out p50, p90, p95 or p99 from a histogram metric.
query_pyroscopeFetches profiles or profile metrics from Pyroscope.
query_tempo_metricsComputes metrics from traces with a TraceQL metrics query.
search_dashboardsFinds dashboards by title, folder, tag or starred status.
search_docsSearches the Grafana documentation.
search_foldersFinds folders by name.
search_plugin_informationSearches the Grafana plugin catalogue.
search_tempo_tracesSearches traces with TraceQL.
suggest_loki_alloy_label_configWrites an Alloy snippet that keeps only an approved set of labels.
user_infoWho the server is signed in as.
validate_provisioning_fileDry-runs a provisioning file from a repository to catch errors.

Tool groups

Default
Dashboards, datasources, Prometheus, Loki, Tempo, Pyroscope, alerting, incidents, OnCall, annotations and docs, as listed here in read-only mode.
Write tools
Updating and patching dashboards, creating folders, alert rules, incidents and annotations. Hidden by --disable-write, which our config uses.
--enabled-tools extras
Off by default and switched on by name: sql (ClickHouse, Snowflake, Athena), cloudwatch, elasticsearch, influxdb, graphite, cloudlogging, runpanelquery and examples, among others.

Grouped and described by us. The README on GitHub lists the inputs each tool takes.

How clearly it describes its tools to your assistant

Tools with a description
62 of 62
Say if they change things
62 of 62
Context it takes, at least
~6,800 tokens

Every tool says whether it only reads or can change things, so a client can ask before the risky ones. The tool list is large: switch off the tools you do not use if your client allows it.

From the tool list it sent us. The token figure counts names, descriptions and input names; the full schemas your client loads add more.

Set it up

Pick your app for the exact snippet and where it goes.

Where it goes: claude_desktop_config.json (Settings → Developer → Edit Config)

Claude Desktop
{
  "mcpServers": {
    "grafana": {
      "command": "uvx",
      "args": [
        "mcp-grafana",
        "--disable-write"
      ],
      "env": {
        "GRAFANA_URL": "http://localhost:3000",
        "GRAFANA_SERVICE_ACCOUNT_TOKEN": "YOUR_SERVICE_ACCOUNT_TOKEN"
      }
    }
  }
}

We publish it in read-only mode; drop "--disable-write" to allow edits. Add "GRAFANA_USAGE_STATS": "disabled" in env to stop usage reporting. For Grafana Cloud, set GRAFANA_URL to your stack, such as https://you.grafana.net.

New to this? See the setup guides for Claude Code, Cursor, Claude Desktop and ChatGPT.

Settings

Names are exactly as the project spells them. Required ones are marked.

SettingWhat it does
GRAFANA_URLEnvironment variable · requiredYour Grafana address, such as http://localhost:3000 or https://you.grafana.net.
GRAFANA_SERVICE_ACCOUNT_TOKENEnvironment variable · requiredA service account token. Its role decides what the server can see and change, so give it Viewer unless you want edits.
--disable-writeCommand line flagRemoves every tool that changes Grafana. Our config uses it.
--enabled-toolsCommand line flagPicks which tool groups load, including ones that are off by default.--enabled-tools search,datasource,prometheus,loki
GRAFANA_USAGE_STATSEnvironment variableSet to disabled to stop anonymous usage reports to Grafana Labs, which are on by default. DO_NOT_TRACK=1 does the same.disabled
--transportCommand line flagstdio by default; sse or streamable-http to serve it over HTTP, with --address for the host and port.--transport streamable-http --address localhost:8000

What it can touch

It can read

  • Dashboards, folders and datasources
  • Metrics, logs, traces and profiles through those datasources
  • Alerts, incidents and on-call schedules

It can change

  • Without --disable-write: dashboards, folders, alert rules, incidents and annotations
  • Anything the token allows, through grafana_api_request

Safer setup: Use --disable-write with a Viewer service account. That way even grafana_api_request cannot change anything the token is not allowed to.

Before you start

  • Grafana 9.0 or newer, self-hosted or Grafana Cloud
  • A service account token
  • uv (or the Docker image or Go binary)

If it does not work

Every call returns 401 or 403
Check that the token belongs to a service account in the same organisation and has a role with the access you need.
Answers stop half way on big dashboards
Ask for get_dashboard_summary or get_dashboard_property instead of the full dashboard JSON.
Datasource tools fail on an old Grafana
Grafana 9.0 or newer is needed for full support.
A tool from the README is missing
Some groups are off by default. Add them with --enabled-tools, and drop --disable-write if it is a write tool.

Peas in a pod: similar servers

How Grafana MCP lines up against other cloud and operations servers on the shelf.

ServerToolsRuns onLicenceStars
Grafana MCP62Your computerApache-2.03.6K
Azure DevOps MCP44Your computer or hostedMIT2.1K
AWS Knowledge MCP Server5Hosted–9.8K
Cloudflare MCP Servers2Hosted–4.4K

Questions

Is it official?

Yes. Grafana Labs builds and maintains it under the Apache-2.0 licence.

Does it work with Grafana Cloud?

Yes. Set GRAFANA_URL to your stack, such as https://you.grafana.net, and use a service account token from that stack.

Can I run it without Python?

Yes. It is a Go program; uvx just fetches a build. There is also a Docker image, release binaries and a Helm chart.

What does it send to Grafana Labs?

Anonymous counts of which tools ran and how it is configured, every four hours. Never queries, results, URLs or credentials. You can turn it off.

Full docs on GitHubgrafana/mcp-grafana

Something wrong on this page? Tell us.

More in Cloud and operations