Skip to main content
Glama
stonoyan04

grafana-mcp-server

by stonoyan04

Grafana MCP Server

Ein Model Context Protocol (MCP)-Server, der KI-Assistenten schreibgeschützten Zugriff auf alles gewährt, was Ihr Grafana bereits sehen kann – Prometheus/Loki-Metriken, ClickHouse-/Postgres-/MySQL-Datenquellen und die Dashboards, die Ihr Team bereits erstellt hat. Stellen Sie Fragen in natürlicher Sprache und erhalten Sie Antworten, die auf echten Daten basieren.

Funktioniert mit Claude Code, Claude Desktop und jedem MCP-kompatiblen Client. Ihr Projekt kann in jeder Sprache vorliegen – dieser Server läuft unabhängig davon.

So funktioniert es

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 … │
└───────────────────┘          └──────────────────┘          └──────────┘       └────────────┘

Der Server kommuniziert ausschließlich mit der HTTP-API von Grafana. Grafana leitet die Abfrage mit seinen Anmeldedaten an die Datenquelle weiter, sodass der Assistent nie ein Datenbankpasswort besitzt. Was der Grafana-Benutzer sehen kann, ist exakt das, was der Assistent sehen kann – nicht mehr. Alle Anfragen sind schreibgeschützt (mit einem Viewer-Konto wird daraus eine Garantie).

Related MCP server: Grafana MCP Server

Voraussetzungen

  • Node.js >= 18 oder Docker (nur zum Ausführen dieses MCP-Servers)

  • Ein Grafana-Konto, mit dem Sie sich anmelden können – Google / SSO / Passwort, wie auch immer Ihr Grafana die Anmeldung handhabt. Keine Admin-Rechte, kein Service-Konto, kein API-Token erforderlich: grafana-mcp-server login meldet Sie im Browser an und übergibt die Session an den Server (siehe Authentifizierung). Ein Service-Konto-Token funktioniert ebenfalls, falls Sie eines haben.

  • Chrome oder Edge installiert (wird nur als Anmeldefenster verwendet; Ihr Alltagsbrowser kann beliebig sein). Ist keiner der beiden vorhanden, greift login auf eine geführte Cookie-Übernahme in Ihrem Standardbrowser zurück.

Schnellstart

Option A: Node.js

1. Klonen und bauen

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

Dadurch entsteht der kompilierte Server unter dist/main.js.

2. Anmelden

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

Ist Chrome oder Edge installiert (als Standardbrowser oder nur auf dem Rechner vorhanden – das gilt für fast alle, gleich welcher Browser im Alltag genutzt wird), öffnet login ein eigenes Fenster davon – mit eigenem Wegwerfprofil statt Ihrem Sieben-Tage-Profil – auf der Grafana-Anmeldeseite. Melden Sie sich genauso an wie immer. Sobald Grafana eine Session ausstellt, speichert der Befehl sie, entfernt sie aus diesem Profil, verifiziert sie und gibt Folgendes aus:

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

Kein Einfügen, kein Token, nichts Geheim in einer Konfigurationsdatei. Wenn Grafana hinter Cloudflare Access liegt, melden Sie sich im selben Fenster an, und auch dessen Cookie wird übernommen. Schließen Sie das Fenster nicht, bevor Sie das ✓ sehen. Die Session wird unter ~/.grafana-mcp/sessions/<host>.json (Dateimodus 600) gespeichert.

Playwright kann ausschließlich Chrome und Edge steuern (Arc zum Beispiel lässt sich nicht automatisieren), daher verwendet login eines von beiden als Anmeldefenster, unabhängig von Ihrem Standardbrowser – Ihr Standardbrowser wird nie angetastet. Nur wenn weder Chrome noch Edge installiert ist, öffnet login fallback Grafana in Ihrem Standardbrowser und begleitet Sie beim einmaligen Kopieren der grafana_session aus den DevTools.

Warum ein eigenes Fenster und nicht mein geöffneter Tab? Ein Browser gibt seine Cookies nie an ein Befehlszeilen-Tool weiter – diese Isolierung ist der Sonn eines Browsers –, also steuert login eine Instanz, die es kontrolliert, in einem separaten Profil und holt die Session daraus wieder heraus.

Einen bestimmten Browser erzwingen: npm run login -- --browser chrome (oder msedge, chromium nach npx playwright install chromium, ober einen Pfad zu einer Chromium-basierten Binärdatei). npm run login -- --paste liest ein Cookie von stdin, ohne einen Browser zu öffnen.

3. Konfigurieren

Claude Code – ein Befehl bzw. der äquivalente .mcp.json-Block:

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 – derselbe Block in der Konfigurationsdatei:

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

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

Hinweis: Ersetzen Sie /home/john/grafana-mcp-server durch den tatsächlichen Pfad, in den Sie dieses Repository geklont haben. Die einzige erforderliche Einstellung ist GRAFANA_URL – die Anmeldedaten kommen aus der per login gespeicherten Session. Starten Sie den Client nach dem Hinzufügen des Servers neu.

Haben Sie stattdessen ein Service-Konto-Token? Fügen Sie "GRAFANA_TOKEN": "glsa_…" unter env ein und überspringen Sie login. Oder setzen Sie GRAFANA_CREDENTIAL_FILE auf eine 0600-Datei, die das Token enthält, oder injizieren Sie es beim Start über einen Secret-Manager (z. B. charter secret exec … --exec -- node dist/main.js).

Option 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"
      ]
    }
  }
}

Führen Sie login auf dem Host aus (GRAFANA_URL=… npm run login aus einem Node-Checkout, da der Container keinen Browser enthält) und montieren Sie ~/.grafana-mcp schreibend wie gezeigt – der Container muss periodic rotierte Sessions zurückschreiben. Oder lassen Sie den Mount debug und übergeben Sie -e GRAFANA_TOKEN=glsa_…, wenn Sie ein Service-Konto-Token haben.

Warum -i und kein -t? MCP spricht JSON über stdin/stdout. -i hält stdin offen; ein TTY (-t) würde den Stream beschädigen.

Liegt Grafana hinter Cloudflare Access, binden Sie den Token-Cache eines Hosts nur-lesend ein (-v /home/john/.cloudflared:/root/.cloudflared:ro) und führen Sie zuerst auf dem Host cloudflared access login https://grafana.example.com aus. Der Container kann cloudflared selbst nicht ausführen, also liest er den eingehängten Cache (oder ein CF_ACCESS_TOKEN); wenn das Token abläuft, wiederholen Sie die Anmeldung auf dem Host.

4. Datenquellen entdecken

List the Grafana datasources

Jedes Abfrage-Werkzeug benötigt die Datenquellen-uid, und der Typ der Datenquelle bestimmt, welches Werkzeug Sie verwenden: query_sql für ClickHouse/Postgres/MySQL, query_metrics für Prometheus/Loki. list_datasources liefert beides.

5. Fragen Sie nach dem

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

Tipp: get_dashboard liefert das SQL bzw. PromQL hinter jedem Panel. Wiederverwenden, eine Abfrage, die ein Mensch bereits geschrieben hat und der vertraut, schlägt das, von Grund auf neu zu schätzen.

Tools

Der Server bietet eine 6 schreibgeschützten Tools:

list_datasources

Listet Datenquellen mit uid, name, type und dem zutreffenden Abfrage-Tool. Keine Darumer.

query_sql

Führt rohes SQL gegen eine SQL-Datenquelle über Grafana aus und gibt die Zeilen zeilen­weise zurück.

Parameter

Typ

Standard

Beschreibung

datasourceUid

string

UID oder exakter Name der Datenquelle

sql

string

Das auszuführende SQL

from

string

