Перейти к содержанию

Запуск в режиме MCP

BSL Language Server умеет работать как сервер Model Context Protocol (MCP) — открывать возможности анализа кода 1С (BSL) и OneScript AI-агентам и инструментам, которые поддерживают MCP.

Инструменты MCP работают поверх того же движка, что и LSP-режим: тот же разбор, те же провайдеры. Рабочие пространства задаются через MCP roots — прямой аналог workspace folders в LSP.

Экспериментальная возможность

Режим MCP основан на Spring AI 2.0 (на момент написания — milestone-версия). API и поведение могут меняться.

Режимы запуска

MCP можно поднять несколькими способами.

Отдельный MCP-сервер (команда mcp)

Транспорт выбирается параметром --protocol: stdio (по умолчанию), sse или streamable. LSP при этом не запускается.

stdio — стандартный способ подключения локальных инструментов:

java -jar bsl-language-server.jar mcp
# эквивалентно: java -jar bsl-language-server.jar mcp --protocol stdio

sse — Server-Sent Events по HTTP на встроенном веб-сервере (эндпоинт /sse, сообщения на /mcp/message):

java -jar bsl-language-server.jar mcp --protocol sse --server.port=8080

streamable — Streamable HTTP по HTTP на встроенном веб-сервере (эндпоинт /mcp):

java -jar bsl-language-server.jar mcp --protocol streamable --server.port=8080

Рядом с LSP по stdio

LSP остаётся на stdio, а MCP дополнительно поднимается по Streamable HTTP на встроенном веб-сервере. Включается флагом --mcp. Команда lsp — режим по умолчанию, поэтому её можно не указывать:

java -jar bsl-language-server.jar --mcp --server.port=8080
# эквивалентно: java -jar bsl-language-server.jar lsp --mcp --server.port=8080

Рядом с LSP по websocket

LSP по websocket и MCP по Streamable HTTP на одном веб-сервере:

java -jar bsl-language-server.jar websocket --mcp --server.port=8080

Рабочие пространства (MCP roots)

Каталоги исходников задаёт клиент через MCP roots — так же, как LSP-клиент передаёт workspace folders. Сервер индексирует объявленные корни в общий контекст и пересинхронизирует их при изменении (roots/list_changed). В комбинированных режимах (lsp --mcp, websocket --mcp) рабочие пространства дают как LSP-клиент (workspace folders), так и MCP-клиент (roots) — в один общий контекст.

Доступные инструменты

Инструмент Назначение
analyze_file Диагностики по файлу
document_symbols Дерево символов файла (методы, области, переменные)
find_references Все ссылки на символ в позиции
call_hierarchy Входящие и исходящие вызовы метода/процедуры в позиции
hover Подсказка по символу (сигнатура, тип, документация)
definition Переход к объявлению символа
type_info По имени типа (например, Массив) — его свойства и методы с сигнатурами
type_at_position Выведенный тип выражения под курсором и доступные на нём методы и свойства

Позиции (line, character) нумеруются с нуля, как в LSP.

Параметры запуска

Параметр Режим Назначение
-c, --configuration <path> все Путь к глобальному конфигурационному файлу (см. Конфигурационный файл)
--protocol <stdio\|sse\|streamable> mcp Транспорт отдельного MCP-сервера: stdio (по умолчанию), sse или streamable
--mcp lsp (по умолчанию), websocket Дополнительно поднять MCP по Streamable HTTP
--mcp-path <path> lsp --mcp, websocket --mcp Адрес MCP-эндпоинта (по умолчанию /mcp)
--server.port=<port> mcp --protocol sse\|streamable, lsp --mcp, websocket --mcp Порт встроенного веб-сервера

Примеры конфигурации клиента

stdio

Клиент сам запускает сервер и общается с ним по stdio (формат mcpServers):

{
  "mcpServers": {
    "bsl-language-server": {
      "command": "java",
      "args": ["-jar", "/path/to/bsl-language-server.jar", "mcp"]
    }
  }
}

Streamable HTTP

Сервер запущен отдельно (--mcp или websocket --mcp), клиент подключается к эндпоинту по URL:

{
  "mcpServers": {
    "bsl-language-server": {
      "type": "streamable-http",
      "url": "http://localhost:8080/mcp"
    }
  }
}

Адрес по умолчанию — http://<host>:<port>/mcp; путь меняется параметром --mcp-path, порт — --server.port.