Router-1c-mcp — один MCP-сервер на все базы 1С

03.11.26

Интеграция - Нейросети

Один процесс на Rust вместо отдельного MCP-сервера на каждую базу 1С: база выбирается параметром base, схемы инструментов не дублируются, недоступная база не мешает остальным, отказ на чужую базу приходит до запроса. Инструменты остаются в расширении MCP_Сервер Владимира Харина — роутер их только пересылает. Замер на тринадцати базах: 31 КБ схем вместо 302 КБ.

Проблема

Несколько баз 1С в одном MCP-клиенте — это N одинаковых наборов инструментов. Расширение у всех одно, схемы у него те же; различаются инструменты только именем сервера. В настройках клиента это выглядит так:

{
  "mcpServers": {
    "ut": { "type": "http", "url": "http://1c-host/ut/hs/mcp/" },
    "bp": { "type": "http", "url": "http://1c-host/bp/hs/mcp/" },
    "ut-test": { "type": "http", "url": "http://1c-host/ut-test/hs/mcp/" }
  }
}

В вызовах это mcp__ut__execute_query и mcp__bp__execute_query, а в контексте — полный комплект схем на каждую базу. Замер на моём наборе: 18 инструментов, их описания и схемы — 23 КБ JSON на одну базу. Тринадцать баз — 302 КБ в каждом запросе сессии.

Дальше начинаются неудобства, которые видны не сразу.

Модель выбирает не базу, а сервер. Различить два одинаковых инструмента по описанию нельзя — только по имени сервера. Ошибка «объект не найден» в такой схеме означает не то, что объекта нет, а то, что смотрели не в ту базу.

Недоступная база тянет за собой остальные. Клиент поднимает все серверы при старте и ждёт каждый. Неответившая публикация даёт ошибку подключения, и работа начинается не с задачи, а с выяснения, почему нет базы. Остальные при этом исправны и могли бы работать.

Нет общего выключателя. Инструмент, который не нужен или слишком дорог по контексту, приходится отключать в каждом сервере отдельно. Забыли один — он снова в списке.

N рукопожатий и N копий учётных данных. Логин и пароль к каждой публикации лежат в настройках клиента, а не в одном месте. Перевыпустили пароль — правите столько записей, сколько баз.

 

Решение

router-1c-mcp — один процесс на Rust, который знает все базы и пересылает вызовы в их HTTP-сервисы. База выбирается обязательным параметром base.

Список баз — один файл:

[
  {
    "name": "ut",
    "url": "http://1c-host/ut",
    "username": "mcp-user",
    "password": "пароль",
    "service_root": "mcp",
    "max_concurrent": 4
  },
  {
    "name": "bp",
    "url": "http://1c-host/bp",
    "username": "mcp-user",
    "password": "пароль",
    "service_root": "mcp",
    "max_concurrent": 4
  }
]

Клиент подключается одной записью:

{
  "mcpServers": {
    "1c": { "type": "http", "url": "http://127.0.0.1:8010/mcp" }
  }
}

В каждом вызове обязателен base — имя базы из файла. Остальное как обычно: execute_query с текстом запроса, get_metadata_structure с именем объекта, validate_query для проверки синтаксиса.

Инструменты живут не в роутере: их реализует расширение MCP_Сервер Владимира Харина — https://github.com/vladimir-kharin/1c_mcp (MIT). Роутер только пересылает вызов на {url}/hs/{service_root}/rpc с Basic Auth. Без расширения на базе ему нечего отдавать — своих инструментов у него нет. У расширения есть свой Python-прокси, но он рассчитан на одну публикацию: транспорт и авторизацию решает, многобазовости не даёт.

Транспорт — Streamable HTTP без состояния: Mcp-Session-Id роутер игнорирует, после его перезапуска клиенту не нужно новое рукопожатие.

 

Как собирается список инструментов

