Бесплатный вебинар
ИИ на максималках
Представляем развитие проекта |
![]() |
В новой версии ряд важных изменений
Выдача результатов поиска теперь максимально компактная
- • только идентификаторы и наименования объектов метаданных (внутреннее наименование и синоним).
- • Результаты возвращаются в двух форматах: и в структурированном json'е и плоским текстом.
- • Первый хорошо понимают современные клиенты типа cursor'а, а обычный текст пока оставлен для обратной совместимости с mcp-клиентами, которые не поддерживают структурированный ответ.
- • На моем опыте - современные llm'ки отлично сами понимают какой из результатов поиска наиболее релевантный, без необходимости подключать реранкер. Такой подход дает лучшую предсказуемость и, самое главное, - не засоряет контекстное окно лишними данными.
Переработан гибридный поиск
- • Теперь семантический поиск по обычным векторам можно смешивать с поиском по разреженным или sparse-векторам, в которые по алгоритму bm25 кодируются ключевые слова всего тела описания объекта метаданных.
- • Для каких-то конфигураций 1С с использованием какой-то особой терминологии в названиях реквизитов - подключение поиска по разреженным векторам даст заметный прирост качества поиска.
- • Для типовых же конфигураций особого улучшения поиска не будет, потому что "специфичные" ключевые слова и так обычно фигурирую в наименовании объекта. Например, если нужно найти документ или справочник связанный с работой с ЕГАИС, то слово ЕГАИС и так присутствует в названии.
Бонусом добавил mcp для проверки синтаксиса и поиска по справке синтакс-помощника
- • Бонусом, потому что эти mcp основаны на чужих решениях (в частности справка по синтаксису от Алексея Корякина), я же оборачиваю это в удобный запуск в docker-контейнерах.
- • Для проверки синтаксиса сделал так, чтобы BSL Language Server запускался в websocket-режиме, чтобы каждое обращение mcp на проверку синтаксиса не переподнимало каждый раз java-приложение (это не мгновенно).
Если детализировать схему до конкретных контейнеров, то получается такая схема:

