--- date: 2026-06-21 type: decision tags: [buzharovo, 1c, mcp, mcp-1c, iis, claude-code] --- # MCP-сервер mcp-1c к базе 1С Бужарово (RitmUl / Розница) Развёрнут [feenlace/mcp-1c](https://github.com/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.json` chmod 600. - **Расширение:** `MCP_HTTPService` (HTTP-сервис `MCPService`, RootURL `mcp-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С. ## Грабли (в порядке появления — все реальные) 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). 2. **WinRM с Мака** к server1c (5985, NetBird): pywinrm `transport='basic'` (NTLM отклоняется). Креды `dttb/1qaz!QAZ`, по сети — админ-токен. 3. **`/HTTPPort` не работает** в сборке 8.3.27.1606: ни headless (толстый клиент = GUI, дохнет в session 0), ни интерактивно (база открывается, порт не поднимается). Вариант self-host отвергнут. 4. **Веб-сервера и веб-модулей 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`. 5. **★ 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.** 6. **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]]. 7. **★ vrd: HTTP-сервис расширения** не публикуется `publishByDefault`. Нужно `publishExtensionsByDefault="true"` — в Конфигураторе это галочка **«Публиковать HTTP сервисы расширений по умолчанию»** (вкладка «HTTP сервисы»). `webinst` так не умеет; правильный vrd сгенерил только Конфигуратор. Элемент сервиса — ``. ## Не доделано - **mcp_ro** (RO-юзер вместо интерим-`ПальмановаНВ`). Розница 2.x — сотни гранулярных ролей, единой «read-all» нет; обработчик без привилег. режима → нужны и роль сервиса `MCP_ОсновнаяРоль`, и право чтения данных. Прагматика: dedicated `mcp_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 **неофициальная** — ничего, что её активирует/переактивирует, не трогать. Рестарт кластера и веб-сессии её не задевают (это просто сессии на чтение).