Каталог/MCP BSL LS Bridge
MC

MCP BSL LS Bridge

Активный
@SteelMorganIDE / EDTДобавлен: 09 мая 2026 г.

MCP-мост к BSL Language Server для навигации, поиска, диагностики и рефакторинга кода 1С/OneScript. Сервер запускается в Docker, держит BSL LS прогретым и транслирует MCP tools в LSP-операции: поиск символов, переход к определению, hover, call hierarchy/call graph, диагностика, code actions и rename. Есть file watcher и отдельный `did_change_watched_files`, чтобы переиндексировать изменения после `git pull` или внешней генерации файлов. Особенность: на больших проектах требует существенную память, а на Windows через Docker/WSL чтение смонтированных каталогов может быть медленным.

2
views
0
comments
bsllsplanguage-serverdiagnosticsrefactoringdockergo

MCP tools

project_analysissymbol_exploredefinitionhoverget_range_contentcall_hierarchycall_graphdocument_diagnosticscode_actionsprepare_renamerenamelsp_statusdid_change_watched_files

Описание

MCP-мост к BSL Language Server для навигации, поиска, диагностики и рефакторинга кода 1С/OneScript. Сервер запускается в Docker, держит BSL LS прогретым и транслирует MCP tools в LSP-операции: поиск символов, переход к определению, hover, call hierarchy/call graph, диагностика, code actions и rename. Есть file watcher и отдельный `did_change_watched_files`, чтобы переиндексировать изменения после `git pull` или внешней генерации файлов. Особенность: на больших проектах требует существенную память, а на Windows через Docker/WSL чтение смонтированных каталогов может быть медленным.

README

MCP BSL LS Bridge

MCP-сервер, который даёт ИИ-агентам (Cursor, Claude Code и др.) доступ к возможностям BSL Language Server для работы с кодом 1С и OneScript: навигация, поиск, диагностика, рефакторинг. Цель - обеспечить детерминированные операции над кодом и экономия токенов (конечно модель всё может сделать грепами, но сколько токенов сожжет?)

Особенности проекта

  • BSL LS поднимается заранее и сразу начинает подготовку кеша.
  • добавлена надстройка call_graph для формирования полного графа вызовов силами BSL LS

Как это работает

┌─────────────────────────────────────────────────────────────────┐
│  HOST (Windows/Linux/macOS)                                     │
│                                                                 │
│  ┌──────────────┐      ┌──────────────────────────────────────┐ │
│  │   Cursor     │      │         Кодовая база 1С              │ │
│  │   (IDE)      │      │   D:/Projects/MyConfig               │ │
│  └──────┬───────┘      └──────────────┬───────────────────────┘ │
│         │ docker exec -i              │ volume mount            │
└─────────┼─────────────────────────────┼─────────────────────────┘
          │                             │
          ▼                             ▼
┌─────────────────────────────────────────────────────────────────┐
│  DOCKER CONTAINER                                               │
│                                                                 │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │  mcp-lsp-bridge (MCP Server)                             │   │
│  │  Принимает запросы от IDE, транслирует в LSP             │   │
│  └──────────────────────┬───────────────────────────────────┘   │
│                         │ TCP :9999                             │
│  ┌──────────────────────▼───────────────────────────────────┐   │
│  │  lsp-session-manager                                     │   │
│  │  Держит BSL LS запущенным, следит за индексацией         │   │
│  │  ┌────────────────────────────────────────────────────┐  │   │
│  │  │  File Watcher (polling)                            │  │   │
│  │  │  Отслеживает изменения файлов, уведомляет BSL LS   │  │   │
│  │  └────────────────────────────────────────────────────┘  │   │
│  └──────────────────────┬───────────────────────────────────┘   │
│                         │ stdio                                 │
│  ┌──────────────────────▼───────────────────────────────────┐   │
│  │  BSL Language Server (Java)                              │   │
│  │  Индексация, диагностика, навигация, рефакторинг         │   │
│  └──────────────────────────────────────────────────────────┘   │
│                         ▲                                       │
│  ┌──────────────────────┴───────────────────────────────────┐   │
│  │  /projects (смонтированная кодовая база)                 │   │
│  └──────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────┘

Требования

  • Docker + Docker Compose
  • IDE с поддержкой MCP (Cursor, Claude Code)
  • 8+ ГБ RAM (BSL LS требователен к памяти на больших проектах)

