mcp-1c-local-bridge
Control and query a live 1C:Enterprise session through an MCP bridge.
List bridge sessions and check connectivity with
sessionsandping.Run 1C queries with parameters, output formats, row limits, and multi-query packages via
query.Evaluate 1C expressions on the server or client side with
eval.Execute 1C/BSL code with
execute, including optional write permissions and transaction controls.Inspect configuration metadata, including extension objects, with
metadata.Search metadata by name, synonym, type, or handler and analyze object usages with
findandusages.Retrieve results from commands that exceeded their timeout with
result.Cancel commands that have not yet started with
cancel.Target specific sessions and set per-command timeouts up to 280 seconds.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-1c-local-bridge list open 1C sessions and run a query for unpaid customer invoices"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP 1C Local Bridge
MCP-сервер и внешняя обработка 1С, через которые ИИ-агент в любом MCP-клиенте выполняет запросы, выражения и код в открытом сеансе 1С пользователя. Всё работает на компьютере разработчика: команды и ответы передаются через каталог в профиле пользователя, промежуточного сервера нет.
Статья о проекте на Инфостарте: https://infostart.ru/1c/articles/2831401/
Как это устроено
MCP-клиент с ИИ-агентом
| stdio
MCP-сервер mcp-1c-local-bridge (Python, запускается клиентом на время сессии)
| файлы JSON
%TEMP%\mcp-1c-local-bridge\<сеанс>\in, work, out, session.json
| опрос раз в 0,5 с
обработка MCPLocalBridge.epf, открытая в клиенте 1С
| вызов сервера в том же сеансе
сервер 1СMCP-сервер кладёт команду файлом в каталог сеанса и ждёт файл ответа.
Форма обработки раз в полсекунды забирает команды, выполняет их на сервере 1С (или на клиенте) в сеансе пользователя и с его правами, пишет ответ и раз в 2 секунды обновляет
session.json(сердцебиение).Обмен идёт на стороне клиента 1С: сервер 1С до компьютера пользователя не достаёт, поэтому каталог - на этом компьютере, и данные дальше него не уходят.
Несколько сессий агента и несколько открытых баз работают одновременно: у каждой открытой формы свой каталог сеанса, у каждой команды - свой идентификатор.
Related MCP server: 1c-mcp
Требования
Windows с клиентом 1С:Предприятие 8.3: тонкий клиент, а для конфигураций на обычных формах - и толстый клиент обычного приложения. Обработка рассчитана на режим совместимости конфигурации от 8.3.14 и не использует
Асинх/Ждать; режим совместимости 8.2 - в разделе «Обычное приложение и старые конфигурации».В конфигурации разрешены синхронные вызовы: свойство «Режим использования синхронных вызовов расширений платформы и внешних компонент» - «Использовать» или «Использовать с предупреждениями». Обработка работает с файлами на клиенте синхронными методами.
У пользователя есть право открывать внешние обработки.
Python 3.11+ и uv. MCP-сервер запускается на том же компьютере, что и клиент 1С: в Windows или в WSL.
Установка
git clone https://github.com/ntappw/mcp-1c-local-bridge.git
cd mcp-1c-local-bridge
uv syncСервер работает по stdio. Зарегистрируйте его в своём MCP-клиенте: команда запуска -
<каталог клона>\.venv\Scripts\mcp-1c-local-bridge.exe, аргументов нет (если сервер запускается в WSL -
<каталог клона>/.venv/bin/mcp-1c-local-bridge). Формат настроек у клиентов разный, во многих это JSON
такого вида:
{
"mcpServers": {
"1c-local-bridge": {
"command": "C:\\tools\\mcp-1c-local-bridge\\.venv\\Scripts\\mcp-1c-local-bridge.exe"
}
}
}После регистрации перезапустите клиент, чтобы он подхватил сервер.
Каталог обмена по умолчанию - %TEMP%\mcp-1c-local-bridge пользователя Windows, MCP-сервер находит его сам.
Другой каталог задаётся переменной окружения MCP_1C_BRIDGE_DIR - см.
Свой каталог обмена.
Работа
Откройте
dist/MCPLocalBridge.epfв нужной базе: «Файл - Открыть» (Ctrl+O). Форма - HTML-страница: состояние моста, база и пользователь, режим выдачи результатов, разрешения агенту и журнал команд. В толстом клиенте обычного приложения открывается обычная форма с тем же составом (см. «Обычное приложение и старые конфигурации»).Агент вызывает
sessions, видит сеанс и шлёт команды. Пока форма открыта, сеанс жив; закрыли форму - каталог сеанса удаляется, команды больше не принимаются. Если мост открыт в нескольких сеансах (например, одна база в двух клиентах), подскажите агенту нужный по идентификатору сеанса: его копирует в буфер обмена ссылка «скопировать» в шапке формы, в обычной форме - кнопка «Копировать идентификатор».В журнале по каждой команде видны время, вид, текст, итог, краткий результат и длительность. Строка раскрывается щелчком прямо в списке: полный текст команды, параметры, результат, сообщения и ошибка. Раскрытые строки и прокрутка не сбрасываются, когда приходят новые команды.
«Приостановить» останавливает выполнение: команды ждут в очереди. При открытии формы «Запись в базу» выключена, «Код на клиенте» включён; оба переключаются тумблерами на форме.
Выдача результатов
Автоматически (по умолчанию) - ответ уходит агенту сразу после выполнения команды.
С подтверждением - выполненная команда показывается на форме вместе с результатом, и агент получает его только после кнопки «Отдать агенту». «Не отдавать» возвращает агенту статус
deniedбез данных. Пока результат ждёт решения, следующие команды стоят в очереди. Вызов агента, не дождавшийся решения заtimeout, сообщает, что результат ждёт пользователя, и забирает ответ позже инструментомresult.К решению можно приложить комментарий агенту: при отказе - почему результат не отдан и что исправить в запросе, при выдаче - что учесть в результате. Агент получает комментарий вместе с ответом и может сразу прислать исправленный запрос. Разрешений на форме комментарий не меняет.
Свой каталог обмена
По умолчанию обработка и MCP-сервер работают в %TEMP%\mcp-1c-local-bridge пользователя Windows, и
настраивать ничего не нужно. Другой каталог можно задать, например, если %TEMP% чистится или его проверяет
антивирус. Сами стороны каталог не согласуют, поэтому он задаётся в двух местах:
В обработке: в строке «Каталог обмена» нажмите «Изменить» и выберите каталог. Сеанс сразу переезжает в него с новым идентификатором, а выбор запоминается для пользователя 1С в этой базе и действует при следующих открытиях. Пока каталог не стандартный, форма напоминает, что MCP-серверу нужен тот же. «По умолчанию» возвращает стандартный каталог.
MCP-серверу: тот же каталог в переменной окружения
MCP_1C_BRIDGE_DIR- путём, под которым каталог виден процессу MCP-сервера. Переменную задают в настройках сервера в MCP-клиенте, обычно в полеenv:"1c-local-bridge": { "command": "C:\\tools\\mcp-1c-local-bridge\\.venv\\Scripts\\mcp-1c-local-bridge.exe", "env": {"MCP_1C_BRIDGE_DIR": "D:\\mcp\\exchange"} }После изменения перезапустите клиент. Проверка - инструмент
sessions: в нём виден сеанс, а если сеансов нет - каталог, где их ищет MCP-сервер.
Чтобы вернуться к стандартному каталогу, нажмите «По умолчанию» в обработке и уберите переменную из настроек MCP-сервера.
Клиент 1С на терминальном сервере (RDP): %TEMP% там серверный, и MCP-сервер на вашем компьютере его не
видит. Выберите в обработке каталог на диске своего компьютера, проброшенном в сеанс RDP («Локальные ресурсы -
Диски» в настройках подключения), например \\tsclient\C\mcp-exchange, а в MCP_1C_BRIDGE_DIR - тот же
каталог локально: C:\mcp-exchange. Код агента с side=client выполняется при этом на терминальном сервере:
файлы, которые он пишет, остаются там, а не на вашем компьютере.
MCP-сервер смотрит в один каталог. Если в разных базах выбраны разные каталоги, агент видит сеансы только из каталога MCP-сервера.
Каталог должен быть доступен и клиенту 1С, и MCP-серверу.
В каталоге обмена MCP-сервер трогает только папки сеансов (имя из 8 шестнадцатеричных символов) и пишет файл
.clock, остальное содержимое не меняет.
Инструменты
Инструмент | Что делает |
| Открытые сеансы моста: база, пользователь, конфигурация, режим совместимости, состояние, разрешения |
| Проверка связи: время сервера 1С, номер сеанса, пользователь |
| Запрос 1С с параметрами; возвращает все результаты пакета, |
|
|
|
|
| Состав конфигурации с отбором или описание объекта по полному имени, включая объекты расширений |
| Результат команды, не уложившейся в |
| Снять команду, которую обработка ещё не начала |
| Поиск по индексу метаданных: объекты, реквизиты, измерения, табличные части, значения перечислений, подписки и задания - по имени, синониму, обработчику |
| Где используется объект: поля его типа, движения, подписки, планы обмена, подсистемы, функциональные опции и другие связи из метаданных |
У команд есть session (идентификатор или часть строки соединения; не нужен, если сеанс один) и timeout
(до 280 с). Команда, которую обработка не начала за timeout, снимается и уже не выполнится; начатая
выполняется дальше, а вызов возвращает её идентификатор для result. Ответ больше 20 000 символов
сохраняется в ~/.cache/mcp-1c-local-bridge/results/, в ответ инструмента попадают начало и пути к файлам.
Обычное приложение и старые конфигурации
Конфигурации на обычных формах (УТ 10.3, БП 2.0, УПП, КА 1.1) подключаются двумя способами:
В тонком клиенте: конфигурация открывается в режиме управляемого приложения, и мост работает как обычно, в том числе в режиме совместимости 8.2.
В толстом клиенте обычного приложения - в том же сеансе, где работает пользователь. Толстый клиент открывает у обработки её обычную форму: тот же мост на стандартных элементах - состояние, кнопки, флажки режима выдачи и разрешений, журнал команд таблицей и под ним подробности выбранной команды. Команды, выдача с подтверждением и комментарием, свой каталог обмена и индекс метаданных работают так же, как в управляемой форме;
sessionsпоказывает у такого сеанса «обычное приложение». Серверный код агента выполняет модуль объекта обработки в том же процессе толстого клиента, с тем же откатом транзакции. Отличия от тонкого клиента:сообщения
Сообщить()толстый клиент сразу выводит в окно сообщений 1С, агенту в ответе они не приходят;код на клиенте (
side=client) работает в толстом клиенте с полным доступом к базе, без транзакции и отката: запись из него флажок «Запись в базу» не останавливает, её держит только «Код на клиенте»;выбор каталога обмена и предупреждения - модальные окна: пока такое окно открыто, команды не выполняются.
Индекс метаданных
find и usages работают по индексу метаданных сеанса: объекты конфигурации и активных расширений, их поля с
типами, движения, подписки, регламентные задания, составы планов обмена, подсистем, функциональных опций, общих
реквизитов. Первый вызов в сеансе моста просит индекс у обработки, дальше поиск идёт в памяти MCP-сервера и окно
1С не занимает.
Обработка хранит индекс в настройках пользователя этой базы и отдаёт оттуда, пока метаданные те же: версия
конфигурации и расширения, состав объектов и число их полей. Иначе индекс строится заново - порциями до секунды,
между которыми окно 1С отвечает; на форме виден процент. Построение дольше timeout не теряется: вызов
сообщает, что индекс строится, повторный ждёт ту же команду. Смену типа или переименование поля без изменения их
числа обработка не замечает: после загрузки таких изменений в базу передайте refresh=true.
Кода модулей в индексе нет: из режима Предприятия тексты модулей недоступны, обращения из кода ищутся по выгрузке конфигурации.
Значения
Ответ обработки - JSON. Ссылка приходит объектом {"_type": "Справочник.Контрагенты", "_uuid": "...", "_presentation": "..."}, значение перечисления - {"_type": "Перечисление.X", "_name": "...", ...},
дата - строкой 2026-10-21T00:00:00, NULL и Неопределено - null. Таблица значений, результат запроса
и набор записей регистра - колонками и строками (не больше row_limit, по умолчанию 1000), объект
справочника или документа - реквизитами и табличными частями. В формате table ссылки показываются
представлениями, в json - целиком.
Параметры query - объект «имя: значение». Простые значения передаются как есть, массив - списком для
В (&Список), особые значения - объектами:
Объект | Значение 1С |
| дата (можно с временем) |
| ссылка; ссылку из ответа можно передать целиком |
| значение перечисления |
| предопределённое значение |
| выражение, вычисленное на сервере |
Пример кода для execute:
Выборка = Справочники.Валюты.Выбрать();
Результат = Новый Массив;
Пока Выборка.Следующий() Цикл
Результат.Добавить(Выборка.Ссылка);
КонецЦикла;Безопасность и ограничения
Код агента выполняется в живом сеансе пользователя и с его правами. Пока команда идёт, окно 1С не отвечает; ошибка платформы в такой команде может уронить сеанс пользователя. Поэтому долгую операцию (обмен, массовую обработку) агенту подсказано запускать не одним
execute, а фоновым заданием через экспортный метод общего модуля конфигурации и опрашивать его состояние короткими командами. Фоновое задание идёт в своём сеансе, вне транзакции моста: его запись не откатывается и разрешением «Запись в базу» не ограничена, поэтому агенту велено запускать его только сallow_write=trueи с вашего согласия.Серверный код
evalиexecuteпо умолчанию выполняется в транзакции, которая после выполнения откатывается: изменения в базе не сохраняются. Откат не отменяет внешних эффектов - файлов, HTTP-запросов, почты, запуска фоновых заданий, записей журнала регистрации. Сохранить изменения можно только сallow_write=trueи при включённом на форме разрешении «Запись в базу». Пока оно выключено (так при открытии формы), запрос записи тоже выполняется с откатом, а в ответе агенту приходит предупреждение.Запись тоже идёт в транзакции: изменения фиксируются, только если код отработал без ошибок, а при ошибке откатываются целиком - так же, как в проверочном прогоне с откатом. Если код оставил незавершённую свою транзакцию или перехватил ошибку записи внутри неё, запись не фиксируется.
transaction=falseвыполняет запись без транзакции моста: что код успел записать до ошибки, остаётся. Это нужно долгим операциям - транзакция держит блокировки всё время выполнения - и коду, который сам управляет транзакциями или ждёт фоновые задания.Код на клиенте (
side=client) выполняется в модуле формы обработки, без транзакции, и только при разрешении «Код на клиенте». Разрешения и режим выдачи после такого кода восстанавливаются: сам себе код их не включит. В толстом клиенте обычного приложения такой код может читать и писать базу напрямую, и «Запись в базу» его не ограничивает.Каталог обмена лежит в профиле пользователя Windows (
%TEMP%). Команду в него может положить любой процесс под этой учётной записью - тот же уровень доверия, что и у самого сеанса 1С. Свой каталог выбирайте с такими же правами: в общую папку команду сможет положить любой, у кого есть запись туда, и она выполнится в вашем сеансе.Если на экране модальное окно 1С (например, ошибка компиляции вызванного модуля), обработка не выполняет команды, пока окно не закроют.
sessionsпоказывает такой сеанс как неотвечающий.Если MCP-клиент умеет подтверждать вызовы инструментов, не разрешайте
executeиevalбез вопроса: пусть каждый их вызов подтверждается вручную.
Сборка обработки
Исходники обработки - XML-выгрузка в epf/, собранный файл - dist/MCPLocalBridge.epf. Сборке нужна
лицензия 1С, поэтому скрипт подключает конфигуратор к серверной базе (лучше тестовой или копии); в базу
ничего не загружается:
powershell -NoProfile -ExecutionPolicy Bypass -File scripts\build-epf.ps1 -Server <сервер> -Ref <база>Модули .bsl хранятся в UTF-8 с BOM и переводами строк CRLF, как их выгружает конфигуратор.
Обычная форма ФормаОбычная в выгрузке - двоичный контейнер Form.bin. Её модуль и макет лежат текстом в
epf/ordinary-form; после правки контейнер пересобирается командой python3 scripts/pack_ordinary_form.py,
а тест проверяет, что Form.bin собран из текущих исходников.
Протокол
Формат каталога обмена, команд и ответов - docs/protocol.md.
Разработка
uv run pytestТесты проверяют MCP-сторону с имитацией обработки в отдельном потоке. Обработку проверяют в 1С: открыть
собранный файл в тестовой базе и прогнать ping, query, eval, execute, metadata.
Лицензия
Available Tools
10 toolscancelB
Снимает команду, которую обработка ещё не начала выполнять.
Inputs: command_id (required). Returns: result
evalA
Вычисляет выражение 1С (Вычислить) и возвращает значение. Ссылки приходят типом, UUID и представлением, объекты - реквизитами и табличными частями, таблицы и выборки - строками (не больше 1000). На сервере выражение вычисляется в транзакции, которая затем откатывается (если не allow_write).
Inputs: expression (required), side, format, session, +3 more. Returns: result
executeA
Выполняет фрагмент кода 1С (Выполнить) и возвращает значение переменной Результат.
На сервере код по умолчанию идёт в транзакции, которая после выполнения откатывается: изменения в базе
не сохраняются. Внешние эффекты откат не отменяет: файлы, HTTP, почта, запуск фоновых заданий, записи
журнала регистрации. Сообщения пользователю (Сообщить) с сервера возвращаются в ответе.
Выполнение занимает окно 1С пользователя: пока код работает, интерфейс его сеанса не отвечает. Долгую
операцию (обмен, массовую обработку) одним execute не запускай: если у неё есть экспортный метод общего
модуля конфигурации, запусти его фоновым заданием (ФоновыеЗадания.Выполнить) и опрашивай состояние задания
короткими командами. Фоновое задание идёт в своём сеансе, вне транзакции моста: его запись в базу не
откатывается и разрешением «Запись в базу» не ограничена - запускай его только с allow_write=true и с
согласия пользователя.Inputs: code (required), side, format, session, +3 more. Returns: result
findA
Поиск по индексу метаданных сеанса: объекты, реквизиты, измерения, ресурсы, табличные части, значения перечислений, предопределённые, формы, команды, макеты; подписки и регламентные задания - и по обработчику. Показывает полное имя, синоним, типы и расширение. Индекс включает объекты и реквизиты расширений, но не код модулей. Первый вызов в сеансе берёт индекс у обработки (из настроек пользователя или строит заново), дальше поиск идёт без обращения к 1С.
Inputs: text (required), kind, limit, refresh, +2 more. Returns: result
metadataA
Метаданные конфигурации сеанса, включая объекты расширений: без path - состав по коллекциям (с filter - только подходящие объекты), с path - реквизиты, табличные части, измерения, ресурсы, значения перечисления, движения, формы, команды и макеты объекта.
Inputs: path, filter, format, session, +1 more. Returns: result
pingB
Проверка связи: обработка забирает команду и делает вызов сервера 1С (время сервера, номер сеанса).
Inputs: session, timeout. Returns: result
queryA
Выполняет запрос 1С на сервере с правами пользователя сеанса и возвращает результаты всех запросов пакета.
Значения параметров: строка, число, булево и null передаются как есть, массив - список значений
(для В (&Список)). Особые значения - объекты:
{"_date": "2026-10-21T00:00:00"} - дата (можно "2026-10-21");
{"_type": "Справочник.Контрагенты", "_uuid": "..."} - ссылка; ссылку из результата format=json
можно передать целиком;
{"_type": "Перечисление.ВидыКонтрагентов", "_name": "ЮридическоеЛицо"} - значение перечисления;
{"_predefined": "Справочник.Валюты.Рубль"} - предопределённое значение;
{"_expr": "НачалоГода(ТекущаяДатаСеанса())"} - выражение 1С, вычисленное на сервере.
РАЗРЕШЕННЫЕ и ПЕРВЫЕ в текст не добавляются: пишите их сами.Inputs: text (required), format, params, session, +2 more. Returns: result
resultC
Результат команды, которая выполнялась дольше своего timeout.
Inputs: command_id (required), wait, format. Returns: result
sessionsA
Сеансы 1С, в которых открыта форма обработки моста: база, пользователь, конфигурация, состояние и разрешения. Обработку (dist/MCPLocalBridge.epf) пользователь открывает в нужной базе через Файл - Открыть.
Inputs: no named parameters. Returns: result
usagesA
Где используется объект метаданных, по индексу сеанса: поля и объекты его типа (в том числе через определяемые типы), документы, которые пишут в регистр, движения документа, подписки на события, журналы, последовательности, планы обмена, подсистемы, функциональные опции, общие реквизиты, подчинённые справочники, ввод на основании; для общего модуля - подписки и регламентные задания, вызывающие его методы. Обращений из кода модулей в индексе нет.
Inputs: name (required), limit, refresh, session, +1 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
The tools mostly target clearly different operations: execute/eval/query are separated by code execution, expression evaluation, and 1C query language semantics. Metadata, find, and usages overlap in domain but differ as browse, search, and dependency lookup; descriptions help resolve the remaining ambiguity.
All names are lowercase single words, but the set mixes verbs (cancel, eval, execute, find, ping) with nouns (metadata, query, result, sessions, usages). The names are readable and semantically clear, but there is no consistent verb_noun or noun-based convention across the toolset.
Ten tools is well within a reasonable range for a bridge server that must cover code execution, queries, metadata introspection, diagnostics, and asynchronous command lifecycle. Each tool appears to earn its place, including auxiliary tools like result, cancel, ping, and sessions.
The surface covers the core domain well: execute/eval/query for 1C operations, metadata/find/usages for introspection, sessions/ping for diagnostics, and result/cancel for async command handling. A minor gap is the lack of a general command-status/list operation, but most workflows can be completed with the existing tools.
Maintenance
Related MCP Connectors
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Connect AI assistants to your approved computer for files, commands, browser and desktop tasks.
- DNS-DATA RemoteDeprecatedcom.dns-data
Connect AI assistants to authorized Windows and macOS devices for files, commands, and management.
Reach your own computers from any AI app: files, search, commands, approvals and outage alerts.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with 1C:Enterprise databases through natural language, providing metadata retrieval, configuration analysis, and code generation.9-
- AlicenseNot gradedqualityDmaintenanceGive an AI agent eyes into your 1C:Enterprise 8.3 base — read metadata & data, run queries, and diagnose why a document won't post — over one extension HTTP service.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to interact with 1C: Enterprise development environment, including running tests, managing launch profiles, building configurations, and performing database operations through the 1C: Platform Tools extension.44MIT
- AlicenseAqualityAmaintenanceEnables AI agents to drive the 1C:Enterprise test client directly, opening forms, reading and modifying data, working with tables, and recording or replaying action scenarios. Connects to local or remote test clients over their network protocol without a testing manager.1184AGPL 3.0