Я инженер-программист на небольшом российском заводе. Несмотря на скромные масштабы производства в штате имеется финансовый аналитик с постоянными потребностями в (внезапно) данных из учётной системы.
В сети я так и не нашёл более-менее полного гайда по подключению баз 1С к агентским средам через MCP. Встречаются отдельные статьи про Model Context Protocol (много), примеры для файловых систем, GitHub или PostgreSQL, но ничего про реальную интеграцию с 1С.
Поэтому решил собрать собственный опыт в одном месте.
В качестве платформы я использовал Hermes Agent, а в качестве MCP-сервера — расширение для 1С, работающее через стандартную HTTP-публикацию. Расширение взято отсюда: https://github.com/prepod2003/mcp-rsv-data. Несмотря на то, что все действия расширения ограничены чтением, решил, что агент подключается не к боевой базе, а к её ежедневно обновляемой копии. Немного паранойи не повредит.
Схема получилась простой:
Veeam Backup → ежедневое восстановление MS SQL → копия информационной базы 1С → HTTP-публикация 1С (IIS) → Hermes Agent
Таким образом агент никогда не работает с рабочей базой. Каждый день он получает свежую копию, на которой можно без опасений выполнять любые запросы, строить аналитику и исследовать конфигурацию.
Восстановление базы
Для восстановления используется Veeam Backup & Replication 12.3 и модуль Veeam Explorer for Microsoft SQL Server.
Import-Module Veeam.Backup.PowerShell -ErrorAction Stop Import-Module Veeam.SQL.PowerShell -ErrorAction Stop Start-Transcript 'C:\Scripts\Restore-SQL.log' # ----------------------------- # Настройки # ----------------------------- $backupName = '<имя бэкапа в Veeam B&R>' $sourceDatabase = '<имя исходной БД SQL>' $targetDatabase = '<имя целевой БД SQL>' $sqlServer = '<адрес или FDQN целевого SQL сервера>' $sqlInstance = '<инстанс (дефолтный MSSQLSERVER)' # опционально $sqlPort = 1455 # SQL Login, имеющий права sysadmin в формате Base64 $sqlCred = Import-Clixml 'C:\creds\sql-cred.xml' # ----------------------------- # Последняя точка восстановления # ----------------------------- $backup = Get-VBRBackup -Name $backupName if (-not $backup) { throw "Backup '$backupName' not found." } $restorePoint = Get-VBRApplicationRestorePoint -SQL | Where-Object { $_.Name -like '*<уникальная часть имени БД>*' } | Sort-Object CreationTime -Descending | Select-Object -First 1 if (-not $restorePoint) { throw 'Restore point not found.' } # ----------------------------- # SQL Restore Session # ----------------------------- $session = Start-VESQLRestoreSession -RestorePoint $restorePoint try { $database = Get-VESQLDatabase ` -Session $session ` -Name $sourceDatabase if (-not $database) { throw "Database '$databaseName' not found in restore point." } Restore-VESQLDatabase ` -Database $database ` -DatabaseName $targetDatabase ` -ServerName $sqlServer ` -InstanceName $sqlInstance ` -Port $sqlPort ` -SqlCredentials $sqlCred ` -Force ` -RecoveryState Recovery } finally { Stop-VESQLRestoreSession -Session $session } Stop-Transcript
Первоначальная идея была после восстановления автоматически подгружать расширение .cfe в режиме Конфигуратора.
1cv8.exe DESIGNER /S кластер\имя_восстановленной_БД /N имя_пользователя_1С_с_админскими_правами /P пароль /LoadCfgExtension C:\1C\RSVData.cfe /UpdateDBCfg
В этом варианте расширение подгружалось в безопасном режиме и не работало должным образом.
Пришлось добавить расширение в исходную базу, благо оно не конфликтовало с функциональностью основной конфигурации и других расширений.
Публикация HTTP-сервиса
MCP реализован стандартным HTTP-сервисом 1С, опубликованным через IIS. Фактически IIS принимает HTTP-запросы и передаёт их в rphost.exe, где уже выполняется код расширения.
Расширение не запускает отдельные процессы, не открывает соединения и не отправляет данные наружу. Код начинает выполняться только после входящего HTTP-запроса.
Для публикации базы через IISоткрываем 1С от имени Администратора в режиме Конфигуратора → Администрирование → Публикация на веб-сервере
Нам нужна закладка HTTP-сервисы и чек-бокс Публиковать HTTPсервисы расширений по умолчанию.

Hermes Agent
Hermes Agent устанавливается командой в Powershell: irm https://hermes-agent.nousresearch.com/install.ps1 | iex Модели подключены через агрегатора, используется openai/gpt-5.6-luna Hermes умеет работать с MCP "из коробки". Сервер добавляется одной командой:
hermes mcp add <имя MCP (я использую accounting)> --url http://<FDQN 1С сервера в локальной сети>/<имя опубликованной БД 1С>/hs/rsvdata/mcp --auth header
Во время настройки выяснился один нюанс.
Hermes ожидает Bearer-токен, а публикация 1С использует HTTP Basic Authentication. После добавления сервера пришлось вручную скорректировать конфигурацию.
Конфигурационные файлы Hermes Agent в Windows хранятся в C:\Users\<имя пользователя>\AppData\Local\hermes. Для Linux это ~/.hermes
В config.yaml получилось так:
mcp_servers: <имя опубликованной БД 1С>: url: http://<FDQN 1С сервера в локальной сети>/<имя опубликованной БД 1С>/hs/rsvdata/mcp headers: Authorization: Basic ${MCP_API_KEY} enabled: true
А в .env хранится Base64-представление пары логин:пароль:MCP_API_KEY=******************************==
Проверяем соединение в MCP в консоли:
hermes mcp test <имя MCP (accounting)> ✓ Connected ✓ Tools discovered: 8
Агент автоматически обнаруживает доступные инструменты MCP:
config
describe
get_structure
query
execute_query
reveal
help
ping
Как это выглядит в работе
После запуска Hermes Agent в CLI видны подключенные MCP:

В десктопной версии в левом меню Capabilities →MCP:

Теперь можно задавать вопросы обычным языком:
«Покажи последние реализации за август»
«Найди контрагента по ИНН»
«Какие документы продажи были оформлены вчера?»
«Кто не закупал продукцию больше года?»
Если информации о структуре недостаточно, агент сначала исследует конфигурацию (describe, get_structure), затем сам выбирает подходящий инструмент (query или execute_query) и возвращает результат.
Грабли
Во время тестирования обнаружилась странная проблема с анонимизацией данных.
Часть токенов в регистре анонимизации содержала разделители тысяч, например:
[ОРГ-1 229]
Из-за этого инструмент reveal не мог выполнить обратное преобразование, ибо ожидал строку без пробелов.
Полная очистка регистра анонимизации решила проблему. После повторного формирования карты новые токены стали создаваться корректно и декодирование снова заработало. Источник такого поведения локализовать не удалось, баг более не повторялся.
Итоги
В результате получилась удобная схема, которую можно использовать не только для экспериментов с LLM, но и как безопасный инструмент анализа корпоративных данных.
Рабочие базы остаются нетронутыми, агент работает только с ежедневно обновляемой копией, а подключение занимает несколько минут после первоначальной настройки.
Бонус: Настройка нескольких MCP для 1С
К Hermes Agent у меня подключены два MCP-сервера с разными информационными базами 1С: Бухгалтерия предприятия и 1С:ЗУП. С технической точки зрения они не отличаются: оба предоставляют одинаковый набор инструментов (describe, get_structure, query, execute_query и т.д.). Из-за этого агенту не всегда очевидно, к какой именно базе нужно обращаться.
Поэтому я сразу дал серверам понятные имена в конфигурации:
mcpServers: accounting: ... wage: ...
Этого показалось недостаточно. Если спросить просто «покажи сотрудников», агент может выбрать любую из баз, потому что справочник сотрудников существует и в бухгалтерии, и в ЗУП.
Чтобы исключить подобные ситуации, я добавил в SOUL.md описание назначения каждого MCP.
### accounting База 1С:Бухгалтерия предприятия. Использовать для: - реализации; - поступлений; - ОСВ; - проводок; - счетов; - НДС; - бухгалтерской и налоговой отчетности. ### wage База 1С:Зарплата и управление персоналом. Использовать для: - сотрудников; - кадровых документов; - отпусков; - больничных; - начислений; - удержаний; - графиков работы; - табелей.
Кроме выбора сервера, я зафиксировал общий порядок работы с инструментами 1С:
### General MCP rules При работе с MCP-серверами 1С придерживайся следующего порядка: 1. Если структура объектов или доступные поля неизвестны, сначала используй describe и get_structure. 2. Для типовых операций чтения используй query. 3. Используй execute_query только если: - требуемая выборка не поддерживается query; - необходимы сложные соединения, агрегации или вычисления; - требуется выполнить произвольный запрос на языке запросов 1С. 4. Не используй execute_query, если задачу можно решить через query без потери функциональности. 5. Не делай предположений о структуре конфигурации 1С. Если состав реквизитов, табличных частей или связей неизвестен, сначала получи метаданные с помощью describe или get_structure.
Смысл этих правил простой. Я не хочу, чтобы агент сразу начинал писать произвольные запросы к базе, опираясь на предположения о структуре конфигурации. Если он не знает состав реквизитов или регистров, сначала должен посмотреть метаданные через describe и get_structure. Для обычных выборок достаточно query, а execute_query остается инструментом для действительно сложных случаев, когда возможностей стандартного API уже недостаточно.
Такой подход заметно повышает предсказуемость поведения Hermes. Вместо того чтобы каждый раз объяснять, какую базу использовать и каким инструментом пользоваться, я один раз описал эти правила в SOUL.md, и дальше агент применяет их автоматически практически во всех задачах, связанных с 1С.

