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 下找到。