7.8 KiB
date, type, tags
| date | type | tags | ||||||
|---|---|---|---|---|---|---|---|---|
| 2026-06-21 | decision |
|
MCP-сервер mcp-1c к базе 1С Бужарово (RitmUl / Розница)
Развёрнут feenlace/mcp-1c — Claude Code читает метаданные и выполняет SELECT-запросы к боевой базе RitmUl (1С:Розница 2.3.23.27) на projects/buzharovo/server1c.
Итоговая схема (работает end-to-end)
Mac (mcp-1c stdio, ~/.local/bin/mcp-1c v1.8.0)
→ NetBird → http://100.70.75.103:8080/mcp/hs/mcp-1c (Basic-Auth, юзер 1С)
→ IIS (app /mcp, пул 1CMCP «No Managed Code») → wsisapi.dll
→ кластер 1С Server1C:1541 → база RitmUl → расширение MCP_HTTPService
- Клиент (Mac):
~/.local/bin/mcp-1c(darwin-amd64 v1.8.0). Зарегистрирован:claude mcp add 1c --scope user -e MCP_1C_BASE_URL=http://100.70.75.103:8080/mcp/hs/mcp-1c -e MCP_1C_USER=… -e MCP_1C_PASSWORD=… -- ~/.local/bin/mcp-1c.claude mcp list → ✓ Connected. Конфиг~/.claude.jsonchmod 600. - Расширение:
MCP_HTTPService(HTTP-сервисMCPService, RootURLmcp-1c) поставленоmcp-1c.exe --install "Server1C\RitmUl" --server --db-user <админ ИБ> --db-password …. Несёт свою рольMCP_ОсновнаяРоль(толькоUseна сервис, без привилег. режима). - Публикация: IIS, приложение
/mcp→C:\inetpub\mcp(default.vrd+web.config). Бинарь сервера:C:\mcp-1c\mcp-1c.exe(Windows). - Безопасность: 8080 — firewall-правило
mcp-1c HTTP (NetBird only)только из100.64.0.0/10; публичное IIS-правило для :80 отключено; Basic-Auth = пользователь 1С.
Грабли (в порядке появления — все реальные)
- NetBird на server1c лежал не из-за NetBird: DNS сервера указывал только на роутер
192.168.1.1, у которого сдох резолвинг (дажеgoogle.com=0).api.netbird.ioне резолвился → меш не вставал. Фикс:netsh interface ipv4 set dnsservers Ethernet static 1.1.1.1 primary+8.8.8.8(статикой, иначе DHCP перетирает). От админ-PowerShell (интерактивная не-админ сессия падала на CIM permission). - WinRM с Мака к server1c (5985, NetBird): pywinrm
transport='basic'(NTLM отклоняется). Кредыdttb/1qaz!QAZ, по сети — админ-токен. /HTTPPortне работает в сборке 8.3.27.1606: ни headless (толстый клиент = GUI, дохнет в session 0), ни интерактивно (база открывается, порт не поднимается). Вариант self-host отвергнут.- Веб-сервера и веб-модулей 1С не было (платформа ставилась «только сервер»). Дистрибутив нашёлся локально по реестру
InstallSource=E:\Distr\Update\windows64full_8_3_27_1606\. Доустановка модуля:msiexec /i "…\1CEnterprise 8 (x86-64).msi" ADDLOCAL=WebServices,WebServices_RU /qn /norestart→ появилисьwsisapi.dll/wsap24.dll/webinst.exe. ЗатемInstall-WindowsFeature Web-Server,Web-CGI,Web-ISAPI-Ext,Web-ISAPI-Filter -IncludeManagementTools. - ★ w3wp падал
0xc0000005(Application Error, faulting module «unknown»; VS JIT-отладчик ловил краш и вешал воркер — отключилAeDebug Auto=0). Причина — нативный ISAPI-модуль 1С вDefaultAppPool, куда грузится .NET CLR. Фикс: отдельный пул «No Managed Code» (appcmd add apppool /name:1CMCP;set apppool /managedRuntimeVersion:"" /enable32BitAppOnWin64:false /processModel.loadUserProfile:true; приложение/mcp→ этот пул). VC++ redist не при чём (уже стоял). Конфигуратор при републикации сбрасывает пул на DefaultAppPool — каждый раз возвращать 1CMCP. - rmngr-loop на server1c был активен (2 ядра в idle) → новые веб-сессии висли (w3wp idle, ждёт кластер). Лечится известным рецептом:
Restart-Service '1C:Enterprise 8.3 Server Agent (x86-64)' -Force(при 0 сессий). См. decisions/2026-05-07-buzharovo-1c-rmngr-loop-after-crash. - ★ vrd: HTTP-сервис расширения не публикуется
publishByDefault. НужноpublishExtensionsByDefault="true"— в Конфигураторе это галочка «Публиковать HTTP сервисы расширений по умолчанию» (вкладка «HTTP сервисы»).webinstтак не умеет; правильный vrd сгенерил только Конфигуратор. Элемент сервиса —<service name=… rootUrl=… enable="true">.
Не доделано
- mcp_ro (RO-юзер вместо интерим-
ПальмановаНВ). Розница 2.x — сотни гранулярных ролей, единой «read-all» нет; обработчик без привилег. режима → нужны и роль сервисаMCP_ОсновнаяРоль, и право чтения данных. Прагматика: dedicatedmcp_ro=MCP_ОсновнаяРоль+ПолныеПрава(через mcp-1c всё равно только SELECT). После создания:claude mcp remove 1c+ re-add сMCP_1C_USER=mcp_ro.
Запись/управление 1С (отложено — вернуться при необходимости)
Открытая (наша) версия — только чтение. Единственный пишущий инструмент = code_execute (action="code") в Расширенной версии mcp-1c (1 990 ₽/мес, 14 дней триал, регистрация feenlace.ru) — исполняет произвольный BSL в базе (создание/проведение документов, изменение справочников/регистров, обработки) со встроенной песочницей + подтверждением + аудитом. Pro-инструменты (4 990) — это анализ кода (семантический поиск, граф зависимостей, аудит безопасности), не запись.
Чтобы включить запись нужно: (1) Расширенная версия mcp-1c; (2) пользователь 1С с правами на запись (не RO); (3) переустановить расширение версией Расширенной.
Риск: боевая money-база + произвольный BSL от LLM = максимум риска. План безопасного PoC: тест-копия (restore RitmUl_pre-mcp_*.bak → SQL RitmUl_test → тест-ИБ Server1C\RitmUl_test), отладка записи там, на боевую RitmUl — только после. 2026-06-21 Олег решил отложить.
Безопасность лицензии
Лицензия 1С на server1c неофициальная — ничего, что её активирует/переактивирует, не трогать. Рестарт кластера и веб-сессии её не задевают (это просто сессии на чтение).