Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ The dashboard tools now include several strategies to manage context window usag
### Datasources

- **List and fetch datasource information:** View all configured datasources and retrieve detailed information about each.
- _Supported datasource types: Prometheus, Loki._
- _Supported datasource types: Prometheus, Loki, ClickHouse._

### Prometheus Querying

Expand All @@ -51,6 +51,12 @@ The dashboard tools now include several strategies to manage context window usag
- **Query Loki logs and metrics:** Run both log queries and metric queries using LogQL against Loki datasources.
- **Query Loki metadata:** Retrieve label names, label values, and stream statistics from Loki datasources.

### ClickHouse Querying

- **Query ClickHouse:** Execute SQL queries against ClickHouse datasources (SELECT, SHOW, and DESCRIBE queries only for safety).
- **Query ClickHouse metadata:** Retrieve database lists, table information with detailed metadata (engine, row count, size), and table schemas.
- **Database exploration:** List databases, tables with filtering support, and describe table structures including column types and comments.

### Incidents

- **Search, create, and update incidents:** Manage incidents in Grafana Incident, including searching, creating, and adding activities to incidents.
Expand Down Expand Up @@ -177,6 +183,10 @@ Scopes define the specific resources that permissions apply to. Each action requ
| `list_loki_label_names` | Loki | List all available label names in logs | `datasources:query` | `datasources:uid:loki-uid` |
| `list_loki_label_values` | Loki | List values for a specific log label | `datasources:query` | `datasources:uid:loki-uid` |
| `query_loki_stats` | Loki | Get statistics about log streams | `datasources:query` | `datasources:uid:loki-uid` |
| `query_clickhouse` | ClickHouse | Execute SQL queries against a ClickHouse datasource | `datasources:query` | `datasources:uid:clickhouse-uid` |
| `list_clickhouse_databases` | ClickHouse | List all available databases in a ClickHouse datasource | `datasources:query` | `datasources:uid:clickhouse-uid` |
| `list_clickhouse_tables` | ClickHouse | List tables in a database with detailed metadata | `datasources:query` | `datasources:uid:clickhouse-uid` |
| `describe_clickhouse_table` | ClickHouse | Describe table structure with column types and comments | `datasources:query` | `datasources:uid:clickhouse-uid` |
| `list_alert_rules` | Alerting | List alert rules | `alert.rules:read` | `folders:*` or `folders:uid:alerts-folder` |
| `get_alert_rule_by_uid` | Alerting | Get alert rule by UID | `alert.rules:read` | `folders:uid:alerts-folder` |
| `list_contact_points` | Alerting | List notification contact points | `alert.notifications:read` | Global scope |
Expand Down
8 changes: 5 additions & 3 deletions cmd/mcp-grafana/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ type disabledTools struct {
enabledTools string

search, datasource, incident,
prometheus, loki, alerting,
prometheus, loki, clickhouse, alerting,
dashboard, oncall, asserts, sift, admin,
pyroscope, navigation bool
}
Expand All @@ -51,13 +51,14 @@ type grafanaConfig struct {
}

func (dt *disabledTools) addFlags() {
flag.StringVar(&dt.enabledTools, "enabled-tools", "search,datasource,incident,prometheus,loki,alerting,dashboard,oncall,asserts,sift,admin,pyroscope,navigation", "A comma separated list of tools enabled for this server. Can be overwritten entirely or by disabling specific components, e.g. --disable-search.")
flag.StringVar(&dt.enabledTools, "enabled-tools", "search,datasource,incident,prometheus,loki,clickhouse,alerting,dashboard,oncall,asserts,sift,admin,pyroscope,navigation", "A comma separated list of tools enabled for this server. Can be overwritten entirely or by disabling specific components, e.g. --disable-search.")

flag.BoolVar(&dt.search, "disable-search", false, "Disable search tools")
flag.BoolVar(&dt.datasource, "disable-datasource", false, "Disable datasource tools")
flag.BoolVar(&dt.incident, "disable-incident", false, "Disable incident tools")
flag.BoolVar(&dt.prometheus, "disable-prometheus", false, "Disable prometheus tools")
flag.BoolVar(&dt.loki, "disable-loki", false, "Disable loki tools")
flag.BoolVar(&dt.clickhouse, "disable-clickhouse", false, "Disable clickhouse tools")
flag.BoolVar(&dt.alerting, "disable-alerting", false, "Disable alerting tools")
flag.BoolVar(&dt.dashboard, "disable-dashboard", false, "Disable dashboard tools")
flag.BoolVar(&dt.oncall, "disable-oncall", false, "Disable oncall tools")
Expand Down Expand Up @@ -85,6 +86,7 @@ func (dt *disabledTools) addTools(s *server.MCPServer) {
maybeAddTools(s, tools.AddIncidentTools, enabledTools, dt.incident, "incident")
maybeAddTools(s, tools.AddPrometheusTools, enabledTools, dt.prometheus, "prometheus")
maybeAddTools(s, tools.AddLokiTools, enabledTools, dt.loki, "loki")
maybeAddTools(s, tools.AddClickHouseTools, enabledTools, dt.clickhouse, "clickhouse")
maybeAddTools(s, tools.AddAlertingTools, enabledTools, dt.alerting, "alerting")
maybeAddTools(s, tools.AddDashboardTools, enabledTools, dt.dashboard, "dashboard")
maybeAddTools(s, tools.AddOnCallTools, enabledTools, dt.oncall, "oncall")
Expand All @@ -102,7 +104,7 @@ func newServer(dt disabledTools) *server.MCPServer {
Available Capabilities:
- Dashboards: Search, retrieve, update, and create dashboards. Extract panel queries and datasource information.
- Datasources: List and fetch details for datasources.
- Prometheus & Loki: Run PromQL and LogQL queries, retrieve metric/log metadata, and explore label names/values.
- Prometheus & Loki & ClickHouse: Run PromQL, LogQL, and SQL queries, retrieve metric/log/table metadata, and explore label names/values and database schemas.
- Incidents: Search, create, update, and resolve incidents in Grafana Incident.
- Sift Investigations: Start and manage Sift investigations, analyze logs/traces, find error patterns, and detect slow requests.
- Alerting: List and fetch alert rules and notification contact points.
Expand Down
Loading