Skip to content

aresyn/onecscripting-mcp

 
 

Repository files navigation

onecscripting-mcp

onecscripting-mcp - локальный MCP-сервер, который позволяет ИИ-агенту выполнять в выбранной базе почти любой серверный код 1С через обычное COM-подключение.

Агент может отправить в сервер кусок кода 1С текстом или путь к .bsl файлу модуля с процедурами и функциями. Сервер подключится к нужной базе, выполнит код в серверном контексте и вернет результат в нормальном JSON.

Без публикации базы. Без установки расширений. Без доработок конфигурации. Нужны только установленная платформа 1С, путь к базе и пользователь с паролем.

Зачем это нужно

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

onecscripting-mcp закрывает этот разрыв. Агент не только читает код конфигурации, но и может проверить гипотезу в живой тестовой базе:

  • найти, почему реквизит не заполняется;
  • понять, где ломается расчет;
  • проверить, что реально возвращает типовая функция;
  • выполнить запросы к данным;
  • отладить фрагмент серверной логики;
  • быстро написать и запустить проверочный .bsl модуль;
  • помочь при разработке и доработке конфигурации.

Это особенно полезно при расследовании проблем: агент смотрит код, вызывает функции, выполняет запросы и постепенно доходит до места, где данные перестают заполняться или рассчитываются не так.

Что умеет сервер

  • Выполнять серверный код 1С, переданный текстом, через execute_bsl.
  • Выполнять полноценные .bsl модули с процедурами и функциями через execute_bsl_module.
  • Принимать путь к файлу модуля на диске, а не только текст кода.
  • Запускать указанную главную функцию модуля и возвращать именно ее результат.
  • Выполнять запросы 1С с параметрами через execute_query.
  • Вызывать экспортные функции и процедуры общих модулей через call_common_module.
  • Работать с менеджерами метаданных: справочники, документы, регистры, константы, перечисления и другие корни платформенного контекста.
  • Передавать параметры в код и запросы, включая массивы, структуры, соответствия, таблицы значений, списки значений, даты и ссылки.
  • Возвращать сложные типы 1С в JSON, пригодном для дальнейшей работы агента.
  • Держать несколько профилей баз в одном конфиге.
  • Работать с разными версиями платформы через отдельные рабочие процессы.
  • Автоматически поднимать COM-соединение, переиспользовать его во время работы и закрывать рабочий процесс после простоя, чтобы в базе не висели лишние сеансы.

Размер блока для execute_bsl сервер специально не ограничивает. На практике предел задают лимиты MCP-клиента, память, время разбора кода и таймаут выполнения. Для большого кода удобнее использовать execute_bsl_module и передавать путь к .bsl файлу.

Что можно делать с ИИ-агентом

Попросить агента проверить данные:

Посмотри, почему у этих документов не заполнился реквизит. Выполни запросы, проверь функции заполнения и покажи место, где значение теряется.

Попросить агента протестировать типовую функцию:

Вызови функцию общего модуля с такими параметрами и сравни результат с тем, что ожидает наш код.

Попросить агента запустить проверочный модуль:

Я положил сценарий в D:\Projects\DemoProject\tests\check_prices.bsl. Выполни его в тестовой базе через профиль DemoProject_test и верни результат главной функции Проверить.

Попросить агента помочь при разработке:

Посмотри новый код расчета, подготовь модуль 1С для проверки нескольких случаев и выполни его в базе.

Ограничения

Сервер выполняет код через COM-соединение и серверный контекст 1С. Поэтому важные ограничения такие:

  • не выполняется клиентский код;
  • не поддерживаются транзакции;
  • пока не реализована поддержка Попытка / Исключение;
  • нельзя вызвать общий модуль, если у него отключен флаг Внешнее соединение.

Остальное ведет себя как обычная работа через внешнее соединение 1С. Например, у пользователя должны быть права на нужные действия, а для прямого вызова метода общего модуля он должен быть доступен из внешнего соединения.

Установка

