{"_id":"@dockndevai/mcp-grafana","_rev":"7-81d6af4529bf946fffe9d607fa6e771f","name":"@dockndevai/mcp-grafana","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@dockndevai/mcp-grafana","version":"0.1.0","keywords":["mcp","model-context-protocol","grafana","dashboards","observability","prometheus","loki","promql","monitoring","llm","ai"],"license":"MIT","_id":"@dockndevai/mcp-grafana@0.1.0","maintainers":[{"name":"dock-n-dev-ai","email":"ankitcs17071993@gmail.com"}],"homepage":"https://dockndevai.github.io/","bugs":{"url":"https://github.com/dockndevai/mcp-grafana/issues"},"bin":{"mcp-grafana":"dist/index.js"},"dist":{"shasum":"371e5102790268f512e147cbd9ba0964c3835d02","tarball":"https://registry.npmjs.org/@dockndevai/mcp-grafana/-/mcp-grafana-0.1.0.tgz","fileCount":13,"integrity":"sha512-ZggbvxaJKYEU/CJsMD1C/6icScDExsK7cM360fiq2ybHtTOlEp38n20q0F/unSDiLZqGbVf2H/b3qt57XQIOTQ==","signatures":[{"sig":"MEYCIQD6YhJe/pcKRhlQ54mJ9tOliqVvReDG+tC+X5LJWweRQQIhAIQ4TK+XHWROFrfMd3X9pk3otMVm9aPOioxefgTew/Cm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dockndevai%2fmcp-grafana@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":39637},"type":"module","engines":{"node":">=20"},"gitHead":"ed676842a2a5c16863817996a43b9a9630c968c0","mcpName":"io.github.dockndevai/mcp-grafana","scripts":{"dev":"tsx watch src/index.ts","lint":"tsc -p tsconfig.json --noEmit","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/index.js","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"dock-n-dev-ai","email":"ankitcs17071993@gmail.com"},"repository":{"url":"git+https://github.com/dockndevai/mcp-grafana.git","type":"git"},"_npmVersion":"10.8.2","description":"Model Context Protocol server for Grafana — search & edit dashboards, query datasources (Prometheus/Loki/SQL), inspect alerts & annotations, with safe-by-default access modes and guards.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","vitest":"^3.2.7","typescript":"^5.6.3","@types/node":"^22.9.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-grafana_0.1.0_1788449517417_0.04456984838817357","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@dockndevai/mcp-grafana","version":"0.1.1","keywords":["mcp","model-context-protocol","grafana","dashboards","observability","prometheus","loki","promql","monitoring","llm","ai"],"license":"MIT","_id":"@dockndevai/mcp-grafana@0.1.1","maintainers":[{"name":"dock-n-dev-ai","email":"ankitcs17071993@gmail.com"}],"homepage":"https://dockndevai.github.io/","bugs":{"url":"https://github.com/dockndevai/mcp-grafana/issues"},"bin":{"mcp-grafana":"dist/index.js"},"dist":{"shasum":"b041111fb1bd5bb4b86c30310c6ed16ea246f34e","tarball":"https://registry.npmjs.org/@dockndevai/mcp-grafana/-/mcp-grafana-0.1.1.tgz","fileCount":13,"integrity":"sha512-2dGCk0Qb+OdpxmoRPZ/pE2qsqX0L6HYg8hS8u3aCwiJ0v7RajBFf9NkOD1xBNW1tcqq2eFm3nGgASt7tQxAybA==","signatures":[{"sig":"MEUCIQCnryI1rri4l/EDlrDa2vN+hxhrSfyYv/RxnE3E9bPYXQIgHNx8V/hK/0TEJLrkry1vKwGwWs6eaQiCM8WdCcw2T6Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dockndevai%2fmcp-grafana@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":39776},"type":"module","engines":{"node":">=22"},"gitHead":"62490fde3586549fe89e994db275056ef0cb6f0d","mcpName":"io.github.dockndevai/mcp-grafana","scripts":{"dev":"tsx watch src/index.ts","lint":"tsc -p tsconfig.json --noEmit","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/index.js","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"dock-n-dev-ai","email":"ankitcs17071993@gmail.com"},"repository":{"url":"git+https://github.com/dockndevai/mcp-grafana.git","type":"git"},"_npmVersion":"10.9.8","description":"Model Context Protocol server for Grafana — search & edit dashboards, query datasources (Prometheus/Loki/SQL), inspect alerts & annotations, with safe-by-default access modes and guards.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","vitest":"^5.0.0","typescript":"^5.6.3","@types/node":"^22.9.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-grafana_0.1.1_1788969438266_0.08113465020625354","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@dockndevai/mcp-grafana","version":"0.2.0","keywords":["mcp","model-context-protocol","grafana","dashboards","observability","prometheus","loki","promql","monitoring","llm","ai"],"license":"MIT","_id":"@dockndevai/mcp-grafana@0.2.0","maintainers":[{"name":"dock-n-dev-ai","email":"ankitcs17071993@gmail.com"}],"homepage":"https://dockndevai.github.io/","bugs":{"url":"https://github.com/dockndevai/mcp-grafana/issues"},"bin":{"mcp-grafana":"dist/index.js"},"dist":{"shasum":"5b9acb2ac8949fe465eeca9ea8b9eb92c34e9748","tarball":"https://registry.npmjs.org/@dockndevai/mcp-grafana/-/mcp-grafana-0.2.0.tgz","fileCount":14,"integrity":"sha512-uh7Dtf1UT2culaV1npUoQAC7ucIxOk/WxvCWg7bBmgOfvWdlPkU2z1GT5RyoDsCKwAWuD7MmBSoLOXwLR3M/9Q==","signatures":[{"sig":"MEUCIQDzqV93pRr3A/e0pZA9jAdMnlCG6IU2qQtS2q/xQjq2RAIgVo2jRsafvtFSp6l0pVaSiM2fIjz+YejLOcqfniTyhqU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dockndevai%2fmcp-grafana@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":42555},"type":"module","engines":{"node":">=22"},"gitHead":"f8481cb8dd86d49b6212aca9439f272a8ebceaf2","mcpName":"io.github.dockndevai/mcp-grafana","scripts":{"dev":"tsx watch src/index.ts","lint":"tsc -p tsconfig.json --noEmit","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/index.js","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"dock-n-dev-ai","email":"ankitcs17071993@gmail.com"},"repository":{"url":"git+https://github.com/dockndevai/mcp-grafana.git","type":"git"},"_npmVersion":"10.9.8","description":"Model Context Protocol server for Grafana — search & edit dashboards, query datasources (Prometheus/Loki/SQL), inspect alerts & annotations, with safe-by-default access modes and guards.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","vitest":"^5.0.0","typescript":"^5.6.3","@types/node":"^22.9.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-grafana_0.2.0_1788981936289_0.7518258573290819","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@dockndevai/mcp-grafana","version":"0.2.1","keywords":["mcp","model-context-protocol","grafana","dashboards","observability","prometheus","loki","promql","monitoring","llm","ai"],"license":"MIT","_id":"@dockndevai/mcp-grafana@0.2.1","maintainers":[{"name":"dock-n-dev-ai","email":"ankitcs17071993@gmail.com"}],"homepage":"https://dockndevai.github.io/","bugs":{"url":"https://github.com/dockndevai/mcp-grafana/issues"},"bin":{"mcp-grafana":"dist/index.js"},"dist":{"shasum":"4854aca5e26a1f1f3ca2c877b58e0652c89dea15","tarball":"https://registry.npmjs.org/@dockndevai/mcp-grafana/-/mcp-grafana-0.2.1.tgz","fileCount":14,"integrity":"sha512-ar0tSLHGe1aOMCcFFd8pcKTzyJ6N0fdzpwjxxIU+Yi0XLRSx6oOaEdQX32wtweR4exEO1U5n8s3ZvlJjD2ZMLA==","signatures":[{"sig":"MEUCIQDfHOAE0GcZj44ebNWU1K+phQJCDuvoaYxTfERv55iFPQIgX8+lnhX/TozNe92S0k6I6cdBP91Qshjj+PwChAa4BHQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dockndevai%2fmcp-grafana@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":42792},"type":"module","engines":{"node":">=22"},"gitHead":"fc8d01ff557bdc096674c988da04559f300fb65b","mcpName":"io.github.dockndevai/mcp-grafana","scripts":{"dev":"tsx watch src/index.ts","lint":"tsc -p tsconfig.json --noEmit","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/index.js","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"dock-n-dev-ai","email":"ankitcs17071993@gmail.com"},"repository":{"url":"git+https://github.com/dockndevai/mcp-grafana.git","type":"git"},"_npmVersion":"10.9.8","description":"Model Context Protocol server for Grafana — search & edit dashboards, query datasources (Prometheus/Loki/SQL), inspect alerts & annotations, with safe-by-default access modes and guards.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","vitest":"^5.0.0","typescript":"^5.6.3","@types/node":"^22.9.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-grafana_0.2.1_1788983069235_0.1741016671747979","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@dockndevai/mcp-grafana","version":"0.2.2","keywords":["mcp","model-context-protocol","grafana","dashboards","observability","prometheus","loki","promql","monitoring","llm","ai"],"license":"MIT","_id":"@dockndevai/mcp-grafana@0.2.2","maintainers":[{"name":"dock-n-dev-ai","email":"ankitcs17071993@gmail.com"}],"homepage":"https://dockndevai.github.io/","bugs":{"url":"https://github.com/dockndevai/mcp-grafana/issues"},"bin":{"mcp-grafana":"dist/index.js"},"dist":{"shasum":"3b75447793e028b61cfa45593cf73d876b3582d6","tarball":"https://registry.npmjs.org/@dockndevai/mcp-grafana/-/mcp-grafana-0.2.2.tgz","fileCount":14,"integrity":"sha512-53kF6PcVCuhkUD8ehO7WKtzUnbPPGLR/8Ly7bfxwXAvF/5Ya1Duta0JEg8nST85HR/ddOMq4/XsATkxVy42mSg==","signatures":[{"sig":"MEQCIEB5INtSO4FVB67a7suiF/53Rf9EVHzp5LoMQUnUNj8sAiAxT+OLsvF69wTG6Yp6DNssZTt89l/JLp5aY9n4jKMiNQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dockndevai%2fmcp-grafana@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":43006},"type":"module","engines":{"node":">=22"},"gitHead":"0444aecf041a0cc6dd233c6bb60ad2523f0ee680","mcpName":"io.github.dockndevai/mcp-grafana","scripts":{"dev":"tsx watch src/index.ts","lint":"tsc -p tsconfig.json --noEmit","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/index.js","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"dock-n-dev-ai","email":"ankitcs17071993@gmail.com"},"repository":{"url":"git+https://github.com/dockndevai/mcp-grafana.git","type":"git"},"_npmVersion":"10.9.8","description":"Model Context Protocol server for Grafana — search & edit dashboards, query datasources (Prometheus/Loki/SQL), inspect alerts & annotations, with safe-by-default access modes and guards.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","vitest":"^5.0.0","typescript":"^5.6.3","@types/node":"^22.9.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-grafana_0.2.2_1788984659110_0.17955986998332474","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@dockndevai/mcp-grafana","version":"0.2.3","keywords":["mcp","model-context-protocol","grafana","dashboards","observability","prometheus","loki","promql","monitoring","llm","ai"],"license":"MIT","_id":"@dockndevai/mcp-grafana@0.2.3","maintainers":[{"name":"dock-n-dev-ai","email":"ankitcs17071993@gmail.com"}],"homepage":"https://dockndevai.github.io/","bugs":{"url":"https://github.com/dockndevai/mcp-grafana/issues"},"bin":{"mcp-grafana":"dist/index.js"},"dist":{"shasum":"633f66bb9f59459c790d921bf7fe8e5409cf2a4c","tarball":"https://registry.npmjs.org/@dockndevai/mcp-grafana/-/mcp-grafana-0.2.3.tgz","fileCount":14,"integrity":"sha512-nf4YVaKzM26fszA4s/m2csnDL86lVvwdT0MwI1zpQR/STnU8BpSwAs40VKau5rYXAP46sKHkynPjuoOYNwAL/Q==","signatures":[{"sig":"MEUCIQDCqg5BxSHPaJfZOztLi+pJgXTshK3dbPSc49G9V/P/zwIgBpWUhPsTq5j2mgfk+pbOo+1CPVBDbxSzz9iq+h8GPgg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dockndevai%2fmcp-grafana@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":43018},"type":"module","engines":{"node":">=22"},"gitHead":"95e33baf0ea6b2cbfd289af8b8361b2211c7aef9","mcpName":"io.github.dockndevai/mcp-grafana","scripts":{"dev":"tsx watch src/index.ts","lint":"tsc -p tsconfig.json --noEmit","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/index.js","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"dock-n-dev-ai","email":"ankitcs17071993@gmail.com"},"repository":{"url":"git+https://github.com/dockndevai/mcp-grafana.git","type":"git"},"_npmVersion":"10.9.8","description":"Model Context Protocol server for Grafana — search & edit dashboards, query datasources (Prometheus/Loki/SQL), inspect alerts & annotations, with safe-by-default access modes and guards.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.5.4","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.13","vitest":"^5.0.0","typescript":"^7.0.2","@types/node":"^26.5.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-grafana_0.2.3_1789235851845_0.9620606386500827","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"_id":"@dockndevai/mcp-grafana@0.3.0","bin":{"mcp-grafana":"dist/index.js"},"bugs":{"url":"https://github.com/dockndevai/mcp-grafana/issues"},"dist":{"shasum":"9186c5f7d95c55dfe3d72b024ceea275f2383cde","tarball":"https://registry.npmjs.org/@dockndevai/mcp-grafana/-/mcp-grafana-0.3.0.tgz","fileCount":15,"integrity":"sha512-V5lT5g92ULl4WvxyLZ3upYNPNtXR2U6o7sE5Zyi2jnGsxqeCrFzDqha5FmnlQIDHfRJmT/9ycXzjtXnjbAA/5w==","signatures":[{"sig":"MEYCIQDMh0GZoV6zIbvmkSg0CIigCWdob2pn3WheFa5Gu6t9NgIhALAHI4MHkNzS5T+mgQ5jrFl9/8gP/EBGZ4edCwsQvt3Q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDxGnMabz2uYScjAKzrbv+UnygONv0m1yDGFwqOcr0MIQIhANOU5J4d/VtDYwzditUrHlL8JcCsEegzoVnxMjAd2BrL"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dockndevai%2fmcp-grafana@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":47023},"name":"@dockndevai/mcp-grafana","type":"module","engines":{"node":">=22"},"gitHead":"c0d6f515841ae0861796e43b1c7f87bfd3700ca1","license":"MIT","mcpName":"io.github.dockndevai/mcp-grafana","scripts":{"dev":"tsx watch src/index.ts","lint":"tsc -p tsconfig.json --noEmit","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/index.js","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"version":"0.3.0","_npmUser":{"name":"dock-n-dev-ai","email":"ankitcs17071993@gmail.com"},"homepage":"https://dockndevai.github.io/","keywords":["mcp","model-context-protocol","grafana","dashboards","observability","prometheus","loki","promql","monitoring","llm","ai"],"repository":{"url":"git+https://github.com/dockndevai/mcp-grafana.git","type":"git"},"_npmVersion":"10.9.8","description":"Model Context Protocol server for Grafana — search & edit dashboards, query datasources (Prometheus/Loki/SQL), inspect alerts & annotations, with safe-by-default access modes and guards.","directories":{},"maintainers":[{"name":"dock-n-dev-ai","email":"ankitcs17071993@gmail.com"}],"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.5.4","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.13","vitest":"^5.0.0","typescript":"^7.0.2","@types/node":"^26.5.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-grafana_0.3.0_1790684979178_0.8668114724584854"}}},"time":{"created":"2026-09-03T15:31:57.265Z","modified":"2026-09-29T12:29:39.654Z","0.1.0":"2026-09-03T15:31:57.565Z","0.1.1":"2026-09-09T15:57:18.398Z","0.2.0":"2026-09-09T19:25:36.427Z","0.2.1":"2026-09-09T19:44:29.372Z","0.2.2":"2026-09-09T20:10:59.275Z","0.2.3":"2026-09-12T17:57:32.000Z","0.3.0":"2026-09-29T12:29:39.255Z"},"bugs":{"url":"https://github.com/dockndevai/mcp-grafana/issues"},"license":"MIT","homepage":"https://dockndevai.github.io/","keywords":["mcp","model-context-protocol","grafana","dashboards","observability","prometheus","loki","promql","monitoring","llm","ai"],"repository":{"url":"git+https://github.com/dockndevai/mcp-grafana.git","type":"git"},"description":"Model Context Protocol server for Grafana — search & edit dashboards, query datasources (Prometheus/Loki/SQL), inspect alerts & annotations, with safe-by-default access modes and guards.","maintainers":[{"name":"dock-n-dev-ai","email":"ankitcs17071993@gmail.com"}],"readme":"# mcp-grafana\n\n[![npm](https://img.shields.io/npm/v/@dockndevai/mcp-grafana)](https://www.npmjs.com/package/@dockndevai/mcp-grafana)\n[![CI](https://github.com/dockndevai/mcp-grafana/actions/workflows/ci.yml/badge.svg)](https://github.com/dockndevai/mcp-grafana/actions/workflows/ci.yml)\n[![licence](https://img.shields.io/badge/licence-MIT-blue)](LICENSE)\n\nA **safe-by-default** [Model Context Protocol](https://modelcontextprotocol.io) 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.\n\nPart of the [dockndevai MCP server suite](https://dockndevai.github.io/) — one governance model across all of them.\n\n![mcp-grafana — safe by default: read-only exposes 11 tools; raising the access mode unlocks writes and (gated) deletes](docs/demo.gif)\n\n## What it gives an agent\n\nThe server starts **read-only** (see [Safe by default](#safe-by-default)); higher-capability tools are only registered when you raise the mode.\n\n| Tool | For | Needs mode |\n|---|---|---|\n| `get_health` | check the instance is up, version | read-only |\n| `search` | find dashboards & folders by name/tag (get UIDs) | read-only |\n| `list_dashboards` / `list_folders` | enumerate dashboards / folders | read-only |\n| `get_dashboard` | the full dashboard JSON model + meta | read-only |\n| `list_datasources` / `get_datasource` | datasources (secrets redacted) | read-only |\n| `query_datasource` | run PromQL / LogQL / SQL via the unified query API | read-only |\n| `list_alert_rules` | Grafana-managed alert rules | read-only |\n| `list_annotations` | events overlaid on graphs | read-only |\n| `create_or_update_dashboard` | upsert a dashboard (versioned, reversible) | read-write |\n| `create_folder` | create a folder | read-write |\n| `create_annotation` | mark a deploy/incident on graphs | read-write |\n| `delete_dashboard` / `delete_folder` / `delete_annotation` | delete (irreversible) | admin + `GRAFANA_ALLOW_DELETE` |\n\n## Install\n\n```bash\nnpx -y @dockndevai/mcp-grafana\n```\n\nYou 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.\n\n## Configure\n\n```json\n{\n  \"mcpServers\": {\n    \"grafana\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dockndevai/mcp-grafana\"],\n      \"env\": {\n        \"GRAFANA_URL\": \"http://localhost:3000\",\n        \"GRAFANA_TOKEN\": \"glsa_...\",\n        \"GRAFANA_MODE\": \"read-only\"\n      }\n    }\n  }\n}\n```\n\nSee [docs/CLIENTS.md](docs/CLIENTS.md) for Claude Code / Cursor / Codex / VS Code / Windsurf snippets, and [.env.example](.env.example) for every supported variable.\n\n## Safe by default\n\nThe access model is enforced by [`src/security.ts`](src/security.ts) — defence in depth on top of the service-account token's own role:\n\n- **`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`.\n- **`GRAFANA_ALLOW_DELETE`** — deletes are irreversible, so on top of `admin` mode they also require this flag.\n- **`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.\n- **`GRAFANA_DATASOURCE_ALLOWLIST`** — restrict which datasources `query_datasource` may hit.\n- **`GRAFANA_DRY_RUN`** — validate and log writes without executing them.\n- **`GRAFANA_AUDIT_LOG`** — a JSON audit line per guarded operation, on stderr (default on).\n- **Interactive confirmation** — when the client supports MCP elicitation, deleting a dashboard/folder/annotation prompts the **human** to approve before it runs; clients that can't elicit fall back to the `GRAFANA_ALLOW_DELETE` gate.\n- **Secrets are never returned** — datasource `secureJsonData`, passwords and tokens are stripped from every response.\n\n![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.](docs/confirm-demo.gif)\n\nSee [SECURITY.md](SECURITY.md).\n\n## Working with dashboards & queries\n\nConventions 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`](.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.\n\n## Developing\n\n```bash\nnpm install\nnpm run build\nGRAFANA_URL=http://localhost:3000 GRAFANA_TOKEN=glsa_… node dist/index.js\n# introspect without a live Grafana:\necho '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\",\"params\":{}}' | GRAFANA_TOKEN=x node dist/index.js\n```\n\n## Licence\n\nMIT\n","readmeFilename":"README.md"}