Command Palette

Search for a command to run...

UnylyUnyly
Весь каталог

1C Via COM Server

БесплатноНе проверен

Enables querying and interacting with 1C:Enterprise databases via COM connection without modifying the database.

GitHubEmbed

Описание

Enables querying and interacting with 1C:Enterprise databases via COM connection without modifying the database.

README

Внешний MCP-сервер на Python, который подключается к информационной базе 1С через COM-соединение (V83.COMConnector) и выполняет запросы на встроенном языке запросов. В отличие от подхода с расширением + HTTP-сервисами, здесь ничего не нужно ставить в саму базу — сервер сам открывает внешнее соединение.

⚠️ Работает только на Windows, где установлена платформа 1С:Предприятие.

Возможности (инструменты MCP)

Инструмент Назначение
execute_query Выполнить запрос на языке запросов 1С, вернуть колонки и строки
list_metadata Список объектов метаданных (справочники, документы, регистры, …)
describe_object Реквизиты, табличные части и типы объекта по полному имени
execute_script Выполнить произвольный код 1С / вычислить выражение (нужна обработка-исполнитель)
connection_info Проверить соединение, узнать версию конфигурации и платформы

Требования

  • Windows + установленная 1С:Предприятие 8.3
  • Python 3.10+
  • Совпадение разрядности: 64-битный Python ↔ 64-битный comcntr.dll (32-битный ↔ 32-битный). Большинство современных установок — 64 бита.

Установка

cd "D:\Documents\разработка_1С\mcp-1c-com"
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt

Регистрация COM-коннектора

Один раз, от имени администратора, зарегистрируйте comcntr.dll нужной версии:

regsvr32 "C:\Program Files\1cv8\8.3.25.1257\bin\comcntr.dll"

(путь к версии платформы — свой; берётся последняя установленная)

Конфигурация

Через переменные окружения. Скопируйте .env.example и задайте значения, либо выставьте переменные прямо в команде запуска / в .mcp.json (см. ниже).

Файловая база:

ONEC_FILE=C:\bases\acc
ONEC_USR=Администратор
ONEC_PWD=пароль

Серверная база:

ONEC_SRVR=server-1c
ONEC_REF=accounting
ONEC_USR=Администратор
ONEC_PWD=пароль

Готовая строка соединения целиком (имеет приоритет):

ONEC_CONNECTION_STRING=File="C:\bases\acc";Usr="Администратор";Pwd="pass"

Запуск вручную (проверка)

$env:ONEC_FILE = "C:\bases\acc"
$env:ONEC_USR  = "Администратор"
python server.py

Сервер работает по stdio-транспорту MCP. Для интерактивной отладки удобен mcp dev server.py (требует pip install "mcp[cli]").

Подключение к Claude Code

Добавьте сервер в .mcp.json проекта (пример — в mcp.json.example):

{
  "mcpServers": {
    "1c-com": {
      "command": "D:\\Documents\\разработка_1С\\mcp-1c-com\\.venv\\Scripts\\python.exe",
      "args": ["D:\\Documents\\разработка_1С\\mcp-1c-com\\server.py"],
      "env": {
        "ONEC_FILE": "C:\\bases\\acc",
        "ONEC_USR": "Администратор",
        "ONEC_PWD": ""
      }
    }
  }
}

Либо командой:

claude mcp add 1c-com -- "<путь>\.venv\Scripts\python.exe" "<путь>\server.py"

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

Запрос с параметром-датой:

{
  "query_text": "ВЫБРАТЬ Ссылка, ПРЕДСТАВЛЕНИЕ(Контрагент) КАК Контрагент, СуммаДокумента ИЗ Документ.РеализацияТоваровУслуг КАК Р ГДЕ Р.Дата >= &Дата УПОРЯДОЧИТЬ ПО Р.Дата",
  "params": { "Дата": "2026-01-01" },
  "limit": 100
}

Список справочников:

{ "kind": "catalogs" }

Описание объекта:

{ "full_name": "Справочник.Контрагенты" }

Вернёт реквизиты с типами (ссылочные — полным именем, напр. Справочник.ДоговорыКонтрагентов, Перечисление.ЮрФизЛицо; примитивные — Строка(12), Число(3)), табличные части и их реквизиты.

Выполнение кода / вычисление выражения (требует обработку-исполнитель, см. ниже):

{ "return_expression": "Справочники.Валюты.НайтиПоКоду(\"980\").Наименование" }
{ "code": "Док = Документы.РеализацияТоваровУслуг.НайтиПоНомеру(\"000001\"); Результат = Док.СуммаДокумента;" }

execute_script: обработка-исполнитель и «Защита от опасных действий»

Внешнее COM-соединение не отдаёт операторы Выполнить/Вычислить (это конструкции языка, а не методы глобального контекста). Поэтому execute_script исполняет код внутри модуля внешней обработки executor\mcpИсполнитель.epf, где эти операторы доступны как обычные операторы языка. Код может присвоить значение переменной Результат — оно будет возвращено.

