返回市场
MCP-格拉法纳

MCP-格拉法纳

作者:grafana1891 星标更新:2025-11-21

项目介绍

Grafana MCP 服务器

单元测试 集成测试 端到端测试 Go 参考 MCP 目录

这是一个用于 Grafana 的 [模型上下文协议][mcp] (MCP) 服务器。

它提供了对您的 Grafana 实例及其周围生态系统访问。

要求

  • 需要Grafana 版本 9.0 或更高版本以实现全部功能。某些功能,特别是与数据源相关的操作,在早期版本中可能无法正常工作,因为缺少必要的 API 端点。

功能

以下功能当前在 MCP 服务器中可用。此列表仅供信息参考,并不代表未来功能的路线图或承诺。

仪表板

  • 搜索仪表板: 通过标题或其他元数据查找仪表板
  • 通过 UID 获取仪表板: 使用其唯一标识符检索完整的仪表板详情。警告:大型仪表板可能会占用大量的上下文窗口空间。
  • 获取仪表板概要: 获取一个紧凑的仪表板概览,包括标题、面板数量、面板类型、变量和元数据,而不提供完整的 JSON,以最小化上下文窗口的使用。
  • 获取仪表板属性: 使用 JSONPath 表达式(例如 $.title$.panels[*].title)提取仪表板的特定部分,仅获取所需的数据并减少上下文窗口的使用。
  • 更新或创建仪表板: 修改现有仪表板或创建新的仪表板。警告:需要完整的仪表板 JSON,这可能会消耗大量上下文窗口空间。
  • 修补仪表板: 对仪表板应用特定更改,而无需提供完整的 JSON,显著减少了上下文窗口的使用,以便进行有针对性的修改。
  • 获取面板查询和数据源信息: 获取每个面板的标题、查询字符串和数据源信息(如果可用,包括 UID 和类型)。

上下文窗口管理

