Server data from the Official MCP Registry
An MCP server giving access to Grafana dashboards, data and more.
An MCP server giving access to Grafana dashboards, data and more.
Remote endpoints: streamable-http: https://mcp.grafana.com/mcp
Valid MCP server (1 strong, 1 medium validity signals). No known CVEs in dependencies. Imported from the Official MCP Registry.
Endpoint verified · Requires authentication · 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Set these up before or after installing:
Environment variable: GRAFANA_URL
Environment variable: GRAFANA_SERVICE_ACCOUNT_TOKEN
Environment variable: GRAFANA_USERNAME
Environment variable: GRAFANA_PASSWORD
Environment variable: GRAFANA_ORG_ID
Environment variable: GRAFANA_EXTRA_HEADERS
Environment variable: GRAFANA_FORWARD_HEADERS
Remote Plugin
No local installation needed. Your AI client connects to the remote endpoint directly.
Add this to your MCP configuration to connect:
{
"mcpServers": {
"io-github-grafana-mcp-grafana": {
"env": {
"GRAFANA_URL": "your-grafana-url-here",
"GRAFANA_ORG_ID": "your-grafana-org-id-here",
"GRAFANA_PASSWORD": "your-grafana-password-here",
"GRAFANA_USERNAME": "your-grafana-username-here",
"GRAFANA_EXTRA_HEADERS": "your-grafana-extra-headers-here",
"GRAFANA_FORWARD_HEADERS": "your-grafana-forward-headers-here",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "your-grafana-service-account-token-here"
},
"url": "https://mcp.grafana.com/mcp"
}
}
}From the project's GitHub README.
A [Model Context Protocol][mcp] (MCP) server for Grafana.
This provides access to your Grafana instance and the surrounding ecosystem.
Requires uv. Add the following to your MCP client configuration (e.g. Claude Desktop, Cursor):
{
"mcpServers": {
"grafana": {
"command": "uvx",
"args": ["mcp-grafana"],
"env": {
"GRAFANA_URL": "http://localhost:3000",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your service account token>"
}
}
}
}
For Grafana Cloud, replace GRAFANA_URL with your instance URL (e.g. https://myinstance.grafana.net). See Usage for more installation options including Docker, binary, and Helm.
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.
$.title, $.panels[*].title) to fetch only needed data and reduce context window consumptionNote: Run panel query tools are disabled by default. To enable them, add
runpanelqueryto your--enabled-toolsflag.
The dashboard tools now include several strategies to manage context window usage effectively (issue #101):
get_dashboard_summary for dashboard overview and planning modificationsget_dashboard_property with JSONPath when you only need specific dashboard partsget_dashboard_by_uid unless you specifically need the complete dashboard JSONNote: Query examples tools are disabled by default. To enable them, add
examplesto your--enabled-toolsflag.
Note: InfluxDB tools are disabled by default. To enable them, add
influxdbto your--enabled-toolsflag.
dialect parameter.Note: ClickHouse tools are disabled by default. To enable them, add
clickhouseto your--enabled-toolsflag.
Note: CloudWatch tools are disabled by default. To enable them, add
cloudwatchto your--enabled-toolsflag.
Note: Graphite tools are disabled by default. To enable them, add
graphiteto your--enabled-toolsflag.
Note: Snowflake tools are disabled by default. To enable them, add
snowflaketo your--enabled-toolsflag.
Queries go through Grafana's Snowflake datasource (Grafana Enterprise plugin grafana-snowflake-datasource), so authentication is handled by the datasource configuration in Grafana — credentials are never seen by the MCP server. This is the same model used for the ClickHouse tools.
INFORMATION_SCHEMA.TABLES. Optional database/schema filters.SNOWFLAKE.TELEMETRY.EVENTS) for logs and traces, or any user table.
$__timeFilter(column), $__timeFrom, $__timeTo, $__from, $__to (Unix ms), $__interval (seconds), $__interval_ms, and ${varname} for template variable substitution.Note: Elasticsearch/OpenSearch tools are disabled by default. To enable them, add
elasticsearchto your--enabled-toolsflag.
Note: Admin tools are disabled by default. To enable them, include
adminin your--enabled-toolsflag.
http://localhost:3000/d/dashboard-uid)http://localhost:3000/d/dashboard-uid?viewPanel=5)http://localhost:3000/explore?left={"datasource":"prometheus-uid"})from=now-1h&to=now)what, when, tags, data).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, or to disable navigation deeplink generation, use --disable-navigation.
Each tool requires specific RBAC permissions to function properly. When creating a service account for the MCP server, ensure it has the necessary permissions based on which tools you plan to use. The permissions listed are the minimum required actions - you may also need appropriate scopes (e.g., datasources:*, dashboards:*, folders:*) depending on your use case.
Tip: If you're not familiar with Grafana RBAC or you want a quicker, simpler setup instead of configuring many granular scopes, you can assign a built-in role such as Editor to the service account. The Editor role grants broad read/write access that will allow most MCP server operations; it is less granular (and therefore less restrictive) than manually-applied scopes, so use it only when convenience is more important than strict least-privilege access.
Note: Grafana Incident and Sift tools use basic Grafana roles instead of fine-grained RBAC permissions:
For more information about Grafana RBAC, see the official documentation.
Scopes define the specific resources that permissions apply to. Each action requires both the appropriate permission and scope combination.
Common Scope Patterns:
Broad access: Use * wildcards for organization-wide access
datasources:* - Access to all datasourcesdashboards:* - Access to all dashboardsfolders:* - Access to all foldersteams:* - Access to all teamsLimited access: Use specific UIDs or IDs to restrict access to individual resources
datasources:uid:prometheus-uid - Access only to a specific Prometheus datasourcedashboards:uid:abc123 - Access only to dashboard with UID abc123folders:uid:xyz789 - Access only to folder with UID xyz789teams:id:5 - Access only to team with ID 5global.users:id:123 - Access only to user with ID 123Examples:
Full MCP server access: Grant broad permissions for all tools
datasources:* (datasources:read, datasources:query)
dashboards:* (dashboards:read, dashboards:create, dashboards:write)
folders:* (for dashboard creation and alert rules)
teams:* (teams:read)
global.users:* (users:read)
Limited datasource access: Only query specific Prometheus and Loki instances
datasources:uid:prometheus-prod (datasources:query)
datasources:uid:loki-prod (datasources:query)
Dashboard-specific access: Read only specific dashboards
dashboards:uid:monitoring-dashboard (dashboards:read)
dashboards:uid:alerts-dashboard (dashboards:read)
| Tool | Category | Description | Required RBAC Permissions | Required Scopes |
|---|---|---|---|---|
list_teams | Admin | List all teams | teams:read | teams:* or teams:id:1 |
list_users_by_org | Admin | List all users in an organization | users:read | global.users:* or global.users:id:123 |
list_all_roles | Admin | List all Grafana roles | roles:read | roles:* |
get_role_details | Admin | Get details for a Grafana role | roles:read | roles:uid:editor |
get_role_assignments | Admin | List assignments for a role | roles:read | roles:uid:editor |
list_user_roles | Admin | List roles for users | roles:read | global.users:id:123 |
list_team_roles | Admin | List roles for teams | roles:read | teams:id:7 |
get_resource_permissions | Admin | List permissions for a resource | permissions:read | dashboards:uid:abcd1234 |
get_resource_description | Admin | Describe a Grafana resource type | permissions:read | dashboards:* |
search_dashboards | Search | Search for dashboards | dashboards:read | dashboards:* or dashboards:uid:abc123 |
get_dashboard_by_uid | Dashboard | Get a dashboard by uid | dashboards:read | dashboards:uid:abc123 |
update_dashboard | Dashboard | Update or create a new dashboard | dashboards:create, dashboards:write | dashboards:*, folders:* or folders:uid:xyz789 |
get_dashboard_panel_queries | Dashboard | Get panel title, queries, datasource UID and type from a dashboard | dashboards:read | dashboards:uid:abc123 |
run_panel_query | RunPanelQuery* | Execute one or more dashboard panel queries | dashboards:read, datasources:query | dashboards:uid:*, datasources:uid:* |
get_dashboard_property | Dashboard | Extract specific parts of a dashboard using JSONPath expressions | dashboards:read | dashboards:uid:abc123 |
get_dashboard_summary | Dashboard | Get a compact summary of a dashboard without full JSON | dashboards:read | dashboards:uid:abc123 |
list_datasources | Datasources | List datasources | datasources:read | datasources:* |
get_datasource | Datasources | Get a datasource by UID or name | datasources:read | datasources:uid:prometheus-uid |
get_query_examples | Examples* | Get example queries for a datasource type | datasources:read | datasources:* |
query_prometheus | Prometheus | Execute a query against a Prometheus datasource | datasources:query | datasources:uid:prometheus-uid |
list_prometheus_metric_metadata | Prometheus | List metric metadata | datasources:query | datasources:uid:prometheus-uid |
list_prometheus_metric_names | Prometheus | List available metric names | datasources:query | datasources:uid:prometheus-uid |
list_prometheus_label_names | Prometheus | List label names matching a selector | datasources:query | datasources:uid:prometheus-uid |
list_prometheus_label_values | Prometheus | List values for a specific label | datasources:query | datasources:uid:prometheus-uid |
query_prometheus_histogram | Prometheus | Calculate histogram percentile values | datasources:query | datasources:uid:prometheus-uid |
list_incidents | Incident | List incidents in Grafana Incident | Viewer role | N/A |
create_incident | Incident | Create an incident in Grafana Incident | Editor role | N/A |
add_activity_to_incident | Incident | Add an activity item to an incident in Grafana Incident | Editor role | N/A |
get_incident | Incident | Get a single incident by ID | Viewer role | N/A |
query_loki_logs | Loki | Query and retrieve logs using LogQL (either log or metric queries) | datasources:query | datasources:uid:loki-uid |
list_loki_label_names | Loki | List all available label names in logs | datasources:query | datasources:uid:loki-uid |
list_loki_label_values | Loki | List values for a specific log label | datasources:query | datasources:uid:loki-uid |
query_loki_stats | Loki | Get statistics about log streams | datasources:query | datasources:uid:loki-uid |
query_loki_patterns | Loki | Query detected log patterns to identify common structures | datasources:query | datasources:uid:loki-uid |
query_influxdb | InfluxDB | Query InfluxDB using InfluxQL (v1) or Flux (v2) | datasources:query | datasources:uid:influxdb-uid |
list_clickhouse_tables | ClickHouse* | List tables in a ClickHouse database | datasources:query | datasources:uid:* |
describe_clickhouse_table | ClickHouse* | Get table schema with column types | datasources:query | datasources:uid:* |
query_clickhouse | ClickHouse* | Execute SQL queries with macro substitution | datasources:query | datasources:uid:* |
list_cloudwatch_namespaces | CloudWatch* | List available AWS CloudWatch namespaces | datasources:query | datasources:uid:* |
list_cloudwatch_metrics | CloudWatch* | List metrics in a namespace | datasources:query | datasources:uid:* |
list_cloudwatch_dimensions | CloudWatch* | List dimensions for a metric | datasources:query | datasources:uid:* |
query_cloudwatch | CloudWatch* | Execute CloudWatch metric queries | datasources:query | datasources:uid:* |
query_elasticsearch | Elasticsearch/OpenSearch* | Query Elasticsearch or OpenSearch using Lucene syntax or Query DSL | datasources:query | datasources:uid:datasource-uid |
list_snowflake_tables | Snowflake* | List tables in a Snowflake database/schema via INFORMATION_SCHEMA | datasources:query | datasources:uid:* |
describe_snowflake_table | Snowflake* | Get table schema (column types, nullability, defaults, comments) | datasources:query | datasources:uid:* |
query_snowflake | Snowflake* | Execute SQL queries with macro/variable substitution | datasources:query | datasources:uid:* |
alerting_manage_rules | Alerting | Manage alert rules (list, get, versions, create, update, delete) | alert.rules:read + alert.rules:write for mutations | folders:* or folders:uid:alerts-folder |
alerting_manage_routing | Alerting | Manage notification policies, contact points, and time intervals | alert.notifications:read | Global scope |
list_oncall_schedules | OnCall | List schedules from Grafana OnCall | grafana-oncall-app.schedules:read | Plugin-specific scopes |
get_oncall_shift | OnCall | Get details for a specific OnCall shift | grafana-oncall-app.schedules:read | Plugin-specific scopes |
get_current_oncall_users | OnCall | Get users currently on-call for a specific schedule | grafana-oncall-app.schedules:read | Plugin-specific scopes |
list_oncall_teams | OnCall | List teams from Grafana OnCall | grafana-oncall-app.user-settings:read | Plugin-specific scopes |
list_oncall_users | OnCall | List users from Grafana OnCall | grafana-oncall-app.user-settings:read | Plugin-specific scopes |
list_alert_groups | OnCall | List alert groups from Grafana OnCall with filtering options | grafana-oncall-app.alert-groups:read | Plugin-specific scopes |
get_alert_group | OnCall | Get a specific alert group from Grafana OnCall by its ID | grafana-oncall-app.alert-groups:read | Plugin-specific scopes |
get_sift_investigation | Sift | Retrieve an existing Sift investigation by its UUID | Viewer role | N/A |
get_sift_analysis | Sift | Retrieve a specific analysis from a Sift investigation | Viewer role | N/A |
list_sift_investigations | Sift | Retrieve a list of Sift investigations with an optional limit | Viewer role | N/A |
find_error_pattern_logs | Sift | Finds elevated error patterns in Loki logs. | Editor role | N/A |
find_slow_requests | Sift | Finds slow requests from the relevant tempo datasources. | Editor role | N/A |
list_pyroscope_label_names | Pyroscope | List label names matching a selector | datasources:query | datasources:uid:pyroscope-uid |
list_pyroscope_label_values | Pyroscope | List label values matching a selector for a label name | datasources:query | datasources:uid:pyroscope-uid |
list_pyroscope_profile_types | Pyroscope | List available profile types | datasources:query | datasources:uid:pyroscope-uid |
fetch_pyroscope_profile | Pyroscope | Fetches a profile in DOT format for analysis | datasources:query | datasources:uid:pyroscope-uid |
get_assertions | Asserts | Get assertion summary for a given entity | Plugin-specific permissions | Plugin-specific scopes |
generate_deeplink | Navigation | Generate accurate deeplink URLs for Grafana resources | None (read-only URL generation) | N/A |
get_annotations | Annotations | Fetch annotations with filters | annotations:read | annotations:* or annotations:id:123 |
create_annotation | Annotations | Create a new annotation (standard or Graphite format) | annotations:write | annotations:* |
update_annotation | Annotations | Update specific fields of an annotation (partial update) | annotations:write | annotations:* |
get_annotation_tags | Annotations | List annotation tags with optional filtering | annotations:read | annotations:* |
get_panel_image | Rendering | Render a dashboard panel or full dashboard as a PNG image | dashboards:read | dashboards:uid:abc123 |
* Disabled by default. Add category to --enabled-tools to enable.
The mcp-grafana binary supports various command-line flags for configuration:
Transport Options:
-t, --transport: Transport type (stdio, sse, or streamable-http) - default: stdio--address: The host and port for SSE/streamable-http server - default: localhost:8000--base-path: Base path for the SSE/streamable-http server--endpoint-path: Endpoint path for the streamable-http server - default: /Debug and Logging:
--debug: Enable debug mode for detailed HTTP request/response logging--log-level: Log level (debug, info, warn, error) - default: infoObservability:
--metrics: Enable Prometheus metrics endpoint at /metrics--metrics-address: Separate address for metrics server (e.g., :9090). If empty, metrics are served on the main server--slow-request-threshold: Log an event when any MCP request (tool invocation, list, resource read, etc.) takes longer than this duration. Accepts Go duration strings (e.g., 500ms, 5s). Default 0 disables slow-request logging. See the Slow-request logging section.--slow-request-log-level: Log level for slow-request events (info or warn) - default: warn.Session Management:
--session-idle-timeout-minutes: Session idle timeout in minutes. Sessions with no activity for this duration are automatically reaped - default: 30. Set to 0 to disable session reaping. Only relevant for SSE and streamable-http transports.Tool Configuration:
--enabled-tools: Comma-separated list of enabled categories - default: all categories except admin, clickhouse, cloudwatch, elasticsearch, examples, graphite, runpanelquery, and snowflake. To enable disabled categories, add them to the list (e.g., "search,datasource,...,snowflake")--max-loki-log-limit: Maximum number of log lines returned per query_loki_logs call - default: 100. Note: Set this at least 1 below Loki's server-side max_entries_limit_per_query to allow truncation detection (the tool requests limit+1 internally to detect if more data exists).--disable-search: Disable search tools--disable-datasource: Disable datasource tools--disable-incident: Disable incident tools--disable-prometheus: Disable prometheus tools--disable-write: Disable write tools (create/update operations)--disable-loki: Disable loki tools--disable-elasticsearch: Disable elasticsearch and opensearch tools--disable-influxdb: Disable InfluxDB tools--disable-alerting: Disable alerting tools--disable-dashboard: Disable dashboard tools--disable-oncall: Disable oncall tools--disable-asserts: Disable asserts tools--disable-sift: Disable sift tools--disable-admin: Disable admin tools--disable-pyroscope: Disable pyroscope tools--disable-navigation: Disable navigation tools--disable-rendering: Disable rendering tools (panel/dashboard image export)--disable-cloudwatch: Disable CloudWatch tools--disable-examples: Disable query examples tools--disable-clickhouse: Disable ClickHouse tools--disable-snowflake: Disable Snowflake tools--disable-runpanelquery: Disable run panel query tools--disable-graphite: Disable Graphite toolsThe --disable-write flag provides a way to run the MCP server in read-only mode, preventing any write operations to your Grafana instance. This is useful for scenarios where you want to provide safe, read-only access such as:
When --disable-write is enabled, the following write operations are disabled:
Dashboard Tools:
update_dashboardFolder Tools:
create_folderIncident Tools:
create_incidentadd_activity_to_incidentAlerting Tools:
alerting_manage_rules (create, update, delete operations)Annotation Tools:
create_annotationupdate_annotationSift Tools:
find_error_pattern_logs (creates investigations)find_slow_requests (creates investigations)All read operations remain available, allowing you to query dashboards, run PromQL/LogQL queries, list resources, and retrieve data.
Client TLS Configuration (for Grafana connections):
--tls-cert-file: Path to TLS certificate file for client authentication--tls-key-file: Path to TLS private key file for client authentication--tls-ca-file: Path to TLS CA certificate file for server verification--tls-skip-verify: Skip TLS certificate verification (insecure)Server TLS Configuration (streamable-http transport only):
--server.tls-cert-file: Path to TLS certificate file for server HTTPS--server.tls-key-file: Path to TLS private key file for server HTTPSThis MCP server works with both local Grafana instances and Grafana Cloud. For Grafana Cloud, use your instance URL (e.g., https://myinstance.grafana.net) instead of http://localhost:3000 in the configuration examples below.
If using service account token authentication, 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 service account documentation][service-account] for details on creating service account tokens.
Tip: If you're not comfortable configuring fine-grained RBAC scopes, a simpler (but less restrictive) option is to assign the built-in Editor role to the service account. This grants broad read/write access that covers most MCP server operations — use it when convenience outweighs strict least-privilege requirements.
Note: The environment variable
GRAFANA_API_KEYis deprecated and will be removed in a future version. Please migrate to usingGRAFANA_SERVICE_ACCOUNT_TOKENinstead. The old variable name will continue to work for backward compatibility but will show deprecation warnings.
You can specify which organization to interact with using either:
GRAFANA_ORG_ID to the numeric organization IDX-Grafana-Org-Id when using SSE or streamable HTTP transports (header takes precedence over environment variable - meaning you can set a default org as well).When an organization ID is provided, the MCP server will set the X-Grafana-Org-Id header on all requests to Grafana, ensuring that operations are performed within the specified organization context.
Example with organization ID:
{
"mcpServers": {
"grafana": {
"command": "mcp-grafana",
"args": [],
"env": {
"GRAFANA_URL": "http://localhost:3000",
"GRAFANA_USERNAME": "<your username>",
"GRAFANA_PASSWORD": "<your password>",
"GRAFANA_ORG_ID": "2"
}
}
}
}
You can add arbitrary HTTP headers to all Grafana API requests using the GRAFANA_EXTRA_HEADERS environment variable. The value should be a JSON object mapping header names to values.
Example with custom headers:
{
"mcpServers": {
"grafana": {
"command": "mcp-grafana",
"args": [],
"env": {
"GRAFANA_URL": "http://localhost:3000",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your token>",
"GRAFANA_EXTRA_HEADERS": "{\"X-Custom-Header\": \"custom-value\", \"X-Tenant-ID\": \"tenant-123\"}"
}
}
}
}
Documentation truncated — see the full README on GitHub.
Be the first to review this server!
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.
by Microsoft · Content & Media
Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption