mcp-grafana

GitHub
2.7k 319 简单 1 次阅读 3天前Apache-2.0开发框架Agent
AI 解读 由 AI 自动生成,仅供参考

mcp-grafana 是一个基于模型上下文协议(MCP)构建的服务端工具,旨在为 Grafana 及其生态系统提供标准化的访问接口。它充当了 AI 助手与 Grafana 监控平台之间的桥梁,让大语言模型能够直接读取、分析甚至操作你的监控数据。

在日常运维和开发中,开发者往往需要频繁查询仪表盘状态或调试数据源配置,手动操作繁琐且容易出错。mcp-grafana 解决了这一痛点,允许 AI 客户端(如 Claude Desktop 或 Cursor)通过自然语言指令完成复杂任务。例如,你可以直接询问 AI “帮我查找包含 CPU 使用率的仪表盘”或“提取某个面板的查询语句”,而无需亲自登录后台层层点击。

这款工具特别适合 DevOps 工程师、后端开发者以及数据分析师使用。对于需要快速定位系统瓶颈或自动化生成监控报告的技术人员来说,它能显著降低操作门槛,提升工作效率。普通用户若拥有 Grafana 实例的管理权限,也能借此更直观地理解监控数据。

在技术实现上,mcp-grafana 的一大亮点是其对“上下文窗口”的精细管理。考虑到大型仪表盘的 JSON 数据极其庞大,容易超出 AI 的处理限制,它提供了多种灵活的数据获取策略:既支持获取精简的仪表盘摘要,也支持通过 JSONPath 表达式仅提取特定字段,还支持针对局部内容的补丁式更新。这种设计不仅节省了 Token 消耗,还大幅提高了 AI 响应的准确性和速度。此外,它还支持执行面板查询并自定义时间范围,为动态数据分析提供了强大支持。只需简单配置 URL 和服务账户令牌,即可快速集成到现有的 MCP 客户端中。

使用场景

某电商平台的 SRE 工程师在深夜收到核心交易接口响应延迟告警,需要迅速定位是数据库瓶颈还是应用层问题,并临时调整监控视图以聚焦关键指标。

没有 mcp-grafana 时

  • 手动检索低效:工程师需登录 Grafana Web 界面,在数十个仪表盘中手动搜索“交易核心”相关看板,反复切换页面确认 UID,耗时且容易出错。
  • 上下文割裂:为了查看某个面板的具体 PromQL 查询语句或数据源配置,必须点击进入编辑模式复制 JSON,再粘贴到本地分析,打断排查思路。
  • 修改门槛高:若需在现有看板中新增一个针对特定错误码的监控面板,需导出完整 JSON 文件,在本地编辑器中小心修改结构后再导入,极易因格式错误导致看板崩溃。
  • 信息过载:直接获取完整看板 JSON 会消耗大量注意力及 AI 助手的上下文窗口,导致后续分析其他日志时出现记忆丢失或截断。

使用 mcp-grafana 后

  • 智能精准定位:通过自然语言指令,mcp-grafana 直接搜索并返回相关看板摘要(Summary),快速锁定目标 UID,无需人工逐页翻阅。
  • 无缝获取细节:利用 JSONPath 功能,仅提取特定面板的查询语句和数据源类型,既保留了关键排查信息,又极大节省了上下文空间。
  • 敏捷动态调整:直接使用 Patch 功能对看板进行微调,如临时添加一个过滤特定错误码的面板,无需处理庞大的完整 JSON 文件,操作安全且高效。
  • 即时数据验证:启用 Run Panel Query 功能,直接在对话中执行查询并获取实时数据结果,快速验证假设,缩短从“怀疑”到“确认”的路径。

核心价值在于将 Grafana 从被动的可视化展示平台转变为可交互的智能运维助手,显著降低故障排查的认知负荷与操作成本。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

未说明

内存

未说明

依赖
notes1. 需要 Grafana 9.0 或更高版本。2. 推荐使用 uv 工具运行 (uvx mcp-grafana)。3. 需配置环境变量 GRAFANA_URL 和 GRAFANA_SERVICE_ACCOUNT_TOKEN。4. 部分功能(如 Run Panel Query, ClickHouse, CloudWatch, Search Logs, Elasticsearch, Admin)默认禁用,需通过 --enabled-tools 标志启用。5. 若使用面板渲染功能,需安装并配置 Grafana Image Renderer 服务。6. 创建服务账户时需根据使用的工具分配相应的 RBAC 权限。
python未说明 (通过 uv/uvx 运行,通常隐含 Python 环境,但 README 未指定具体版本)
uv
mcp-grafana
mcp-grafana hero image

快速开始

Grafana MCP 服务器

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

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

这提供了对您的 Grafana 实例及其周边生态系统的访问权限。

快速入门

需要 uv。将以下内容添加到您的 MCP 客户端配置中(例如 Claude Desktop、Cursor):

{
  "mcpServers": {
    "grafana": {
      "command": "uvx",
      "args": ["mcp-grafana"],
      "env": {
        "GRAFANA_URL": "http://localhost:3000",
        "GRAFANA_SERVICE_ACCOUNT_TOKEN": "<您的服务账号令牌>"
      }
    }
  }
}

对于 Grafana Cloud,请将 GRAFANA_URL 替换为您的实例 URL(例如 https://myinstance.grafana.net)。有关更多安装选项,包括 Docker、二进制文件和 Helm,请参阅 使用方法

要求

  • 需要 Grafana 9.0 或更高版本 才能实现完整功能。某些功能,尤其是与数据源相关的操作,在较早版本中可能无法正常工作,因为缺少 API 端点。

功能

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

仪表板

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

运行面板查询

注意: 运行面板查询工具 默认已禁用。要启用它们,请将 runpanelquery 添加到您的 --enabled-tools 标志中。

  • 运行面板查询: 使用自定义时间范围和变量覆盖执行仪表板面板的查询。

上下文窗口管理

仪表板工具现在包含几种有效管理上下文窗口使用的方法(问题 #101):

  • 使用 get_dashboard_summary 获取仪表板概述并规划修改
  • 使用 get_dashboard_property 结合 JSONPath,仅在需要仪表板特定部分时使用
  • 避免使用 get_dashboard_by_uid,除非您确实需要完整的仪表板 JSON

数据源

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

查询示例

注意: 查询示例工具 默认已禁用。要启用它们,请将 examples 添加到您的 --enabled-tools 标志中。

  • 获取查询示例: 检索不同数据源类型的查询示例,以学习查询语法。

Prometheus 查询

  • 查询 Prometheus: 对 Prometheus 数据源执行 PromQL 查询(支持即时和范围指标查询)。
  • 查询 Prometheus 元数据: 从 Prometheus 数据源检索指标元数据、指标名称、标签名称和标签值。
  • 查询直方图百分位数: 使用 histogram_quantile 计算直方图百分位数(p50、p90、p95、p99)。

Loki 查询

  • 查询 Loki 日志和指标: 使用 LogQL 对 Loki 数据源执行日志查询和指标查询。
  • 查询 Loki 元数据: 从 Loki 数据源检索标签名称、标签值和流统计信息。
  • 查询 Loki 模式: 检索 Loki 检测到的日志模式,以识别常见的日志结构和异常。

ClickHouse 查询

注意: ClickHouse 工具 默认已禁用。要启用它们,请将 clickhouse 添加到您的 --enabled-tools 标志中。

  • 列出 ClickHouse 表: 列出 ClickHouse 数据库中的所有表,并显示行数和大小。
  • 描述表结构: 获取 ClickHouse 表的列名、类型和元数据。
  • 查询 ClickHouse: 执行 SQL 查询,支持 Grafana 宏和变量替换。

CloudWatch 查询

注意: CloudWatch 工具 默认已禁用。要启用它们,请将 cloudwatch 添加到您的 --enabled-tools 标志中。

  • 列出 CloudWatch 命名空间: 发现可用的 AWS CloudWatch 命名空间。
  • 列出 CloudWatch 指标: 列出特定命名空间中的可用指标。
  • 列出 CloudWatch 维度: 获取用于筛选指标查询的维度。
  • 查询 CloudWatch: 执行 CloudWatch 指标查询,并支持时间范围选择。

日志搜索

注意: 搜索日志工具 默认已禁用。要启用它们,请将 searchlogs 添加到您的 --enabled-tools 标志中。

  • 搜索日志: 在 ClickHouse(OTel 格式)和 Loki 数据源中进行高级日志搜索。

Elasticsearch 查询

注意: Elasticsearch 工具 默认已禁用。要启用它们,请将 elasticsearch 添加到您的 --enabled-tools 标志中。

  • 查询 Elasticsearch: 使用 Lucene 查询语法或 Elasticsearch Query DSL 对 Elasticsearch 数据源执行搜索查询。支持按时间范围过滤,并可检索日志、指标或其他已索引的数据。返回包含索引、ID、源字段以及可选相关性得分的文档。

事件

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

Sift 调查

  • 列出 Sift 调查: 检索 Sift 调查列表,并支持 limit 参数。
  • 获取 Sift 调查: 通过 UUID 检索特定 Sift 调查的详细信息。
  • 获取 Sift 分析: 从 Sift 调查中检索特定分析。
  • 查找日志中的错误模式: 使用 Sift 检测 Loki 日志中的异常错误模式。
  • 查找慢请求: 使用 Sift(Tempo)检测慢请求。

告警

  • 列出并获取告警规则信息: 在 Grafana 中查看告警规则及其状态(触发中/正常/出错等)。支持 Grafana 管理的规则以及来自 Prometheus 或 Loki 数据源的由数据源管理的规则。
  • 创建和更新告警规则: 创建新的告警规则或修改现有规则。
  • 删除告警规则: 根据 UID 删除告警规则。
  • 管理告警路由: 查看通知策略、联系点和时间间隔。支持 Grafana 管理的联系点以及来自外部 Alertmanager 数据源(Prometheus Alertmanager、Mimir、Cortex)的接收器。

Grafana OnCall

  • 列出和管理排班: 在 Grafana OnCall 中查看和管理值班排班。
  • 获取班次详情: 检索特定值班班次的详细信息。
  • 获取当前值班用户: 查看某个排班中当前正在值班的用户。
  • 列出团队和用户: 查看所有 OnCall 团队和用户。
  • 列出告警组: 根据状态、集成、标签和时间范围等多种条件,在 Grafana OnCall 中查看和筛选告警组。
  • 获取告警组详情: 根据告警组 ID 检索其详细信息。

管理员

注意: 管理员工具默认处于禁用状态。如需启用,请在 --enabled-tools 标志中包含 admin

  • 列出团队: 查看 Grafana 中所有已配置的团队。
  • 列出用户: 查看 Grafana 组织中的所有用户。
  • 列出所有角色: 列出所有 Grafana 角色,可选择性地筛选可委派的角色。
  • 获取角色详情: 根据 UID 获取特定 Grafana 角色的详细信息。
  • 列出角色的分配对象: 列出被分配给某角色的所有用户、团队和服务账户。
  • 列出用户的角色: 列出一个或多个用户所被分配的所有角色。
  • 列出团队的角色: 列出一个或多个团队所被分配的所有角色。
  • 列出资源的权限: 列出为特定资源(仪表板、数据源、文件夹等)定义的所有权限。
  • 描述 Grafana 资源: 列出某一资源类型可用的权限及分配能力。

导航

  • 生成深度链接: 为 Grafana 资源创建准确的深度链接 URL,而非依赖大语言模型猜测 URL。
    • 仪表板链接: 使用仪表板的 UID 生成直接链接(例如:http://localhost:3000/d/dashboard-uid)。
    • 面板链接: 使用 viewPanel 参数创建指向仪表板中特定面板的链接(例如:http://localhost:3000/d/dashboard-uid?viewPanel=5)。
    • Explore 链接: 生成带有预配置数据源的 Grafana Explore 链接(例如:http://localhost:3000/explore?left={"datasource":"prometheus-uid"})。
    • 时间范围支持: 可在链接中添加时间范围参数(from=now-1h&to=now)。
    • 自定义参数: 包括仪表板变量或刷新间隔等其他查询参数。

注释

  • 获取注释: 使用过滤器查询注释。支持时间范围、仪表板 UID、标签和匹配模式。
  • 创建注释: 在仪表板或面板上创建新注释。
  • 创建 Graphite 注释: 使用 Graphite 格式创建注释(内容、时间、标签、数据)。
  • 更新注释: 替换现有注释的所有字段(完全更新)。
  • 部分更新注释: 仅更新注释的特定字段(部分更新)。
  • 获取注释标签: 列出可用的注释标签,并可选择性地进行筛选。

渲染

  • 获取面板或仪表板图像: 将 Grafana 仪表板的某个面板或整个仪表板渲染为 PNG 图像。返回 Base64 编码的数据,可用于报告、告警或演示文稿中。支持自定义尺寸、时间范围、主题、缩放比例以及仪表板变量。

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

RBAC 权限

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

提示:如果您不熟悉 Grafana 的 RBAC,或者希望采用更快速简单的设置方式,而不是配置许多细粒度的范围,您可以将内置角色如“编辑者”分配给服务账户。“编辑者”角色授予广泛的读写权限,能够支持大多数 MCP 服务器操作;它不如手动应用的范围那样细粒度(因此限制性也较低),所以仅当便利性比严格的最小权限原则更重要时才使用。

注意: Grafana Incident 和 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:read teams:*teams:id:1
list_users_by_org 管理员 列出组织中的所有用户 users:read global.users:*global.users:id:123
list_all_roles 管理员 列出所有 Grafana 角色 roles:read roles:*
get_role_details 管理员 获取 Grafana 角色的详细信息 roles:read roles:uid:editor
get_role_assignments 管理员 列出某个角色的分配情况 roles:read roles:uid:editor
list_user_roles 管理员 列出用户的角色 roles:read global.users:id:123
list_team_roles 管理员 列出团队的角色 roles:read teams:id:7
get_resource_permissions 管理员 列出某个资源的权限 permissions:read dashboards:uid:abcd1234
get_resource_description 管理员 描述一个 Grafana 资源类型 permissions:read dashboards:*
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
run_panel_query RunPanelQuery* 执行一个或多个仪表板面板查询 dashboards:read, datasources:query dashboards:uid:*, datasources:uid:*
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 数据源 根据 UID 或名称获取数据源 datasources:read datasources:uid:prometheus-uid
get_query_examples 示例* 获取某种数据源类型的示例查询 datasources:read datasources:*
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
query_prometheus_histogram Prometheus 计算直方图百分位数值 datasources:query datasources:uid:prometheus-uid
list_incidents 事件 列出 Grafana Incident 中的事件 查看者角色
create_incident 事件 在 Grafana Incident 中创建事件 编辑者角色
add_activity_to_incident 事件 向 Grafana Incident 中的事件添加活动项目 编辑者角色
get_incident 事件 根据 ID 获取单个事件 查看者角色
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
query_loki_patterns Loki 查询检测到的日志模式以识别常见结构 datasources:query datasources:uid:loki-uid
list_clickhouse_tables ClickHouse* 列出 ClickHouse 数据库中的表 datasources:query datasources:uid:*
describe_clickhouse_table ClickHouse* 获取包含列类型的表结构 datasources:query datasources:uid:*
query_clickhouse ClickHouse* 执行带有宏替换的 SQL 查询 datasources:query datasources:uid:*
list_cloudwatch_namespaces CloudWatch* 列出可用的 AWS CloudWatch 命名空间 datasources:query datasources:uid:*
list_cloudwatch_metrics CloudWatch* 列出命名空间中的指标 datasources:query datasources:uid:*
list_cloudwatch_dimensions CloudWatch* 列出指标的维度 datasources:query datasources:uid:*
query_cloudwatch CloudWatch* 执行 CloudWatch 指标查询 datasources:query datasources:uid:*
search_logs SearchLogs* 在 ClickHouse 和 Loki 中跨日志进行搜索 datasources:query datasources:uid:*
query_elasticsearch Elasticsearch* 使用 Lucene 语法或 Query DSL 查询 Elasticsearch datasources:query datasources:uid:elasticsearch-uid
alerting_manage_rules 警报 管理警报规则(列出、获取、版本、创建、更新、删除) alert.rules:read + alert.rules:write 用于变更操作 folders:*folders:uid:alerts-folder
alerting_manage_routing 警报 管理通知策略、联系点和时间间隔 alert.notifications:read 全局范围
list_oncall_schedules 待命 列出 Grafana OnCall 中的排班计划 grafana-oncall-app.schedules:read 插件特定的作用域
get_oncall_shift 待命 获取特定待命班次的详细信息 grafana-oncall-app.schedules:read 插件特定的作用域
get_current_oncall_users 待命 获取当前为特定排班计划待命的用户 grafana-oncall-app.schedules:read 插件特定的作用域
list_oncall_teams 待命 列出 Grafana OnCall 中的团队 grafana-oncall-app.user-settings:read 插件特定的作用域
list_oncall_users 待命 列出 Grafana OnCall 中的用户 grafana-oncall-app.user-settings:read 插件特定的作用域
list_alert_groups 待命 列出 Grafana OnCall 中的告警组,并提供筛选选项 grafana-oncall-app.alert-groups:read 插件特定的作用域
get_alert_group 待命 根据 ID 获取 Grafana OnCall 中的特定告警组 grafana-oncall-app.alert-groups:read 插件特定的作用域
get_sift_investigation Sift 根据 UUID 检索现有的 Sift 调查 查看者角色
get_sift_analysis Sift 从 Sift 调查中检索特定分析 查看者角色
list_sift_investigations Sift 检索 Sift 调查列表,可选设置限制 查看者角色
find_error_pattern_logs Sift 在 Loki 日志中查找异常高的错误模式。 编辑者角色
find_slow_requests Sift 从相关 Tempo 数据源中查找慢请求。 编辑者角色
list_pyroscope_label_names Pyroscope 列出与选择器匹配的标签名称 datasources:query datasources:uid:pyroscope-uid
list_pyroscope_label_values Pyroscope 列出与标签名称选择器匹配的标签值 datasources:query datasources:uid:pyroscope-uid
list_pyroscope_profile_types Pyroscope 列出可用的性能剖析类型 datasources:query datasources:uid:pyroscope-uid
fetch_pyroscope_profile Pyroscope 以 DOT 格式获取性能剖析文件以便分析 datasources:query datasources:uid:pyroscope-uid
get_assertions Asserts 获取给定实体的断言摘要 插件特定的权限 插件特定的作用域
generate_deeplink 导航 为 Grafana 资源生成准确的深层链接 URL 无(仅读取 URL 的生成)
get_annotations 注释 使用过滤器获取注释 annotations:read annotations:*annotations:id:123
create_annotation 注释 创建新的注释(标准格式或 Graphite 格式) annotations:write annotations:*
update_annotation 注释 更新注释的特定字段(部分更新) annotations:write annotations:*
get_annotation_tags 注释 列出注释标签,可选进行过滤 annotations:read annotations:*
get_panel_image 渲染 将仪表板面板或整个仪表板渲染为 PNG 图像 dashboards:read dashboards:uid:abc123

* 默认禁用。将类别添加到 --enabled-tools 以启用。*

CLI 标志参考

mcp-grafana 二进制文件支持多种命令行标志来进行配置:

传输选项:

  • -t, --transport: 传输类型(stdiossestreamable-http)- 默认值:stdio
  • --address: SSE/streamable-http 服务器的主机和端口 - 默认值:localhost:8000
  • --base-path: SSE/streamable-http 服务器的基础路径
  • --endpoint-path: streamable-http 服务器的端点路径 - 默认值:/

调试与日志记录:

  • --debug: 启用调试模式,以获取详细的 HTTP 请求/响应日志
  • --log-level: 日志级别(debuginfowarnerror)- 默认值:info

可观测性:

  • --metrics: 在 /metrics 启用 Prometheus 指标端点
  • --metrics-address: 指标服务器的独立地址(例如 :9090)。如果为空,则指标将在主服务器上提供。

会话管理:

  • --session-idle-timeout-minutes: 会话空闲超时时间,单位为分钟。在此期间无活动的会话将被自动回收 - 默认值:30 分钟。设置为 0 可禁用会话回收。仅适用于 SSE 和 streamable-http 传输。

工具配置:

  • --enabled-tools: 以逗号分隔的已启用类别列表 - 默认值:除 admin 外的所有类别;若要启用管理工具,需将 admin 添加到列表中(例如 "search,datasource,...,admin"
  • --max-loki-log-limit: 每次调用 query_loki_logs 返回的最大日志行数 - 默认值:100 行。注意:此值应至少比 Loki 服务器端的 max_entries_limit_per_query 少 1,以便检测数据是否被截断(该工具内部会请求 limit+1 行,以判断是否存在更多数据)。
  • --disable-search: 禁用搜索工具
  • --disable-datasource: 禁用数据源工具
  • --disable-incident: 禁用事件工具
  • --disable-prometheus: 禁用 Prometheus 工具
  • --disable-write: 禁用写入工具(创建/更新操作)
  • --disable-loki: 禁用 Loki 工具
  • --disable-elasticsearch: 禁用 Elasticsearch 工具
  • --disable-alerting: 禁用告警工具
  • --disable-dashboard: 禁用仪表板工具
  • --disable-oncall: 禁用值班工具
  • --disable-asserts: 禁用断言工具
  • --disable-sift: 禁用 Sift 工具
  • --disable-admin: 禁用管理工具
  • --disable-pyroscope: 禁用 Pyroscope 工具
  • --disable-navigation: 禁用导航工具
  • --disable-rendering: 禁用渲染工具(面板/仪表板图像导出)
  • --disable-cloudwatch: 禁用 CloudWatch 工具
  • --disable-examples: 禁用查询示例工具
  • --disable-clickhouse: 禁用 ClickHouse 工具
  • --disable-searchlogs: 禁用 search_logs 工具
  • --disable-runpanelquery: 禁用运行面板查询工具

只读模式

--disable-write 标志提供了一种以只读模式运行 MCP 服务器的方式,从而防止对您的 Grafana 实例进行任何写入操作。这在以下场景中非常有用:

  • 使用具有有限只读权限的服务账户
  • 向 AI 助手提供可观测性数据,但不赋予其修改能力
  • 在生产环境中运行,需要限制写入访问
  • 测试和开发场景中,希望防止意外修改

当启用 --disable-write 时,以下写入操作将被禁用:

仪表板工具:

  • update_dashboard

文件夹工具:

  • create_folder

事件工具:

  • create_incident
  • add_activity_to_incident

告警工具:

  • alerting_manage_rules(创建、更新、删除操作)

注释工具:

  • create_annotation
  • update_annotation

Sift 工具:

  • find_error_pattern_logs(创建调查)
  • find_slow_requests(创建调查)

所有读取操作仍然可用,允许您查询仪表板、运行 PromQL/LogQL 查询、列出资源并检索数据。

客户端 TLS 配置(用于 Grafana 连接):

  • --tls-cert-file: 客户端身份验证的 TLS 证书文件路径
  • --tls-key-file: 客户端身份验证的 TLS 私钥文件路径
  • --tls-ca-file: 用于服务器验证的 TLS CA 证书文件路径
  • --tls-skip-verify: 跳过 TLS 证书验证(不安全)

服务器 TLS 配置(仅限 streamable-http 传输):

  • --server.tls-cert-file: 用于服务器 HTTPS 的 TLS 证书文件路径
  • --server.tls-key-file: 用于服务器 HTTPS 的 TLS 私钥文件路径

使用方法

此 MCP 服务器既可用于本地 Grafana 实例,也可用于 Grafana Cloud。对于 Grafana Cloud,请在下面的配置示例中使用您的实例 URL(例如 https://myinstance.grafana.net),而不是 http://localhost:3000

  1. 如果使用服务账户令牌认证,请在 Grafana 中创建一个具有足够权限以使用所需工具的服务账户, 生成服务账户令牌,并将其复制到剪贴板,以便在配置文件中使用。 有关创建服务账户令牌的详细信息,请参阅 Grafana 服务账户文档。 提示:如果您不熟悉配置细粒度的 RBAC 范围,一个更简单(但权限限制较少)的选择是将内置的 Editor 角色分配给服务账户。这将授予广泛的读写权限,涵盖大多数 MCP 服务器操作——当便利性高于严格的最小权限原则时,可以使用此方法。

    注意: 环境变量 GRAFANA_API_KEY 已弃用,将在未来版本中移除。请改用 GRAFANA_SERVICE_ACCOUNT_TOKEN。旧变量名将继续工作以保持向后兼容性,但会显示弃用警告。

多组织支持

您可以使用以下任一方式指定要交互的组织:

  • 环境变量:GRAFANA_ORG_ID 设置为数字形式的组织 ID
  • HTTP 头: 使用 SSE 或 streamable HTTP 传输时,设置 X-Grafana-Org-Id 头(头优先于环境变量,这意味着您可以同时设置默认组织)。

当提供组织 ID 时,MCP 服务器会在所有发送到 Grafana 的请求中设置 X-Grafana-Org-Id 头,从而确保操作在指定组织上下文中执行。

带有组织 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"
      }
    }
  }
}

自定义 HTTP 头

你可以使用 GRAFANA_EXTRA_HEADERS 环境变量为所有 Grafana API 请求添加任意 HTTP 头。该值应为一个 JSON 对象,将头名称映射到对应的值。

带有自定义头的示例:

{
  "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\"}"
      }
    }
  }
}
  1. 您有多种方式可以安装 mcp-grafana

    • uvx(推荐):如果您已安装 uv,则无需额外设置——uvx 会自动下载并运行服务器:

      uvx mcp-grafana
      
    • Docker 镜像:使用 Docker Hub 上的预构建 Docker 镜像。

      重要提示:Docker 镜像的入口点默认配置为以 SSE 模式运行 MCP 服务器,但大多数用户希望使用 STDIO 模式,以便与 Claude Desktop 等 AI 助手直接集成:

      1. STDIO 模式:对于 stdio 模式,您必须显式地通过 -t stdio 覆盖默认设置,并包含 -i 标志以保持标准输入打开:
      docker pull grafana/mcp-grafana
      # 对于本地 Grafana:
      docker run --rm -i -e GRAFANA_URL=http://localhost:3000 -e GRAFANA_SERVICE_ACCOUNT_TOKEN=<your service account token> grafana/mcp-grafana -t stdio
      # 对于 Grafana Cloud:
      docker run --rm -i -e GRAFANA_URL=https://myinstance.grafana.net -e GRAFANA_SERVICE_ACCOUNT_TOKEN=<your service account token> grafana/mcp-grafana -t stdio
      
      1. SSE 模式:在此模式下,服务器作为客户端连接的 HTTP 服务器运行。您必须使用 -p 标志暴露 8000 端口:
      docker pull grafana/mcp-grafana
      docker run --rm -p 8000:8000 -e GRAFANA_URL=http://localhost:3000 -e GRAFANA_SERVICE_ACCOUNT_TOKEN=<your service account token> grafana/mcp-grafana
      
      1. 可流式 HTTP 模式:在此模式下,服务器作为一个独立进程运行,可以处理多个客户端连接。您必须使用 -p 标志暴露 8000 端口:对于此模式,您必须显式地通过 -t streamable-http 覆盖默认设置。
      docker pull grafana/mcp-grafana
      docker run --rm -p 8000:8000 -e GRAFANA_URL=http://localhost:3000 -e GRAFANA_SERVICE_ACCOUNT_TOKEN=<your service account token> grafana/mcp-grafana -t streamable-http
      

      对于带有服务器 TLS 证书的 HTTPS 可流式 HTTP 模式:

      docker pull grafana/mcp-grafana
      docker run --rm -p 8443:8443 \
        -v /path/to/certs:/certs:ro \
        -e GRAFANA_URL=http://localhost:3000 \
        -e GRAFANA_SERVICE_ACCOUNT_TOKEN=<your service account token> \
        grafana/mcp-grafana \
        -t streamable-http \
        -addr :8443 \
        --server.tls-cert-file /certs/server.crt \
        --server.tls-key-file /certs/server.key
      
    • 下载二进制文件:从 releases 页面下载最新版本的 mcp-grafana,并将其放置在您的 $PATH 中。

    • 从源代码构建:如果您已安装 Go 工具链,也可以从源代码构建并安装,使用 GOBIN 环境变量指定二进制文件应安装的目录。该目录也应位于您的 PATH 中。

      GOBIN="$HOME/go/bin" go install github.com/grafana/mcp-grafana/cmd/mcp-grafana@latest
      
    • 使用 Helm 部署到 Kubernetes:使用 Grafana helm-charts 仓库中的 Helm 图表

      helm repo add grafana https://grafana.github.io/helm-charts
      helm install --set grafana.apiKey=<Grafana_ApiKey> --set grafana.url=<GrafanaUrl> my-release grafana/grafana-mcp
      
  2. 将服务器配置添加到您的客户端配置文件中。例如,对于 Claude Desktop:

    如果使用 uvx:

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

    如果使用二进制文件:

    {
      "mcpServers": {
        "grafana": {
          "command": "mcp-grafana",
          "args": [],
          "env": {
            "GRAFANA_URL": "http://localhost:3000",  // 或者对于 Grafana Cloud 使用 "https://myinstance.grafana.net"
            "GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your service account token>",
            // 如果使用用户名/密码认证
            "GRAFANA_USERNAME": "<your username>",
            "GRAFANA_PASSWORD": "<your password>",
            // 可选:指定组织 ID 以支持多组织
            "GRAFANA_ORG_ID": "1"
          }
        }
      }
    }
    

    注意:如果您在 Claude Desktop 中看到 Error: spawn mcp-grafana ENOENT,则需要指定 mcp-grafana 的完整路径。

    如果使用 Docker:

    {
      "mcpServers": {
        "grafana": {
          "command": "docker",
          "args": [
            "run",
            "--rm",
            "-i",
            "-e",
            "GRAFANA_URL",
            "-e",
            "GRAFANA_SERVICE_ACCOUNT_TOKEN",
            "grafana/mcp-grafana",
            "-t",
            "stdio"
          ],
          "env": {
            "GRAFANA_URL": "http://localhost:3000",  // 或者对于 Grafana Cloud 使用 "https://myinstance.grafana.net"
            "GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your service account token>",
            // 如果使用用户名/密码认证
            "GRAFANA_USERNAME": "<your username>",
            "GRAFANA_PASSWORD": "<your password>",
            // 可选:指定组织 ID 以支持多组织
            "GRAFANA_ORG_ID": "1"
          }
        }
      }
    }
    

    注意:这里的 -t stdio 参数至关重要,因为它覆盖了 Docker 镜像中的默认 SSE 模式。

    使用 VSCode 和远程 MCP 服务器

    如果您正在使用 VSCode 并且以 SSE 模式运行 MCP 服务器(这是在不覆盖传输方式的情况下使用 Docker 镜像时的默认设置),请确保您的 .vscode/settings.json 包含以下内容:

    "mcp": {
      "servers": {
        "grafana": {
          "type": "sse",
          "url": "http://localhost:8000/sse"
        }
      }
    }
    

    对于带有服务器 TLS 证书的 HTTPS 可流式 HTTP 模式:

    "mcp": {
      "servers": {
        "grafana": {
          "type": "sse",
          "url": "https://localhost:8443/sse"
        }
      }
    }
    

