onec-mcp-universal

mcp
Security Audit
Warn
Health Warn
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Low visibility — Only 7 GitHub stars
Code Warn
  • network request — Outbound network request in bsl-graph-lite/static/app.js
Permissions Pass
  • Permissions — No dangerous permissions requested
Purpose
This is an HTTP MCP gateway designed to integrate 1C:Enterprise systems with AI assistants. It provides a unified local endpoint for routing AI requests to the correct 1C backend, complete with a web dashboard and a dependency graph interface.

Security Assessment
Overall Risk: Low. The tool runs locally and does not request any inherently dangerous system permissions. It relies on Docker containers to manage its services securely. One minor flag is an outbound network request detected in the dashboard's frontend JavaScript file (`bsl-graph-lite/static/app.js`). While likely just fetching visualization data for the graph, you should verify its exact destination if you have strict network policies. There are no hardcoded secrets, no shell command execution vulnerabilities identified, and no dangerous permissions requested.

Quality Assessment
The project appears to be actively maintained, evidenced by a repository push as recent as today. It is properly licensed under the highly permissive MIT license, which is excellent for open-source adoption and customization. However, it currently has low community visibility with only 7 GitHub stars. Because it is a niche tool, this does not necessarily reflect poor quality, but it does mean a smaller community for support. The repository is well-documented, featuring detailed instructions and visuals, which indicates strong developer care.

Verdict
Safe to use, though developers should review the dashboard's JavaScript network requests if running in a strictly controlled environment.
SUMMARY

HTTP MCP-шлюз для 1С с dashboard

README.md

onec-mcp-universal

Единый MCP-сервер для работы с 1С:Предприятие из AI-ассистентов и любых MCP-клиентов

Один адрес http://localhost:8080/mcp вместо нескольких отдельных MCP-подключений. Шлюз принимает запросы от AI и маршрутизирует их к нужному бэкенду. Каждый сеанс AI-ассистента работает со своей активной базой данных независимо, с маршрутизацией в пределах своей сессии.

Dashboard — вкладка «Статус»

Dashboard — вкладка «Настройки»

Веб-интерфейс графа зависимостей


Содержание


Возможности

48+ MCP-инструментов + 1 ресурс:

Категория Кол-во Описание
Данные 1С 8 Запросы к БД, выполнение кода, метаданные, журнал регистрации, права, ссылки
Документация платформы 5 Поиск по API встроенного языка 1С, методы типов, конструкторы
Навигация по BSL 14 Символы, определения, граф вызовов, диагностика, переименование
Поиск по BSL 2 bsl_index + bsl_search_tool -- полнотекстовый поиск по процедурам/функциям
Запись BSL 1 write_bsl -- запись BSL-модулей в проект с автопереиндексацией
Отчёты 1С 8 Поиск, обогащение описаниями, описание и запуск отчётов по пользовательскому названию
ИТС / 1С:Напарник 0-1 its_search -- поиск по документации ИТС через API 1С:Напарника (появляется при NAPARNIK_API_KEY)
Анонимизация 2 enable_anonymization / disable_anonymization -- маскировка ПД (152-ФЗ)
Кеширование 1 invalidate_metadata_cache -- управление кешем метаданных (TTL 10 мин)
Профилирование 1 query_stats -- статистика производительности запросов
Управление и граф 12 Статус сервера, подключение баз, валидация запросов, переиндексация, граф зависимостей

MCP-ресурс: syntax_1c.txt -- справочник синтаксиса BSL для контекста AI.