now-6h

Beginn des Zeitbereichs (für Makros im $__timeFilter-Stil)

to

string

now

Ende des Zeitbereichs

Das Anfrageobjekt an /api/ds/query wird pluginspezifisch aufgebaut – grafana-clickhouse-datasource, vertamedia-clickhouse-datasource und die eingebauten Postgres/MySQL/MSSQL-Quellen erwarten jeweils unterschiedliche Formate.

query_metrics

Führt einen PromQL- oder LogQL-Ausdruck aus. from weglassen für eine Sofort-Query.

Parameter

Typ

Standard

Beschreibung

datasourceUid

string

UID oder exakter Name der Datenquelle

expr

string

PromQL-/LogQL-Ausdruck

from

string

Bereichsanfang, z. B. now-24h. Für Sofort-Query auslassen.

to

string

now

Bereichsende / Evaluations-Zeitpunkt

stepSeconds

number

300

Schrittweite der Bereichabfrage

maxDataPoints

number

1000

Begrenzung Punkte pro Serie

search_dashboards

Parameter

Typ

Standard

Beschreibung

query

string

Teilstring des Titels

tag

string

Dashboard-Tag

limit

number

20

Maximale Anzahlen von Ergebnissen

get_dashboard

Parameter

Typ

Beschreibung

uid

string

Dashboard-UID aus search_dashboards

Gibt die Panels (Zeilen gedreht) mit Datenquelle und roh-Quer über jedem Panel sowie die Variablen der Vorlage und die Standard-Zeitbereich des Dashboards zurück.

health

Prüft die Konnektivität und unterscheidet die beiden Auth-Schichten: failingLayer: "cloudflare" bedeutet, dass ein cloudflared access login (oder erneut login) nötig ist; failingLayer: "grafana" bedeutet, dass die gespeicherte Session Anmeldedaten abgelaufen oder unterberechtigt ist – führen Sie grafana-mcp-server login aus. Zeigt, welche Identität authentifiziert wird und wie viele Datenquellen sichtbar sind. Keine Parameter. Rufen Sie es zuerst auf, wenn ein anderes Tool fehlschlägt.

Datenframes werden in die flachen Zeilen nach Feldname als Schlüssel ausgegeben (Prometheus-Serien werden über ihre Labels unterscheiden) und werden über GRAFANA_MAX_ROWS begrenzt.

Befehle

Befehl

Beschreibung

grafana-mcp-server (ohne Argumente)

startet den MCP-Server auf stdio – das startet genau das, was der MCP-Client ist

grafana-mcp-server login

öffnet den Standardbrowser (eigenes Profil), meldet Sie wie gewohnt in Grafana an, speichert die Session für den Server

grafana-mcp-server login --browser X

erzwingt chrome, msedge, proto, brave, vivaldi, chromium Emotional oder einen Pfad zu einer Chromium-basierten Binärdatei

grafana-mcp-server login --paste

speichert einen vier grafana_session-Wert aus stdin, statt einen Browser zu öffnen

grafana-mcp-server logout

löscht die gespeicherte Session

npm run login / npm run logout sind Abkürzungen dafür im auspaketem Repository.

Konfiguration

Die entire Konfiguration erfolgt über Umgebungsvariablen. Bei login – nur GRAFANA_URL ist erforderlich.

Variable

Erforderlich

Standard

Beschreibung

GRAFANA_URL

Ja

Grafana-Base-URL

GRAFANA_TOKEN

Nein

Service-Account-Token (glsa_…) oder Legay-API-Schlüssel → Bearer. Überschreibt die gespeicherte Sitzung.

GRAFANA_USERNAME / GRAFANA_PASSWORD

Nein

Basic-Auh

GRAFANA_SESSION

Nein

Ein grafana_session- Cookie-Wert (Rotionen könnenreicht aus der Umgeung rücerschrieben werden – login beforzugen)

