Gopls: モデルコンテキストプロトコルサポート

Goplsには、モデルコンテキストプロトコル (MCP) の実験的な組み込みサーバーが含まれており、AIアシスタントにその機能の一部をMCPツールの形式で公開することができます。

MCPサーバーの実行

このサーバーの実行には、「アタッチド」と「デタッチド」の2つのモードがあります。アタッチドモードでは、MCPサーバーはアクティブなgopls LSPセッションのコンテキストで動作するため、LSPセッションとメモリを共有し、現在の未保存バッファの状態を監視することができます。デタッチドモードでは、goplsはヘッドレスなLSPセッションと対話し、そのためディスクに保存されたファイルのみを認識します。

アタッチドモード

「アタッチド」モードを使用するには、-mcp.listenフラグを指定してgoplsを実行します。例:

gopls serve -mcp.listen=localhost:8092

これにより、サーバー送信イベントトランスポート (SSE) を使用するHTTPベースのMCPサーバーが公開され、https://:8092/sessions/1 で利用可能になります (goplsインスタンスにセッションが1つしかない場合)。

デタッチドモード

「デタッチド」モードを使用するには、mcpサブコマンドを実行します。

gopls mcp

これにより、stdin/stdout経由でMCPを話すスタンドアロンのgoplsインスタンスが実行されます。

モデルへの指示

このgopls MCPサーバーには、その使用方法に関するモデルの指示が含まれており、利用可能なツールを使用してGoコードと対話するためのワークフローを記述しています。これらの指示はMCPサーバーの初期化中に自動的に公開されますが、その重要性を強調するために、AIアシストセッションで追加のコンテキストとして読み込むこともできます。-instructionsフラグを使用するとそれらが出力されるため、例えば次のように実行できます。

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

セキュリティに関する考慮事項

gopls MCPサーバーは、goplsが通常Language Server Protocol (LSP) を介して公開する機能のラッパーです。そのため、goplsのツールは、goplsが通常実行する任意の操作を実行する可能性があります。これには以下が含まれます。

  • ファイルシステムからファイルを読み取り、その内容をツール結果として返すこと (コンテキストを提供する際など)。
  • パッケージ情報をロードするためにgoコマンドを実行すること。これにより、Goモジュールをダウンロードするためにhttps://proxy.golang.orgへの呼び出しが発生したり、goキャッシュへの書き込みが発生したりする場合があります。
  • goplsのキャッシュまたは永続的な設定ファイルへの書き込み。
  • Goテレメトリーに**オプトインしている場合**、週次テレメトリーデータをアップロードすること。

gopls MCPサーバーは、通常のIDEセッションでgoplsによってすでに実行されている操作以外の操作は実行しません。ほとんどのLSPサーバーと同様に、goplsは通常ソースツリーに直接書き込むことはありませんが、クライアントに編集を適用するように指示することはあります。また、ネットワーク経由で任意の要求を行うこともありませんが、GoモジュールミラーやGo脆弱性データベースなど、特定のサービスに対して狭い範囲の要求を行うことがあります。これらは、混乱したエージェントによるデータ漏洩の手段として容易に悪用できるものではありません。それでも、これらの機能は、AI対応システムの一部として使用される場合、追加の考慮が必要となる場合があります。


このドキュメントのソースファイルは、golang.org/x/tools/gopls/doc の下にあります。