调试模式

您可以通过在命令中添加 -debug 标志来启用 Grafana 传输的调试模式。这将提供 MCP 服务器与 Grafana API 之间 HTTP 请求和响应的详细日志记录,有助于故障排除。

要将调试模式与 Claude Desktop 配置一起使用,请按如下方式更新您的配置:

如果使用二进制文件:

{
  "mcpServers": {
    "grafana": {
      "command": "mcp-grafana",
      "args": ["-debug"],
      "env": {
        "GRAFANA_URL": "http://localhost:3000",  // 或者对于 Grafana Cloud 使用 "https://myinstance.grafana.net"
        "GRAFANA_SERVICE_ACCOUNT_TOKEN": "<您的服务账户令牌>"
      }
    }
  }
}

如果使用 Docker:

{
  "mcpServers": {
    "grafana": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "GRAFANA_URL",
        "-e",
        "GRAFANA_SERVICE_ACCOUNT_TOKEN",
        "grafana/mcp-grafana",
        "-t",
        "stdio",
        "-debug"
      ],
      "env": {
        "GRAFANA_URL": "http://localhost:3000",  // 或者对于 Grafana Cloud 使用 "https://myinstance.grafana.net"
        "GRAFANA_SERVICE_ACCOUNT_TOKEN": "<您的服务账户令牌>"
      }
    }
  }
}

