使用说明

项目简介

gospy 是一个用于检查和分析运行中 Go 进程的工具,它提供了终端UI和HTTP API,用于查看 goroutine 状态、内存统计信息和二进制文件信息。通过启用 MCP 服务器模式,gospy 可以将部分功能以标准化的 MCP 协议通过 SSE (Server-Sent Events) 接口暴露出来,使得支持 MCP 协议的 LLM 客户端能够方便地调用 gospy 提供的工具来获取 Go 进程的上下文信息。

主要功能点

  • 资源 (Resources): gospy MCP 服务器本身不直接管理资源,但它通过工具提供对目标 Go 进程运行时信息的访问能力,可以看作是对运行中 Go 进程的动态“资源”的访问入口。
  • 工具 (Tools): gospy MCP 服务器注册并提供了以下工具,LLM 客户端可以调用这些工具来获取信息:
    • 'goroutines': 获取目标 Go 进程的所有 goroutine 列表,包括状态、堆栈信息等。
    • 'gomemstats': 获取目标 Go 进程的内存统计信息,例如堆内存使用情况、GC 统计等。
    • 'goruntime': 获取目标 Go 进程的 Go 运行时版本信息和启动时间等。
    • 'pgrep': 通过进程名查找进程 ID (PID),方便根据进程名称定位目标 Go 进程。
  • Prompt 模板 (Prompts): gospy MCP 服务器本身不直接提供 Prompt 模板功能。它专注于提供结构化的进程信息,LLM 客户端可以根据自身需求,利用这些信息构建 Prompt 以实现更高级的交互和分析。

安装步骤

  1. 安装 gospy: 确保已安装 Go 语言环境 (Go 1.20+)。打开终端并执行以下命令安装 gospy 工具:

    go install github.com/monsterxx03/gospy@latest

    安装成功后,'gospy' 命令应该在您的 '$GOPATH/bin' 目录下。请确保该目录已添加到系统的 'PATH' 环境变量中。

  2. 运行 MCP 服务器: 在安装 gospy 的机器上,打开终端并使用 'sudo' 权限运行 'gospy serve' 命令,并启用 MCP 模式 '--enable-mcp',同时可以指定服务器端口 '--port' (默认为 8974)。例如,使用 8974 端口启动 MCP 服务器的命令如下:

    sudo gospy serve --enable-mcp --port 8974

    启动成功后,终端会显示 API 服务器的地址和 MCP SSE endpoint 地址 ('/mcp/sse')。请记录 MCP SSE endpoint 地址,LLM 客户端需要配置此地址才能连接到 gospy MCP 服务器。

服务器配置

以下为 MCP 客户端连接 gospy MCP 服务器所需的配置信息 (JSON 格式)。请根据实际情况修改 'command' 和 'args' 字段,确保命令能够正确启动 gospy MCP 服务器。

{
  "serverName": "gospy-mcp-server",
  "command": "sudo",
  "args": [
    "gospy",
    "serve",
    "--enable-mcp",
    "--port",
    "8974"
  ],
  "transport": "sse",
  "baseUrl": "http://localhost:8974/mcp"
}

配置参数说明:

  • 'serverName': MCP 服务器的名称,可以自定义。
  • 'command': 启动 MCP 服务器的命令,这里使用 'sudo' 确保 gospy 具有 root 权限 (gospy 运行需要 root 权限来访问进程内存)。
  • 'args': 启动命令的参数列表:
    • '"gospy"': 执行 gospy 工具。
    • '"serve"': 指定运行 gospy 的 serve (API 服务器) 模式。
    • '"--enable-mcp"': 启用 MCP 服务器模式。
    • '"--port"': 指定 MCP 服务器监听的端口,与启动命令保持一致。
  • 'transport': 指定 MCP 通信协议为 SSE (Server-Sent Events)。
  • 'baseUrl': MCP 服务器的根 URL,LLM 客户端将基于此 URL 构建完整的 MCP SSE endpoint 地址。请确保端口和路径与 gospy 服务器启动时显示的信息一致。

注意:

  • gospy 需要 root 权限才能访问目标进程的内存,因此启动 'gospy serve' 命令时需要使用 'sudo'。
  • MCP 客户端需要配置正确的 'baseUrl' 和 'transport' 才能与 gospy MCP 服务器建立连接。

基本使用方法

  1. 启动 gospy MCP 服务器 (参考 "服务器配置" 部分)。

  2. 配置 MCP 客户端: 在 LLM 客户端中,按照其 MCP 配置说明,填入上述 JSON 格式的服务器配置信息。

  3. 调用 MCP 工具: 在 LLM 客户端中,可以使用 MCP 协议的标准方式调用 gospy 提供的工具,例如:

    • 调用 'goroutines' 工具并指定 'pid' 参数,可以获取指定 Go 进程的 goroutine 信息。
    • 调用 'gomemstats' 工具并指定 'pid' 参数,可以获取指定 Go 进程的内存统计信息。
    • 调用 'goruntime' 工具并指定 'pid' 参数,可以获取指定 Go 进程的运行时信息。
    • 调用 'pgrep' 工具并指定 'name' 参数,可以根据进程名称获取进程 ID 列表。

    具体的工具调用方式和参数传递方法,请参考您使用的 LLM 客户端的 MCP 协议文档。

示例 (假设使用 curl 模拟 MCP 客户端调用 goroutines 工具):

首先,确保 gospy MCP 服务器已在 8974 端口启动。然后,假设要监控 PID 为 '12345' 的 Go 进程,可以使用 curl 发送 MCP JSON-RPC 请求到 '/mcp/sse' endpoint (实际客户端通常会自动处理 SSE 连接和消息格式):

curl -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "method": "call_tool", "params": {"tool_name": "goroutines", "arguments": {"pid": 12345}}, "id": 1}' http://localhost:8974/mcp/sse

服务器会返回 JSON-RPC 响应,其中 'result' 字段包含了 'goroutines' 工具执行的结果 (JSON 格式的 goroutine 信息)。

请注意,以上 'curl' 命令仅为演示 MCP 工具调用方式,实际的 LLM 客户端通常会使用更完善的 MCP 客户端库来处理连接、请求和响应。

信息

分类

开发者工具