Labsco
kis9a logo

Grafana

from kis9a

Access Grafana resources like dashboards, datasources, Prometheus, Loki, and alerts.

๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅโœ“ VerifiedAccount requiredAdvanced setup

Forked from Grafana MCP server

This repository is a fork of the original Grafana MCP server.
It includes custom modifications listed below.

Changes from upstream

  • Added support for a new tool: QuestDB
    • Introduced questdb flag to enable/disable
    • Added tools/questdb.go implementing the QuestDB query logic
  • Added support for a new tool: Athena
    • Introduced athena flag to enable/disable
    • Added tools/athena.go implementing the Athena query logic
  • Extended transport options to support streamable-http
  • Added dependency: github.com/DataDog/zstd

Grafana MCP server

A [Model Context Protocol][mcp] (MCP) server for Grafana.

This provides access to your Grafana instance and the surrounding ecosystem.

Features

The following features are currently available in MCP server. This list is for informational purposes only and does not represent a roadmap or commitment to future features.

Dashboards

  • Search for dashboards: Find dashboards by title or other metadata
  • Get dashboard by UID: Retrieve full dashboard details using its unique identifier
  • Update or create a dashboard: Modify existing dashboards or create new ones. Note: Use with caution due to context window limitations; see issue #101
  • Get panel queries and datasource info: Get the title, query string, and datasource information (including UID and type, if available) from every panel in a dashboard

Datasources

  • List and fetch datasource information: View all configured datasources and retrieve detailed information about each.
    • Supported datasource types: Prometheus, Loki, QuestDB, Athena.

Prometheus Querying

  • Query Prometheus: Execute PromQL queries (supports both instant and range metric queries) against Prometheus datasources.
  • Query Prometheus metadata: Retrieve metric metadata, metric names, label names, and label values from Prometheus datasources.

Loki Querying

  • 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.

Incidents

  • Search, create, update, and close incidents: Manage incidents in Grafana Incident, including searching, creating, updating, and resolving incidents.

Sift Investigations

  • Create Sift investigations: Start a new Sift investigation for analyzing logs or traces.
  • List Sift investigations: Retrieve a list of Sift investigations, with support for a limit parameter.
  • Get Sift investigation: Retrieve details of a specific Sift investigation by its UUID.
  • Get Sift analyses: Retrieve a specific analysis from a Sift investigation.
  • Find error patterns in logs: Detect elevated error patterns in Loki logs using Sift.
  • Find slow requests: Detect slow requests using Sift (Tempo).

Alerting

  • List and fetch alert rule information: View alert rules and their statuses (firing/normal/error/etc.) in Grafana.
  • List contact points: View configured notification contact points in Grafana.

Grafana OnCall

  • List and manage schedules: View and manage on-call schedules in Grafana OnCall.
  • Get shift details: Retrieve detailed information about specific on-call shifts.
  • Get current on-call users: See which users are currently on call for a schedule.
  • List teams and users: View all OnCall teams and users.

Admin

  • List teams: View all configured teams in Grafana.

The list of tools is configurable, so you can choose which tools you want to make available to the MCP client. This is useful if you don't use certain functionality or if you don't want to take up too much of the context window. To disable a category of tools, use the --disable-<category> flag when starting the server. For example, to disable the OnCall tools, use --disable-oncall.

Tools

ToolCategoryDescription
list_teamsAdminList all teams
search_dashboardsSearchSearch for dashboards
get_dashboard_by_uidDashboardGet a dashboard by uid
update_dashboardDashboardUpdate or create a new dashboard
get_dashboard_panel_queriesDashboardGet panel title, queries, datasource UID and type from a dashboard
list_datasourcesDatasourcesList datasources
get_datasource_by_uidDatasourcesGet a datasource by uid
get_datasource_by_nameDatasourcesGet a datasource by name
query_prometheusPrometheusExecute a query against a Prometheus datasource
list_prometheus_metric_metadataPrometheusList metric metadata
list_prometheus_metric_namesPrometheusList available metric names
list_prometheus_label_namesPrometheusList label names matching a selector
list_prometheus_label_valuesPrometheusList values for a specific label
list_incidentsIncidentList incidents in Grafana Incident
create_incidentIncidentCreate an incident in Grafana Incident
add_activity_to_incidentIncidentAdd an activity item to an incident in Grafana Incident
resolve_incidentIncidentResolve an incident in Grafana Incident
query_loki_logsLokiQuery and retrieve logs using LogQL (either log or metric queries)
list_loki_label_namesLokiList all available label names in logs
list_loki_label_valuesLokiList values for a specific log label
query_loki_statsLokiGet statistics about log streams
list_alert_rulesAlertingList alert rules
get_alert_rule_by_uidAlertingGet alert rule by UID
list_oncall_schedulesOnCallList schedules from Grafana OnCall
get_oncall_shiftOnCallGet details for a specific OnCall shift
get_current_oncall_usersOnCallGet users currently on-call for a specific schedule
list_oncall_teamsOnCallList teams from Grafana OnCall
list_oncall_usersOnCallList users from Grafana OnCall
get_investigationSiftRetrieve an existing Sift investigation by its UUID
get_analysisSiftRetrieve a specific analysis from a Sift investigation
list_investigationsSiftRetrieve a list of Sift investigations with an optional limit
find_error_pattern_logsSiftFinds elevated error patterns in Loki logs.
find_slow_requestsSiftFinds slow requests from the relevant tempo datasources.
list_pyroscope_label_namesPyroscopeList label names matching a selector
list_pyroscope_label_valuesPyroscopeList label values matching a selector for a label name
list_pyroscope_profile_typesPyroscopeList available profile types
fetch_pyroscope_profilePyroscopeFetches a profile in DOT format for analysis
query_questdb_sqlQuestDBQuestDB datasource: Executes arbitrary SQL and returns the results as an array of JSON objects, one per row.
query_athena_sqlAthenaAthena datasource: Executes arbitrary SQL and returns the results as an array of JSON objects, one per row.

Development

Contributions are welcome! Please open an issue or submit a pull request if you have any suggestions or improvements.

This project is written in Go. Install Go following the instructions for your platform.

To run the server locally in STDIO mode (which is the default for local development), use:

make run

To run the server locally in SSE mode, use:

go run ./cmd/mcp-grafana --transport sse

You can also run the server using the SSE transport inside a custom built Docker image. Just like the published Docker image, this custom image's entrypoint defaults to SSE mode. To build the image, use:

make build-image

And to run the image in SSE mode (the default), use:

docker run -it --rm -p 8000:8000 mcp-grafana:latest

If you need to run it in STDIO mode instead, override the transport setting:

docker run -it --rm mcp-grafana:latest -t stdio

Testing

There are three types of tests available:

  1. Unit Tests (no external dependencies required):
make test-unit

You can also run unit tests with:

make test
  1. Integration Tests (requires docker containers to be up and running):
make test-integration
  1. Cloud Tests (requires cloud Grafana instance and credentials):
make test-cloud

Note: Cloud tests are automatically configured in CI. For local development, you'll need to set up your own Grafana Cloud instance and credentials.

More comprehensive integration tests will require a Grafana instance to be running locally on port 3000; you can start one with Docker Compose:

docker-compose up -d

The integration tests can be run with:

make test-all

If you're adding more tools, please add integration tests for them. The existing tests should be a good starting point.

Linting

To lint the code, run:

make lint

This includes a custom linter that checks for unescaped commas in jsonschema struct tags. The commas in description fields must be escaped with \\, to prevent silent truncation. You can run just this linter with:

make lint-jsonschema

See the JSONSchema Linter documentation for more details.