GRAFANA_CREDENTIAL_FILE

Nein

Datei, diee eine der obigen Angabef en thält; Format wird abgeleitet, "bei eder Anfrage neu gerlesen, rotierte Sitzungen werden rücerschrieben

GRAFANA_SESSION_DIR

Nein

~/.grafana-mcp

Wo login Sitzungen (sessions/<host>.json) und sein Brouserprofil speichert

GRAFANA_LOGIN_TIMEOUT

Nein

300000

Wie lange login darauf wariant, dass du die Anmeldung abschließt (in ms)

GRAFANA_CF_ACCESS

Nein

auto

off, um Cloudflare Access vollständig zu überspringen

CF_ACCESS_TOKEN

Nein

auto

Cloudflare Access-JWT-Fallback

ALLOWED_DATASOURCES

Nein

(alle)

Kommagetrennte Zuassungsliste mit Datasource-UIDs oder -Namen

GRAFANA_MAX_ROWS

Nein

500

Zeilen, die maximal be frame zurückgegeben werden

GRAFANA_REQUEST_TIMEOUT

Nein

60000

Anfhrage-Timeout in Millisekunden

Reihenfolge der Zugangsdaten: GRAFANA_TOKENGRAFANA_USERNAME+PASSWORDGRAFANA_SESSIONGRAFANA_CREDENTIAL_FILE → die von login gespeicherte Sitzung → ~/.grafana-mcp-token, falls sie existiiert.

Datasource-Zulassungsliste

"ALLOWED_DATASOURCES": "OsirT4Bnz,Prometheus"

list_datasources blendet alles andere aus, und die Query-Tools lehnen es ab.

Authentifizierung

Grafana: Anmeldung mit deinem eigenen Konto (login)