注意:与标准配置相同,-t stdio 参数是必需的,用于覆盖 Docker 镜像中的默认 SSE 模式。

TLS 配置

如果您的 Grafana 实例位于 mTLS 之后,或者需要自定义 TLS 证书,您可以配置 MCP 服务器以使用自定义证书。该服务器支持以下 TLS 配置选项:

  • --tls-cert-file:用于客户端身份验证的 TLS 证书文件路径
  • --tls-key-file:用于客户端身份验证的 TLS 私钥文件路径
  • --tls-ca-file:用于服务器验证的 TLS CA 证书文件路径
  • --tls-skip-verify:跳过 TLS 证书验证(不安全,仅用于测试)

使用客户端证书身份验证的示例:

{
  "mcpServers": {
    "grafana": {
      "command": "mcp-grafana",
      "args": [
        "--tls-cert-file",
        "/path/to/client.crt",
        "--tls-key-file",
        "/path/to/client.key",
        "--tls-ca-file",
        "/path/to/ca.crt"
      ],
      "env": {
        "GRAFANA_URL": "https://secure-grafana.example.com",
        "GRAFANA_SERVICE_ACCOUNT_TOKEN": "<您的服务账户令牌>"
      }
    }
  }
}

Docker 示例:

{
  "mcpServers": {
    "grafana": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-v",
        "/path/to/certs:/certs:ro",
        "-e",
        "GRAFANA_URL",
        "-e",
        "GRAFANA_SERVICE_ACCOUNT_TOKEN",
        "grafana/mcp-grafana",
        "-t",
        "stdio",
        "--tls-cert-file",
        "/certs/client.crt",
        "--tls-key-file",
        "/certs/client.key",
        "--tls-ca-file",
        "/certs/ca.crt"
      ],
      "env": {
        "GRAFANA_URL": "https://secure-grafana.example.com",
        "GRAFANA_SERVICE_ACCOUNT_TOKEN": "<您的服务账户令牌>"
      }
    }
  }
}

