这是一个用于 Grafana 的 [模型上下文协议][mcp] (MCP) 服务器。
它提供了对您的 Grafana 实例及其周围生态系统访问。
以下功能当前在 MCP 服务器中可用。此列表仅供信息参考,并不代表未来功能的路线图或承诺。
$.title,$.panels[*].title)提取仪表板的特定部分,仅获取所需的数据并减少上下文窗口的使用。仪表板工具现在包括几种策略来有效地管理上下文窗口的使用(问题 #101):
get_dashboard_summary 来获取仪表板概览和规划修改get_dashboard_property 结合 JSONPath 当您只需要特定的仪表板部分时get_dashboard_by_uid 除非您确实需要完整的仪表板 JSONhttp://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)。工具列表是可配置的,因此您可以选择希望使 MCP 客户端可用的工具。
如果您不使用某些功能或不想占用太多上下文窗口,这非常有用。
要禁用一类工具,请在启动服务器时使用 --disable-<category> 标志。例如,要禁用
OnCall 工具,请使用 --disable-oncall,或者要禁用导航深度链接生成,请使用 --disable-navigation。
每个工具都需要特定的 RBAC 权限才能正常运行。当为 MCP 服务器创建服务账户时,请确保根据计划使用的工具拥有必要的权限。所列权限是最小必需的操作 - 根据您的使用情况,您可能还需要适当的范围(例如,datasources:*,dashboards:*,folders:*)。
提示:如果您不熟悉 Grafana RBAC,或者想要更快、更简单的设置而不是配置许多细粒度的作用域,可以将内置角色(如 Editor)分配给服务账户。Editor 角色授予广泛的读写访问权限,允许大多数 MCP 服务器操作;它比手动应用的作用域更粗略(因此也更少限制),所以只有在方便性比严格的最小权限访问更重要时才使用它。
注意: Grafana 事件和 Sift 工具使用基本的 Grafana 角色,而不是细粒度的 RBAC 权限:
有关 Grafana 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:read | teams:* 或 teams:id:1 |
list_users_by_org | 管理 | 列出组织内的所有用户 | users:read | global.users:* 或 global.users:id:123 |
search_dashboards | 搜索 | 搜索仪表板 | dashboards:read | dashboards:* 或 dashboards:uid:abc123 |
get_dashboard_by_uid | 仪表板 | 通过 uid 获取仪表板 | dashboards:read | dashboards:uid:abc123 |
update_dashboard | 仪表板 | 更新或创建新仪表板 | dashboards:create, dashboards:write | dashboards:*, folders:* 或 folders:uid:xyz789 |
get_dashboard_panel_queries | 仪表板 | 从仪表板获取面板标题、查询、数据源 UID 和类型 | dashboards:read | dashboards:uid:abc123 |
get_dashboard_property | 仪表板 | 使用 JSONPath 表达式提取仪表板的特定部分 | dashboards:read | dashboards:uid:abc123 |
get_dashboard_summary | 仪表板 | 获取不包含完整 JSON 的仪表板紧凑概要 | dashboards:read | dashboards:uid:abc123 |
list_datasources | 数据源 | 列出数据源 | datasources:read | datasources:* |
get_datasource_by_uid | 数据源 | 通过 uid 获取数据源 | datasources:read | datasources:uid:prometheus-uid |
get_datasource_by_name | 数据源 | 通过名称获取数据源 | datasources:read | datasources:* 或 datasources:uid:loki-uid |
query_prometheus | Prometheus | 针对 Prometheus 数据源执行查询 | datasources:query | datasources:uid:prometheus-uid |
list_prometheus_metric_metadata | Prometheus | 列出度量元数据 | datasources:query | datasources:uid:prometheus-uid |
list_prometheus_metric_names | Prometheus | 列出可用的度量名称 | datasources:query | datasources:uid:prometheus-uid |
list_prometheus_label_names | Prometheus | 列出与选择器匹配的标签名称 | datasources:query | datasources:uid:prometheus-uid |
list_prometheus_label_values | Prometheus | 列出特定标签的值 | datasources:query | datasources: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_logs | Loki | 使用 LogQL 查询和检索日志(日志或度量查询) | datasources:query | datasources:uid:loki-uid |
list_loki_label_names | Loki | 列出日志中的所有可用标签名称 | datasources:query | datasources:uid:loki-uid |
list_loki_label_values | Loki | 列出特定日志标签的值 | datasources:query | datasources:uid:loki-uid |
query_loki_stats | Loki | 获取关于日志流的统计数据 | datasources:query | datasources:uid:loki-uid |
list_alert_rules | 告警 | 列出告警规则 | alert.rules:read | folders:* 或 folders:uid:alerts-folder |
get_alert_rule_by_uid | 告警 | 根据 UID 获取告警规则 | alert.rules:read | folders:uid:alerts-folder |
list_contact_points | 告警 | 列出通知联系点(Grafana 管理和 Alertmanager) | alert.notifications:read | 全局范围 |
list_oncall_schedules | OnCall | 列出来自 Grafana OnCall 的值班表 | grafana-oncall-app.schedules:read | 插件特定范围 |
get_oncall_shift | OnCall | 获取特定 OnCall 值班的详细信息 | grafana-oncall-app.schedules:read | 插件特定范围 |
get_current_oncall_users | OnCall | 获取特定值班表当前值班的用户 | grafana-oncall-app.schedules:read | 插件特定范围 |
list_oncall_teams | OnCall | 列出来自 Grafana OnCall 的团队 | grafana-oncall-app.user-settings:read | 插件特定范围 |
list_oncall_users | OnCall | 列出来自 Grafana OnCall 的用户 | grafana-oncall-app.user-settings:read | 插件特定范围 |
list_alert_groups | OnCall | 列出来自 Grafana OnCall 的告警组,带过滤选项 | grafana-oncall-app.alert-groups:read | 插件特定范围 |
get_alert_group | OnCall | 根据其 ID 获取来自 Grafana OnCall 的特定告警组 | grafana-oncall-app.alert-groups:read | 插件特定范围 |