Added
- Unified SQL datasource tools (
query_athena,query_clickhouse,query_snowflake,query_mssql,query_postgresql) into a shared dialect system, reducing duplication and making it easier to add new SQL datasources (#1126) --enable-write-toolsflag to selectively re-enable specific tools under--disable-write, so operators can allow individual write tools (e.g. Sift investigation tools) without enabling all writes.--enable-queryis now shorthand for naming the raw-SQL query tools in this list (#1157)- Optional
folderUid,tag, andstarredfilters onsearch_dashboards, forwarded to Grafana/api/search. Empty-query searches now always restrict results to dashboards (type=dash-db) (#1154) - Optional
matcherparameter onlist_loki_label_namesandlist_loki_label_valuesto narrow label discovery to a subset of streams (a LogQL stream selector on Loki, LogsQL on VictoriaLogs) (#1135) delete_annotationtool (write-gated) to permanently delete a Grafana annotation by ID, completing the annotation CRUD surface (#1134)list_cloudwatch_dimension_valuestool to list the values available for a CloudWatch dimension key, rather than requiring an LLM to guess them (#1141)--loki-enforced-matchers: operator-configured LogQL label matchers AND-ed into every native-Loki query (logs, stats, patterns, and label enumeration) to restrict which streams the server can read. Fails closed on unparseable queries and refuses VictoriaLogs datasources while set. Pair with--disable-apiso the raw datasource proxy cannot bypass it. A companion--loki-label-enumeration-fallbackcontrols label-enumeration behaviour under purely-negative matchers (#978)--instructions-appendflag to append operator-supplied text to the server instructions returned to MCP clients on initialize, so every connecting agent sees it (#978)- Separate
/healthzlistener with its own port, so health checks and Prometheus metrics are served independently of the MCP transport (#1137)
Fixed
alerting_manage_ruleslist operation now appliessearch_rule_namefiltering client-side when listing datasource-provisioned rules, which the Grafana ruler API does not filter server-side (#1161)tools/listresponse now includesresultType,cacheScope, andttlMsfields for all protocol versions, fixing aValidationErrorthat silently dropped all tools when mcp-grafana was used behind a Python MCP proxy (mcp >= 2.0.0, fastmcp >= 4.0.0) (#1151)get_current_oncall_usersnow handles user objects (not just ID strings) in the IRM proxy API'son_call_nowresponse, fixing empty results on instances using the IRM proxy (#1150)--allowed-hostsis now honored when the request arrives via a loopback reverse proxy, so non-loopback hostnames work behind nginx/Caddy on the same machine (#1142)check_datasources_healthno longer reports a frontend-only datasource plugin (e.g. the built-in Alertmanager datasource) as unhealthy; such datasources now report"status": "UNKNOWN"and are counted separately in a newunknownfield (#1139)- Tool calls with a type mismatch (e.g. string where number is expected) now return a structured MCP tool error instead of an opaque internal error (#1138)
- Explore deeplinks now use the
panesformat introduced in Grafana 10.2, fixing broken Cloud Monitoring and Loki links caused by lossy migration of the legacyleftparameter. Falls back to the legacy format for Grafana < 10.2 (#1088) query_loki_logsno longer double-encodes timestamps in stream results (#982)