TLS 配置会应用于 MCP 服务器使用的所有 HTTP 客户端,包括:

  • 主 Grafana OpenAPI 客户端
  • Prometheus 数据源客户端
  • Loki 数据源客户端
  • 事件管理客户端
  • Sift 调查客户端
  • 告警客户端
  • Asserts 客户端

直接 CLI 使用示例:

对于使用自签名证书进行测试:

./mcp-grafana --tls-skip-verify -debug

使用客户端证书身份验证:

./mcp-grafana \
  --tls-cert-file /path/to/client.crt \
  --tls-key-file /path/to/client.key \
  --tls-ca-file /path/to/ca.crt \
  -debug

仅使用自定义 CA 证书:

./mcp-grafana --tls-ca-file /path/to/ca.crt

程序化使用:

如果您以编程方式使用此库,也可以创建支持 TLS 的上下文函数:

// 使用结构体字面量
tlsConfig := &mcpgrafana.TLSConfig{
    CertFile: "/path/to/client.crt",
    KeyFile:  "/path/to/client.key",
    CAFile:   "/path/to/ca.crt",
}
grafanaConfig := mcpgrafana.GrafanaConfig{
    Debug:     true,
    TLSConfig: tlsConfig,
}
contextFunc := mcpgrafana.ComposedStdioContextFunc(grafanaConfig)

