SM

steelmorgan/mcp-bsl-lsp-bridge

Developer tools
67 stars 0 forks 品質 55 トレンド 55

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

概要

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

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 — имя проекта (будет частью имени контейнера)
  • WORKSPACE_ROOT — путь внутри контейнера к каталогу с кодом (пример ниже)

Выбор режима монтирования кода (host vs sandbox)

Этот проект поддерживает 2 способа подключить код 1С. Выбираешь один.

1) Host filesystem (bind mount) — код 1С лежит на хосте Docker (Windows/Linux/macOS).

  • В .env укажи HOST_PROJECTS_ROOT (путь на хосте Docker) и при необходимости PROJECTS_ROOT (как каталог будет виден внутри контейнера).
  • Запуск: docker-compose.yml

2) Sandbox workspace volume (named volume) — код 1С живёт в external named volume песочницы (Dev Containers / отдельный sandbox-контейнер).

  • В .env укажи PROJECTS_VOLUME_NAME (например agent-work-sandbox-1c) и выставь PROJECTS_ROOT так, как тебе удобно видеть workspace внутри контейнера (обычно /workspaces/work, чтобы совпадало с путями в IDE).
  • Запуск: docker-compose.sandbox-volume.yml

Настройка WORKSPACE_ROOT

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

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

WORKSPACE_ROOT=/projects/main-config

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

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

WORKSPACE_ROOT=/projects

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

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

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

Host filesystem (bind mount)

docker compose -f docker-compose.yml build
docker compose -f docker-compose.yml up -d

Sandbox workspace volume (named volume)

docker compose -f docker-compose.sandbox-volume.yml build
docker compose -f docker-compose.sandbox-volume.yml 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 Документация и сигнатура “Какие параметры у функции?”
completion Члены типа после точки + возвращаемые типы (Type System v2): реквизиты/ТЧ объекта, значения перечисления, предопределённые “Какие ТЧ у документа?”, проверка типа в цепочке a.b.c
signature_help Параметры и перегрузки вызываемого метода в точке вызова “Что передавать в эту функцию БСП?”
get_range_content Получить фрагмент кода Извлечь код по координатам

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

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

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

Tool Что делает Когда использовать
document_diagnostics Синтаксические ошибки, предупреждения, стилистика Проверка кода перед коммитом, поиск ошибок
quality_diagnostics Прицельно security / performance / sql (оффлайн-классификация) Самопроверка на риски перед коммитом
complexity Цикломатическая + когнитивная сложность по методам “Пора рефакторить?” (cyclomatic > 20 / cognitive > 15)
module_health Комбо: complexity + quality_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

View this README on GitHub

インストール

docker exec -i mcp-lsp-demo mcp-lsp-bridge

設定

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