仪表板工具现在包括几种策略来有效地管理上下文窗口的使用(问题 #101):

  • 使用 get_dashboard_summary 来获取仪表板概览和规划修改
  • 使用 get_dashboard_property 结合 JSONPath 当您只需要特定的仪表板部分时
  • 避免使用 get_dashboard_by_uid 除非您确实需要完整的仪表板 JSON

数据源

  • 列出和获取数据源信息: 查看所有已配置的数据源并获取每个数据源的详细信息。
    • 支持的数据源类型:Prometheus,Loki

Prometheus 查询

  • 查询 Prometheus: 执行 PromQL 查询(支持即时和范围度量查询)针对 Prometheus 数据源。
  • 查询 Prometheus 元数据: 从 Prometheus 数据源中检索度量元数据、度量名称、标签名称和标签值。

Loki 查询

  • 查询 Loki 日志和度量: 使用 LogQL 运行日志查询和度量查询针对 Loki 数据源。
  • 查询 Loki 元数据: 从 Loki 数据源中检索标签名称、标签值和流统计信息。

事件

  • 搜索、创建和更新事件: 在 Grafana 事件中管理事件,包括搜索、创建和向事件添加活动。

Sift 调查

  • 列出 Sift 调查: 检索 Sift 调查列表,支持限制参数。
  • 获取 Sift 调查: 根据其 UUID 检索特定的 Sift 调查详情。
  • 获取 Sift 分析: 从 Sift 调查中检索特定分析。
  • 检测日志中的错误模式: 使用 Sift 检测 Loki 日志中的异常错误模式。
  • 检测慢请求: 使用 Sift(Tempo)检测慢请求。

告警

  • 列出和获取告警规则信息: 查看 Grafana 中的告警规则及其状态(触发/正常/错误等)。支持由 Grafana 管理的规则以及来自 Prometheus 或 Loki 数据源的由数据源管理的规则。
  • 列出通知联系点: 查看 Grafana 中配置的通知联系点。支持由 Grafana 管理的联系点以及来自外部 Alertmanager 数据源(Prometheus Alertmanager、Mimir、Cortex)的接收器。

Grafana OnCall

  • 列出和管理值班表: 查看和管理 Grafana OnCall 中的值班表。
  • 获取值班详情: 检索特定值班的详细信息。
  • 获取当前值班用户: 查看哪些用户当前正在值班。
  • 列出团队和用户: 查看所有 OnCall 团队和用户。
  • 列出告警组: 根据各种标准(如状态、集成、标签和时间范围)查看和过滤来自 Grafana OnCall 的告警组。
  • 获取告警组详情: 根据其 ID 检索特定告警组的详细信息。

管理

  • 列出团队: 查看 Grafana 中配置的所有团队。
  • 列出用户: 查看 Grafana 中组织内的所有用户。

导航

  • 生成深度链接: 创建准确的深度链接 URL,而不是依赖于 LLM URL 猜测。
    • 仪表板链接: 使用其 UID 生成指向仪表板的直接链接(例如,http://localhost:3000/d/dashboard-uid
    • 面板链接: 创建指向仪表板内特定面板的链接,带有 viewPanel 参数(例如,http://localhost:3000/d/dashboard-uid?viewPanel=5
    • 探索链接: 生成指向预配置数据源的 Grafana Explore 的链接(例如,http://localhost:3000/explore?left={"datasource":"prometheus-uid"}
    • 时间范围支持: 添加时间范围参数到链接(from=now-1h&to=-now
    • 自定义参数: 包括额外的查询参数,如仪表板变量或刷新间隔

注解

  • 获取注解: 使用过滤器查询注解。支持时间范围、仪表板 UID、标签和匹配模式。
  • 创建注解: 在仪表板或面板上创建一个新的注解。
  • 创建 Graphite 注解: 使用 Graphite 格式创建注解(whatwhentagsdata)。
  • 更新注解: 替换现有注解的所有字段(完全更新)。
  • 修补注解: 更新注解的特定字段(部分更新)。
  • 获取注解标签: 列出可用的注解标签,可选过滤。

工具列表是可配置的,因此您可以选择希望使 MCP 客户端可用的工具。 如果您不使用某些功能或不想占用太多上下文窗口,这非常有用。 要禁用一类工具,请在启动服务器时使用 --disable-<category> 标志。例如,要禁用 OnCall 工具,请使用 --disable-oncall,或者要禁用导航深度链接生成,请使用 --disable-navigation

RBAC 权限

每个工具都需要特定的 RBAC 权限才能正常运行。当为 MCP 服务器创建服务账户时,请确保根据计划使用的工具拥有必要的权限。所列权限是最小必需的操作 - 根据您的使用情况,您可能还需要适当的范围(例如,datasources:*dashboards:*folders:*)。

提示:如果您不熟悉 Grafana RBAC,或者想要更快、更简单的设置而不是配置许多细粒度的作用域,可以将内置角色(如 Editor)分配给服务账户。Editor 角色授予广泛的读写访问权限,允许大多数 MCP 服务器操作;它比手动应用的作用域更粗略(因此也更少限制),所以只有在方便性比严格的最小权限访问更重要时才使用它。

注意: Grafana 事件和 Sift 工具使用基本的 Grafana 角色,而不是细粒度的 RBAC 权限:

  • 查看者角色: 需要只读操作(列出事件,获取调查)
  • 编辑者角色: 需要写入操作(创建事件,修改调查)

有关 Grafana RBAC 的更多信息,请参阅 官方文档

RBAC 范围

范围定义了权限适用的具体资源。每个动作都需要适当的权限和范围组合。

常见作用域模式:

  • 广泛访问: 使用 * 通配符进行组织范围的访问

    • datasources:* - 访问所有数据源
    • dashboards:* - 访问所有仪表板
    • folders:* - 访问所有文件夹
    • teams:* - 访问所有团队
  • 有限访问: 使用特定的 UID 或 ID 限制对单个资源的访问

    • datasources:uid:prometheus-uid - 仅访问特定的 Prometheus 数据源
    • dashboards:uid:abc123 - 仅访问具有 UID abc123 的仪表板
    • folders:uid:xyz789 - 仅访问具有 UID xyz789 的文件夹
    • teams:id:5 - 仅访问具有 ID 5 的团队
    • global.users:id:123 - 仅访问具有 ID 123 的用户

示例:

  • 完整 MCP 服务器访问: 授予所有工具的广泛权限

    datasources:* (datasources:read, datasources:query)
    dashboards:* (dashboards:read, dashboards:create, dashboards:write)
    folders:* (用于仪表板创建和告警规则)
    teams:* (teams:read)
    global.users:* (users:read)
    
  • 有限数据源访问: 仅查询特定的 Prometheus 和 Loki 实例

    datasources:uid:prometheus-prod (datasources:query)
    datasources:uid:loki-prod (datasources:query)
    
  • 特定仪表板访问: 仅读取特定的仪表板

    dashboards:uid:monitoring-dashboard (dashboards:read)
    dashboards:uid:alerts-dashboard (dashboards:read)
    

工具

工具类别描述所需 RBAC 权限所需范围
list_teams管理列出所有团队teams:readteams:*teams:id:1
list_users_by_org管理列出组织内的所有用户users:readglobal.users:*global.users:id:123
search_dashboards搜索搜索仪表板dashboards:readdashboards:*dashboards:uid:abc123
get_dashboard_by_uid仪表板通过 uid 获取仪表板dashboards:readdashboards:uid:abc123
update_dashboard仪表板更新或创建新仪表板dashboards:create, dashboards:writedashboards:*, folders:*folders:uid:xyz789
get_dashboard_panel_queries仪表板从仪表板获取面板标题、查询、数据源 UID 和类型dashboards:readdashboards:uid:abc123
get_dashboard_property仪表板使用 JSONPath 表达式提取仪表板的特定部分dashboards:readdashboards:uid:abc123
get_dashboard_summary仪表板获取不包含完整 JSON 的仪表板紧凑概要dashboards:readdashboards:uid:abc123
list_datasources数据源列出数据源datasources:readdatasources:*
get_datasource_by_uid数据源通过 uid 获取数据源datasources:readdatasources:uid:prometheus-uid
get_datasource_by_name数据源通过名称获取数据源datasources:readdatasources:*datasources:uid:loki-uid
query_prometheusPrometheus针对 Prometheus 数据源执行查询datasources:querydatasources:uid:prometheus-uid
list_prometheus_metric_metadataPrometheus列出度量元数据datasources:querydatasources:uid:prometheus-uid
list_prometheus_metric_namesPrometheus列出可用的度量名称datasources:querydatasources:uid:prometheus-uid
list_prometheus_label_namesPrometheus列出与选择器匹配的标签名称datasources:querydatasources:uid:prometheus-uid
list_prometheus_label_valuesPrometheus列出特定标签的值datasources:querydatasources:uid:prometheus-uid
list_incidents事件列出 Grafana 事件中的事件查看者角色N/A
create_incident事件在 Grafana 事件中创建事件编辑者角色N/A
add_activity_to_incident事件向 Grafana 事件中的事件添加活动项编辑者角色N/A
get_incident事件根据 ID 获取单个事件查看者角色N/A
query_loki_logsLoki使用 LogQL 查询和检索日志(日志或度量查询)datasources:querydatasources:uid:loki-uid
list_loki_label_namesLoki列出日志中的所有可用标签名称datasources:querydatasources:uid:loki-uid
list_loki_label_valuesLoki列出特定日志标签的值datasources:querydatasources:uid:loki-uid
query_loki_statsLoki获取关于日志流的统计数据datasources:querydatasources:uid:loki-uid
list_alert_rules告警列出告警规则alert.rules:readfolders:*folders:uid:alerts-folder
get_alert_rule_by_uid告警根据 UID 获取告警规则alert.rules:readfolders:uid:alerts-folder
list_contact_points告警列出通知联系点(Grafana 管理和 Alertmanager)alert.notifications:read全局范围
list_oncall_schedulesOnCall列出来自 Grafana OnCall 的值班表grafana-oncall-app.schedules:read插件特定范围
get_oncall_shiftOnCall获取特定 OnCall 值班的详细信息grafana-oncall-app.schedules:read插件特定范围
get_current_oncall_usersOnCall获取特定值班表当前值班的用户grafana-oncall-app.schedules:read插件特定范围
list_oncall_teamsOnCall列出来自 Grafana OnCall 的团队grafana-oncall-app.user-settings:read插件特定范围
list_oncall_usersOnCall列出来自 Grafana OnCall 的用户grafana-oncall-app.user-settings:read插件特定范围
list_alert_groupsOnCall列出来自 Grafana OnCall 的告警组,带过滤选项grafana-oncall-app.alert-groups:read插件特定范围
get_alert_groupOnCall根据其 ID 获取来自 Grafana OnCall 的特定告警组grafana-oncall-app.alert-groups:read插件特定范围