// 或者内联
grafanaConfig := mcpgrafana.GrafanaConfig{
    Debug: true,
    TLSConfig: &mcpgrafana.TLSConfig{
        CertFile: "/path/to/client.crt",
        KeyFile:  "/path/to/client.key",
        CAFile:   "/path/to/ca.crt",
    },
}
contextFunc := mcpgrafana.ComposedStdioContextFunc(grafanaConfig)

服务器 TLS 配置(仅限可流式传输的 HTTP 传输)

当使用可流式传输的 HTTP 传输(-t streamable-http)时,您可以配置 MCP 服务器以提供 HTTPS 而不是 HTTP。这在需要保护 MCP 客户端与服务器之间连接的安全性时非常有用。

服务器支持以下 TLS 配置选项,用于可流式传输的 HTTP 传输:

  • --server.tls-cert-file:用于服务器 HTTPS 的 TLS 证书文件路径(启用 TLS 所需)
  • --server.tls-key-file:用于服务器 HTTPS 的 TLS 私钥文件路径(启用 TLS 所需)

注意:这些标志与上述文档中描述的客户端 TLS 标志完全分开。客户端 TLS 标志配置的是 MCP 服务器如何连接到 Grafana,而这些服务器 TLS 标志则配置的是客户端在使用可流式传输的 HTTP 传输时如何连接到 MCP 服务器。

