MCP HubMCP Hub
grafana

mcp-grafana

by: grafana

MCP server for Grafana

528created 24/12/2024
Visit
Grafana

📌Overview

Purpose: The MCP server for Grafana facilitates access to Grafana instances and enhances interaction with its ecosystem.

Overview: This framework allows users to interact with Grafana's features by providing tools for searching dashboards, managing data sources, querying metrics, and handling incidents. The server is designed to be configurable, catering to specific user needs and optimizing the context window.

Key Features:

  • Search Dashboards: Enables users to search for and retrieve dashboards, enhancing discoverability and accessibility.

  • Datasource Management: Lists and fetches information on various data sources, allowing users to manage connections effectively.

  • Querying Capabilities: Supports querying of Prometheus and Loki for both metrics and logs, enabling detailed analysis and insights.

  • Incident Management: Facilitates search, creation, update, and closure of incidents, improving operational response times.

  • Alerting System: Offers features to manage alert rules, including listing and fetching alert rule information, which helps maintain system reliability.


Grafana MCP server

A Model Context Protocol (MCP) server for Grafana that provides access to your Grafana instance and its ecosystem.

Features

  • Search for dashboards
  • Get dashboard by UID
  • List and fetch datasource information
  • Query datasources
    • Prometheus
    • Loki
      • Log queries
      • Metric queries
    • Tempo (planned)
    • Pyroscope (planned)
  • Query Prometheus metadata
    • Metric metadata
    • Metric names
    • Label names
    • Label values
  • Query Loki metadata
    • Label names
    • Label values
    • Stats
  • Search, create, update, and close incidents
  • Alerting
    • List and fetch alert rule information
    • Get alert rule statuses (firing/normal/error/etc.)
    • List contact points
  • Access Grafana OnCall functionality
    • List and manage schedules
    • Get shift details
    • Get current on-call users
    • List teams and users

The list of tools is configurable; you can choose which tools to make available to the MCP client. To disable a category of tools, use the --disable-<category> flag when starting the server, e.g., --disable-oncall disables OnCall tools.

Tools

ToolCategoryDescription
search_dashboardsSearchSearch for dashboards
get_dashboard_by_uidDashboardGet a dashboard by UID
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 (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

Usage

  1. Create a service account in Grafana with appropriate permissions and generate a service account token. Follow the Grafana documentation for details.

  2. Download the latest release of mcp-grafana from the releases page and place it in your $PATH.

    If you have a Go toolchain installed, build and install from source:

    GOBIN="$HOME/go/bin" go install github.com/grafana/mcp-grafana/cmd/mcp-grafana@latest
    
  3. Add the server configuration to your client configuration file. For example, for Claude Desktop:

    {
      "mcpServers": {
        "grafana": {
          "command": "mcp-grafana",
          "args": [],
          "env": {
            "GRAFANA_URL": "http://localhost:3000",
            "GRAFANA_API_KEY": "<your service account token>"
          }
        }
      }
    }
    

Note: If you see the error Error: spawn mcp-grafana ENOENT in Claude Desktop, specify the full path to mcp-grafana.

Debug Mode

Enable debug mode by adding the -debug flag to the command for detailed logging of HTTP requests and responses between the MCP server and Grafana API.

Example configuration for Claude Desktop with debug enabled:

{
  "mcpServers": {
    "grafana": {
      "command": "mcp-grafana",
      "args": ["-debug"],
      "env": {
        "GRAFANA_URL": "http://localhost:3000",
        "GRAFANA_API_KEY": "<your service account token>"
      }
    }
  }
}

Development

Contributions are welcome! Please open an issue or submit a pull request for suggestions or improvements.

This project is written in Go. Follow your platform-specific instructions to install Go.

To run the server:

make run

To build and run the server using Docker with SSE transport:

make build-image
docker run -it --rm -p 8000:8000 mcp-grafana:latest

Testing

Available tests:

  1. Unit Tests (no external dependencies):

    make test-unit
    

    or

    make test
    
  2. Integration Tests (require Docker containers running):

    make test-integration
    
  3. Cloud Tests (require a cloud Grafana instance and credentials):

    make test-cloud
    

Note: Cloud tests are configured automatically in CI. For local runs, set up your own Grafana Cloud instance and credentials.

Run integration tests locally after starting Grafana (e.g., on port 3000):

docker-compose up -d
make test-all

Linting

To lint the code:

make lint

Includes a custom linter checking for unescaped commas in jsonschema struct tags. To run only this linter:

make lint-jsonschema

See the JSONSchema Linter documentation for details.

License

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