git clone https://github.com/Nikifforoff96/onecscripting-mcp.git
cd onecscripting-mcp
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e .

Проверьте запуск:

onecscripting-mcp --help

Настройка базы

Скопируйте пример конфига:

copy onecscripting-mcp.example.json onecscripting-mcp.json

Укажите свои базы, пользователей и путь к платформе. Реальный onecscripting-mcp.json добавлен в .gitignore, его не нужно хранить в репозитории.

Пример профиля:

{
  "server": {
    "host": "127.0.0.1",
    "port": 8765,
    "transport": "streamable-http",
    "worker_mode": "process",
    "worker_idle_timeout_sec": 300,
    "auto_register_com": true,
    "default_profile_id": "DemoProject_dev"
  },
  "profiles": {
    "DemoProject_dev": {
      "description": "База разработки для проекта DemoProject.",
      "project_path": "D:\\Projects\\DemoProject_dev",
      "server": "onec-app-server",
      "ref": "demo-dev",
      "user": "DemoUser",
      "password_env": "ONEC_PASSWORD_DEMO_DEV",
      "platform_bin": "C:\\Program Files\\1cv8\\8.3.27.1644\\bin"
    }
  }
}

Пароль лучше передавать через переменную окружения:

$env:ONEC_PASSWORD_DEMO_DEV = "password"

Имя профиля обычно делают равным имени каталога проекта. Например проект D:\Projects\DemoProject_dev использует профиль DemoProject_dev.

Запуск

$env:ONEC_MCP_CONFIG = "D:\path\onecscripting-mcp.json"
onecscripting-mcp

По умолчанию сервер слушает:

http://127.0.0.1:8765/mcp

Основные методы MCP

  • list_profiles - показать настроенные профили баз без подключения к 1С и без раскрытия паролей.
  • com_registration_status - проверить, какой comcntr.dll зарегистрирован в Windows и какая версия нужна выбранному профилю.
  • health_check - проверить профиль и COM-подключение.
  • execute_query - выполнить запрос 1С с параметрами.
  • execute_bsl - выполнить серверный код 1С, переданный текстом.
  • execute_bsl_module - выполнить .bsl модуль с процедурами и функциями, переданный текстом или путем к файлу.
  • call_common_module - вызвать экспортную функцию или процедуру общего модуля через COM.
  • reset_connection - сбросить соединение выбранного профиля.

Подробное описание методов и параметров для ИИ-агента: MCP_AGENT_DESCRIPTION.md.

Подробности по JSON-контракту, поддерживаемому синтаксису и внутреннему механизму выполнения: README.mcp.md.

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

{
  "profile": "DemoProject_dev",
  "text": "ВЫБРАТЬ ПЕРВЫЕ 5 Ссылка, Код, Наименование ИЗ Справочник.Номенклатура",
  "parameters": {}
}

Пример выполнения кода

{
  "profile": "DemoProject_dev",
  "code": "Запрос = Новый Запрос(\"ВЫБРАТЬ ПЕРВЫЕ 1 Ссылка ИЗ Справочник.Номенклатура\"); Результат = Запрос.Выполнить().Выгрузить();"
}

Пример выполнения модуля

{
  "profile": "DemoProject_test",
  "source": "D:\\Projects\\DemoProject\\tests\\diagnostics.bsl",
  "entry_point": "Проверить"
}

Файл может содержать несколько процедур и функций. Сервер найдет главную функцию по имени entry_point, выполнит ее, а она уже может вызывать остальные методы модуля в нужном порядке.

Безопасность

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

list_profiles и ошибки не возвращают пароль. Для паролей рекомендуется использовать password_env, а не хранить секреты прямо в JSON.

Проверки разработки

python -m unittest discover -s tests -p "test_mcp_*.py" -t . -v
python -m onecscripting_mcp.server --help
python -m build
python -m twine check dist/*

About

MCP-сервер для выполнения программного кода 1С и модулей bsl в любой базе 1С через com-соединение.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 99.5%
  • Makefile 0.5%