Gopls: Поддержка Model Context Protocol

Gopls включает экспериментальный встроенный сервер для Model Context Protocol (MCP), что позволяет предоставлять подмножество своей функциональности ИИ-ассистентам в виде MCP-инструментов.

Запуск MCP-сервера

Существует два режима запуска этого сервера: «прикреплённый» (attached) и «откреплённый» (detached). В прикреплённом режиме MCP-сервер работает в контексте активной сессии gopls LSP и, таким образом, может обмениваться памятью с вашей сессией LSP и отслеживать текущее состояние несохранённого буфера. В откреплённом режиме gopls взаимодействует с headless (без интерфейса) сессией LSP, и, соответственно, видит только сохранённые файлы на диске.

Прикреплённый режим

Чтобы использовать «прикреплённый» режим, запустите gopls с флагом -mcp.listen. Например:

<code>gopls serve -mcp.listen=localhost:8092
</code>

Это запускает HTTP-основанный MCP-сервер с использованием транспорта server-sent events (SSE), доступный по адресу http://localhost:8092/sessions/1 (при условии, что у вас только одна сессия в вашем экземпляре gopls).

Откреплённый режим

Чтобы использовать «откреплённый» режим, запустите подкоманду mcp:

<code>gopls mcp
</code>

Это запускает независимый экземпляр gopls, который общается с помощью MCP через stdin/stdout.

Инструкции для модели

Этот MCP-сервер gopls включает в себя инструкции для модели, описывающие рабочие процессы взаимодействия с Go-кодом с использованием доступных инструментов. Эти инструкции автоматически публикуются при инициализации MCP-сервера, однако вы можете также загрузить их как дополнительный контекст в вашу сессию с ИИ-ассистентом, чтобы подчеркнуть их важность. Флаг -instructions выводит их, так что вы можете выполнить, например:

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

Аспекты безопасности

MCP-сервер gopls является обёрткой вокруг функциональности, обычно предоставляемой gopls через Language Server Protocol (LSP). Таким образом, инструменты gopls могут выполнять любые операции, которые обычно выполняет gopls, включая:

  • чтение файлов из файловой системы и возврат их содержимого в результатах инструментов (например, при предоставлении контекста);
  • выполнение команды go для загрузки информации о пакете, что может привести к вызовам к https://proxy.golang.org для загрузки Go-модулей и записи в кэш go;
  • запись в кэш или постоянные конфигурационные файлы gopls; и
  • отправку данных телеметрии за неделю в случае, если вы подключили Go telemetry.

Сервер gopls MCP не выполняет никаких операций, которые уже выполняются gopls в обычной сессии IDE. Как и большинство серверов LSP, gopls не осуществляет прямую запись в ваш исходный код, хотя он может указывать клиенту применить правки. Также он не выполняет произвольных запросов через сеть, хотя может выполнять узкоспециализированные запросы к определённым службам, таким как зеркало Go-модулей или база данных уязвимостей Go, которые не могут быть легко использованы в качестве средства вытаскивания данных злоумышленником. Тем не менее, такие возможности могут потребовать дополнительного анализа при использовании в составе системы с поддержкой искусственного интеллекта.


Исходные файлы данной документации находятся в golang.org/x/tools/gopls/doc.

GoRu.dev Golang на русском

На сайте представлена адаптированная под русский язык документация языка программирования Golang