Быстрый старт

Принцип: один проект = один контейнер (каталог проекта задаётся в .env)

1. Клонируй репозиторий

git clone https://github.com/SteelMorgan/mcp-bsl-lsp-bridge.git
cd mcp-bsl-lsp-bridge

2. Настрой окружение

cp env.example .env

Отредактируй .env — минимум нужно указать:

  • MCP_PROJECT_NAME — имя проекта (будет частью имени контейнера)
  • HOST_PROJECTS_ROOT — путь к коду 1С на хосте
  • WORKSPACE_ROOT — путь внутри контейнера к каталогу с кодом

Настройка WORKSPACE_ROOT

WORKSPACE_ROOT определяет корневой каталог для BSL LS внутри контейнера.

Один каталог с кодом:

WORKSPACE_ROOT=/projects/main-config

Основная конфигурация + расширения: Если нужно работать с несколькими каталогами кода (конфигурация + расширения), укажите их общий родительский каталог:

# Структура:
# /projects/
#   ├── main-config/    <- основная конфигурация
#   └── extension1/     <- расширение

WORKSPACE_ROOT=/projects

BSL LS проиндексирует все подкаталоги и будет видеть связи между конфигурацией и расширениями.

Все параметры описаны в env.example.

3. Собери и запусти контейнер

docker compose build
docker compose up -d

Имя контейнера: ${MCP_CONTAINER_PREFIX}-${MCP_PROJECT_NAME} (например mcp-lsp-demo)

4. Подключи MCP в IDE

Создай .cursor/mcp.json (или аналог для твоего MCP-клиента):

{
  "mcpServers": {
    "lsp-bsl-bridge": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "exec",
        "-i",
        "mcp-lsp-demo",
        "mcp-lsp-bridge"
      ],
      "env": {}
    }
  }
}

Замени mcp-lsp-demo на реальное имя контейнера.

5. Проверь подключение

В IDE вызови tool lsp_status — должен показать статус подключения и прогресс индексации.


Возможности (Tools)

Поиск и навигация

ToolЧто делаетКогда использовать
project_analysisУниверсальный поиск: символы, файлы, текстНайти процедуру по имени, обзор проекта
symbol_exploreДетальный поиск с кодом и документациейНужна полная информация о символе
definitionПерейти к определению"Где объявлена эта процедура?"
hoverДокументация и сигнатура"Какие параметры у функции?"
get_range_contentПолучить фрагмент кодаИзвлечь код по координатам

Анализ зависимостей

ToolЧто делаетКогда использовать
call_hierarchyКто вызывает / что вызывает (1 уровень)Быстро понять связи
call_graphПолный граф вызововГлубокий анализ перед рефакторингом

Диагностика и проверка кода

ToolЧто делаетКогда использовать
document_diagnosticsСинтаксические ошибки, предупреждения, стилистикаПроверка кода перед коммитом, поиск ошибок
code_actionsАвтоматические исправленияQuick-fix для найденных ошибок

document_diagnostics — основной инструмент для синтаксического контроля. Возвращает все диагностики BSL LS: синтаксические ошибки, неиспользуемые переменные, deprecated методы, нарушения стиля и т.д.

Рефакторинг

ToolЧто делаетКогда использовать
prepare_renameПроверить возможность переименованияПеред переименованием
renameПереименовать символ вездеapply=false для preview

Служебные

ToolЧто делаетКогда использовать
lsp_statusСтатус LSP и прогресс индексацииПроверить готовность
did_change_watched_filesУведомить об изменении файловПосле git pull

Подробнее: docs/tools/tools-reference.md


Документация


Дорожная карта

  • Улучшить File Watcher для Win + Docker (пока polling, ищем решения)
  • Автообновление BSL LS при запуске контейнера
  • Сократить количество tools, упаковать логику в навыки
  • Сделать решение под Windows. Если использовать докер в Windows (WSL 2), то скорость чтения примаунченных каталогов ограничена. 40к файлов у меня читает около 12 минут. 9к файлов - в районе 3-5 минут. (упирается в общую "пропускную способность докера).

Вклад в проект

См. CONTRIBUTING.md. Баги и идеи — через Issues.

Благодарности

https://github.com/rockerBOO/mcp-lsp-bridge - взято за основу https://github.com/nixel2007 - за консультации по BSL LS

Комментарии

Войдите, чтобы оставить комментарий

Войти

Загрузка...