P

mcp-grafana

...
Created 12/24/2024bygrafana

Language:

Python

Stars:

66

Forks:

5

Grafana MCP server

A Model Context Protocol (MCP) server for Grafana.

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

Features

  • Search for dashboards
  • List and fetch datasource information
  • Query datasources
    • Prometheus
    • Loki (log queries, metric queries)
    • Tempo
    • Pyroscope
  • Query Prometheus metadata
    • Metric metadata
    • Metric names
    • Label names
    • Label values
  • Search, create, update and close incidents
  • Start Sift investigations and view the results

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.

Tools

ToolCategoryDescription
search_dashboardsSearchSearch for dashboards
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

Usage

  1. Create a service account in Grafana with enough permissions to use the tools you want to use,

             generate a service account token, and copy it to the clipboard for use in the configuration file.
    

Follow the Grafana documentation for details.

  1. Add the server configuration to your client configuration file. For example, for Claude Desktop:
{
  "mcpServers": {
    "grafana": {
      "command": "uvx",
      "args": [
        "mcp-grafana"
      ],
      "env": {
        "GRAFANA_URL": "http://localhost:3000",
        "GRAFANA_API_KEY": ""
      }
    }
  }
}

Note: if you see Error: spawn uvx ENOENT in Claude Desktop, you need to specify the full path to uvx (see discussion)

To disable a category of tools, set the environment variable GRAFANA_TOOLS____ENABLED to "false". For example, to disable the search tools, set "GRAFANA_TOOLS__SEARCH__ENABLED": "false".

Development

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

This project uses uv to manage dependencies. Install uv following the instructions for your platform.

You can then create a virtual environment and install the dependencies with:

uv sync --all-groups

To run the server and edit the source code live, use:

uvx --with-editable . mcp-grafana

You can also run the server using the SSE transport inside Docker. To build the image, use

make build-image

And to run the image, use:

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

Testing

TL;DR: start a Grafana instance with docker-compose up, run uv run ruff check . for lints, and uv run pytest tests --integration to run unit and integration tests.

To run unit tests, run:

uv run pytest tests

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:

```bash
uv run pytest --integration tests

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

Certain tools use functionality that is only available in Grafana Cloud. Such tests should use the mark_cloud Pytest mark; see the incident_test.py file for an example. Use the GRAFANA_URL and GRAFANA_API_KEY environment variables to configure the Grafana instance to use for testing, and run these tests with:

GRAFANA_URL=https://myinstance.grafana.net GRAFANA_API_KEY=my-api-key uv run pytest --cloud tests

Linting

This project uses ruff for linting.

License

This project is licensed under the Apache License, Version 2.0.

Last updated: 3/1/2025

Publisher info

grafana's avatar

Grafana Labs

Grafana Labs is behind leading open source projects Grafana and Loki, and the creator of the first open & composable observability platform.

4,828
followers
0
following
824
repos

More MCP servers built with Python

mcp-logo-gen

By sshtunnelvision137
ledger-mcp-server

MCP Server for my ledger

By mprokopov1
clickhouse_mcp_server

A MCP server for ClickHouse

By ThomAub1