使用说明
项目简介
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 以实现更高级的交互和分析。
安装步骤
-
安装 gospy: 确保已安装 Go 语言环境 (Go 1.20+)。打开终端并执行以下命令安装 gospy 工具:
go install github.com/monsterxx03/gospy@latest安装成功后,'gospy' 命令应该在您的 '$GOPATH/bin' 目录下。请确保该目录已添加到系统的 'PATH' 环境变量中。
-
运行 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 服务器建立连接。
基本使用方法
-
启动 gospy MCP 服务器 (参考 "服务器配置" 部分)。
-
配置 MCP 客户端: 在 LLM 客户端中,按照其 MCP 配置说明,填入上述 JSON 格式的服务器配置信息。
-
调用 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 客户端库来处理连接、请求和响应。
信息
分类
开发者工具