grafana-mcp
# Grafana-MCP
An MCP (Model Context Protocol) server that gives Bob direct access to your Grafana instance — dashboards, datasources, queries, alerting rules, and more.
## Prerequisites
- [Node.js](https://nodejs.org/) v18 or later
- A running Grafana instance
- A Grafana user with sufficient permissions (Admin recommended for full access)
## Installation
### Install dependencies and build
```bash
git clone <url>
cd grafana-mcp
npm install
npm run build
```
The compiled server is now at `build/index.js`.
## Configuration
The server reads three required environment variables and one optional one:
| Variable | Description |
|---|---|
| `GRAFANA_URL` | Base URL of your Grafana instance, e.g. `http://localhost:3000` |
| `GRAFANA_USER` | Grafana username |
| `GRAFANA_PASSWORD` | Grafana password |
| `SOCKS_PROXY` | Optional: SOCKS5 proxy URL, e.g. `socks5://localhost:1080` |
## Registering with Bob
There are two places you can register the server. Most users will prefer the global config so the server is available in every Bob workspace without any per-project setup.
### Option A — Global config (recommended)
Edit `~/.bob/settings/mcp.json` (Windows: `%USERPROFILE%\.bob\settings\mcp.json`) and add the server entry. Replace the path with the absolute path to the built entry point on your machine:
```json
{
"mcpServers": {
"grafana-mcp": {
"command": "node",
"args": ["C:\\absolute\\path\\to\\grafana-mcp\\build\\index.js"],
"env": {
"GRAFANA_URL": "http://your-grafana-host:3000",
"GRAFANA_USER": "admin",
"GRAFANA_PASSWORD": "your-password",
"SOCKS_PROXY": "socks5://<proxy-host>:<port>"
}
}
}
}
```
> `SOCKS_PROXY` is optional — omit it if you don't need a proxy.
### Option B — Project/workspace config
Add the same entry to `.bob/mcp.json` at the root of a specific workspace. This scopes the server to that project only.
```json
{
"mcpServers": {
"grafana-mcp": {
"command": "node",
"args": ["/absolute/path/to/grafana-mcp/build/index.js"],
"env": {
"GRAFANA_URL": "http://your-grafana-host:3000",
"GRAFANA_USER": "admin",
"GRAFANA_PASSWORD": "your-password",
"SOCKS_PROXY": "socks5://<proxy-host>:<port>"
}
}
}
}
```
> `SOCKS_PROXY` is optional — omit it if you don't need a proxy.
To point at a different Grafana instance, change `GRAFANA_URL` (and credentials as needed) in whichever config file you used.
## Available Tools
| Tool | Description |
|---|---|
| `search-dashboards` | Search dashboards by title, tag, or folder |
| `get-dashboard` | Fetch a dashboard by UID |
| `save-dashboard` | Create or update a dashboard |
| `delete-dashboard` | Delete a dashboard by UID |
| `list-datasources` | List all configured datasources |
| `get-datasource` | Get a datasource by name or ID |
| `query-datasource` | Run instant/range queries via Grafana's `/ds/query` |
| `list-influx-databases` | List InfluxDB databases through a Grafana datasource |
| `list-influx-measurements` | List measurements in an InfluxDB database |
| `list-influx-field-keys` | List numeric field keys for a measurement |
| `list-influx-tag-keys` | List indexed tag keys for a measurement |
| `list-influx-tag-values` | Enumerate values for a specific tag key |
| `list-influx-retention-policies` | List retention policies for an InfluxDB database |
| `list-alert-rules` | List Grafana-managed alerting rules |
| `get-alert-rule` | Get an alert rule by UID |
| `create-alert-rule` | Create a new alert rule via the provisioning API |
| `update-alert-rule` | Update an existing alert rule |
| `delete-alert-rule` | Delete an alert rule by UID |
| `get-notification-policy` | Get the alert notification policy tree |
| `list-contact-points` | List all notification contact points |
| `list-folders` | List all dashboard folders |
| `health-check` | Check the health and version of the Grafana instance |
## Troubleshooting
### If MCP server shows "disconnected" in Bob IDE
The system node binary requires a version of c-ares that might not be installed on the machine. Try using the node binary bundled with Bob IDE instead — it has everything it needs built in.
Find it:
```bash
find ~/.bobide-server/bin -name "node" -type f
```
Then update `command` in your MCP config:
```json
"command": "/root/.bobide-server/bin/<hash>/node"
```TDQS
Scored across 22 tools
Each tool targets a distinct resource and action. Alert, dashboard, datasource, folder, contact point, notification policy, health, query, and InfluxDB exploration tools all have clear, non-overlapping purposes. Even within alerts, single vs list tools are distinct.
Most tools follow a verb-noun pattern with hyphens (e.g., create-alert-rule, list-dashboards). Minor inconsistencies include 'create-or-update-dashboard' using a compound verb and 'get-datasource' singular vs 'list-datasources' plural, but overall pattern is predictable.
22 tools is slightly above the typical sweet spot but still reasonable for a comprehensive Grafana server. The scope covers alerts, dashboards, datasources, folders, contact points, notification policies, health, query, and InfluxDB exploration, justifying the count.
Core CRUD for dashboards and alerts is present, but missing create/update/delete for folders, contact points, and notification policies limits workflow completeness. InfluxDB tools are read-only. Basic querying and health checks are included.