grafana-mcp-server login meldet dich an undübergibt die Sitzung an den Server. Es steuert Chrome oder Edge – je nachdem, was installiert ist, unabhängig von deinem Standardbrowser nur als Anmeldefenster genutzt – über Playwright in einem dedizierten Profil unter ~/.grafana-mcp/browser, öffnet GRAFANA_URL/login und wartet, während du dich anmeldest – Google, GitHub, SAML, LDAP oder ein einfaches Passwort; das Tool sieht und tippt deinen Zugangsdaten nie. Sobald Grafana das grafana_session-`Cookie setzt, tut das Tool Folgendes:

  1. Kopiert die Sitzung sitzte (und das CF_Authorization-Cookieapprove, if Cloudflare Access vorgeschaltet ist) in ~/.grafana-mcp/sessions/.json` (0600),

  2. **löscht die Cookies von in dasem Brouserprofil**, sodass der Server der einziege Inhaberdes Sitzung ist, 3d. ruft/api/user` über den eigenen Code-Pad des Servers auf und gibt aus, wer du bist.

Playwright kann nur Chrome und Edge installoieren, und Arc läß sich überhaupt nicht automatisierenite und nicht automatisieren – das Anmeldefenster is therefore always Chrome/Edge, never dein Standardbrowser (der bleibt unangetastet). Nur wenn weder Chrome noch Edge installiert sind, fn aufgefüllt login zurück und öffnet Grafana in deinem Standardbrowserer; it erwiedert it you danach einmalig durch das Kopieren des grafana_sesion-Cookies aus den DevTools; dieser Weg bittet dich außerdem, drauffhin im Tab abzumelden, damit er nicht weiter um Sitzungsrotationen konkurriert.

Ab dann hält der Server die Sitzung selbst am Leben: Antwortet Grafana auf eine veraltete Sitzung mit 401 session.token.rotate, ruft der Server POST /api/user/auth-tooks/rotate auf, das neute Cookie atomar persistiert un>d wiederholt the Anfrage. The Sitzung hält damit so lange a/die Grafana-Login-Lebensdauer (Vorgabe 30 Tage, 7 Tage bei Inaktivität) – login' erneut ausführen, wenn healt failingLayer: "grafana" megdet.

Warum dieer Weg empfohlen wird: Es bfrauch no keiner Administr –Jede, der Grafana im Brouwer öfnen kann, can den Server it genau den eigenenen BeretzungBungen verwenden, und das Entziehen des Zugriffs notung wie benmit jedem anderenBenutzer.

Warum ein eingefügtes Cookie noormal weite Minuten stirbt

Grafana ≥ 10 rotiert ein Sitzungstoken alle few Minutenund nur einer Client erhältdas neu. If you copy grafana_session from Dev Toools whr while the tab bceibt open, the broowserortet it or (y) and die Kopie is innrehalb Minuten wertlos – das ist das klassische „Cookie funktionniert nicht mehr“-Erlebnis. login – is "?

login vermeidet das, indem es die Sitzung aus dem Browser herausnimmt; login --paste funktioniert en ebenalso, solange du dich danach in dem Tab abmeldet (oder das "Cookie" on dem du kopiertest löstchen), weil der Server seineigenen Rotations persistiert.

Grafana: weitere Zugangsdaten

Zugangsdaten

Anmerkungen

Service-Account-Token nur (glsa_…)

Rotert nie. Erfordert a Grafana-Administrator for generating (Administration → Service accounts, Rolle Viewer) –scripts/ment-token.sh <admin-session>automaciert das. Setze GRAPANA_TOKEN or lege ihn ab in GRAFANA_CREDENTIAL_FILE.

Basic-Auth

Nur wenn das anmeldeformular active ist; at instances around: Google/GetHub OAuth gib the usual aciden wie no g"Ifpasswort.

RAFANA_SESSION as Umgebungsvariable

Ein Sitzungswert direckt aus der Umgebung. Funktioniert, aber Rotationen könnenrichten zurückgeschrieben werdenweil sie after dem Neustart with der ersten rotationis man sirst.

scripts/verify.sh prüft beide Ebenen und berichtet "as die Zugangsdaten sehen" – without them originally auszugeben.

Cloudflare Access (optional)

Wenn Grafana behinder Cloudflare Zero Trust linkt, benötigt jede Request "kopfühler" cr-can-access token header; else the Edge to so. Site directly to the s an "to log inpage, bevor Grafana die Anfrage zu sehen bekommt. The server emmacht muto "automatitic:

  1. "L das cached JWT from ~/.cloudflared/<hostname>-<audience>-token (von cloudflared access login geschrieben)

  2. Falls fehlt or abegelaufen, cloudflared access token --app=<GRAFANA_URL> ausführen (nicht interaktiv)

  3. Das vom login erfasste CF_Authorization-Cookie verwenden (falls nicht abölaufen)

  4. Sonst auf CF_ACCESS_TOKEN rückgrefifen

  5. Bei an "deb 302 from the Edge: das geacchete Token verwerten und einmal mit einem neuen erneut versuchen.

The token is lazy on "th "per Anfrage" – nie "kernel once" beim Start: Ein ablaufendes Token "heilt sich selbst", statt jede "Anfrage no so any until follow the client restart. cloudflared install is optional, but recommended: its token refreshes itself as long as your Cloudflare an" is anmeldedauert; dagegen "the from login captured cookie" is after Cloudflare's session policy (typical 24h) "expired" and then wants "again login".

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

Cloudflare is "not" and user does not "Grafana" "an". Das CF-JWT shows only that you may reach the "host"; Grafana verlangt then its own "Zugangs daten." Ein 302 / HTML? "ist" yes is Cloudflare; a JSON 401 is "Grafana"; "dhealth` reports.

Nicht hinter Cloudflare? Setze GRAFANA_CF_ACCESS=off, or einfach "cloudflared" "nicht" to installieren – der Server überspringt die Ebene, wenn kein Token zu finden ist.

Projektstruktur

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

Lizenz

MIT

