Skip to main content
Glama
daanrongen

grafana-mcp

by daanrongen
README.md
# grafana-mcp

MCP server for [Grafana](https://grafana.com/) — manage dashboards, datasources, alert rules, folders, and annotations over stdio.

## Installation

```bash
bunx @daanrongen/grafana-mcp
```

## Tools (17 total)

| Domain          | Tools                                                                                        | Coverage                                       |
| --------------- | -------------------------------------------------------------------------------------------- | ---------------------------------------------- |
| **Dashboards**  | `list_dashboards`, `get_dashboard`, `create_dashboard`, `update_dashboard`, `delete_dashboard` | Full dashboard lifecycle                     |
| **Datasources** | `list_datasources`, `get_datasource`, `create_datasource`, `delete_datasource`               | Datasource management                          |
| **Alerts**      | `list_alert_rules`, `get_alert_rule`, `list_alert_instances`                                 | Alert rules and firing Alertmanager instances  |
| **Folders**     | `list_folders`, `create_folder`, `delete_folder`                                             | Folder organisation                            |
| **Annotations** | `list_annotations`, `create_annotation`                                                      | Dashboard and global annotations               |
| **Health**      | `health_check`                                                                               | Grafana instance status                        |

## Configuration

| Variable          | Required | Description                                     |
| ----------------- | -------- | ----------------------------------------------- |
| `GRAFANA_URL`     | Yes      | Grafana base URL (e.g. `http://localhost:3000`) |
| `GRAFANA_API_KEY` | Yes      | Grafana service account token or API key        |

## Setup

### Claude Desktop

Edit `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "grafana": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@daanrongen/grafana-mcp"],
      "env": {
        "GRAFANA_URL": "http://localhost:3000",
        "GRAFANA_API_KEY": "your-service-account-token"
      }
    }
  }
}
```

### Claude Code CLI

```bash
claude mcp add grafana \
  -e GRAFANA_URL=http://localhost:3000 \
  -e GRAFANA_API_KEY=your-service-account-token \
  -- bunx @daanrongen/grafana-mcp
```

## Development

```bash
bun install
bun run dev        # run with --watch
bun test           # run test suite
bun run typecheck  # type-check with tsc
bun run lint       # biome lint
bun run format     # biome format
bun run build      # bundle to dist/main.js
```

## Inspecting locally

Use the MCP Inspector to browse and call tools interactively against a real Grafana instance:

```bash
GRAFANA_URL=http://localhost:3000 \
GRAFANA_API_KEY=your-service-account-token \
bun run inspect
```

This opens the MCP Inspector UI in the browser, pointed at the locally built server.

## Architecture

```
src/
├── config.ts                   # Effect Config — GRAFANA_URL, GRAFANA_API_KEY
├── main.ts                     # Entry point — ManagedRuntime + StdioServerTransport
├── domain/
│   ├── GrafanaClient.ts        # Context.Tag service interface (port)
│   ├── errors.ts               # GrafanaError, NotFoundError
│   ├── models.ts               # Schema.Class models (Dashboard, Datasource, AlertRule, …)
│   ├── dashboards.test.ts      # Domain tests using GrafanaClientTest
│   ├── datasources.test.ts     # Domain tests using GrafanaClientTest
│   └── health.test.ts          # Domain tests using GrafanaClientTest
├── infra/
│   ├── GrafanaClientLive.ts    # Layer using fetch against the Grafana HTTP API
│   └── GrafanaClientTest.ts    # In-memory Ref-based test adapter
└── mcp/
    ├── server.ts               # McpServer wired to ManagedRuntime
    ├── utils.ts                # formatSuccess, formatError
    └── tools/                  # dashboards.ts, datasources.ts, alerts.ts, folders.ts, annotations.ts, health.ts
```

## License

MIT