Added
- CloudWatch Logs Insights tools in the opt-in
cloudwatchcategory:list_cloudwatch_log_groups,list_cloudwatch_log_group_fieldsandquery_cloudwatch_logs. Queries run through/api/ds/querywith a server-side row limit (default 100, max 1000), support cross-account log groups by ARN, and are stopped if the tool gives up waiting (#1404) - Datasources are exposed as MCP resources at
grafana://datasources/{uid}, listed per caller with their own credentials, so clients with a resource picker (such as@in Claude Code) can attach a datasource to a conversation directly. They are registered with the datasource tools and turned off with them (#1459) render_grafana_appdisplays the result of an enabled query tool (query_prometheusorget_tempo_trace) in the interactive Grafana App in MCP hosts that support MCP Apps. Breaking:query_prometheusandget_tempo_traceno longer open an App themselves, so intermediate queries don't render charts while the agent is still gathering data. Their text and structured output is unchanged (#1401)search_dashboardshits carry afolderPath(for exampleOps/Production/Services), and a new optionalfolderPathinput restricts results to a folder and all of its subfolders (#1450)- An opt-in Prometheus query guardrail for
query_prometheus,query_prometheus_histogramand Prometheus panels inrun_panel_query.--prometheus-guardrail-mode=shadow|enforcechecks each query's effective time range (--prometheus-guardrail-max-range, default192h) and points per series (--prometheus-guardrail-max-points, default11000) before it reaches the datasource, and in enforce mode rejects it with rewrite guidance (#1453) - The Loki cost guardrail is built on the new standalone
github.com/grafana/mcp-grafana/lokiguardmodule, so other callers can share one implementation. It now also guardsquery_loki_patterns, adds--loki-guardrail-on-estimate-failure=allow|blockto reject queries whose cost can't be assessed, and records anmcp.loki_guardrail.estimated_byteshistogram (#1355, #1374) - BigQuery support in
query_sql,list_sql_databases,list_sql_tablesanddescribe_sql_table, without queryingINFORMATION_SCHEMA, so metadata lookups don't incur billable usage (#1417) run_panel_queryruns Infinity panels that use a backend parser (#1345) and Neo4j panels on thekniepdennis-neo4j-datasourceplugin (#1391)get_tempo_traceaccepts optionalstartandendbounds, so Tempo doesn't have to scan every block for the trace (#1437)--sse-keepalivepings SSE clients at the given interval, so an idle reverse proxy or load balancer doesn't close the event stream and end the session. Off by default (#1389)
Fixed
run_panel_queryand dashboard inspection handle many more real-world dashboards:- Panels using the
defaultdatasource, legacy string datasource references ("Prometheus","$ds") or no reference at all are resolved (#1406, #1442) - Interval variables set to
autoare computed like Grafana, instead of sending an invalid placeholder (#1457) - Multi-value variables are formatted with the datasource's default, for example
(api|web)for Prometheus and'east','west'for SQL, instead of sending only the first value (#1441) $__autois substituted, and Loki range queries send it as the step, socount_over_time(...[$__auto])windows no longer overlap (#1406, #1432)$__rangeand$__intervalkeep their seconds (1m30s, not1m), and$__rate_interval_msis substituted (#1419, #1433)- Inspection shares execution's variable and macro handling, so
processedQuerymatches the query that runs; it accepts optionalstart/endand warns when a referenced variable is set to All. Inquery_sql,${x:sqlstring}now quotes and escapes the value (#1373, #1375) - A target pointing at a different datasource UID no longer inherits the panel's datasource type (#1440)
- Panels using the
search_tempo_tracesno longer returns every span twice, acceptslimit(default 20) andspss, and notes when a search returned partial results (#1407)- The row limit appended to SQL queries is no longer swallowed by a trailing line comment, and ClickHouse queries get it before a top-level
SETTINGSclause (#1424, #1418) --enable-write-toolskeeps individual alerting write tools (alerting_rules_write,alerting_routing_write,alerting_silences_write) registered under--disable-write(#1421)- Datasource-managed alert rules from
alerting_rules_readinclude theirnamespaceandlast_error, and omit the emptyuid(#1425). When Grafana reports an authentication failure against the ruler, the error suggests checking the datasource credentials and ruler configuration (#1448) query_loki_patternsincludes the detectedlevelof each pattern (#1422)list_prometheus_label_namesandlist_prometheus_label_valuesaccept PromQL selector strings such as{job="api"}inmatches(#1340)get_query_examplesaccepts datasource plugin IDs such asgrafana-clickhouse-datasource(#1388)update_incidentis annotated as destructive, so clients that ask before destructive tools ask before it changes an incident (#1427)- With
--tls-*flags or a SOCKS5 proxy, connections to Grafana are reused across tool calls instead of doing a new TLS handshake every call. Rotated certificate files are still picked up without a restart (#1455) - OnCall requests use the configured TLS settings, extra headers, SOCKS5 proxy and redirect guard (#1393), and Prometheus requests use a configured
BaseTransport(#1370) - Over the HTTP transports,
initializeandtools/listno longer call Grafana, so they work and stay quiet when Grafana is unreachable (#1392)
Changed
- Datasource queries go through Grafana's
/api/ds/queryendpoint instead of the datasource proxy, so they get the same query service handling as dashboard and Explore queries. This covers Prometheus (#1409), Loki (#1410), Quickwit (#1411), Graphite (#1412), Pyroscope (#1413), VictoriaLogs (#1414), Elasticsearch (#1415) and Tempo (#1416). Label, metadata and other discovery calls are unchanged. Breaking:- Grafana before 9.0 is no longer supported for these queries, and a token without permission to query a datasource gets Grafana's error instead of being routed around the query service
- Query errors carry Grafana's message
search_tempo_traces(on Grafana 12.3 and later) andget_tempo_tracereturn a new output shape with millisecond times; search no longer returns job counts,serviceStatsor the partial-results notequery_pyroscopemetrics for cumulative profile types are rates (for example cores instead of CPU nanoseconds per step), with a newunitfield, and the step is at least the datasource'sminStepquery_graphiterejects Graphite absolute time formats other than Unix seconds,YYYYMMDDand RFC3339, andtags.nameis the series target- Native histograms from
query_prometheus_histogramno longer include their sum - A few cases still use the proxy, such as Tempo search before Grafana 12.3, Pyroscope DOT output, older Elasticsearch plugins and Quickwit Query DSL (#1444)
Security
- Bump
github.com/andybalholm/brotlito v1.2.7 (CVE-2026-111497) (#1420) - Bump the Go toolchain to 1.26.10 and the release builder images to Go 1.27.3 for
crypto/x509fixes (#1376)