Gopls:Model Context Protocol 支持

Gopls 包含一个实验性的内置服务器,支持 Model Context Protocol (MCP),允许它以 MCP 工具的形式将部分功能暴露给 AI 助手。

运行 MCP 服务器

此服务器有两种运行模式:“attached”和“detached”。在 attached 模式下,MCP 服务器在活动 gopls LSP 会话的上下文中运行,因此能够与您的 LSP 会话共享内存并观察当前未保存的缓冲区状态。在 detached 模式下,gopls 与无头 LSP 会话交互,因此只能看到磁盘上的已保存文件。

Attached 模式

要使用“attached”模式,请使用 -mcp.listen 标志运行 gopls。例如:

gopls serve -mcp.listen=localhost:8092

这会公开一个基于 HTTP 的 MCP 服务器,使用服务器发送事件传输 (SSE),可在 https://:8092/sessions/1 访问(假设您的 gopls 实例只有一个 会话)。

Detached 模式

要使用“detached”模式,请运行 mcp 子命令:

gopls mcp

这将运行一个独立的 gopls 实例,通过 stdin/stdout 使用 MCP。

对模型的说明

此 gopls MCP 服务器包含其使用说明,描述了使用可用工具与 Go 代码交互的工作流程。这些说明在 MCP 服务器初始化期间自动发布,但您可能也希望在 AI 辅助会话中将它们加载为额外上下文,以强调其重要性。-instructions 标志会导致它们被打印出来,以便您可以执行,例如:

gopls mcp -instructions > /path/to/contextFile.md

安全注意事项

gopls MCP 服务器是 gopls 通常通过语言服务器协议 (LSP) 暴露的功能的包装器。因此,gopls 的工具可以执行 gopls 通常执行的任何操作,包括:

  • 从文件系统读取文件,并在工具结果中返回其内容(例如,在提供上下文时);
  • 执行 go 命令来加载包信息,这可能会导致调用 https://proxy.golang.org 来下载 Go 模块,并写入 Go 缓存;
  • 写入 gopls 的缓存或持久化配置文件;以及
  • 如果您已选择加入 Go 遥测,则上传每周的遥测数据。

gopls MCP 服务器不执行任何普通 IDE 会话中 gopls 未执行过的操作。与大多数 LSP 服务器一样,gopls 通常不会直接写入您的源代码树,尽管它可能会指示客户端应用编辑。它也不会通过网络发出任意请求,尽管它可能会向某些服务(如 Go 模块镜像或 Go 漏洞数据库)发出范围受限的请求,这些服务不容易被混淆的代理用作数据泄露的载体。尽管如此,这些功能在使用 AI 驱动的系统时可能需要额外的考虑。


本文档的源代码可以在 golang.org/x/tools/gopls/doc 下找到。