При старте роутер опрашивает все базы сразу, каждую в своей задаче: initialize — заодно версия расширения, затем tools/list. Дожидается ответа всех; упавшая база не мешает остальным и не обрывает опрос.

Дальше инструменты объединяются по имени. В параметр base попадает не общий список баз, а только те, которые этот инструмент действительно отдают, — узкий enum. Остальные параметры и required сохраняются как есть:

{
  "name": "execute_query",
  "inputSchema": {
    "properties": {
      "base": { "enum": ["ut", "bp", "ut-test"], "type": "string" },
      "query": { "type": "string" }
    },
    "required": ["base", "query"]
  }
}

Так модель видит один execute_query и три допустимых базы вместо трёх одинаковых инструментов с разными именами.

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

Состав по базам пишется в tools.json рядом с файлом баз:

{
  "_generated": "2026-10-28T07:06:53Z",
  "common": ["execute_query", "db_tables"],
  "separate": {
    "ut": ["list_artifacts"],
    "bp": ["export_artifact"]
  }
}

Здесь common — инструменты, которые есть на всех ответивших базах, separate — «свои» инструменты конкретной базы вне общего набора. Файл перезаписывается при каждом старте и при восстановлении базы; секция tools_enabled, если она есть, переносится без изменений.

 

Что это экономит

На моей машине тринадцать баз: рабочие, копии, тестовые. Сравнение простое.

Что подключено Объём схем в контексте
Одна база отдельным сервером 23 КБ
Тринадцать баз отдельными серверами 302 КБ
Тринадцать баз через роутер 31 КБ

Считал байты JSON, как их отдаёт tools/list: восемнадцать инструментов в моём наборе, схемы одной базы без поля base — 23 216 байт. Тринадцать копий — 301 808 байт. Роутер отдаёт один набор на те же 18 инструментов; перечисление тринадцати баз в параметре base добавляет к нему около 8 КБ.

Разница — 9,7 раза, и она растёт с числом баз. Линейного роста больше нет: новая база добавляет несколько десятков байт в enum каждого инструмента, который она предоставляет, а не ещё одну копию всех описаний.

Клиенты считают токены по-своему, и токенизаторы у них разные, но доля одна и та же: в контексте лежит объём схем, а не число баз.

 

Отказ до сети

Белый список инструментов задаётся переменной MCP_TOOLS_ENABLED (имена через запятую) или секцией tools_enabled в tools.json; непустая переменная главнее файла. Список глобальный: он одинаково применяется к выдаче tools/list и к вызову инструмента, поэтому отключённый инструмент не вызвать, даже зная его имя.

Матрица «инструмент — базы» проверяется на каждом вызове, до пересылки. Порядок такой: белый список, матрица, пересылка.

Если у выбранной базы инструмента нет, клиент получает isError с текстом «Инструмент 'X' недоступен для базы 'Y'. Допустимые базы: [...]». Если имени нет в составе вообще — «Инструмент 'X' отсутствует в составе инструментов (допустимые: [...])».

Запрос в базу не уходит ни в одном из случаев. Это экономит не только время: ошибка видна сразу, а не после того, как 1С сходила в базу и вернула пустоту.

 

Упавшая база

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

Базы без снимка опрашиваются повторно раз в две минуты. Попыток конечное число: по умолчанию пять, то есть десять минут, дальше цикл останавливается — бесконечно базы не опрашиваются. Число задаётся переменной MCP_RETRY_ATTEMPTS или полем retry_attempts в обёрнутом файле баз; ноль выключает повтор. Когда ответили все базы, повтор прекращается досрочно.

Восстановилась — состав пересобирается, файл перезаписывается, инструменты публикуются в работающий сервер без перезапуска процесса. Клиент увидит новый список после переподключения: listChanged роутер не заявляет и уведомлений не рассылает.

 

Что ещё в комплекте

  • GET /health — проверка без рукопожатия MCP: сколько баз ответило, версия службы.
  • max_concurrent у базы — потолок одновременных запросов к ней, лишние ждут в очереди.

 

