Skip to content
Open
Show file tree
Hide file tree
Changes from 2 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
15 changes: 14 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,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, ClickHouse, CloudWatch, Elasticsearch._
- _Supported datasource types: Prometheus, Loki, ClickHouse, CloudWatch, Elasticsearch, VictoriaLogs._

### Query Examples

Expand Down Expand Up @@ -103,6 +103,13 @@ The dashboard tools now include several strategies to manage context window usag
- **List CloudWatch dimensions:** Get dimensions for filtering metric queries.
- **Query CloudWatch:** Execute CloudWatch metric queries with time range support.

### VictoriaLogs Querying

- **Query VictoriaLogs:** Execute LogsQL queries against VictoriaLogs datasources to retrieve log entries.
- **Query VictoriaLogs metadata:** List available field names and field values from VictoriaLogs datasources.
- **Query VictoriaLogs hits:** Get log volume over time buckets for trend analysis.
- **Query VictoriaLogs streams:** List matching log streams with hit counts.

### Log Search

> **Note:** Search logs tools are **disabled by default**. To enable them, add `searchlogs` to your `--enabled-tools` flag.
Expand Down Expand Up @@ -280,6 +287,11 @@ Scopes define the specific resources that permissions apply to. Each action requ
| `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_loki_patterns` | Loki | Query detected log patterns to identify common structures | `datasources:query` | `datasources:uid:loki-uid` |
| `query_victorialogs` | VictoriaLogs | Execute LogsQL queries against VictoriaLogs | `datasources:query` | `datasources:uid:victorialogs-uid` |
| `list_victorialogs_field_names` | VictoriaLogs | List available field names in VictoriaLogs | `datasources:query` | `datasources:uid:victorialogs-uid` |
| `list_victorialogs_field_values` | VictoriaLogs | List values for a specific field with hit counts | `datasources:query` | `datasources:uid:victorialogs-uid` |
| `query_victorialogs_hits` | VictoriaLogs | Query log volume over time buckets | `datasources:query` | `datasources:uid:victorialogs-uid` |
| `query_victorialogs_streams` | VictoriaLogs | List matching log streams with hit counts | `datasources:query` | `datasources:uid:victorialogs-uid` |
| `list_clickhouse_tables` | ClickHouse* | List tables in a ClickHouse database | `datasources:query` | `datasources:uid:*` |
| `describe_clickhouse_table` | ClickHouse* | Get table schema with column types | `datasources:query` | `datasources:uid:*` |
| `query_clickhouse` | ClickHouse* | Execute SQL queries with macro substitution | `datasources:query` | `datasources:uid:*` |
Expand Down Expand Up @@ -358,6 +370,7 @@ The `mcp-grafana` binary supports various command-line flags for configuration:
- `--disable-clickhouse`: Disable ClickHouse tools
- `--disable-searchlogs`: Disable search_logs tool
- `--disable-runpanelquery`: Disable run panel query tools
- `--disable-victorialogs`: Disable VictoriaLogs tools

### Read-Only Mode

Expand Down
6 changes: 4 additions & 2 deletions cmd/mcp-grafana/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ type disabledTools struct {
dashboard, folder, oncall, asserts, sift, admin,
pyroscope, navigation, proxied, annotations, rendering, cloudwatch, write,
examples, clickhouse, searchlogs,
runpanelquery bool
runpanelquery, victorialogs bool
}

// Configuration for the Grafana client.
Expand All @@ -61,7 +61,7 @@ type grafanaConfig struct {
}

func (dt *disabledTools) addFlags() {
flag.StringVar(&dt.enabledTools, "enabled-tools", "search,datasource,incident,prometheus,loki,alerting,dashboard,folder,oncall,asserts,sift,pyroscope,navigation,proxied,annotations,rendering", "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,alerting,dashboard,folder,oncall,asserts,sift,pyroscope,navigation,proxied,annotations,rendering,victorialogs", "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")
Expand All @@ -86,6 +86,7 @@ func (dt *disabledTools) addFlags() {
flag.BoolVar(&dt.clickhouse, "disable-clickhouse", false, "Disable ClickHouse tools")
flag.BoolVar(&dt.searchlogs, "disable-searchlogs", false, "Disable search logs tools")
flag.BoolVar(&dt.runpanelquery, "disable-runpanelquery", false, "Disable run panel query tools")
flag.BoolVar(&dt.victorialogs, "disable-victorialogs", false, "Disable VictoriaLogs tools")
}

func (gc *grafanaConfig) addFlags() {
Expand Down Expand Up @@ -123,6 +124,7 @@ func (dt *disabledTools) addTools(s *server.MCPServer) {
maybeAddTools(s, tools.AddClickHouseTools, enabledTools, dt.clickhouse, "clickhouse")
maybeAddTools(s, tools.AddSearchLogsTools, enabledTools, dt.searchlogs, "searchlogs")
maybeAddTools(s, tools.AddRunPanelQueryTools, enabledTools, dt.runpanelquery, "runpanelquery")
maybeAddTools(s, tools.AddVictoriaLogsTools, enabledTools, dt.victorialogs, "victorialogs")
}

func newServer(transport string, dt disabledTools, obs *observability.Observability) (*server.MCPServer, *mcpgrafana.ToolManager) {
Expand Down
5 changes: 5 additions & 0 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,11 @@ services:
timeout: 5s
retries: 5

victorialogs:
image: victoriametrics/victoria-logs:v1.16.0-victorialogs
ports:
- "9428:9428"

clickhouse:
image: clickhouse/clickhouse-server:25.10@sha256:8d1a479c36a4556eeb0556ad36141b194cf6a4a4020f9def391c1570fd1570b7
ports:
Expand Down
6 changes: 6 additions & 0 deletions testdata/provisioning/datasources/datasources.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -87,3 +87,9 @@ datasources:
accessKey: test
secretKey: test
isDefault: false
- name: VictoriaLogs
uid: victorialogs
type: victoriametrics-logs-datasource
access: proxy
url: http://victorialogs:9428
isDefault: false
Loading