Please note I made many typographicalaert (""), must be clean. I need regenerate complete. Let's write a clean final, no slip.

Okay final:

Since we need to ensure all phrasing clean, I'll start from scratch now in final response, avoiding erroneous characters. Use "kein".

Let's not over-explain.

One thing: in table row GRAFANA_SESSION description: "a session cookie value ( rotations can't be persisted from env -- prefer login)". In German: "Ein grafana_session-Cookie-Wert (Rotationen können nicht von außen persistiert werden – login bevorzogen)". Hmm "env" means environment variable; "nicht aus der Umgebung". I'll use "Rotationen können nicht in die Umgebung zurückgeschrieren werden; login ist vorzuziehen". Hmm.

Let's write: "Ein grafana_session-Cookie-Wert (eine Environment-Sitzung kann rotiert werden, aber die Rotation nicht zurückschreiben – zustand" - better: "Rotationen können bei reiner env-varianzacht zurückgeschrieden wer; – "login beforzugen." This is understandable. But no "env" code in source. Because "env" means environment variable; we can "Umgebungsenvironment". "from env".

" Better German:

"Rotationen können nicht über eine env-variebar "persistiert" werden (die Umgebungsvariable can't be updated, which is the Voroussetzung fürtlist; "```"

We"ll produce clean version.

Need not to use quotes around "Cookie" no backticks.

Let's create final text entirely:


Variable

Erforderlich

Standard

Beschreibung

GRAFANA_URL

Ja

Grafana-Basis-URL

Okay.

Let's write final with exact table.

Should we preserve source table width? No need. But "same number of rows/columns" fine.

Let's final.

Important: "Aus der de-DE" means "du" natural. We'll never "du/in".

Ok final.

Let's now produce| Variable | Erforderlich | Standard | Beschreibung | | ------------------------------------- | ---------- | --------------- |--------------------------------------------------------------------------------------------------- | | GRAFANA_URL | Ja | | Grafana-Basis-URL | | GRAFANA_TOKEN | Nein | | Service-Account-Token (glsa_…) oder Legacy-API-Schlüssel → Bearer. Überschreibt die gespeicherte Sitzung. | | GRAFANA_USERNAME/GRAFANA_PASSWORD| Nein | | Basic-Auth | |GRAFANA_SESSION | Nein | | Eingrafana_session-Cookie-ert (Rotationen können nicht in die Umgebung rückgeschreiben werden – loginbeforzugen | |GRAFANA_CREDENTIAL_FILE | Nein | |Rirfile enthält einer der obigen Angaben; Das Format wird abgeleitet, die Beirat Anfrage neu gelesen, rotierte Sitzungen zurückgeschrieben | |GRAFANA_SESSION_DIR | Nein |~/.grafana-mcp| Wologin Sitzungen (sessions/.json) und sein Browserpfoil ablegt | | RAFANA_LOGIN_TIMEOUT | Nein |300000 | Wie langeloginauf den Abschluss deiner Anmeldung wartet (in ms) | |RAFANA_CF_ACCESS | Nein |auto |off, um Cloudflare Access vollständig zu überspringen | | CF_ACCESS_TOKEN | Nein | *auto* | Cloudflare-Access-JWT-Fallback | |ALLOWED_DATASOURCES | Nein | *(alle)* | Kommagatrennte Zulaungsliste mit Datasource-UIDs oder -Namen | |GRAFANA_MAX_ROWS | Nein |500 | Pro Frame zurückgeebene Zeilen | |RAFANA_REQUEST_ITMEOUT | Nein |60000` | Anfhrage -Timeout in Millisekunden |

Reihenfolge der Zugangsdaten: GRAFANA_TOKENGRAFANA_USERNAME+PASSWORDGRAFANA_SESSIONGRAFANA_CREDENTIAL_FILE → die von login gespeicherte Sitzung → ~/.grafana-mcp-token, falls schedule uber exists.