使用 HTTPS 可流式传输 HTTP 服务器的示例:

./mcp-grafana \
  -t streamable-http \
  --server.tls-cert-file /path/to/server.crt \
  --server.tls-key-file /path/to/server.key \
  -addr :8443

这将在 HTTPS 端口 8443 上启动 MCP 服务器。客户端将连接到 https://localhost:8443/,而不是 http://localhost:8000/

带有服务器 TLS 的 Docker 示例:

docker run --rm -p 8443:8443 \
  -v /path/to/certs:/certs:ro \
  -e GRAFANA_URL=http://localhost:3000 \
  -e GRAFANA_SERVICE_ACCOUNT_TOKEN=<您的服务账户令牌> \
  grafana/mcp-grafana \
  -t streamable-http \
  -addr :8443 \
  --server.tls-cert-file /certs/server.crt \
  --server.tls-key-file /certs/server.key

健康检查端点

当使用 SSE(-t sse)或可流式传输的 HTTP(-t streamable-http)传输时,MCP 服务器会在 /healthz 上暴露一个健康检查端点。负载均衡器、监控系统或编排平台可以使用此端点来验证服务器是否正在运行并接受连接。

端点: GET /healthz

响应:

  • 状态码:200 OK
  • 正文:ok

使用示例:

# 对于默认端口上的可流式传输 HTTP 或 SSE 传输
curl http://localhost:8000/healthz

# 使用自定义地址
curl http://localhost:9090/healthz

注意: 健康检查端点仅在使用 SSE 或可流式传输的 HTTP 传输时可用。当使用 stdio 传输(-t stdio)时,它不可用,因为 stdio 不会暴露 HTTP 服务器。

可观测性