Сборка обработки-исполнителя (если её нет в executor\):

powershell.exe -NoProfile -File "<skills>\epf-build\scripts\epf-build.ps1" `
  -InfoBasePath "C:\bases\acc" -UserName "Администратор" -Password "..." `
  -SourceFile "executor\src\mcpИсполнитель.xml" -OutputFile "executor\mcpИсполнитель.epf"

Предупреждение безопасности. Поскольку модуль использует Выполнить/Вычислить, платформа при загрузке обработки показывает «Предупреждение безопасности» (через COM это превращается в ошибку). Чтобы execute_script заработал, для пользователя ИБ нужно отключить «Защиту от опасных действий»:

  • Конфигуратор → Администрирование → Пользователи → <пользователь> → снять флаг «Защита от опасных действий», либо
  • один раз открыть executor\mcpИсполнитель.epf в толстом клиенте 1С и подтвердить с галкой «Запомнить выбор».

В старых режимах совместимости (напр. УТП 1.2) свойство ЗащитаОтОпасныхДействий пользователя ИБ через COM не записывается — отключайте флаг в Конфигураторе.

Остальные инструменты (execute_query, list_metadata, describe_object, connection_info) работают без этой настройки.

Особенности и ограничения

  • Ссылки возвращаются как UUID. Чтобы получить читаемое представление, добавляйте в запрос ПРЕДСТАВЛЕНИЕ(Поле) КАК ПолеПредставление.
  • «Пустая дата» 1С (0001-01-01) отдаётся как null.
  • Весь COM-доступ идёт через один выделенный поток (COM-объекты 1С привязаны к апартаменту), поэтому запросы выполняются последовательно.
  • Соединение ленивое и переиспользуется между вызовами.
  • Параметры запроса поддерживают примитивы (число, строка, булево) и даты (ISO-строка). Передача ссылок параметром не поддерживается — фильтруйте по реквизитам/коду/наименованию внутри запроса.
  • В describe_object ссылочные типы и Строка(N)/Число(d,f) определяются точно. В старых режимах совместимости (УТП 1.2 и т.п.) глобальный конструктор Тип() через COM недоступен, поэтому Дата, Булево и безразмерные строки показываются как примитив.
  • execute_script требует обработку-исполнитель и отключённую «Защиту от опасных действий» (см. отдельный раздел выше).

Диагностика проблем

AttributeError: V83.COMConnector.Connect / Библиотека не зарегистрирована (TYPE_E_LIBNOTREGISTERED). Сам COM-класс зарегистрирован, но не зарегистрирована библиотека типов коннектора. 1С-коннектор — dual-интерфейс и резолвит имена методов (Connect) через typelib, поэтому без неё позднее связывание не находит ни одного метода. Лечится повторной регистрацией comcntr.dll от имени администратора (regsvr32 ставит и класс, и typelib):

Start-Process regsvr32 -ArgumentList '/s','"C:\Program Files\1cv8\<версия>\bin\comcntr.dll"' -Verb RunAs -Wait

Проверка, что typelib появилась: ключ HKCR\TypeLib\{98AC3B5B-5323-418F-8F07-E32F231D2393} должен существовать.

Класс не зарегистрирован (0x80040154) — не зарегистрирован сам класс (regsvr32 comcntr.dll) либо не совпадает разрядность Python и dll.

Несколько версий платформы установлено. V83.COMConnector указывает только на одну версию (последнюю зарегистрированную). Чтобы привязать к конкретной — выполните regsvr32 именно её comcntr.dll.

Структура

mcp-1c-com/
├── server.py        # MCP-сервер (FastMCP, stdio), определение инструментов
├── onec_com.py      # COM-подключение к 1С, запросы, описание объектов, исполнение кода
├── config.py        # сборка строки соединения из переменных окружения
├── executor/
│   ├── mcpИсполнитель.epf      # собранная обработка-исполнитель для execute_script
│   └── src/                    # её XML-исходники (модуль с ВыполнитьКод/ВычислитьВыражение)
├── requirements.txt
├── .env.example
└── mcp.json.example

from github.com/spritelutsk/mcp-1c-com

Установка 1C Via COM Server

У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.

▸ github.com/spritelutsk/mcp-1c-com

FAQ

1C Via COM Server MCP бесплатный?

Да, 1C Via COM Server MCP бесплатный — установка в пару кликов через Unyly без оплаты.

Нужен ли API-ключ для 1C Via COM Server?

Нет, 1C Via COM Server работает без API-ключей и переменных окружения.

1C Via COM Server — hosted или self-hosted?

Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.

Как установить 1C Via COM Server в Claude Desktop, Claude Code или Cursor?

Открой 1C Via COM Server на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.

Похожие MCP

Compare 1C Via COM Server with

Не уверен что выбрать?

Найди свой стек за 60 секунд

Автор?

Embed-бейдж для README

Похожее

Все в категории data