Ключевые особенности:

  • Маршрутизация по сессиям -- каждый сеанс MCP-клиента работает со своей активной БД независимо
  • Автоподключение из EPF -- нажмите "Подключиться" в обработке, база зарегистрируется автоматически
  • Удалённое подключение -- шлюз на сервере 1С, AI-ассистент на рабочей станции разработчика
  • Анонимизация ПД -- маскировка ФИО, ИНН, СНИЛС, телефонов, email со стабильным hash-маппингом
  • 1С:Напарник -- поиск по ИТС через API code.1c.ai
  • BSL полнотекстовый поиск -- индекс по процедурам/функциям конфигурации
  • Профилирование запросов -- автоматический замер времени + подсказки по оптимизации
  • Кеширование метаданных -- TTL-кеш для get_metadata (10 мин по умолчанию)
  • Веб-дашборд -- визуальная панель на http://localhost:8080/dashboard с двумя вкладками (Статус, Настройки) и встроенной документацией RU/EN
  • Интерактивный веб-просмотрщик графа -- на http://localhost:8888/ (профиль bsl-graph): канвас на cytoscape.js, раскрытие двойным кликом, поиск по нескольким словам (размеры пособийРазмерыГосударственныхПособий), история поиска, панель со списком результатов, выбор активной БД радиокнопками. Та же slate-палитра что у дашборда
  • Запуск отчётов по пользовательскому названию -- find_reports / describe_report / run_report позволяют работать с названием из интерфейса 1С, а не только с техническим именем. enrich_report_docs дополняет каталог описаниями из ИТС/1С:Напарника, чтобы лучше находить отчёты по предметным формулировкам. Каталог отчётов хранится в SQLite и разделён по базам, а на вкладке Статус дашборда показывается только сводка по каталогу и сохранённым запускам без возможности запуска из интерфейса
  • Редактирование .env -- прямо из дашборда с автоперезапуском шлюза
  • 96 скилов для Codex и совместимых локальных раннеров навыков -- создание объектов, форм, обработок, отчётов, расширений + процессная оркестрация
  • Сессионный режим MCP -- idle timeout 8 часов
  • Параллельная выгрузка BSL -- несколько баз выгружаются одновременно, каждая в свою папку {BSL_WORKSPACE}/{slug}/, отмена и индексация независимы
  • Атомарная выгрузка через промежуточный каталог -- 1cv8 пишет во временную скрытую папку, по завершении атомарно переименовывается в целевую, предыдущая рабочая копия не затирается при сбое
  • Отложенный запуск LSP -- LSP-контейнер поднимается только после первой успешной выгрузки BSL, без пустых подпапок в рабочем каталоге до экспорта
  • Безопасная политика экспорта -- если сервис хостовой выгрузки недоступен, шлюз завершает операцию ошибкой; контейнерный 1cv8 включается только при ALLOW_CONTAINER_DESIGNER_EXPORT=true
  • Адаптивный таймаут -- 1 час для localhost, 3 часа для удалённых серверов
  • Автоподбор версии 1cv8 -- при несовпадении версии клиента и сервера хостовый сервис автоматически повторяет выгрузку с нужной версией платформы
  • Авто-обновление статуса EPF на дашборде -- индикатор подключения обработки обновляется раз в 5 секунд без перезагрузки страницы
  • MCP-совместимые ошибки -- ошибки инструментов с isError: true по спецификации MCP
  • Потокобезопасные бэкенды -- asyncio.Lock для защиты состояния соединений
  • Защита от выхода за пределы каталога -- валидация путей в API файлового браузера
  • Защита изменяющего HTTP API токеном -- GATEWAY_API_TOKEN для /api/action/*, /api/register, /api/unregister, /api/export-*
  • Потокобезопасный реестр БД -- threading.Lock для защиты состояния регистрации
  • Кросс-платформенный Docker -- host network на Linux, bridge на Windows/macOS
  • README / CODEX.md -- нейтральная документация по эксплуатации + отдельная памятка для Codex
  • Вспомогательный docker-control -- gateway больше не получает docker.sock, все операции жизненного цикла идут через внутренний HTTP-контур
  • Защищённый docker-control -- вспомогательный сервис принимает /api/* только с Authorization: Bearer ..., общий секрет хранится в DOCKER_CONTROL_TOKEN
  • Loopback/internal-only docker-control -- на Linux вспомогательный сервис опубликован только на 127.0.0.1:8091, а на Windows/macOS порт хоста 8091 не публикуется вовсе
  • Постоянный salt анонимизации -- стабильное маскирование ПД теперь привязано к отдельному секрету ANONYMIZER_SALT, который генерируется setup.sh и маскируется в дашборде
  • Опасные операции toolkit корректно работают через EPF из коробки -- toolkit по умолчанию пропускает опасные команды записи и выполнения до MCPToolkit.epf, а фактическое разрешение задаётся галочками и диалогом подтверждения в самой обработке
  • Rate limiting для REST/дашборда -- GATEWAY_RATE_LIMIT_* защищают /api/* и /dashboard*, не затрагивая /mcp и /health
  • Работает БЕЗ установки 1С -- platform-context опциональный (Docker profile), gateway стартует с одним onec-toolkit
  • Windows: автозапуск экспорт-сервиса -- Scheduled Task, переживает перезагрузку
  • Empty placeholder volumes -- data/empty-* папки убирают ошибки Docker при отсутствии Linux-путей
  • 1200+ автоматических тестов, CI/CD через GitHub Actions
  • Порог покрытия в CI: line+branch >= 94%

Локальный запуск тестов

python3 -m venv .venv
.venv/bin/pip install -r gateway/requirements-dev.txt
cd gateway
../.venv/bin/bash ./scripts/test.sh

На Linux с PEP 668 используйте локальное виртуальное окружение. ./scripts/test.sh выполняет preflight-проверку pytest-asyncio и даёт явную ошибку, если dev-зависимости не установлены.


Дизайн процессного слоя

План интеграции пользовательского и процессного слоя поверх текущей технической базы описан в документе:

Документ покрывает:

  • экспертные skill-алиасы (epf-expert, erf-expert, mxl-expert, inspect, validate)
  • инициализация проекта (1c-project-init, templates/mcp.json)
  • Context Guard (PostToolUse hook + мониторинг 70%/85%)
  • продолжение сессии (session-save/restore/retro)
  • нативный дизайн 1c-feature-dev под стек onec-mcp-universal
  • слой оркестрации процессов: brainstorm, write-plan, openspec-proposal, openspec-apply, openspec-archive
  • Совместимость с распространёнными входными точками: 1c-help-mcp, bsp-patterns, img-grid, role-expert, subsystem-expert, subagent-dev, 1c-test-runner, 1c-web-session, playwright-test
  • Пример сквозного жизненного цикла фичи: docs/feature-lifecycle-example.md

Context Guard и продолжение сессии

Что добавлено

  • Скрипты мониторинга контекста: tools/context-monitor.sh, tools/context-monitor.ps1
  • Пороги предупреждений: 70% и 85% использования контекста
  • Session-скилы: /session-save, /session-restore, /session-retro

Как подключить context-monitor (Linux/macOS)

Пример для хука PostToolUse в конфиге AI-ассистента:

bash ./tools/context-monitor.sh

Опциональные переменные:

  • MAX_TOKENS (по умолчанию 200000)
  • WARN_PERCENT (по умолчанию 70)
  • CRITICAL_PERCENT (по умолчанию 85)

Как подключить context-monitor (Windows PowerShell)

powershell -ExecutionPolicy Bypass -File .\tools\context-monitor.ps1

Параметры:

  • -MaxTokens (по умолчанию 200000)
  • -WarnPercent (по умолчанию 70)
  • -CriticalPercent (по умолчанию 85)

Шаблон инициализации проекта

  • Используйте /1c-project-init для локальной инициализации проекта.
  • Шаблон MCP-конфига находится в templates/mcp.json и копируется в .mcp.json проекта без перезаписи существующего файла.

Архитектура

MCP clients / Codex
       | HTTP :8080/mcp (Streamable HTTP)
       | (Mcp-Session-Id -> per-session routing)
       v
+----------------------------------------------+
|  onec-mcp-gw  (Python, host network)         |
|  non-root runtime, no direct docker.sock     |
|  internal Docker API -> docker-control       |
|                                              |
|  Статические бэкенды:                        |
|  +- onec-toolkit      :6003  (HTTP)          |
|  +- platform-context  :8081  (SSE)           |
|                                              |
|  Динамические бэкенды (per-DB):              |
|  +- onec-toolkit-{db} :6100+ (HTTP)          |
|  +- mcp-lsp-{db}      (stdio)                |
|                                              |
|  Модули шлюза:                               |
|  +- anonymizer      -- маскировка ПД         |
|  +- metadata_cache  -- кеш метаданных        |
|  +- profiler        -- замер запросов        |
|  +- bsl_search      -- индекс BSL            |
|  +- naparnik_client -- API 1С:Напарника      |
|  +- web_ui          -- /dashboard            |
|                                              |
|  маршрутизация по сессиям (idle 8ч)          |
|  /data/db_state.json <- постоянное состояние |
+----------------------------------------------+
                 |
                 v
        +---------------------------+
        | onec-mcp-docker-control   |
        | only service with         |
        | /var/run/docker.sock      |
        +---------------------------+
       ^           ^                ^
       |           |                |
  MCPToolkit.epf   |     https://code.1c.ai
  (клиент 1С)      |     (1С:Напарник API)
                   |
           /dashboard
           (веб-дашборд)

Маршрутизация по сессиям: каждый AI-клиент получает уникальный Mcp-Session-Id. Шлюз маршрутизирует запросы к активной базе данных этой сессии. Разные сеансы Codex и других MCP-клиентов могут одновременно работать с разными базами. Idle timeout сессий -- 8 часов.

Контейнер Образ Роль
onec-mcp-gw Собирается локально MCP-шлюз и маршрутизация по сессиям
onec-mcp-docker-control Собирается локально Внутренний вспомогательный сервис для жизненного цикла Docker-контейнеров, диагностики и LSP-прокси
onec-mcp-toolkit roctup/1c-mcp-toolkit-proxy Статический бэкенд данных
onec-mcp-platform ghcr.io/alkoleft/mcp-bsl-platform-context Документация платформы
onec-toolkit-{db} roctup/1c-mcp-toolkit-proxy Динамический бэкенд данных (per-DB)
mcp-lsp-{db} mcp-lsp-bridge-bsl BSL Language Server (per-DB)

Требования

  • Docker 24+ и Docker Compose v2 — установить
  • Codex CLI (codex) — для автоматической регистрации MCP и локальной установки skills
  • Linux (Ubuntu 22.04+) или Windows 10/11 с Docker Desktop (WSL2)
  • Платформа 1С:Предприятие 8.3, установленная на хосте
  • Информационная база 1С (серверная или файловая)

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

Linux

git clone https://github.com/AlekseiSeleznev/onec-mcp-universal.git
cd onec-mcp-universal
./setup.sh
# или сразу с графом зависимостей:
./setup.sh --with-bsl-graph

Windows

Требуется Git for Windows (включает Git Bash) или WSL2.

git clone https://github.com/AlekseiSeleznev/onec-mcp-universal.git
cd onec-mcp-universal
./setup.sh
# или сразу с графом зависимостей:
./setup.sh --with-bsl-graph

Что делает setup.sh

  1. Проверяет зависимости: Docker, Docker Compose v2, работающий daemon, наличие codex CLI
  2. Определяет ОС — на Windows/macOS автоматически создаёт docker-compose.override.yml из docker-compose.windows.yml (bridge-сеть; gateway ходит в docker-control по service name)
  3. Создаёт .env из .env.example (порт 8080, авто-определение пути к платформе 1С на Linux, абсолютный BSL_WORKSPACE и BSL_HOST_WORKSPACE внутри проекта, автоматически сгенерированные DOCKER_CONTROL_TOKEN и ANONYMIZER_SALT)
  4. Предупреждает, если порт 8080 занят другим процессом
  5. Если включён bsl-lsp-bridge, автоматически собирает локальный образ mcp-lsp-bridge-bsl:latest с Java 21-совместимым BSL Language Server
  6. Собирает и запускает core-контур; при --with-bsl-graph также поднимает встроенный локальный профиль bsl-graph
  7. Ждёт healthcheck gateway и docker-control (до 120 секунд — бэкенды стартуют дольше)
  8. Регистрирует MCP-сервер через codex mcp add — основной Codex-first сценарий

Повторный запуск setup.sh безопасен — он идемпотентен (.env не перезаписывается, MCP-запись пересоздаётся).

После установки проверьте codex mcp list или подключите URL http://localhost:8080/mcp в любом другом MCP-клиенте.

Dashboard: http://localhost:8080/dashboard

Опциональный графовый бэкенд: ./setup.sh --with-bsl-graph или docker compose --profile bsl-graph up -d --build


Установка на Linux

1. Предварительные требования

Убедитесь, что установлены Docker и Docker Compose:

docker --version    # Docker 24+
docker compose version  # Docker Compose v2

Если Docker не установлен, следуйте официальной инструкции.

2. Скачать проект

git clone https://github.com/AlekseiSeleznev/onec-mcp-universal.git
cd onec-mcp-universal
./setup.sh
# если нужен dependency graph:
./setup.sh --with-bsl-graph

Если нужен только ручной запуск без setup.sh, сначала соберите локальный LSP-образ:

./tools/build-lsp-image.sh
docker compose up -d --build

3. Настроить .env при необходимости

setup.sh уже создаёт .env автоматически. При ручном запуске создайте его сами:

cp .env.example .env

Откройте .env и при необходимости укажите путь к платформе 1С:

PLATFORM_PATH=/opt/1cv8/x86_64/8.3.27.2074

Узнать доступные версии: ls /opt/1cv8/x86_64/

Требования к пакетам 1С для выгрузки BSL. Шлюз запускает 1cv8 DESIGNER для выгрузки исходников. Нужны пакеты common и client (или server) нужной версии. На DEB-системах:

sudo dpkg -i 1c-enterprise-8.3.XX.YYYY-common_*.deb
sudo dpkg -i 1c-enterprise-8.3.XX.YYYY-client_*.deb

Если установлена только одна версия платформы, а сервер 1С работает на другой — шлюз автоматически обнаружит несоответствие версий и повторит выгрузку с правильным клиентом. Для этого установите клиент нужной версии аналогичным способом.

Опционально -- указать API-ключ 1С:Напарника (для поиска по ИТС):

NAPARNIK_API_KEY=ваш-ключ-api

4. Запустить контейнеры

docker compose up -d

Первый запуск: 2-3 минуты (скачивание образов + сборка шлюза). Платформа 1С монтируется из HOST_PLATFORM_PATH (по умолчанию /opt/1cv8) — шлюз автоматически находит нужную версию 1cv8 для выгрузки BSL.

5. Проверить

curl http://127.0.0.1:8080/health

Ожидаемый ответ:

{
  "status": "ok",
  "backends": {
    "onec-toolkit": {"ok": true, "tools": 9},
    "platform-context": {"ok": true, "tools": 5}
  }
}

После регистрации баз через MCPToolkit.epf или дашборд /health дополнительно показывает бэкенды по базам, например Z01/toolkit, Z01/lsp, Z02/toolkit, Z02/lsp.

Также можно открыть дашборд в браузере: http://localhost:8080/dashboard


Установка на Windows

На Windows Docker Desktop запускает контейнеры через WSL2. Для доступа из контейнера к сервису хостовой выгрузки используется host.docker.internal, а внутренний вспомогательный сервис docker-control остаётся только в bridge-сети docker compose. Для Windows предоставлен отдельный override-файл docker-compose.windows.yml.

Выгрузка BSL на Windows. Контейнер шлюза работает в Linux (WSL2) и не может запустить 1cv8.exe напрямую. Для выгрузки BSL нужен отдельный сервис на хосте — см. шаг 3 ниже.

Предварительные требования

  • Docker Desktop 4.25+ с включённым WSL2
  • Python 3.10+ (установленный на хосте Windows) — только для выгрузки BSL
  • Платформа 1С:Предприятие 8.3 (установленная на хосте Windows)

1. Скачать проект

git clone https://github.com/AlekseiSeleznev/onec-mcp-universal.git
cd onec-mcp-universal

2. Запустить установку

./setup.sh

setup.sh на Windows создаёт docker-compose.override.yml, собирает локальный LSP-образ и запускает core-контур через Docker Desktop.

3. Запустить сервис выгрузки на хосте (нужен только для BSL)

python tools\export-host-service.py --port 8082

Сервис запускает 1cv8 DESIGNER в фоне и сразу отвечает на запрос — соединение не зависает на время выгрузки. Оставить окно открытым или настроить как Windows-службу (через nssm или Task Scheduler).

4. Настроить .env при необходимости

Параметры для Windows (выгрузка BSL через хостовый сервис):

EXPORT_HOST_URL=http://host.docker.internal:8082

На Windows закомментируйте HOST_PLATFORM_PATH и PLATFORM_PATH — платформа установлена на хосте Windows, а не в WSL.

5. Ручной запуск контейнеров с Windows-override

./tools/build-lsp-image.sh
docker compose -f docker-compose.yml -f docker-compose.windows.yml up -d

Этот шаг нужен только если вы не используете ./setup.sh или сознательно перезапускаете стек вручную. Файл docker-compose.windows.yml заменяет network_mode: host на bridge-сеть с маршрутизацией по имени сервиса для docker-control; порт хоста 8091 не публикуется. Первый запуск: 2-3 минуты.

6. Проверить

curl http://127.0.0.1:8080/health

Или откройте в браузере: http://localhost:8080/dashboard

7. Подключить AI-ассистент

Адрес тот же: http://localhost:8080/mcp

Типичные проблемы на Windows

Проблема Решение
platform-context не стартует Закомментируйте строку ${HOST_PLATFORM_PATH:-/opt/1cv8}:/opt/1cv8:ro в docker-compose.yml -- на Windows монтирование Linux-путей невозможно
Выгрузка BSL не работает Убедитесь, что запущен export-host-service.py и в .env указан EXPORT_HOST_URL=http://host.docker.internal:8082
Порт 8080 занят Измените порт в .env: GW_PORT=8090 и используйте http://localhost:8090/mcp

Подключение к AI-ассистенту

setup.sh регистрирует сервер в Codex автоматически. Для других клиентов — команды ниже.

Как AI-клиент «знает», когда использовать инструменты

После любого подключения сервер на initialize возвращает блок instructions — краткий протокол работы с 1С (какие инструменты вызывать в каком порядке, когда сообщать о недоступности вместо выдумывания кода). Современные MCP-клиенты с поддержкой instructions подмешивают этот блок в системный промпт ассистента автоматически. Общий текст протокола продублирован в AGENTS.md. Готовые сценарии публикуются через MCP prompts/list (connect_and_inspect, describe_object, safe_query, find_usage, bsp_api, reindex_after_export).

Codex

codex mcp add onec-universal --url http://localhost:8080/mcp

Скилы 1С доустанавливаются в ~/.codex/skills/ скриптом install-skills.sh (уже вызван setup.sh).

Cursor / Windsurf / другие Streamable HTTP MCP-клиенты

Любой клиент с поддержкой Streamable HTTP:

http://localhost:8080/mcp

Guidance-блок (instructions) придёт в ответе initialize — никаких дополнительных настроек.


Подключение базы 1С

Базу можно подключить тремя способами.

Способ 1. Из обработки MCPToolkit.epf (рекомендуемый)

  1. Откройте 1c/MCPToolkit/build/MCPToolkit.epf в клиенте 1С:Предприятие
  2. Нажмите Подключиться -- база зарегистрируется в шлюзе автоматически (Docker-контейнеры создадутся)
  3. Нажмите Выгрузить BSL -- выгрузка запустится в фоне, обработка не зависнет
  4. Нажмите Статус выгрузки чтобы проверить завершение выгрузки и дождаться окончания индексации. Пока индекс ещё строится, обработка пишет Идёт индексация BSL для поиска по коду...; число символов показывается только после реального завершения индексации

Обработку держать открытой во время работы. Имя базы и сервер определяются автоматически.

Способ 2. Из веб-дашборда

Откройте http://localhost:8080/dashboard, вкладка Настройки -> Добавить базу. Заполните имя, строку подключения и путь к проекту.

Способ 3. Через AI-ассистент

Подключи базу ERP_Test, строка подключения Srvr=server-erp;Ref=ERP_Test;, папка /home/user/projects/ERP_Test

Шлюз создаст два Docker-контейнера: onec-toolkit-ERP_Test (данные) и mcp-lsp-ERP_Test (навигация по коду).

Форматы строки подключения:

Тип базы Формат
Серверная Srvr=server-erp;Ref=ERP_Test;
С авторизацией Srvr=server-erp;Ref=ERP_Test;Usr=Ivanov;Pwd=пароль;
Файловая File=/путь/к/базе

Кириллические и пробельные имена баз поддерживаются. Шлюз автоматически создаёт безопасный slug для Docker-контейнеров (Бухгалтерия_тестированиеBuhgalteriy_testirovanie), сохраняя оригинальное имя для отображения.

Выгрузка исходников BSL

После подключения базы выгрузите исходники для навигации по коду через кнопку Выгрузить BSL в обработке или командой AI:

Выгрузи исходники конфигурации

Выгрузка использует 1cv8 DESIGNER /DumpConfigToFiles в безинтерфейсном режиме через xvfb-run. Шлюз автоматически:

  • Пишет через промежуточный каталог -- 1cv8 выгружает в скрытую временную папку {BSL_WORKSPACE}/.{slug}.staging-<hash> рядом с целевой; по завершении она атомарно переименовывается в {BSL_WORKSPACE}/{slug}. Прерванная выгрузка не затирает предыдущую рабочую копию и не ломает индекс/LSP. Префикс . скрывает промежуточный каталог от ls без -a и от индексеров, игнорирующих скрытые файлы
  • Находит нужный бинарник -- сканирует /opt/1cv8/x86_64/ для всех установленных версий с толстым клиентом (1cv8)
  • Определяет версию сервера -- при несовпадении версий клиента и сервера извлекает нужную версию из ошибки и повторяет попытку с подходящим бинарником
  • Выгружает в фоне -- обработка сразу отвечает и не зависает
  • Автоматически индексирует BSL -- после выгрузки запускает полнотекстовое индексирование процедур/функций для bsl_search_tool
  • Не публикует промежуточный размер индекса -- пока индексация большой выгрузки ещё не стабилизировалась, статус остаётся Идёт индексация BSL для поиска по коду...; число символов появляется только после финального прохода
  • Адаптивный таймаут -- 1 час для localhost, 3 часа для удалённых серверов 1С

Почему нужен промежуточный каталог? Во время длительной выгрузки (десятки тысяч файлов) прямая запись в рабочую папку базы приводила бы к «полубитой» версии: индексер и LSP сканируют каталог и увидели бы смесь старых и новых файлов. Промежуточный каталог + атомарный rename гарантируют, что переход от предыдущей рабочей копии к новой происходит одним шагом файловой системы.

По умолчанию используется сервис хостовой выгрузки (EXPORT_HOST_URL). Если он недоступен, экспорт завершается немедленной ошибкой для защиты программной лицензии 1С. Контейнерный экспорт разрешается только явным флагом:

ALLOW_CONTAINER_DESIGNER_EXPORT=true

Проверить готовность кнопкой Статус выгрузки или:

Покажи статус выгрузки BSL

Время выгрузки зависит от размера конфигурации: БП/УТ -- 5-15 мин, ERP/ЗУП -- 30-60 мин.

Требование: на машине шлюза должна быть установлена полная платформа 1С (пакет 1c-enterprise-*-client, не только серверные компоненты). Версия платформы должна совпадать с версией на сервере 1С. Узнать установленные версии: ls /opt/1cv8/x86_64/

Настройка папки выгрузки BSL

По умолчанию исходники сохраняются в ./bsl-projects (рядом с docker-compose.yml).

Linux

Через дашборд (рекомендуется). Откройте http://localhost:8080/dashboard → вкладка Настройки → карточка ПАПКА ВЫГРУЗКИ BSLИзменить → введите путь под /home/... или выберите через браузер папок → Сохранить.

Для путей под /home перезапуск Docker не требуется — шлюз пишет через /hostfs-home (смонтирован при старте как /home:/hostfs-home:rw). Смена пути вступает в силу немедленно: gateway перепривязывает LSP/full-text индекс и автоматически пересоздаёт bsl-graph, чтобы Docker обновил bind mount графа на новый каталог.

Для путей вне /home (например /opt/bsl-projects) дополнительно укажите BSL_WORKSPACE в .env и пересоздайте контейнер:

BSL_WORKSPACE=/opt/bsl-projects
docker compose up -d --force-recreate gateway

Windows

Через дашборд. Откройте дашборд → Настройки → карточка ПАПКА ВЫГРУЗКИ BSLИзменить → введите путь Windows → Сохранить.

На Windows смена папки требует пересоздания контейнера (Docker volume меняется только при старте). Дашборд автоматически обновляет BSL_WORKSPACE в .env и перезапускает шлюз. Если не сработало — выполните вручную:

docker compose -f docker-compose.yml -f docker-compose.windows.yml up -d --force-recreate gateway
# Windows
BSL_WORKSPACE=C:\Users\user\bsl-projects

Исходники каждой базы хранятся в подпапке {BSL_WORKSPACE}/{slug_базы}/.


Обработка MCPToolkit.epf

Внешняя обработка 1c/MCPToolkit/build/MCPToolkit.epf -- основной способ подключения базы 1С к шлюзу. Обработка открывается в клиенте 1С:Предприятие и предоставляет кнопки:

Кнопка Действие
Подключиться Регистрирует текущую базу в шлюзе. Создаёт Docker-контейнер onec-toolkit-{db}. Имя базы и сервер определяются автоматически
Отключиться Останавливает контейнеры базы и удаляет регистрацию из шлюза
Выгрузить BSL Сначала спрашивает подтверждение с указанием реального пути на диске (запрашивается у шлюза через /api/export-preview): «Выгрузить BSL в: /home/user/Z/Z01 — Продолжить?». При подтверждении запускает выгрузку в фоне — обработка не зависает. На типовых конфигурациях (БП, УТ) занимает 5-15 мин, на крупных (ERP, ЗУП) -- 30-60 мин
Статус выгрузки Показывает текущий статус выгрузки и индексации: идёт / завершена успешно (N BSL файлов) / Идёт индексация BSL для поиска по коду... / индексация завершена (N символов) / ошибка. Промежуточные значения индекса вроде 1-2 символов для больших выгрузок не считаются завершением и в интерфейсе не показываются
Отменить выгрузку Останавливает текущую выгрузку BSL (kill процесса 1cv8 DESIGNER на хосте)

Секция «ПАПКА ВЫГРУЗКИ BSL»

В обработке есть секция ПАПКА ВЫГРУЗКИ BSL -- путь к папке на машине шлюза, куда будут сохраняться BSL-исходники. При первом запуске значение берётся из .env (BSL_WORKSPACE). Нажмите «...» чтобы выбрать папку через диалог, затем Сохранить. Для Linux-путей под /home/... новый путь применяется сразу: gateway обновляет настройки рабочего контура, перепривязывает LSP/full-text индекс и автоматически пересоздаёт bsl-graph. Для сценариев с ручным редактированием .env или путей, требующих полного пересоздания bind mount, используйте docker compose ... --force-recreate как резервный вариант.

Для MCP-инструмента export_bsl_sources поведение теперь такое:

  • по умолчанию выгрузка стартует в фоне и сразу возвращает управление клиенту;
  • для отслеживания используйте инструмент get_export_status;
  • если база требует аутентификацию 1С, передавайте Usr=...;Pwd=... в строке подключения;
  • для синхронного ожидания результата можно передать wait=true.

Если шлюз запущен на отдельной машине, путь должен быть корректным для той ОС, где работает шлюз (Linux или Windows). Диалог выбора папки в этом случае показывает локальные папки -- удобно использовать как ориентир по формату пути.

Автоподключение: при нажатии "Подключиться" обработка отправляет HTTP-запрос на шлюз с параметрами базы. Шлюз автоматически создаёт контейнеры и регистрирует базу -- никакой ручной настройки не требуется.

Автономный режим: если шлюз недоступен (контейнеры остановлены, сеть не работает), обработка переключается на прямое подключение к toolkit-бэкенду. В этом режиме недоступны BSL-навигация, документация платформы и анонимизация.

Безопасность: при каждом свежем открытии MCPToolkit.epf все dangerous-toggle по умолчанию выключены. В форме доступны три независимые опции:

  • Записать объект
  • Привилегированный режим
  • Все опасные операции без предупреждения

Последняя включает глобальный bypass dangerous-check и при переключении показывает отдельное предупреждение. На production-базах рекомендуется оставить все три чекбокса выключенными.

Статус подключения отображается на дашборде (http://localhost:8080/dashboard) -- вкладка "Статус", раздел "Подключённые базы". Зелёный индикатор EPF означает, что обработка активна.
Индикатор EPF основан на heartbeat (/api/epf-heartbeat): если heartbeat не приходит дольше EPF_HEARTBEAT_TTL_SECONDS, индикатор становится жёлтым.
По умолчанию EPF_HEARTBEAT_TTL_SECONDS=240. Это значение специально больше toolkit command timeout, чтобы долгие команды не помечали живую EPF-сессию как отключённую.

Файл обработки: 1c/MCPToolkit/build/MCPToolkit.epf.

MCPToolkit.epf


Работа с несколькими базами

Каждый сеанс AI-ассистента или MCP-клиента работает со своей активной базой данных. Все базы остаются подключёнными одновременно.

Подключи базу ZUP, строка подключения Srvr=server-erp;Ref=ZUP;, папка /home/user/projects/ZUP
Переключись на базу ZUP
Покажи список подключённых баз
Отключи базу ZUP

Маршрутизация по сессиям: если один сеанс Codex работает с ERP, а другой -- с ZUP, они не пересекаются. Idle timeout сессий -- 8 часов.

При перезапуске шлюза все ранее подключённые базы восстанавливаются автоматически.


Запуск отчётов 1С по пользовательскому названию

Шлюз строит отдельный для каждой базы каталог отчётов в SQLite (/data/report-catalog.sqlite) по выгруженным BSL/XML-исходникам. Каталог хранит пользовательские названия, технические имена, варианты, параметры и стратегии запуска. Это позволяет искать и запускать отчёты по тому названию, которое видит пользователь в интерфейсе 1С.

Архитектура контура отчётов

Контур отчётов разделён на несколько уровней:

  • report_catalog ведёт локальный SQLite-каталог и историю запусков;
  • report_analyzer разбирает выгруженные BSL/XML, формы, менеджеры и подсказки графа зависимостей, чтобы понять, какие отчёты существуют и как их запускать;
  • report_runner выбирает стратегию запуска, формирует вызов и классифицирует результат как done, needs_input, unsupported или error;
  • tool_handlers/reports публикует MCP/API-инструменты поверх этого контура.

Каталог и результаты запусков живут внутри контейнера шлюза: каталог в /data/report-catalog.sqlite, сохранённые результаты в /data/report-results. Это локальное состояние шлюза. Реальное выполнение отчёта идёт не внутри Python, а через отдельный для базы контур toolkit/EPF, подключённый к соответствующей базе.

bsl-graph используется как источник зависимостей и кандидатов на точки входа, но сам отчёты не исполняет. Если граф недоступен, каталог всё равно строится по доступным BSL/XML-источникам.

Каталог можно перестроить или использовать через MCP/API:

  • analyze_reports(database) -- перестроить каталог отчётов для конкретной базы;
  • enrich_report_docs(database, report|title|query, limit=10, force=false) -- загрузить и закешировать описание отчёта из ИТС/1С:Напарника для улучшения поиска и диагностики;
  • find_reports(database, query) -- найти отчёт по пользовательскому названию, синониму, описанию или техническому имени;
  • list_reports(database) -- вывести каталогизированные отчёты для базы;
  • describe_report(database, title) -- показать найденный отчёт, варианты, параметры и стратегию запуска;
  • run_report(database, title, period, filters, params, context) -- выполнить отчёт и вернуть данные либо формализованный запрос недостающего контекста;
  • get_report_result(database, run_id) -- получить страницу большого сохранённого результата;
  • explain_report_strategy(database, title, variant) -- объяснить, почему модуль запуска выбрал конкретную стратегию.

Для HTTP-клиентов поверх этого же контура доступна REST-обёртка POST /api/reports/{action} с действиями analyze, find, list, describe, run, validate-all, result, explain. Она повторяет контракт соответствующих MCP-инструментов для отчётов и не зависит от видимости карточек в дашборде.

database обязателен для всех инструментов работы с отчётами. Это намеренно: несколько баз могут быть подключены одновременно, и запуск отчётов не должен зависеть от активной MCP-сессии. Обогащение через enrich_report_docs требует NAPARNIK_API_KEY; если ключа нет или сервис недоступен, базовый статический каталог продолжает работать.

Как получать данные из отчётов

Практический поток такой:

  1. Если точное название или тип отчёта неясны, вызвать find_reports(database, query).
  2. Для найденного кандидата вызвать describe_report(database, title) и посмотреть техническое имя, варианты, ожидаемые параметры и доступную стратегию запуска.
  3. Запустить run_report(...) с явным database и, при необходимости, передать:
    • period для периодических отчётов;
    • filters для прикладных отборов;
    • params для параметров варианта/СКД;
    • context для контекста выполнения, который нельзя надёжно вывести статически.
  4. Если ответ большой, дочитывать его через get_report_result(database, run_id).
  5. Если нужно понять выбор стратегии или причину ограничения, вызвать explain_report_strategy(...).

На уровне дашборда отчёты не запускаются. В интерфейсе на вкладке Статус показывается только диагностическая сводка: построен ли каталог, когда был последний анализ, сколько отчётов и вариантов найдено, сколько отчётов уже покрыто последним сохранённым запуском, сколько из них имеют сохранённый результат, и как распределяются статусы по последнему запуску каждого отчёта.

Статусы выполнения отчётов

run_report и пакетная проверка возвращают формализованные статусы:

  • done -- данные отчёта получены;
  • needs_input -- для запуска не хватает параметров, периода или контекста выполнения; ответ содержит, что именно нужно дозапросить и с чем повторить run_report;
  • unsupported -- отчёт распознан, но в текущем контуре выполнения без пользовательского интерфейса есть известное ограничение;
  • error -- необработанная ошибка выполнения. Это уже дефект или регрессия, а не ожидаемый исход.

Если отчёт возвращает needs_input, ожидаемая модель работы такая: движок или пользователь дозаполняет недостающий context/params, затем тот же run_report вызывается повторно. То есть первый запуск может закончиться анализом требований, а второй - реальным получением строк.

Пример запуска отчёта

Пример нейтрального вызова:

{
  "database": "MY_INFOBASE",
  "title": "Расчетный листок",
  "period": {"from": "2025-12-01", "to": "2025-12-31"},
  "filters": {"Организация": "Основная"},
  "params": {"ВариантОтчета": "Основной"},
  "context": {"employee_hint": "Иванов"}
}

Если отчёт неоднозначен, run_report не выбирает молча, а возвращает кандидатов или запрос недостающего контекста.


Удалённое подключение

Если сервер 1С находится на удалённой машине и пользователи подключаются к нему через тонкий клиент, шлюз можно развернуть прямо на этом сервере.

Когда это нужно

Типичная ситуация: сервер 1С стоит в серверной или в облаке. Пользователи работают через тонкий клиент. AI-ассистент или MCP-клиент запущен на рабочей станции разработчика. Платформа 1С не установлена на рабочей станции. В этом случае шлюз разворачивается на сервере 1С, а клиент подключается к нему по сети.

Развёртывание на сервере 1С

# На сервере 1С (server-erp)
git clone https://github.com/AlekseiSeleznev/onec-mcp-universal.git
cd onec-mcp-universal
cp .env.example .env
# Указать путь к платформе в .env
docker compose up -d
# Открыть порт 8080 в файрволе
sudo ufw allow 8080/tcp

Проверить доступность с рабочей станции:

curl http://server-erp:8080/health

Подключение AI-ассистента к удалённому серверу

На рабочей станции разработчика:

# Codex
codex mcp add onec --url http://server-erp:8080/mcp

Для любого другого MCP-клиента используйте тот же URL: http://server-erp:8080/mcp

Здесь server-erp -- имя или IP-адрес сервера 1С (например, 192.168.1.100).

Подключение EPF

Обработку MCPToolkit.epf нужно открыть в тонком клиенте 1С на сервере. В поле "Адрес шлюза" укажите http://localhost:8080, так как шлюз и обработка работают на одной машине. Нажмите "Подключиться".
Если в шлюзе включён GATEWAY_API_TOKEN, укажите токен прямо в этом поле: http://localhost:8080#token=<секрет>.

Если 1С-клиент запущен на рабочей станции (не на сервере), в поле "Адрес шлюза" укажите адрес сервера: http://server-erp:8080.

Что работает удалённо

Всё, что проходит через EPF (данные, метаданные, журнал), работает одинаково -- локально и удалённо.

Категория Статус Примечание
Запросы к данным (execute_query, execute_code) Работает Через EPF на сервере
Метаданные (get_metadata, get_access_rights) Работает Структура конфигурации и роли
Журнал регистрации (get_event_log) Работает Чтение и фильтрация журнала
Ссылки (get_object_by_link, find_references_to_object) Работает Навигационные ссылки
Документация платформы (search, info) Работает Хранится в контейнере
Анонимизация Работает Маскировка ПД на стороне шлюза
Поиск по ИТС (its_search) Работает API 1С:Напарника
Валидация запросов (validate_query) Работает Статическая + серверная проверка
BSL-навигация (definition, symbol_explore) Требует настройки Нужно выгрузить BSL-файлы на сервер (кнопка «Выгрузить BSL» в EPF)
Выгрузка BSL (export_bsl_sources) Работает Шлюз использует 1cv8 DESIGNER с автоопределением версии платформы

Настройка BSL-навигации удалённо

BSL-навигация (переход к определению, граф вызовов) работает только при наличии BSL-файлов на сервере.

Способ 1 (автоматический). Убедитесь, что на сервере установлена полная платформа 1С (пакет 1c-enterprise-*-client) и путь HOST_PLATFORM_PATH указывает на неё. Шлюз автоматически найдёт 1cv8 нужной версии. Нажмите "Выгрузить BSL" в обработке MCPToolkit.epf -- выгрузка запустится в фоне. Нажмите "Статус выгрузки" для проверки. Пока индекс строится, обработка показывает Идёт индексация BSL для поиска по коду...; итоговое число символов появится только после завершения индексации. На крупных конфигурациях (ERP, ЗУП) занимает 30-60 мин.

Способ 2 (ручной). Выгрузите конфигурацию на любой машине с 1С, скопируйте BSL-файлы на сервер, попросите AI переиндексировать:

Переиндексируй BSL-файлы

Поведение обработки EPF

Если в поле "Адрес шлюза" указан не localhost (например http://server-erp:8080), обработка выводит в лог предупреждение: BSL-навигация и выгрузка BSL недоступны с этой рабочей станции -- нужно использовать шлюз локально или выгружать BSL прямо на сервере.
Для токен-защищённого шлюза поддерживается формат http://server-erp:8080#token=<секрет>: токен подставляется в Authorization: Bearer ... для /api/register, /api/unregister, /api/export-*, /api/action/*.

Порты для удалённого доступа

Минимальный набор портов, которые нужно открыть на сервере 1С:

Порт Сервис Назначение
8080 MCP-шлюз AI-ассистент подключается к /mcp, дашборд на /dashboard
443 или 80 Веб-публикация 1С Тонкий клиент в браузере (обычно уже открыт)
3389 RDP (опционально) Удаленный рабочий стол для доступа к Конфигуратору

Если нужен прямой доступ к Конфигуратору без RDP:

Порт Назначение
1540-1541 Агент и менеджер кластера 1С
1560-1591 Рабочие процессы кластера 1С

Все остальные порты (6003, 6100+, 8081) работают внутри сервера через localhost и не требуют открытия наружу.

Схема удалённого подключения

Рабочая станция                     Сервер 1С (server-erp)
+-----------------+                  +-----------------------------+
| Codex / другой  |   HTTP :8080     | Docker                      |
| MCP-клиент      | ---------------> | onec-mcp-gw (шлюз)          |
|                 |   /mcp           | onec-toolkit (бэкенд)       |
+-----------------+                  | platform-context            |
                                     | mcp-lsp (навигация BSL)     |
                                     +-----------------------------+
                                              ^
                                              | localhost
                                     +-----------------------------+
                                     | Тонкий клиент 1С            |
                                     | MCPToolkit.epf              |
                                     +-----------------------------+
                                              |
                                     +-----------------------------+
                                     | Сервер 1С:Предприятие       |
                                     | Информационная база         |
                                     +-----------------------------+

Безопасность. Порт 8080 открывает доступ ко всем инструментам шлюза. Ограничьте доступ по IP через файрвол: sudo ufw allow from 192.168.1.0/24 to any port 8080. Для изменяющего HTTP API включите токен: GATEWAY_API_TOKEN=<секрет>. В EPF используйте формат адреса http://host:8080#token=<секрет>. Не открывайте порт в интернет без VPN или SSH-туннеля.


Примеры команд AI

Все примеры -- запросы на естественном русском языке в чате с AI. Под каждым примером указан MCP-инструмент, который будет вызван.

Запросы к данным

Выбери первые 10 контрагентов с наименованием и ИНН

Инструмент: execute_query -- выполнит запрос к базе данных и вернёт таблицу результатов

Покажи документы реализации за последний месяц с суммой больше 100 000

Инструмент: execute_query -- сформирует запрос с условием по дате и сумме

Выбери остатки товара "Кабель ВВГ 3x2.5" на всех складах

Инструмент: execute_query -- обратится к виртуальной таблице остатков регистра накопления

Посчитай непроведённые документы поступления за текущий год

Инструмент: execute_query -- выполнит агрегирующий запрос с фильтром по проведённости

Выполнение кода

Выполни код: Результат = ТекущаяДатаСеанса()

Инструмент: execute_code -- выполнит произвольный BSL-код на сервере 1С и вернёт результат

Выполни код: Результат = Метаданные.Конфигурация.Версия

Инструмент: execute_code -- получит версию конфигурации через платформенный API

Метаданные

Покажи структуру документа РеализацияТоваровУслуг

Инструмент: get_metadata -- вернёт реквизиты, табличные части, формы и движения документа

Какие реквизиты есть у справочника Номенклатура?

Инструмент: get_metadata -- покажет список реквизитов с типами

Сколько объектов в конфигурации по каждому типу?

Инструмент: get_metadata -- вернёт дерево метаданных с количеством объектов

Валидация запросов

Проверь запрос:
ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.Контрагенты ГДЕ Ссылка В (&Список

Инструмент: validate_query -- обнаружит незакрытую скобку и предложит исправление

Проверь корректность: ВЫБРАТЬ * ИЗ Справочник.НесуществующийСправочник

Инструмент: validate_query -- проверит существование объектов метаданных в запросе

Журнал регистрации

Покажи последние 10 ошибок из журнала регистрации за сегодня

Инструмент: get_event_log -- отфильтрует записи по уровню "Ошибка" и дате

Найди записи журнала от пользователя Ivanov за последний час

Инструмент: get_event_log -- выполнит поиск по имени пользователя с временным фильтром

Права доступа

Какие роли имеют право изменять справочник Номенклатура?

Инструмент: get_access_rights -- покажет роли с правом "Изменение" на объект

Покажи права на документ РеализацияТоваровУслуг -- чтение, добавление, изменение

Инструмент: get_access_rights -- вернёт матрицу прав по ролям для документа

Поиск использований и ссылки

Найди все документы где используется контрагент "Электробыт"

Инструмент: find_references_to_object -- найдёт ссылки на объект во всех связанных таблицах

Открой контрагента по ссылке e1cib/data/Справочник.Контрагенты?ref=80260015e9b8c48d11e2c2d02ff9d345

Инструмент: get_object_by_link -- получит объект по навигационной ссылке 1С

Получи навигационную ссылку на документ РеализацияТоваровУслуг номер 00000123

Инструмент: get_link_of_object -- вернёт URL-ссылку для открытия объекта в 1С

Навигация по BSL

Найди процедуру ЗаполнитьТабличнуюЧастьТовары в конфигурации

Инструмент: symbol_explore -- найдёт символ в дереве модулей конфигурации

Покажи граф вызовов функции ПолучитьСтруктуруОплаты

Инструмент: call_graph -- построит дерево вызывающих и вызываемых процедур

Покажи иерархию вызовов процедуры ОбработкаПроведения

Инструмент: call_hierarchy -- покажет входящие и исходящие вызовы процедуры

Какие ошибки в модуле ИнтеграцияЕГАИС?

Инструмент: document_diagnostics -- вернёт список ошибок и предупреждений BSL Language Server

Покажи определение функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта

Инструмент: definition -- перейдёт к месту определения процедуры/функции

Покажи информацию о методе ТекстЗапроса объекта Запрос

Инструмент: hover -- вернёт тип, параметры и документацию символа

Покажи общий анализ BSL-проекта

Инструмент: project_analysis -- выведет структуру проекта и количество символов

Покажи статус BSL Language Server

Инструмент: lsp_status -- вернёт версию, состояние индексации, количество файлов

Переименуй функцию ПолучитьДанные в ПолучитьДанныеКонтрагента

Инструмент: rename -- переименует символ во всех местах использования

Покажи доступные рефакторинги для выделенного фрагмента

Инструмент: code_actions -- вернёт доступные действия рефакторинга

Поиск по BSL-коду

Проиндексируй BSL-файлы конфигурации

Инструмент: bsl_index -- создаст полнотекстовый индекс по всем модулям проекта

Найди функцию ЗначенияРеквизитовОбъекта в исходниках

Инструмент: bsl_search_tool -- выполнит поиск по индексу процедур/функций

Запись BSL-кода

Запиши модуль ОбщегоНазначения с новой функцией ПолучитьДанные

Инструмент: write_bsl -- запишет BSL-модуль в файл проекта и автоматически переиндексирует

Поиск по ИТС (1С:Напарник)

Как правильно использовать регламентные задания в БСП?

Инструмент: its_search -- найдёт статьи ИТС через API 1С:Напарника

Найди в ИТС информацию про механизм обмена данными через планы обмена

Инструмент: its_search -- выполнит поиск по документации ИТС и вернёт релевантные фрагменты

Документация платформы

Покажи описание типа Запрос

Инструмент: info -- вернёт общую информацию о типе платформы 1С

Покажи все методы и свойства объекта ТаблицаЗначений

Инструмент: getMembers -- выведет полный список членов типа

Покажи описание метода Выполнить объекта Запрос

Инструмент: getMember -- вернёт детальное описание метода с параметрами

Покажи конструкторы типа Массив

Инструмент: getConstructors -- покажет все варианты создания через Новый

Найди в документации платформы всё про HTTPЗапрос

Инструмент: search -- выполнит полнотекстовый поиск по документации

Важные live-контракты MCP-инструментов

  • platform-context:
    • search требует query, type, limit
    • info требует name, type
    • getMembers / getConstructors требуют typeName
    • getMember требует typeName, memberName
  • get_link_of_object принимает object_description -- объект-описание со ссылкой, а не произвольную строку.
  • find_references_to_object принимает target_object_description и search_scope; search_scope -- массив категорий/мета-областей, а не файловых путей.
  • execute_code:
    • для CRUD и работы с Справочники.* / Документы.* используйте execution_context=\"server\"
    • execution_context=\"client\" нужен для работы с реквизитами формы EPF и проверок вроде АвтоРазрешитьЗаписать
    • dangerous operations из MCP идут «из коробки» до EPF, а фактическое разрешение определяется галочками в самой обработке

Анонимизация данных

Включи анонимизацию данных

Инструмент: enable_anonymization -- активирует маскировку персональных данных

Выключи анонимизацию

Инструмент: disable_anonymization -- отключит маскировку, данные будут возвращаться как есть

При включённой анонимизации ФИО, ИНН, СНИЛС, телефоны, email и названия компаний заменяются на стабильные фейки. Один и тот же оригинал всегда маппится в один и тот же фейк (hash-маппинг).

Профилирование запросов

Покажи статистику производительности запросов

Инструмент: query_stats -- вернёт замеры времени выполнения с подсказками по оптимизации

Кеш метаданных

Сбрось кеш метаданных

Инструмент: invalidate_metadata_cache -- очистит TTL-кеш и следующий запрос метаданных пойдёт напрямую в базу

Переиндексирование

Переиндексируй BSL-файлы

Инструмент: reindex_bsl -- пересоздаст индекс BSL Language Server для текущей базы

Управление базами

Подключи базу ERP_Test, строка подключения Srvr=server-erp;Ref=ERP_Test;, папка /home/user/projects/ERP_Test

Инструмент: connect_database -- зарегистрирует базу и создаст Docker-контейнеры

Переключись на базу ZUP

Инструмент: switch_database -- сменит активную базу в текущей сессии, не затрагивая другие сессии

Покажи список подключённых баз

Инструмент: list_databases -- выведет все зарегистрированные базы со статусами

Отключи базу ZUP

Инструмент: disconnect_database -- остановит контур выполнения базы, но оставит её зарегистрированной в шлюзе

Статус сервера

Покажи статус MCP-сервера

Инструмент: get_server_status -- вернёт статус всех бэкендов и количество инструментов

Выгрузка исходников

Выгрузи исходники конфигурации

Инструмент: export_bsl_sources -- запустит 1cv8 DESIGNER /DumpConfigToFiles с автоопределением версии платформы

Покажи статус выгрузки исходников для ERP

Инструмент: get_export_status -- вернёт статус фоновой выгрузки и индексации BSL

Граф зависимостей (опционально, встроенный профиль bsl-graph)

Покажи статистику графа объектов конфигурации

Инструмент: graph_stats -- количество узлов, рёбер, распределение по типам

Найди объекты связанные с документом ПоступлениеТоваровУслуг

Инструмент: graph_related -- анализ влияния, входящие и исходящие зависимости

Найди в графе все регистры накопления

Инструмент: graph_search -- поиск объектов по типу и имени


Веб-дашборд

Визуальная панель мониторинга и управления доступна по адресу:

http://localhost:8080/dashboard

В дашборде две вкладки: Статус и Настройки. Поиск и запуск отчётов остаются MCP/API-возможностью; на вкладке Статус показывается только техническая карточка со сводкой.

Вкладка "Статус"

Обзор состояния системы в реальном времени:

  • Статус бэкендов (зелёный / красный) с количеством инструментов
  • Список подключённых баз данных со статусом EPF-подключения
  • Зачёркивание имени базы и кнопки Отключить/Подключить зависят от backend-подключения (контейнеры/маршрутизация), а не от состояния EPF
  • Профилирование запросов -- время выполнения, количество вызовов
  • Кеш метаданных -- размер, TTL, попадания/промахи
  • Статус анонимизации (вкл/выкл)
  • Карточка Отчёты 1С -- локальная сводка по каталогу отчётов: последний анализ, число отчётов и вариантов, сколько отчётов уже покрыто последним сохранённым запуском, сколько имеют сохранённый результат, и распределение статусов по последнему запуску каждого отчёта
  • Docker-контейнеры -- запущенные, остановленные, ресурсы
  • Кнопка Обновить статистику отдельно перечитывает RAM контейнеров и размеры образов на диске; обычная загрузка страницы делает лёгкий рендер без тяжёлого docker stats

Для Docker-карточки важно различать:

  • RAM сейчас -- текущее потребление оперативной памяти контейнером
  • Образ на диске -- размер Docker-образа в локальном хранилище, а не использование RAM
  • Статус контейнера -- состояние контейнера Docker; это не равно статусу подключения EPF

Вкладка "Настройки"

Управление конфигурацией шлюза без перезапуска:

  • Управление базами -- добавить / изменить / отключить / установить по умолчанию
  • Редактирование .env -- изменение переменных окружения прямо из браузера с автоперезапуском шлюза
  • Очистка кеша -- сброс TTL-кеша метаданных
  • Переключение анонимизации -- вкл/выкл маскировки ПД

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

http://localhost:8080/dashboard/docs

Подробное описание всех MCP-инструментов, API-эндпоинтов и переменных окружения. Документация встроена в дашборд, поддерживается в репозитории и доступна на русском и английском языках.

Диагностика

Ссылка "Диагностика" внизу дашборда -- полный JSON-отчёт: версия шлюза, активные сессии, бэкенды, базы, профилирование, кеш, Docker, логи контейнеров, переменные окружения.


Настройка 1С:Напарник (поиск по ИТС)

  1. Получить API-ключ на https://code.1c.ai (Профиль -> API-токен). Требуется подписка ИТС.
  2. Добавить в .env:
NAPARNIK_API_KEY=ваш-ключ-api
  1. Перезапустить шлюз:
docker compose restart gateway

После этого инструмент its_search станет доступен в AI-ассистенте.


Опциональные модули

Тестирование YaXUnit

Запуск тестов, сборка проекта и проверка синтаксиса. Использует mcp-onec-test-runner.

cp test-runner/application.yml.example test-runner/application.yml
# Отредактировать application.yml -- указать строку подключения
docker compose --profile test-runner up -d

Добавить в .env:

ENABLED_BACKENDS=onec-toolkit,platform-context,bsl-lsp-bridge,test-runner
docker compose restart gateway

Примеры:

Запусти все тесты YaXUnit
Запусти тесты модуля ОбработкаЗаказов

Граф связей конфигурации

Анализ зависимостей между объектами конфигурации: какой объект кто использует, в каких модулях/формах/регистрах встречается. Граф поставляется как встроенный локально собираемый профиль репозитория (bsl-graph-lite) и не требует внешнего GitHub-образа или NebulaGraph.

Что это

Отдельный контейнер onec-bsl-graph на порту 8888, который:

  • сканирует BSL_WORKSPACE и db_state.json шлюза;
  • строит граф узлов (документы, справочники, регистры, модули, BSL-файлы, подсистемы...) и рёбер (ссылки, вхождения имён в BSL) по всем зарегистрированным базам;
  • хранит снимок в /data/graph.json — переживает перезапуск контейнера.

Источник истины — реестр зарегистрированных баз шлюза. Если база удалена из дашборда, её узлы и связи исчезают из графа, даже если BSL-файлы остались на диске.

Как включить

Оба способа идемпотентны:

# при первоначальной установке
./setup.sh --with-bsl-graph

# уже работающий стек: добавить профиль
docker compose --profile bsl-graph up -d --build

Шлюз подхватит BSL_GRAPH_URL=http://localhost:8888 автоматически — инструменты graph_stats, graph_search, graph_related начнут отвечать через MCP.

Как выключить

# остановить и удалить только контейнер графа (сам стек не трогается)
docker compose --profile bsl-graph stop bsl-graph
docker rm -f onec-bsl-graph

# полная очистка образа (если нужно)
docker rmi onec-mcp-universal-bsl-graph

Без работающего контейнера graph_* tools вернут ошибку соединения; остальные MCP-инструменты продолжат работать.

Когда индексирует автоматически

  • При старте контейнера — сразу подгружает последний снимок + делает полный rescan.

  • Фоновый цикл — каждые GRAPH_RESCAN_SECONDS секунд (по умолчанию 300, минимум 30). Увеличить через .env:

    BSL_GRAPH_RESCAN_SECONDS=600
    
  • При смене BSL_WORKSPACE / BSL_HOST_WORKSPACE через дашборд — gateway теперь автоматически пересоздаёт bsl-graph, чтобы Docker обновил bind mount графа.

  • При ручном редактировании .env или обходе дашборда — пересоздайте контейнер bsl-graph вручную, потому что сам по себе фоновый цикл не меняет уже смонтированный host path:

    docker compose --profile bsl-graph up -d --build --force-recreate bsl-graph
    

Как пересканировать вручную

Сразу после новой выгрузки BSL (если не хочется ждать до 5 минут автоцикла):

curl -X POST http://localhost:8888/api/graph/rebuild

Эндпоинт синхронный — возвращает обновлённый stats в теле ответа. Занимает секунды-десятки секунд в зависимости от размера конфигурации.

Альтернатива — перезапустить контейнер (rebuild произойдёт на старте):

docker restart onec-bsl-graph

Веб-интерфейс (браузер)

Когда контейнер onec-bsl-graph запущен, на http://localhost:8888/ доступен интерактивный просмотр графа. Визуально совпадает с дашбордом (та же slate-палитра, одинаковая типографика). Работает полностью оффлайн — cytoscape.js включён в образ.

Тулбар:

  • Поле поиска (поддерживает несколько слов через пробел — каждое слово ищется как подстрока во всём имени объекта; размеры пособий находит РазмерыГосударственныхПособий).
  • ◀ ▶ — история поиска (как в браузере).
  • Список — всплывающая панель со списком найденных объектов; клик по элементу анимированно фокусирует камеру на узле.
  • Очистить — сброс канваса и поля поиска.
  • Пересобрать / Rebuild — синхронный POST /api/graph/rebuild.
  • RU / EN — язык интерфейса; при открытии по ссылке из дашборда автоматически подхватывается локаль дашборда.

Левая панель:

  • Базы — радиокнопки (одна база одновременно). По умолчанию выбрана первая; если база одна, кнопка неактивна (только информация).
  • Типы — список типов объектов в выбранной БД с количеством; клик показывает первые 30 узлов этого типа.

Центральный канвас:

  • cytoscape.js с layout'ом cose, плавной анимацией (600–700 мс ease-out), smoothly-zoom (wheelSensitivity: 0.2, диапазон 0.1…4).
  • Заливка узла = тип объекта, бордер = база данных.
  • Длинные CamelCase-имена автоматически разбиваются по границам регистра; labels не перекрываются благодаря nodeDimensionsIncludeLabels в layout'е.
  • Одинарный клик по узлу — детали справа + подсветка его прямых соседей (остальной граф приглушается).
  • Двойной клик — раскрытие: через /api/graph/related/<id> подгружает соседей узла (один хоп).
  • Лимит 200 узлов на канвасе.

Правая панель:

  • Узел — type, db, id, path + кнопка Развернуть соседей (альтернатива двойному клику).
  • Легенда — соответствие цвета обводки базе данных.

Плавающая панель «Список»:

  • Открывается кнопкой Список в тулбаре.
  • Показывает все узлы последнего поиска (цветная точка, имя, type · db).
  • Клик по элементу — камера с анимацией летит к узлу; если он не на канвасе, автоматически подгружается через /related.

Интеграция с gateway:

  • Сразу после успешной выгрузки BSL (кнопка Выгрузить BSL в EPF) gateway дёргает POST /api/graph/rebuild — граф актуализируется за секунды, без ожидания автоцикла (GRAPH_RESCAN_SECONDS).
  • Файлы .bsl в графе получают читаемые имена вида ОбъектИмя/Форма/Module.bsl (без префикса InformationRegisters/ и сегмента Ext/) — поиск и список становятся различимыми.

Ссылка из дашборда: http://localhost:8080/dashboard → карточка «Опциональные сервисы» → bsl-graph. Если контейнер не запущен, имя отображается как обычный текст и не кликается.

Примеры команд AI

Покажи статистику графа объектов конфигурации
Найди все объекты, связанные с документом ПоступлениеТоваровУслуг

Диагностика

# работает ли
curl -s http://localhost:8888/health | python3 -m json.tool

# логи
docker logs onec-bsl-graph --tail 50

# прямой запрос к API (минуя MCP)
curl -s -X POST http://localhost:8888/api/graph/search \
  -H 'Content-Type: application/json' \
  -d '{"query":"КурсыВалют","limit":3}' | python3 -m json.tool

Скилы 1С для Codex и совместимых локальных раннеров навыков

В репозитории поставляется 96 скиллов для работы с 1С через Codex и совместимые локальные раннеры навыков. Скилы -- это команды вида /meta-compile, /epf-init, /form-compile, которые работают локально с XML-исходниками конфигурации на диске и не требуют подключения к шлюзу.

install-skills.sh ставит их симлинками в ~/.codex/skills/. В Windows install-skills.ps1 делает то же самое, а если символические ссылки недоступны, копирует папки целиком.

Установка скилов

Скилы устанавливаются автоматически при запуске ./setup.sh — отдельный шаг не нужен.

Если нужно установить отдельно (например, после ручного клонирования репозитория):

Linux / macOS:

./install-skills.sh

Windows (PowerShell от администратора):

powershell -ExecutionPolicy Bypass -File install-skills.ps1

Скрипт создаёт символические ссылки из ~/.codex/skills/ на папку skills/ в проекте. После установки он проверяет, что в ~/.codex/skills/ появился полный набор всех папок с SKILL.md из репозитория.

Важно:

  • Текущий процесс Codex подхватывает список skills на старте. После установки или обновления skills нужно перезапустить Codex, иначе в уже открытой сессии может отображаться устаревший или неполный список.
  • Для сценария «чистая машина» достаточно клонировать репозиторий и выполнить ./setup.sh или отдельно ./install-skills.sh / install-skills.ps1. Скрипты ставят весь набор skills из папки skills/, а не выборочный список.

Проверка после установки:

find skills -mindepth 1 -maxdepth 1 -type d | wc -l
find ~/.codex/skills -mindepth 1 -maxdepth 1 \( -type l -o -type d \) ! -name '.system' | wc -l

Если числа совпадают, весь набор skills установлен локально.

Категории скилов

Категория Скилы Описание
Конфигурация (CF) cf-init, cf-edit, cf-info, cf-validate Создание пустой конфигурации, изменение свойств, анализ структуры
Объекты метаданных meta-compile, meta-edit, meta-info, meta-remove, meta-validate Справочники, документы, регистры, перечисления, константы, общие модули
Формы form-compile, form-edit, form-add, form-info, form-remove, form-validate, form-patterns Создание управляемых форм из JSON-описания, добавление элементов, анализ
СКД skd-compile, skd-edit, skd-info, skd-validate Схемы компоновки данных для отчётов
Обработки (EPF) epf-init, epf-add-form, epf-build, epf-dump, epf-validate, epf-bsp-init, epf-bsp-add-command Внешние обработки, интеграция с БСП
Отчёты (ERF) erf-init, erf-build, erf-dump, erf-validate Внешние отчёты
Расширения (CFE) cfe-init, cfe-borrow, cfe-patch-method, cfe-diff, cfe-validate Расширения конфигурации, заимствование объектов, перехват методов
Роли role-compile, role-info, role-validate Создание ролей с набором прав, аудит прав
Подсистемы subsystem-compile, subsystem-edit, subsystem-info, subsystem-validate Создание подсистем, управление составом
Макеты (MXL) mxl-compile, mxl-decompile, mxl-info, mxl-validate, template-add, template-remove Табличные документы, печатные формы
Командный интерфейс interface-edit, interface-validate Настройка видимости команд в подсистемах
Базы данных (ИБ) db-create, db-run, db-update, db-list, db-dump-cf, db-load-cf, db-dump-xml, db-load-xml, db-load-git Создание ИБ, запуск 1С, обновление, выгрузка/загрузка конфигурации
Веб-публикации web-publish, web-info, web-test, web-unpublish, web-stop Публикация через Apache, тестирование в веб-клиенте
Стандарты кода standards-code, errors, query-writing, form-work, use-bsp Правила BSL, транзакции, запросы, формы, паттерны БСП
Workflow и UX epf-expert, erf-expert, mxl-expert, inspect, validate, 1c-project-init, session-save, session-restore, session-retro, brainstorm, write-plan, openspec-proposal, openspec-apply, openspec-archive, 1c-feature-dev, 1c-query-opt, 1c-help-mcp, bsp-patterns, role-expert, subsystem-expert, subagent-dev, 1c-test-runner, 1c-web-session, playwright-test Оркестрация сценариев, инициализация проекта, сохранение и восстановление состояния сессии
Прочее help-add, img-grid Встроенная справка, работа с изображениями

Примеры использования скилов

/cf-init -- создать пустую конфигурацию МояКонфигурация
/meta-compile -- создать справочник Клиенты с реквизитами ИНН и Телефон
/meta-edit -- добавить реквизит Email типа Строка(100) в справочник Клиенты
/epf-init -- создать пустую обработку ЗагрузкаДанных
/epf-add-form -- добавить основную форму к обработке ЗагрузкаДанных
/epf-build -- собрать EPF из исходников
/epf-expert -- выбрать и выполнить нужную EPF-операцию (init/build/dump/form/bsp/validate)
/epf-bsp-init -- добавить регистрацию БСП (СведенияОВнешнейОбработке)
/form-compile -- создать форму списка для справочника Клиенты
/form-edit -- добавить кнопку "Обновить" на форму
/skd-compile -- создать СКД для отчёта по продажам
/skd-edit -- добавить параметр "Период" в СКД
/1c-project-init -- инициализировать проект под onec-mcp-universal и создать .mcp.json из шаблона
/session-save -- сохранить текущее состояние работы в session-notes.md
/session-restore -- восстановить сессию и продолжить с Next Action
/session-retro -- добавить блок Ретроспектива в session-notes.md
/epf-expert -- создать/собрать/разобрать EPF через единый вход
/erf-expert -- собирать и валидировать ERF через единый вход
/mxl-expert -- компилировать/декомпилировать макет и управлять template-add/template-remove
/inspect -- быстро посмотреть структуру справочника, формы или роли
/validate -- проверить корректность созданных/изменённых объектов
/brainstorm -- спланировать сложную задачу перед реализацией
/write-plan -- сформировать tasks.md из design.md
/openspec-proposal -- создать proposal.md/design.md/tasks.md для формального изменения
/openspec-apply -- выполнить задачи из OpenSpec по порядку
/openspec-archive -- архивировать завершённое изменение
/1c-query-opt -- оптимизировать медленный запрос перед выкладкой
/1c-feature-dev -- пройти 9-фазный цикл разработки фичи
/1c-help-mcp -- свериться с документацией 1С по методу/конструкции
/bsp-patterns -- проверить типовые решения БСП перед написанием кода
/role-expert -- создать/исправить роль и сразу проверить права
/subsystem-expert -- создать подсистему, интерфейс, состав и проверить валидацию
/subagent-dev -- координировать выполнение tasks.md по этапам
/1c-test-runner -- прогнать AI-юнит тесты бизнес-логики
/1c-web-session -- проверить базовые пользовательские сценарии в веб-клиенте
/playwright-test -- добавить UI регрессию для изменённой формы
/erf-init -- создать пустой внешний отчёт ОтчётПоПродажам
/cfe-init -- создать расширение ДоработкаЕРП
/cfe-borrow -- заимствовать справочник Номенклатура из конфигурации
/cfe-patch-method -- перехватить метод ПередЗаписью документа
/role-compile -- создать роль Оператор с правами на чтение справочников
/subsystem-compile -- создать подсистему УправлениеЗаказами
/mxl-compile -- создать макет печатной формы счёта
/db-create -- создать файловую базу /tmp/test-db
/db-run -- запустить 1С:Предприятие для базы ERP_Test
/db-dump-xml -- выгрузить конфигурацию в XML-файлы
/db-load-git -- загрузить изменения из последнего коммита
/web-publish -- опубликовать базу ERP_Test через Apache
/meta-info -- покажи структуру документа РеализацияТоваровУслуг
/form-info -- покажи элементы формы ФормаДокумента
/cf-info -- покажи состав конфигурации

Диагностика

Страница диагностики:

http://localhost:8080/dashboard

Ссылка "Диагностика" внизу дашборда -- полный JSON-отчёт: версия шлюза, активные сессии, бэкенды, базы, профилирование, кеш, Docker, логи контейнеров, переменные окружения.

Статус бэкендов:

curl http://localhost:8080/health

Или через AI: Покажи статус MCP-сервера

Логи шлюза:

docker logs onec-mcp-gw -f

Логи toolkit конкретной базы:

docker logs onec-toolkit-ERP_Test -f

Перезапуск шлюза:

docker compose restart gateway

Типичные проблемы:

Проблема Решение
MCP не появляется в Codex docker ps — убедитесь, что onec-mcp-gw запущен; curl http://127.0.0.1:8080/health; выполните codex mcp list
После перезагрузки MCP не работает Контейнеры поднимаются автоматически (restart: always) при старте Docker. Убедитесь, что Docker настроен на автозапуск: sudo systemctl enable docker. Windows: Docker Desktop → Settings → General → включить "Start Docker Desktop when you log in". Если контейнеры всё равно не поднялись: docker compose up -d --build из папки проекта
Порт 8080 занят Измените в .env: GW_PORT=8090, затем перерегистрируйте: codex mcp remove onec-universal && codex mcp add onec-universal --url http://localhost:8090/mcp
Бэкенд показывает красный статус docker logs onec-mcp-gw -f, проверить docker compose ps
EPF не подключается Проверить curl http://127.0.0.1:8080/health, кнопка "Подключиться"
execute_query/get_metadata возвращает EPF ... is not connected Откройте MCPToolkit.epf в активной базе и нажмите "Подключиться". Проверить статус можно через list_databases (epf_connected=true) или в дашборде (колонка EPF).
BSL-навигация не работает Проверить docker image inspect mcp-lsp-bridge-bsl:latest, затем нажать "Выгрузить BSL" в обработке и дождаться завершения индексации
В Docker-карточке видно н/д Это нормально после обычной загрузки дашборда. Нажмите Обновить статистику, чтобы явно перечитать RAM контейнеров и размеры образов
Ошибка .env в дашборде cp .env.example .env; дашборд и вспомогательный сервис принимают только полный текст .env, а неполные patch-обновления отклоняются. DOCKER_CONTROL_TOKEN и ANONYMIZER_SALT также прокидываются в контейнеры через environment, а docker-control /health дозаписывает их обратно в .env, если файл случайно обрезали
Контейнеры не создаются docker system df, очистить: docker system prune
Таймаут от шлюза Нажать "Отключиться" и "Подключиться" повторно
AI получает устаревшие метаданные Сбросить кеш: "Очистить кеш" в дашборде или invalidate_metadata_cache

Обновление

git pull
docker compose build gateway
docker compose up -d gateway

После docker compose up -d gateway контейнер шлюза пересоздаётся, EPF-обработка теряет heartbeat и требует одного нажатия «Подключиться» — это штатно (registry помнит параметры, но EPF-сессия регистрируется заново).

Добавьте --no-cache к build только если тянете новые git-зависимости или базовые образы обновились.

GitHub Packages

Docker-образ публикуется в GitHub Container Registry:

  • ghcr.io/alekseiseleznev/onec-mcp-universal:latest — всегда актуальный main
  • ghcr.io/alekseiseleznev/onec-mcp-universal:X.Y.Z — релизный semver tag
  • ghcr.io/alekseiseleznev/onec-mcp-universal:X.Y — minor-тег релизной ветки
  • ghcr.io/alekseiseleznev/onec-mcp-universal-bsl-graph-lite:latest — встроенный графовый бэкенд из main
  • ghcr.io/alekseiseleznev/onec-mcp-universal-bsl-graph-lite:X.Y.Z — релизный тег графового бэкенда
  • ghcr.io/alekseiseleznev/onec-mcp-universal-docker-control:latest — внутренний вспомогательный сервис для жизненного цикла Docker из main
  • ghcr.io/alekseiseleznev/onec-mcp-universal-docker-control:X.Y.Z — релизный тег вспомогательного сервиса

Используемые проекты

Основные

Проект Автор Назначение
1c-mcp-toolkit ROCTUP Запросы к БД, выполнение кода, метаданные, журнал регистрации, права
mcp-bsl-platform-context alkoleft Документация API платформы 1С
mcp-bsl-lsp-bridge 1cvibe MCP-мост к BSL Language Server
lsp-session-manager 1cvibe Мультиплексор сессий BSL Language Server
bsl-language-server 1c-syntax Language Server для BSL
1c_mcp vladimir-kharin Справочник синтаксиса BSL

Опциональные

Проект Автор Профиль Назначение
mcp-onec-test-runner alkoleft test-runner Запуск тестов YaXUnit, сборка, проверка синтаксиса
bundled bsl-graph-lite onec-mcp-universal bsl-graph Встроенный профиль графа зависимостей по зарегистрированным базам

Удаление

# Остановить и удалить контейнеры (включая опциональный bsl-graph) + volume
docker compose --profile bsl-graph down -v

# Удалить per-DB контейнеры (onec-toolkit-<slug>, mcp-lsp-<slug>)
docker ps -a --format '{{.Names}}' | grep -E '^(onec-toolkit-|mcp-lsp-)' | xargs -r docker rm -f

# Удалить образы проекта
docker images --format '{{.Repository}}:{{.Tag}}' \
  | grep -E '^(onec-mcp-universal-|mcp-lsp-bridge-bsl|ghcr.io/alekseiseleznev/onec-mcp-universal)' \
  | xargs -r docker rmi -f

# Linux: остановить и удалить user systemd service
systemctl --user disable --now onec-export-service.service 2>/dev/null || true
rm -f ~/.config/systemd/user/onec-export-service.service
systemctl --user daemon-reload

# Windows: удалить Scheduled Task
# schtasks /Delete /TN OnecMcpExportService /F

# Удалить MCP-подключение из Codex
codex mcp remove onec-universal

# Удалить установленные скилы Codex (опционально)
rm -rf ~/.codex/skills

# Удалить каталог проекта
cd .. && rm -rf onec-mcp-universal

Данные баз 1С, 1С-лицензии и выгруженные BSL-исходники (вне каталога проекта) не затрагиваются.


Лицензия

MIT -- Copyright (c) 2026 Aleksei Seleznev

Reviews (0)

No results found