Что не прижилось

Снимок tools/list с первой живой базы. Первая версия брала состав инструментов у одной базы и строила по нему матрицу. Инструмент, который есть только у второй базы, при этом терялся. В 0.8.0 опрос идёт по всем базам сразу.

Свой ключ доступа X-MCP-Key. Заголовок и переменная с ключом убраны: открытое расширение их не использует, авторизация к базе — только Basic Auth. Если переменная осталась в окружении, она игнорируется.

Белый список в файле баз. Он переехал в файл состава: файл баз стал только про подключения. Старое поле tools_enabled в нём больше не читается — список надо перенести в tools.json или в переменную.

 

Ограничения

  • Транспорт заточен под 1С: адрес {url}/hs/{service_root}/rpc, только Basic Auth, ответы читаются как JSON (не SSE), Mcp-Session-Id не передаётся, пагинация tools/list не обходится, версия протокола в initialize зашита (2024-11-05). Для произвольных MCP-серверов нужен настраиваемый endpoint и заголовки.
  • Своих инструментов нет: без расширения Харина на базе роутеру нечего отдавать.
  • Пароли к публикациям лежат в bases.json открытым текстом — файл надо держать с ограниченными правами.
  • Автозапуска в комплекте нет: службу или systemd-юнит настраивают отдельно.
  • Новый список инструментов клиент увидит только после переподключения — уведомлений об изменении роутер не рассылает.

 

Установка

Готовые архивы — в выпуске на GitHub: router-1c-mcp-windows-x64.zip и router-1c-mcp-linux-x64.tar.gz (Linux — glibc не новее 2.17). Внутри бинарник, README и инструкция.

Распакуйте в отдельный каталог и опишите базы в bases.json — имена, адреса публикаций, учётные данные, при необходимости service_root и max_concurrent.

Запуск — тремя переменными:

MCP_HOST=127.0.0.1
MCP_PORT=8010
MCP_ONEC_BASES_FILE=C:\Tools\router-1c-mcp\bases.json
router-1c-mcp.exe

Проверка:

curl http://127.0.0.1:8010/health
{"bases":2,"service":"router-1c-mcp","status":"ok","version":"0.8.0"}

Состав инструментов можно посмотреть без MCP-клиента:

curl -s -X POST http://127.0.0.1:8010/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

Подключение в .mcp.json клиента:

{
  "mcpServers": {
    "1c": { "type": "http", "url": "http://127.0.0.1:8010/mcp" }
  }
}

Исходники: https://github.com/Regsorm/router-1c-mcp (MIT).

Вступайте в нашу телеграмм-группу Инфостарт

MCP 1С нейросети ИИ LLM Claude Code Cursor Rust MCP-сервер контекст агенты разработка 1С интеграция

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Нейросети Системный администратор Разработчик Аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С:Документооборот 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Россия Платные (руб)

Подключите ИИ к 1С и решайте рабочие задачи обычными словами. От работы с данными до доработки конфигурации через расширения, всё в привычном чате с ИИ-помощником. Теперь с поддержкой DeepSeek Harness, Kimi Code и Kimi Work, доступных в России без VPN.

15990 руб.

30.07.2026    19306    40    4    

36

SALE! %

Банковские операции Обмен с интернет-банком Мастера заполнения Нейросети Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1C:ERP 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:ERP. Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 3.0 Платные (руб)

Корректируйте банковские документы быстро и легко! Создайте правило обработки — и оно автоматически применится при загрузке выписки (отбор по любому реквизиту или регулярному выражению). Решение заполняет расшифровку платежа, комиссию эквайринга, подбирает ведомости на выплату зарплаты, помечает дубли из банка на удаление и многое другое. Доплачивать за алгоритмы не нужно — они включены в решение. Обработка работает при загрузке из файлов клиент-банка и через DirectBank. Новое — искусственный интеллект: модель приводит нестандартные назначения платежа к виду, понятному алгоритмам, а ИИ-ассистент прямо в 1С консультирует по решению и разбирает код правил и алгоритмов. Поддерживаются локальные и облачные OpenAI-совместимые модели — данные могут не покидать ваш контур.