Именно mcp тут три контейнера, остальные вспомогательные.
Вопрос, который может возникнуть: зачем такая фрагментация?
Ответ на него: Потому что микросервисную архитектуру проще разрабатывать, тестировать и, самое главное, эти сервисы можно переиспользовать.
Достоинства и преимущества решения
Компактный вывод результатов
Минимизирует нагрузку на контекстное окно LLM, ускоряя обработку запросов и снижая затраты на API.
Гибридный поиск
Семантический + BM25 повышает точность для нестандартных конфигураций 1С, где ключевые слова в описаниях не совпадают с названиями.
Выбор моделей векторизации
Включая легковесные, обеспечивая быстрый отклик — идеально для локального развертывания без облачных затрат.
Поддержка нескольких конфигураций 1С
В одной БД позволяет работать с разными проектами одновременно, без переключений.
Микросервисная архитектура
Упрощает масштабирование и интеграцию: каждый компонент можно использовать отдельно в других проектах.
Переработанный с нуля MCP для проверки синтаксиса
LLM-агенты IDE общаются с MCP только текстом. Из-за этого наивный подход к проверке синтаксиса работает плохо, потому что LLM'ке нужно сформировать для MCP запрос с текстом модуля, а модули в 1С бывают гигантские. Да, LLM-агенты умеют сами понять, что можно проверять только одну процедуру/функцию, но это все равно дорогие выходные (output) токены.
Намного экономнее, быстрее и правильнее передавать для проверки в MCP имя файла. Это потребует сделать для MCP-сервера "видимой" папку с исходниками 1С, но при работе с docker это не проблема. При таком подходе практически не тратятся output токены.
Дополнительные преимущества
Интеграция и производительность
Для bsl language server можно указать configurationRoot и инициализировать рабочее пространство. Да, первый запуск будет долгим, но последующие проверки быстрыми с более глубокими с анализом (с учетом общих модулей).
Для больших кодовых баз, типа ERP можно опционально указать параметры памяти Java (Xms/Xmx) для bsl language server.
Оптимизация вывода и контекста
Включена по умолчанию опция выводить результаты проверки только с ошибками, скрывая предупреждения и рекомендации. Это сильно уменьшает засорение контекста (услышал недавно красивый термин "context poisoning" или отравление контекста).
Сокращен формат ответа, сохраняя структурность. Опять же - ради экономии окна контекста.
Гибкость и совместимость
Разные LLM-агенты по разному передают имя файла, некоторые полный путь, некоторые относительный. MCP автоматически понимает оба варианта.
MCP можно запустить с выбором транспортного протокола: Streamable HTTP или SSE. Ранее казалось, что уже все поддерживают Streamable HTTP, но нет, тот же Gemini CLI работает только по SSE, хотя бы ради него добавлена совместимость с SSE.
Открытый вопрос: Остался для меня открытым вопрос, а кто экранирует текст модулей для JSON-RPC вызова? Не смог найти убедительной информации о логике работы агентов типа Cline, RooCode или Copilot, скорее всего экранирование делает фреймворк агента (не тратя токены).
Примеры использования
Информация по обновлениям
# удаление старых контейнеров (векторная БД и модель векторизации сохранятся)
docker compose down
# копируете новый docker-compose.yml
# корректируете настройки под себя:
# sse или http транспорт
# для контейнера проверки синтаксиса свою папку проекта
# запускаете новые контейнеры
docker compose up -d
- MCP по Метаданным: переименованы инструменты и параметры, улучшены описания.
- MCP по справке Синтакс-помощника: переведён на RAG с гибридным поиском.
- Все MCP теперь поддерживают оба транспорта: SSE и HTTP.
- Обновлён загрузчик векторной БД для данных Синтакс-помощника.
1) MCP по метаданным
Пересмотрены названия инструментов и параметры: убрали неоднозначности, улучшили описания для LLM-агентов.
Пример: search → search_metadata, get_details... → metadata_details_by_id.
В исследовании Microsoft Research описана «интерференция инструментов»: при подключении нескольких MCP часто совпадают имена (особенно search). Claude Code частично решает это префиксами, но у многих агентов этого нет. Новые имена и аннотации уменьшают коллизии и повышают точность выбора инструмента.
2) MCP по Синтакс-помощнику
Перевели поиск на RAG с гибридным ранжированием: BM25 + векторное сопоставление.
Индексируем название, краткое описание и ключевые слова по документу.
Возвращаем LLM-агенту краткий список кандидатов, а он дозапрашивает детали по выбранному объекту.
Гранулярность ответов
- Для глобальных свойств и методов: текст обычно небольшой — отдаём целиком.
- Для встроенных типов (где описания большие): отдаём гранулярно — по конкретному свойству/методу.
Результат
Быстрее находим релевант и меньше «засоряем» контекст.
3) Транспортные протоколы (SSE и HTTP)
Оба MCP поддерживают SSE и HTTP. У ряда агентов SSE всё ещё основной — поэтому оставили поддержку.
Примеры
Новый загрузчик в векторную БД:

Новые имена инструментов и подробные аннотации:



Названия и аннотации инструментов и параметров
-
Один из поинтов статьи про проблемы с неймспейсами и неоднозначность названий инструментов. -
-
-
Подробная инструкция по решению
Windows 10/11 x64 или Linux x64
8 Гб RAM
20 Гб HDD
4 ядра CPU (не ARM)
установленный Docker с Docker Compose плагином
Это тот минимум, на котором запустится и будет работать. При первом запуске происходит большая предобработка (индексация), и она будет сильно разной по времени в зависимости от объёма конфигурации (метаданных), мощности ПК (CPU/RAM) и выбранной модели векторизации. По умолчанию выбрана небольшая модель sergeyzh/BERTA
, которая быстро отработает даже на минимальных требованиях.
Микросервисная архитектура решения позволяет вспомогательные контейнеры запускать на одном общем мощном ПК/сервере. А на ПК разработчиков запускать только MCP-контейнеры (контейнеры, связанные с взаимодействием с IDE / LLM-агентом).
Как установить и запустить Docker на новой Windows машине:
https://rutube.ru/video/711231ab858d36a3cdca00bc09286b44/
Решение поставляется в виде набора Docker-контейнеров, описанных в файле docker-compose.yml
.
Вспомогательные контейнеры:
- Векторная БД Qdrant (контейнер
qdrant
) - Сервис векторизации (контейнер
embedding-service
) - Сервис загрузки (индексации) данных (контейнер
loader
) - Клиент MCP для тестов/проверок (контейнер
mcp-inspector
)
Основные контейнеры:
- MCP поиска по метаданным (контейнер
mcp-metadata
) - MCP поиска по справке-синтакс-помощника (контейнер
mcp-help
) - MCP проверки синтаксиса (контейнер
mcp-bsl-checker
)
Дополнительные материалы:
- Примеры настроек MCP для разных IDE
- Пример файла
agents.md
с описанием MCP-инструментов для LLM-агентов
Подготовительная часть:
- Предварительно нужно проиндексировать (векторизовать) описание метаданных конфигурации 1С и файл справки синтакс-помощника.
- Для работы проверки синтаксиса через
bsl-language-server
необходимо выгрузить исходники 1С и настроить проброс этой директории в контейнер. - Прописать в настройках IDE / LLM-агента параметры подключения к MCP.
LLM-агент при выполнении задачи принимает решение запросить описание какого-либо объекта метаданных. Агент делает запрос к MCP 1c-metadata
, например: «Структура данных документа Заказ клиента» или «регистр запасы на складах». Запрос может включать указание типа объекта (справочник, документ, регистр и т.д.).
MCP векторизует запрос с помощью сервиса embedding-service
и выполняет гибридный поиск в векторной БД Qdrant: одновременно семантический (нечёткий) и по ключевым словам. Топ-K результатов возвращается LLM-агенту — это краткий список подходящих метаданных без полных описаний.
LLM-агент выбирает наиболее релевантный объект и делает второй запрос к MCP — уже за полным описанием структуры данных. Обычно хватает одной итерации; в редких случаях агент переформулирует запрос и повторяет поиск.
Таких циклов будет столько, сколько объектов метаданных упомянуто в исходной задаче.
Этот подход называется RAG (Retrieval-Augmented Generation) — генерация, усиленная извлечением данных из внешних систем.
Принцип аналогичен работе с метаданными, но адаптирован под структуру справки 1С.
LLM-агент запрашивает описание глобальных методов или типов данных (например: «Генерация случайного числа» или «запись в регистр сведений») через MCP 1c-help
.
Запрос векторизуется и обрабатывается гибридным поиском в Qdrant. В ответе — названия статей + краткое пояснение (описание из справки или список методов/свойств).
Этого достаточно, чтобы LLM-агент выбрал нужную статью и запросил её полное содержимое.
Как и в случае с метаданными, обычно хватает одной итерации.
В контейнер mcp-bsl-checker
пробрасывается директория с исходниками 1С (конфигурация, расширение, обработка и т.д.).
LLM-агент передаёт путь к файлу (не текст!), например: modul.bsl
. MCP преобразует путь к внутреннему расположению в контейнере и запускает проверку через bsl-language-server
.
При первом запуске для полной конфигурации можно инициализировать рабочее пространство (улучшает качество проверки). Для расширений и обработок это не поддерживается и отключено по умолчанию.
По умолчанию возвращаются только ошибки (предупреждения скрыты), а результат форматируется в компактный JSON, чтобы не засорять контекст LLM-агента.
Требуются как минимум две директории:
- Для запуска решения (например,
d:\mcp
) - Для проектов 1С (например,
d:\projects\proj1
)
Подготовка:
В d:\mcp
скопируйте:
docker-compose.yml
bsl-ls\.bsl-language-server.json
В d:\projects\proj1
скопируйте:
ВыгрузитьОписаниеСтруктурыКонфигурации.epf
- настройки IDE (например, папку
.vscode
) - файл
agents.md
Рекомендуемая структура проекта:
proj1/ Выгрузка/ ВыгрузитьОписаниеСтруктурыКонфигурации.epf ОписаниеКонфигурации.zip 1c-build/ # директория сборки бинарников (cf-файлов, epf и т.д.) 1c-src/ # директория xml-выгрузки из конфигуратора 1С (исходники) .vscode/ mcp.json # настройки MCP для VS Code Copilot agents.md # описания MCP-инструментов для LLM-агентов
Разберём настройки всех контейнеров сверху вниз:
qdrant — векторная БД
Можно ничего не менять.
В настройках указывается именованный том для хранения данных на хосте:
volumes: # - ./qdrant_storage:/qdrant/storage - qdrant_storage:/qdrant/storage
Запись в таком формате, а не относительный путь, потому что в Windows иначе получалась битая база после перезапуска контейнера. Под Linux такой проблемы нет.
embedding-service — сервис векторизации
Генерирует обычные (dense
) и разрежённые (sparse
) векторы.
Переменные:
MODEL_NAME=sergeyzh/BERTA
— имя моделиVEC_DIM=768
— размерность векторов
Можно использовать любые модели, совместимые с SentenceTransformer (например, ai-sage/Giga-Embeddings-instruct
).
Проброс кеша модели:
volumes: - ./embeddings/models:/root/.cache/huggingface/hub
Модели сохраняются в d:\mcp\embeddings\models
(от 500 МБ до нескольких ГБ).
API для получения векторов:
curl --request POST \ --url http://127.0.0.1:5000/dense \ --header 'Content-Type: application/json' \ --data '{"texts":["Hello world проверка 1", "Проверка два"]}'
curl --request POST \ --url http://127.0.0.1:5000/sparse \ --header 'Content-Type: application/json' \ --data '{"texts":["Hello world проверка 1", "Проверка два"]}'
loader — сервис загрузки
Выполняет индексацию метаданных и справки.
Основные переменные:
environment: - EMBEDDING_SERVICE_URL=http://embedding-service:5000 - QDRANT_HOST=qdrant - QDRANT_PORT=6333 - ROW_BATCH_SIZE=200 - EMBEDDING_BATCH_SIZE=50
При использовании тяжёлых моделей уменьшайте батчи, при мощном ПК — увеличивайте.
Интерфейс загрузчика: http://127.0.0.1:8501
- Для справки укажите коллекцию, например:
1c_help_rag
, и выберите файлshcntx_ru.hbk
. - Метаданные загружаются из архивов (например,
ОписаниеКонфигурацииУТ.zip
) в отдельные коллекции:1c-ut
,1c-bp
и т.д.
mcp-metadata — поиск по метаданным
Поддерживает несколько проектов через заголовок x-collection-name
.
Настройки (по умолчанию закомментированы):
# - MCP_TRANSPORT=sse # - TOPK_LITE_SEARCH_LIMIT=15 # - USE_HYBRID_SEARCH=true
REST API для теста:
curl --request POST \ --url http://127.0.0.1:9001/search \ --header 'Content-Type: application/json' \ --header 'x-collection-name: 1c_ut' \ --data '{"query": "Продажи товаров и услуг","object_type": "Документ"}'
mcp-help — поиск по справке
Гибридный поиск включён по умолчанию.
Переменные:
MCP_TRANSPORT: http COLLECTION_NAME_HELP: 1c_help_rag SEARCH_LIMIT: 10 PREFETCH_LIMIT_MULTIPLIER: 3
Swagger-документация: http://127.0.0.1:9092/docs
curl --request POST \ --url http://127.0.0.1:9092/search \ --header 'Content-Type: application/json' \ --data '{"query": "Число прописью"}'
mcp-bsl-checker — проверка синтаксиса
Пробрасывает директорию с исходниками:
volumes: - C:/Projects/Proj1/1c-src:/src:ro - ./mcp-bsl-checker/bsl-ls/.bsl-language-server.json:/config/.bsl-language-server.json:ro
Важные переменные:
BSL_ONLY_ERRORS=1
— только ошибкиHOST_WORKSPACE_DIR="C:/Projects/Proj1/1c-src"
— путь к исходникамBSL_SKIP_WORKSPACE_INIT=1
— пропустить инициализацию (для расширений)MCP_TRANSPORT="http"
Для нескольких проектов запускайте отдельные контейнеры с разными портами и путями.
REST API для теста:
curl --request POST \ --url http://127.0.0.1:9004/check-file \ --header 'Content-Type: application/json' \ --data '{ "file_path": "C:/1C_Base/vs-test/1c-src-mini/CommonModules/ОбщийМодульТест/Ext/Module.bsl" }'
Общие настройки для всех MCP
Порты можно менять в секции ports
:
ports: - "9005:8000"
Левый порт — хоста, правый — контейнера. Не забудьте обновить порты в файлах mcp.json
для IDE.
Комплект поставки и запуск решения
Комплект поставки
Решение поставляется в виде нескольких файлов:
- • Docker-compose файл описывающего запуск всех контейнеров
- - Большинство настроек задаются в нем же. Пояснения к настройкам будут в текстовой версии публикации.
- - В отдельный файлик вынесены настройки сервера, чтобы можно было выключать/выключать опции проверок, например оставить только критичные тем самым сэкономив еще немного контекста.
- • Обработка выгрузки описания метаданных
- • Примеров файлов конфигурации mcp для cursor и vs code (для других IDE конфигурации аналогичны)
Процесс запуска решения
Копируете файлы поставки в любую удобную папку, например: C:\mcp\
В консоли выполняете:
cd C:\mcp
docker compose up -d
Дольше всего будет запускаться контейнер embedding-service
, он объемные (4+Гб) и при первом запуске будет скачивать модель векторизации.
Проверить запуск можно в логах контейнера:
docker compose logs embedding-service -f
После запуска можно переходить к выгрузке / загрузке метаданных:
- • Внешней обработкой выгружаем описания из 1С.
- • Открываем веб-страничку сервиса загрузки описаний в векторную БД http://localhost:8501. При загрузке указываем название коллекции в БД. Это позволяет одним mcp одновременно работать с описаниями метаданных нескольких разных конфигураций 1С.
Все. Можем открывать IDE и прописывать параметры подключения mcp.
Пример для Cursor:
"mcpServers": {
"1c-metadata": {
"timeout": 60,
"headers": {
"x-collection-name": "1c_ut"
},
"url": "http://172.25.48.1:9001/mcp",
"disabled": false
},
"1c-check": {
"timeout": 60,
"url": "http://172.25.48.1:9002/mcp",
"disabled": false
},
"bsl-context": {
"command": "docker",
"args": [
"exec",
"-i",
"mcp-bsl-context-stdio",
"java",
"-jar",
"/app/mcp-bsl-context.jar",
"--mode",
"stdio",
"--platform-path",
"/app/1c-platform"
]
}
}
x-collection-name
меняете на название коллекции, которое указали при первичной загрузки в векторную БД.
Доступные настройки
Через переменные окружения можно указать модель и размерность ее векторов:
MODEL_NAME=sergeyzh/BERTA
- модель по умолчаниюVEC_DIM=768
- размерность векторов
По умолчанию указана sergeyzh/BERTA - она маленькая, быстрая и при этом дает хорошие результаты. Контейнер с ней утилизирует буквально 400Мб RAM.
Можно пробовать и другие модели:
intfloat/multilingual-e5-base
| 768intfloat/multilingual-e5-small
| 384Alibaba-NLP/gte-multilingual-base
| 768Qwen/Qwen3-Embedding-0.6B
| 1024ai-forever/FRIDA
| 1536
Qwen/Qwen3-Embedding-0.6B - дает отличные результаты, но это уже 1,5-2Гб RAM и в несколько раз медленнее.
Доступные настройки:
ROW_BATCH_SIZE
- количество объектов метаданных обрабатывать за итерациюEMBEDDING_BATCH_SIZE
- размер батча векторизации, сколько одним запросом получать векторов от сервиса векторизации
Доступные настройки:
TOPK_LITE_SEARCH_LIMIT
- количество объектов в результатах поискаUSE_HYBRID_SEARCH
- использовать ли гибридный поиск (добавлять ли поиск по ключевым словам)
В блоке подключения томов volumes
нужно указать путь к папке с платформой 1С, например:
C:/Program Files/1cv8/8.3.27.1644/bin
Остались вопросы?
Для получения дополнительной информации и помощи в настройке модуля под нужды вашего бизнеса — оставьте заявку