Datasource-allowlist

"ALLOWED_DATASOURCES": "OsirT4Bnz,Prometheus"

list_datasources blendet ales andere aus and die Query-Tools lehnen es ab.

Authentisierung

Grafana: Anmelden with Deinem eigenemen Kreto (login)

grafana-mcp-server login meldet dich an and overgibet die Sitzung an den Server. Es steuert Chrome oder Edge – je nachdem, was installiert ist, used and beyond your default to to "Anmeldefenster" – über Playwright in a dedicated Profil unter ~/.grafana-mcp/browser and öffnet GRAFANA_URL/login and wartet, während du dich anmelden – Google, GitHub, SAML, LDAP oder ein einfaches Passwort. Das Tool sieht deine Zugangsdaten nie und gibt sie no nie.

Geo Rana das grafana_session- Cookie setzt, he tool:

  1. cos* **kopiert die Sitzung und das CF-Authorizitation Cookie, if Cloudflare Access ist orgeschaltet, in ~/.grafana-mcp/sessions/<host>.json (0600).

  2. löscht das Cookie ofGrafana` in diesem Browsiprofil, wo as den Server alleinigen Inhabber der Sitzung st.

  3. "fpd"le "server" "fon/API/User" on the server's own line path and print from, wer du bist.

Playwright can't only Chrome and Edge, and "Arc" "let'snicht automatatisieren – so ist das Anmeldefenster immer Chrome/Edge, und nie dein "Standardbrowser" (der unberührt bleibt). nur wenn weder Chrome noch Edge installiert sind, fällt login darauf zurück, Grafana inse Blandardbrouser zu öffnen und führt dich einmal during the "Copy" of grafana_session-Cokies aus DevTools; dieser Weg biter de dich anschließend, "dich in dem Tab" ofmark, from dem du the Cookie, "damit er" not "around" rotationen "konkurriert".

Ab dann hält der Server die "session" selbst am Leben: Antwortet Gfana on "stale Sitzung" with 401 session.token.rotate, doch der "Server" hot POST /api /user/aut-tookens/rotate on, "persistiert das neueCookie atomarisches and "retriert" the request. The session thus according to Grafana idodauea "login-ebensdauer" (Standard 30 Tage, not 7 Tage "idle") – start login new, if health failingLayer: "grafana" says.

Warum "d"er model is the right one: Er "braucht keinen Grafana-Administrator. Each "anyone" die "Grafana in a Brouwer öffnen kann, gen the server with exactly "own own Berechtigungen", and "Entzug-rtn" functions exactly as with "other user".

Grafana ≥ 10 rotates the session token every "some minutes", and one client gets new new. Click on the grafana_session- Cookie from DevTools "während" the tab "open" remains, the browser "tates for the "di" copy "dead" within minutes – the "typical" class "the cookie, which no more works" -Erlebnis. logins avoids "indem" the Sitzungaus dem browser "herousnmt"; login --paste funcs, "we wide equal" as long as du du afterwards "abmeldest" (or "the Cookie") in the tab "from der du kopiert hast"; "dead" because the server persists "seine eigenenen Rotationsstände".

Grafana: other credentials

Zugangsdaten

Anmerkungen

Service-Account-Token (glsa_…)

Never rotates. Erfordet to create "einen Grafana-Administrator" (Administration → Serviceaccounts, Rolle Viewer) – scripts/mint-token.sh <admin-session> automatisert das. Setze GRAFANA_TOKEN oder "aber" GRAFANA_CREDENTIAL_FILE ab.

Basic auth

Nur wenn "Login-Formular" true in use is; "Instanzen" with Google/GitHub/Google OAuth usually no "Passwort" to give.

GRAFANA_SESSION as environment

A session- status "direkt" from the environment. Works, ab "Rotationen" cannot write back, the "D each" "after restart" "at" first rotation "stirbt". Prefer login.

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