17500 руб.

20.12.2024    21422    104    32    

90

Инструментарий разработчика Нейросети Платные (руб)

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

15250 руб.

25.08.2025    76689    147    41    

154

SALE! 30%

Нейросети 1С 8.3 1С:Документооборот 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Расширение добавляет в 1С чат с ИИ-агентом. Пользователь пишет вопрос обычными словами: «какие УПД не подписаны?», «какой НДС к уплате за квартал?», «что висит на согласовании дольше недели?», а агент сам строит запросы к базе с правами этого пользователя и отвечает цифрами, таблицей, диаграммой или файлом Excel. Плитки «Аналитик», «Бухгалтер» и «Руководитель» дают сводку по базе одной кнопкой. Агент разбирает ошибки по скриншоту, сверяет прайсы поставщиков и проверяет коды маркировки. С версии 1.0.21 спрашивать можно и с телефона: QR-код в окне агента, без установки приложения. Работает в УТ 11, КА 2, ERP 2, БП 3.0, УНФ 3.0, Документооборот 3.0 и Альфа-Авто 6, ставится одним расширением.

18300 руб.

05.10.2026    3326    10    9    

11

Инструментарий разработчика Нейросети Системный администратор Разработчик Руководитель проекта 1С 8.3 Платные (руб)

Обработка заменяет ФИО, организации, ИНН, ИИН, БИН, ОГРН, КПП, БИК, счета и IBAN, паспорта, СНИЛС, адреса, телефоны, почту и суммы на правдоподобные выдуманные перед отправкой данных в ChatGPT, Claude или YandexGPT, а потом расшифровывает ответ модели обратно, подставляя настоящие имена и настоящие числа. Возвращаются и те итоги, которые модель посчитала сама: суммы масштабируются одним коэффициентом, поэтому пропорции и доли переживают обезличивание. Словарь замен хранится в самой базе и подхватывается автоматически, даже если обработку закрывали. Реквизиты России и Казахстана, любая конфигурация от 8.3.24, без единой зависимости.

14640 руб.

07.08.2026    2133    3    0    

3

Распознавание документов и образов Нейросети 1С:Предприятие 8 1С 8.3 1С 8.5 1C:Бухгалтерия 1С:Зарплата и Управление Персоналом 3.x Беларусь Россия Казахстан Армения Платные (руб)

ИИ-сканер документов с REST API для интеграции с 1С и корпоративными системами. Извлекайте данные из счетов, паспортов, дипломов, патентов и трудовых книжек за секунды. Точность человека - скорость машины. Приложение поддерживает восемь типов документов, четырех провайдеров ИИ (имеется возможность использования локальных ИИ), локальный REST API и экспорт в JSON. Важно! модель должна поддерживать функцию Vision (распознавание файлов и картинок). Запускайте используя локальные ИИ, без подписок и ограничений

6100 руб.

24.08.2026    1396    1    0    

1

Нейросети Разработчик 1С 8.3 Бесплатно (free)

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

05.11.2026    5860    Iliaelagin    5    

15

Нейросети Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Бесплатно (free)

ИИ агент для бухгалтерии - открытый ИИ-консультант внутри 1С. Он отвечает на вопросы по данным базы, анализирует задолженность и обороты, помогает разбирать ошибки проведения и готовить документы. Пользователь видит шаги агента: какие инструменты вызваны и какие результаты получены. Решение состоит из расширения 1С и сервера на Python, поддерживает локальные модели и облачные API. Инструменты выполняются с правами текущего пользователя. Текущая версия - прототип для «Бухгалтерии предприятия 3.0». Исходный код распространяется под лицензией MIT.

31.10.2026    3376    166    nomadAI    8    

19
Для отправки сообщения требуется регистрация/авторизация