Ask O11y MCP 服务端实现

使用说明(Markdown 格式)

  • 项目简介

    • 该仓库实现一个基于 Model Context Protocol(MCP)的后端服务器,内置于 Grafana 插件中,提供对资源、工具、以及提示模板的标准化管理与渲染能力,并通过 JSON-RPC 与 LLM 客户端进行交互。服务器支持对 Grafana 的 RBAC、会话管理、以及多租户隔离,覆盖常见的观测/运维工作流。
  • 主要功能点

    • MCP 核心通信:实现 MCP 的请求处理与响应,支持 initialize、tools/list、tools/call 等标准操作,以及返回符合 MCP 结构的 JSON-RPC 响应。
    • 服务器聚合与工具注册:具备 Proxy 来聚合多个 MCP 服务器,能动态发现并调用外部工具,提供工具列表并执行工具调用。
    • 工具类型与传输类型:支持多种传输类型(如 SSE、Streamable HTTP、STDI0 等),并对不同服务器配置进行适配。
    • RBAC 与 多租户:对 Grafana 用户角色进行工具访问限制,按角色过滤可用工具,并实现跨租户的会话、日志、以及资源隔离。
    • 会话与分享:内置会话管理、持久化(Redis 或内存实现)、历史记录、以及分享功能(包含过期策略、只读访问等)。
    • 安全与健壮性:对输入进行校验,提供健康监控、示例化测试、以及错误处理策略。
    • Grafana 集成:与 Grafana 的 LLM 插件、UserStorage、以及 UI 进行深度结合,提供可扩展的后端服务。
  • 安装与运行

    1. Grafana 安装与插件加载
      • 安装并配置 Grafana 12.1.1 及以上版本,确保 Grafana LLM 插件可用。
      • 将本仓库所属插件安装到 Grafana 插件目录,并在 Grafana UI 中启用 Ask O11y 插件。
    2. MCP 服务端访问
      • 插件作为后端 MCP 服务提供 /mcp 接口,以及诸如 /api/mcp/tools、/api/mcp/call-tool、/api/mcp/servers 等 REST 风格入口,供 MCP 客户端通过 JSON-RPC 进行调用。
    3. 服务器配置(示例性客户端配置)
      • MCP 客户端需要配置 MCP 服务器的启动信息以建立连接。下面是示意性的 JSON 配置描述,实际使用时请按 MCP 客户端所需格式调整。
      • 配置包含服务器名称、启动命令与参数(command、args),用于 MCP 客户端在运行时来连接 MCP 服务器。
      • 示例(仅用于客户端配置说明,不是服务器端代码): { "servers": [ { "name": "AskO11y-Grafana-MCP", "command": "grafana", "args": [ "--start-mcp-server", "--mcp-endpoint=http://localhost:3000/mcp", "--transport=streamable-http" ], "enabled": true } ] }
      • 说明:上述配置用于客户机在启动时指定 MCP 服务器的信息,实际服务器端(本仓库实现)在 Grafana 插件内提供 /mcp 等端点。请根据你们的运行环境将 MCP 端点地址替换为实际可访问的地址,确保网络可达。
    4. 基本使用方法
      • 通过 MCP 客户端与服务器建立连接后,可以发送 MCP 请求(如 initialize、tools/list、tools/call)来获取服务器能力、工具清单以及执行工具。
      • 配置 RBAC、会话管理与多租户后,在不同 Grafana 用户与组织下进行资源访问与工具调用,确保权限隔离。
  • 基本使用场景

    • 启动并注册 MCP 服务器后,LLM 客户端会通过 MCP 协议请求获取工具清单并执行工具调用,或通过代理聚合多家 MCP 服务器以实现统一的工具入口。
    • 通过 Redis 或内存存储实现会话分享、历史记录与多租户隔离。
  • 重要注意事项

    • MCP 服务器是由 Grafana 插件提供的后端实现,客户端与服务器间通过 JSON-RPC 进行通信,服务器端需要暴露相应的 MCP 路径与端点。
    • 若在生产环境使用多实例部署,请确保 Redis 集群与 Grafana UserStorage 的可用性,以实现会话共享与多租户隔离。

服务器信息