onec-meta-mcp
MCP server for searching and analyzing 1C enterprise metadata and BSL code using a SQLite backend. Enables querying configuration structure, code routines, and performing compliance checks via natural language.
README
1C Meta MCP
MCP-сервер на Node.js для поиска по метаданным конфигурации 1С и коду BSL. В проекте нет нативных модулей и обязательного Docker: достаточно Node.js >= 22.13, потому что используется встроенный node:sqlite.
Что нужно выгрузить из 1С
Сервер загружает данные из двух источников, и нужны оба:
metadata/*.txt— один текстовый файлОтчет по конфигурации.code/— полная XML-выгрузка конфигурации в файлы.
Без TXT-отчета не загрузятся паспорт конфигурации, список объектов, реквизиты, табличные части, формы, команды и полнотекстовый поиск по описаниям. Без XML-выгрузки не будет GUID, движений по регистрам, прав ролей, предопределенных данных, состава подсистем и исходников BSL.
Как именно выгрузить данные из 1С
Делайте выгрузку из конфигуратора 1С для той конфигурации, по которой хотите искать.
- Откройте базу в режиме
Конфигуратор. - Сформируйте
Отчет по конфигурациив текстовый файл. Обычно это менюКонфигурация -> Отчет по конфигурации.... - Сохраняйте полный отчет, а не выборочный.
- Убедитесь, что файл сохранен в текстовом формате Unicode UTF-16LE с BOM.
- Положите этот файл в папку
metadata/. - Выполните команду
Выгрузить конфигурацию в файлы. Обычно это менюКонфигурация -> Выгрузить конфигурацию в файлы.... - В качестве каталога выгрузки укажите папку
code/. - Нужна полная выгрузка, чтобы внутри оказались XML-описания объектов, каталоги модулей и
.bsl-файлы вExt/.
Практически это должно выглядеть так:
prj1/
metadata/
ОтчетПоКонфигурации.txt
code/
ConfigDumpInfo.xml
Configuration.xml
Catalogs/
Documents/
CommonModules/
Roles/
Subsystems/
EventSubscriptions/
...
Сервер ожидает именно такую структуру относительно DATA_DIR:
DATA_DIR/
metadata/
*.txt
code/
ConfigDumpInfo.xml
Configuration.xml
... XML и BSL-выгрузка конфигурации ...
Требования к данным:
- В
metadata/должен лежать ровно один.txt-файл с отчетом по конфигурации. Имя файла может быть любым. - В
code/должна быть полная файловая выгрузка, а не отдельные выборочные каталоги. - Для загрузки BSL в
code/должны присутствовать модули видаExt/*.bsl, формыForms/*/Ext/Form/Module.bsl, командные модули и общие модули. - Для прав ролей нужны файлы
Roles/*/Ext/Rights.xml. - Для предопределенных элементов используются
Ext/Predefined.xmlу соответствующих объектов.
Если ваши данные лежат не в ./prj1, просто укажите правильный путь в DATA_DIR.
Быстрый старт
npm install
$env:DATA_DIR = 'C:\Golden\Andersen\1c-meta-mcp\prj1'
npm run dev
На первом запуске сервер загружает выгрузку в SQLite, после чего поднимает MCP-эндпоинт http://localhost:6101/mcp и UI со статусом загрузки на http://localhost:6102.
Полезные команды:
npm run dev— загрузить данные при необходимости и запустить MCP-сервер.npm run load— только выполнить загрузку и завершиться.npm run serve— то же поведение, что иnpm run dev.npm run parity— сравнить ответы с оригинальным сервером.npm test— запустить тесты.
Пример конфигурации MCP-клиента:
{
"mcpServers": {
"onec-meta": {
"url": "http://localhost:6101/mcp",
"type": "streamable-http"
}
}
}
Docker
Для docker compose подготовьте выгрузку, например так:
data/
prj1/
metadata/
ОтчетПоКонфигурации.txt
code/
ConfigDumpInfo.xml
Configuration.xml
...
Дальше:
docker compose up -d
docker compose logs -f
Контейнер монтирует выгрузку 1С в /data только на чтение, а SQLite хранит в именованном volume onec_db_prj1, поэтому база переживает перезапуск контейнера и обновление образа.
Повторная загрузка после изменения конфигурации:
FULL_RELOAD=true docker compose up -d --force-recreate
Альтернатива — удалить volume с базой и поднять контейнер заново. Для нескольких конфигураций продублируйте сервис в docker-compose.yml и задайте отдельные PROJECT_NAME, DATA_DIR, volume и порт.
Образ основан на node:22-slim, запускает TypeScript через tsx, использует tini как PID 1 и проверяет готовность через tools/list по MCP.
Переменные окружения
| Переменная | По умолчанию | Значение |
|---|---|---|
DATA_DIR |
../prj1 |
Корневая папка данных, внутри которой должны быть metadata/*.txt и code/ |
PROJECT_NAME |
prj1 |
Метка проекта в qualified names |
DB_PATH |
./onec-meta.db |
Путь к SQLite-базе |
MCP_HOST |
0.0.0.0 |
Хост MCP-сервера |
MCP_PORT / MCP_PATH |
6101 / /mcp |
HTTP-эндпоинт MCP |
UI_PORT / UI_ENABLED |
6102 / true |
Веб-панель статуса загрузки и индексации |
FULL_RELOAD |
false |
Принудительно перезагрузить проект, даже если отпечаток TXT-отчета не изменился |
LOAD_BSL |
true |
Загружать модули BSL |
LOAD_RIGHTS |
true |
Загружать права ролей из Rights.xml |
LOAD_PREDEFINED |
true |
Загружать предопределенные данные из Predefined.xml |
CHECKS_DIR |
./checks |
Папка с YAML-наборами SQL-проверок |
ENABLE_ROUTINE_EMBEDDING / ENABLE_METADATA_EMBEDDING |
false / false |
Включить семантический индекс для кода и метаданных |
EMBEDDING_API_BASE |
http://localhost:1234/v1 |
OpenAI-совместимый endpoint для эмбеддингов |
EMBEDDING_MODEL |
text-embedding-qwen3-embedding-0.6b |
Модель эмбеддингов |
HYBRID_FT_WEIGHT / HYBRID_VEC_WEIGHT |
0.3 / 0.7 |
Веса гибридного поиска |
Что умеет сервер
Фазы 1-2: TXT-отчет
get_config_passport— имя, версия, поставщик и счетчики объектов конфигурации.list_categories,list_objects— обзор объектов с фильтром по происхождению.get_object_structure— реквизиты, ресурсы, измерения, табличные части, формы и значения перечислений.find_object_usages— кто использует объект как тип.search_metadata_by_description— полнотекстовый поиск FTS5 по имени, синониму и комментарию.run_sql_readonly— защищенныйSELECTпо SQLite для аналитики и проверок.
Фаза 3: XML-выгрузка
find_register_movements— связи документы ↔ регистры.list_predefined— предопределенные элементы, включая иерархию плана счетов и флаги.get_subsystem_content— состав подсистем и принадлежность объектов.list_event_subscriptions— подписки на события, источник, событие и обработчик.get_role_rights— права ролей по объектам.find_by_guid— поиск объекта по UUID.
Фаза 4: код BSL
search_code— поиск по именам процедур и функций, doc-comment и фильтрам.grep_code— поиск по телам процедур и функций с номерами строк.get_routine— исходник процедуры или функции поroutine_idлибоname + owner.list_routines— список процедур и функций модуля с метриками.get_call_graph— вызывающие и вызываемые процедуры, глубина 1-10.
Загрузка возобновляемая: прогресс хранится по фазам в таблице load_phases, поэтому после прерывания сервер продолжает с места остановки. Полная перезагрузка выполняется при FULL_RELOAD=true или при изменении TXT-отчета.
Семантический поиск
search_code и search_metadata_by_description поддерживают mode: fulltext | semantic | hybrid. Если эмбеддинги отключены, используется полнотекстовый режим.
Минимальная конфигурация:
ENABLE_ROUTINE_EMBEDDING=true
ENABLE_METADATA_EMBEDDING=true
EMBEDDING_API_BASE=http://localhost:1234/v1
EMBEDDING_MODEL=text-embedding-qwen3-embedding-0.6b
Индексация запускается в фоне после старта сервера. Векторы хранятся в той же SQLite-базе, а смена модели автоматически запускает переиндексацию.
Проверки соответствия
list_checks и run_checks выполняют SQL-проверки из checks/*.yaml. Каждое правило описывает идентификатор, заголовок, уровень серьезности, категорию и read-only SQL-запрос, строки которого трактуются как нарушения.
Стартовый набор checks/1c-standards.yaml включает проверки на:
- префиксы именования кастомных объектов;
- экспортные процедуры без doc-comment;
- слишком длинные процедуры и функции;
- использование
Выполнить(); - использование
ВЫБРАТЬ *; - отсутствие структуры
#Область; - TODO-маркеры;
- административные и интерактивные права удаления;
- неиспользуемые экспортные процедуры;
- доступ к БД на клиенте в формах.
Для новых правил удобно сначала отладить SQL через run_sql_readonly, а затем сохранить запрос в YAML-пакет.
Паритет с оригинальным сервером
npm run parity запускает набор сравнительных запросов из test/parity.ts против оригинального сервера и этого клона. Результат сохраняется в test/parity-report.json. Оба сервера должны быть подняты с одной и той же загруженной конфигурацией.
Известные допустимые расхождения:
- наборы реквизитов могут немного отличаться из-за стандартных реквизитов;
- ранжирование кодового поиска может отличаться между Lucene-подобным поиском и SQLite FTS5 BM25;
- граф вызовов может немного различаться из-за эвристик динамических вызовов.
Результат запуска от 2026-06-08: 13 exact / 1 ranking-info / 3 reference-server bugs / 0 clone defects.
Статус
Реализованы фазы 1-4: загрузка TXT-отчета, XML-объектов и кода BSL, права ролей, подписки, предопределенные данные, граф вызовов и инструменты поиска.
Фазы 5-7 требуют отдельной проверки в вашей среде:
npm install
npx tsc --noEmit
npm run parity
Для проверок соответствия можно начать с быстрого smoke-теста через run_checks и одно правило, а для семантического поиска — поднять LM Studio или другой OpenAI-совместимый endpoint и отслеживать get_semantic_index_status.
Ограничения
- стандартные реквизиты хранятся в
properties_json, а не отдельными строками в таблице полей; - внутренности
Form.xmlуровня контролов, событий и привязок пока не загружаются; - детали HTTP-сервисов и web-service operations отложены на следующую фазу;
- тексты RLS-условий загружаются только там, где они присутствуют в
Rights.xml.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.