1C via COM MCP Server

1C via COM MCP Server

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

Category
Visit Server

README

MCP-сервер 1С через COM (V83.COMConnector)

Внешний 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

Recommended Servers

playwright-mcp

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured