MCP server for Grafana integration, providing tools to query datasources, manage dashboards, alerts, incidents, and other Grafana resources
The Grafana MCP server has well-structured SQL tools with generally good descriptions and complete input schemas. All 4 tools follow verb_noun naming conventions (list_*, describe_*, query_*). Descriptions are action-oriented and explain prerequisites and use cases. Input schemas are present with type definitions. However, there are notable gaps: output schemas are not explicitly documented in the provided source code, error handling guidance is absent from tool descriptions, and parameter descriptions lack format constraints and validation rules that would help LLMs avoid invalid inputs. The tools are read-only (no destructive operations), which simplifies error handling requirements but reduces the need for confirmation patterns. Tool annotations (readOnlyHint) are present via the Features flag, supporting current protocol patterns.
Get column schema for a table in a supported SQL datasource (ClickHouse, Snowflake, Athena, MySQL, PostgreSQL, MSSQL). NEXT: Use query_sql with discovered column names.
List databases, schemas, or catalogs from a supported SQL datasource. Returns the organizational units available for use with list_sql_tables. For Athena: omit catalog to list catalogs, or pass catalog to list databases in it.
START HERE for SQL datasources: List tables from a supported SQL datasource (ClickHouse, Snowflake, Athena, MySQL, PostgreSQL, MSSQL). Returns table names, schemas, and metadata. NEXT: Use describe_sql_table to see column schemas.
Query a supported SQL datasource (ClickHouse, Snowflake, Athena, MySQL, PostgreSQL, MSSQL) via Grafana. REQUIRED FIRST: Use list_sql_tables to find tables, then describe_sql_table to see column schemas, then query. Supports datasource-specific macros: $__timeFilter(column), $__from/$__to, $__interval, ${varname} Time formats: 'now-1h', '2026-02-02T19:00:00Z', '1738519200000' (Unix ms) Example: SELECT timestamp, message FROM logs WHERE $__timeFilter(timestamp) LIMIT 100
Output schemas not documented in tool definitions. Tool descriptions state what is returned (e.g., 'returns table names, schemas, and metadata') but do not provide formal JSON Schema for response fields. LLMs cannot reliably extract or chain on undocumented output fields.
Parameter descriptions lack validation constraints. For example, 'limit' parameter has no stated range (1 - 1000?), 'start' and 'end' time parameters mention formats ('now-1h', ISO 8601, Unix ms) but don't specify which are valid for each datasource, and 'query' parameter has no length limits. These omissions invite LLM-generated invalid inputs.
No error recovery guidance in tool descriptions. If a datasource_uid is invalid, database name is not found, or query times out, the descriptions do not hint at what the LLM should do next (e.g., 'Call list_sql_databases first to verify the name'). Without guidance, agents cannot self-correct.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 79 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 33 | - | v1 |
Parameter naming inconsistency across tools. Some tools accept 'database' + 'schema', others accept 'catalog' + 'database'. The 'catalog' parameter is marked optional and datasource-specific (Athena, Snowflake) but the distinction is buried in descriptions. A unified parameter naming scheme or explicit enum of datasource types would reduce LLM confusion.
No pagination parameters documented. The 'limit' parameter on query_sql suggests result capping, but list_sql_tables and list_sql_databases have no offset/cursor or documented max results. Large tables or catalogs could return unbounded lists, exhausting context or timing out.