MCP 服务器支持 Prometheus 指标和 OpenTelemetry 分布式追踪,遵循 OTel MCP 语义约定

指标

当使用 SSE 或可流式 HTTP 传输时,可通过 --metrics 标志启用 Prometheus 指标:

# 在主服务器的 /metrics 路径上提供指标
./mcp-grafana -t streamable-http --metrics

# 在独立地址上提供指标
./mcp-grafana -t streamable-http --metrics --metrics-address :9090

可用指标:

指标 类型 描述
mcp_server_operation_duration_seconds 直方图 MCP 操作持续时间(标签:mcp_method_name, gen_ai_tool_name, error_type, network_transport, mcp_protocol_version
mcp_server_session_duration_seconds 直方图 MCP 客户端会话持续时间(标签:network_transport, mcp_protocol_version
http_server_request_duration_seconds 直方图 HTTP 服务器请求持续时间(来自 otelhttp)

注意: 指标仅在使用 SSE 或可流式 HTTP 传输时可用。它们在使用 stdio 传输时不可用。

追踪

分布式追踪通过标准的 OTEL_* 环境变量进行配置,并且与 --metrics 标志无关。当设置了 OTEL_EXPORTER_OTLP_ENDPOINT 时,服务器会通过 OTLP/gRPC 导出追踪数据:

# 将追踪数据发送到本地 Tempo 实例
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 \
OTEL_EXPORTER_OTLP_INSECURE=true \
./mcp-grafana -t streamable-http

# 将追踪数据发送到 Grafana Cloud 并进行身份验证
OTEL_EXPORTER_OTLP_ENDPOINT=https://tempo-us-central1.grafana.net:443 \
OTEL_EXPORTER_OTLP_HEADERS="Authorization=Basic ..." \
./mcp-grafana -t streamable-http

工具调用跨度遵循 semconv 命名规范(tools/call <tool_name>),并包含诸如 gen_ai.tool.name, mcp.method.namemcp.session.id 等属性。服务器还支持从工具调用请求的 _meta 字段中传播 W3C 追踪上下文。

带有指标和追踪功能的 Docker 示例:

docker run --rm -p 8000:8000 \
  -e GRAFANA_URL=http://localhost:3000 \
  -e GRAFANA_SERVICE_ACCOUNT_TOKEN=<your token> \
  -e OTEL_EXPORTER_OTLP_ENDPOINT=http://tempo:4317 \
  -e OTEL_EXPORTER_OTLP_INSECURE=true \
  grafana/mcp-grafana \
  -t streamable-http --metrics

故障排除

Grafana 版本兼容性

如果您在使用与数据源相关的工具时遇到以下错误:

get datasource by uid : [GET /datasources/uid/{uid}][400] getDataSourceByUidBadRequest {"message":"id is invalid"}

这通常表明您使用的 Grafana 版本早于 9.0。/datasources/uid/{uid} API 端点是在 Grafana 9.0 中引入的,在较早版本上执行数据源操作将会失败。

解决方案: 将您的 Grafana 实例升级到 9.0 或更高版本以解决此问题。

开发

欢迎贡献!如果您有任何建议或改进,请随时提交问题或拉取请求。

该项目使用 Go 编写。请按照适用于您平台的说明安装 Go。

要在本地以 STDIO 模式运行服务器(这是本地开发的默认模式),请使用:

make run

要在本地以 SSE 模式运行服务器,请使用:

go run ./cmd/mcp-grafana --transport sse

您还可以使用自定义构建的 Docker 镜像以 SSE 传输方式运行服务器。与发布的 Docker 镜像一样,该自定义镜像的入口点默认为 SSE 模式。要构建镜像,请使用:

make build-image

然后以 SSE 模式(默认)运行镜像:

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

如果您需要改为以 STDIO 模式运行,则可以覆盖传输设置:

docker run -it --rm mcp-grafana:latest -t stdio

测试

有三种类型的测试可供使用:

  1. 单元测试(无需外部依赖):
make test-unit

您也可以通过以下命令运行单元测试:

make test
  1. 集成测试(需要运行中的 Docker 容器):
make test-integration
  1. 云测试(需要云端 Grafana 实例和凭据):
make test-cloud

注意:云测试会在 CI 中自动配置。对于本地开发,您需要自行设置 Grafana Cloud 实例和凭据。

更全面的集成测试需要在本地 3000 端口上运行一个 Grafana 实例;您可以使用 Docker Compose 启动它:

docker-compose up -d

集成测试可以通过以下命令运行:

make test-all

如果您正在添加更多工具,请为它们添加集成测试。现有的测试应该是一个很好的起点。

代码检查

要对代码进行检查,请运行:

make lint

这包括一个自定义 linter,用于检查 jsonschema 结构体标签中未转义的逗号。description 字段中的逗号必须用 \\, 转义,以防止静默截断。您也可以单独运行此 linter:

make lint-jsonschema

有关详细信息,请参阅 JSONSchema Linter 文档

许可证

本项目采用 Apache License, Version 2.0 许可。

版本历史

v0.11.42026/04/02
v0.11.32026/03/12
v0.11.22026/02/25
v0.11.12026/02/24
v0.11.02026/02/19
v0.10.02026/02/12
v0.9.02026/01/28
v0.8.22026/01/14
v0.8.12026/01/14
v0.8.02026/01/14
v0.7.102025/12/03
v0.7.92025/11/14
v0.7.82025/10/21
v0.7.7-rc.32025/10/15
v0.7.7-rc.22025/10/15
v0.7.7-rc.12025/10/15
v0.7.62025/10/15
v0.7.52025/10/15
v0.7.42025/10/15
v0.7.32025/10/10

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|2天前
Agent图像开发框架