Локальный MCP-сервер (stdio) для проектирования НКУ на оборудовании ДКС.
Скачать без доступа к GitBucket: https://ailabscrume.ru/downloads/dkc-ramcube.zip (архив пересобирается автоматически при каждом пуше в main.)
Связывает две вещи, которые до этого приходилось сводить руками:
DKC_data.mdf из установки RAMcube (30 096 позиций, параметры, цены, габариты, 3D-геометрия);Разбор PDF-схемы (перечень аппаратов с листа) в эту версию не входит — перечень готовится отдельно, сервер работает с каталогом и XML (см. «Известные ограничения»).
Сервер ничего не делает «за программу»: компоновку, панели и выгрузку документов считает сам RamCube. Задача сервера — подготовить и проверить вход (схему) и прочитать результат (габарит, панели).
| Инструмент | Что делает |
|---|---|
dkc_search |
поиск аппаратов по артикулу и номинальному току; возвращает deviceId, In, Icu, число полюсов, исполнение, габарит, семейство |
dkc_device |
полные параметры позиции по deviceId (это же значение стоит в XML как elementDevice) |
ramcube_project_read |
сводка проекта: параметры, аппараты схемы с кодами и позициями, панели, длина ряда (всего / полезные / служебные) |
ramcube_apparatus_replace |
замена аппаратов: правит elementDevice, 3D-модель и оба набора свойств, затем сам перечитывает файл и отдаёт проверку |
ramcube_set_project |
параметры проекта: имя, IP, секционирование (3b/4b), подвод кабелей (сверху/снизу), Iном, Iкз, наличие АВР |
В XML проекта RamCube свойства аппарата лежат в двух местах:
propertyValueInstance = атрибут elementInstance самого <element> (порядка 25 значений);propertyValueInstance = elementInstanceInstance (порядка 67 значений).Если поправить только elementDevice, программа при загрузке выдаёт «Ошибки в проекте: … не соответствует … [device:…]» и в спецификации остаётся старый код. Инструмент правит оба набора и возвращает verified_instances — фактические значения после записи.
.venv);DKC_data.mdf, подключённая к LocalDB (см. «Подготовка базы»).git clone <repo> dkc-ramcube cd dkc-ramcube uv venv --python 3.12 .venv uv pip install --python .venv\Scripts\python.exe -r requirements.txt
requirements.txt:
mcp<2 pyodbc==5.1.0
Версии принципиальны:
mcp<2 — в mcp 2.x FastMCP переименован в MCPServer, код сервера написан под 1.x;pyodbc==5.1.0 — в 5.5.0 не загружается legacy-драйвер {SQL Server} (ошибка «Не найден SQLSRV32.dll»).RamcubeV3\DKC_data.mdf и DKC_data_log.ldf из установки RAMcube (C:\Program Files (x86)\DKC\RAMcube V4.4.0). Оригинал не трогать — работать с копией.Подключить копию к LocalDB, например как DKC_cat_ro_v44:
SqlLocalDB.exe start MSSQLLocalDB sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE DATABASE DKC_cat_ro_v44 ON (FILENAME='C:\ramcube_db\DKC_cat_ro.mdf'),(FILENAME='C:\ramcube_db\DKC_cat_ro_log.ldf') FOR ATTACH"
Проверить: SELECT COUNT(*) FROM tblDevices → 30 096.
hermes -p ai-si config set mcp_servers.dkc-ramcube.command "C:/path/to/dkc-ramcube/.venv/Scripts/python.exe" hermes -p ai-si config set mcp_servers.dkc-ramcube.args '["C:/path/to/dkc-ramcube/server.py"]' hermes -p ai-si config set mcp_servers.dkc-ramcube.enabled true hermes -p ai-si mcp test dkc-ramcube
Инструменты появляются в новой сессии Hermes.
| Переменная | Назначение | По умолчанию |
|---|---|---|
DKC_CONN |
готовая строка подключения; перебивает LocalDB | — |
DKC_DB |
имя базы каталога | DKC_cat_ro_v44 |
DKC_LOCALDB |
путь к SqlLocalDB.exe |
автопоиск старшей версии |
DKC_LOCALDB_INSTANCE |
имя инстанса | MSSQLLocalDB |
Поиск аппарата на 4000 А:
{"query": "NW40", "in_min": 3000}
→ ACB NW40, device_id: 11919, in_a: 4000, icu_ka: "100", W - выкатной, габарит 441×441×421, семейство NW32-NW40.
Замена вводных в проекте:
{"xml_in": "vrsh1.xml", "xml_out": "vrsh1_new.xml",
"replacements": [{"element_id": "-174426", "new_device_id": 11919}]}
Вместо element_id можно указать element_device — тогда заменятся все элементы с этим deviceId.
Чтение габарита после компоновки:
{"xml_path": "vrsh1_new.xml"}
→ length_mm: {total: 7054, useful: 4217, service: 2837}, то есть полезные панели отдельно от шинных опусков и кабельных отсеков, которые RamCube добавляет сам.
tblDevices — позиции каталога (deviceId, Code);tblDeviceValues + tblDeviceParameters — параметры позиции: 2 In, 3 In расцепителя, 8 Icu, 9 Код, 10 полюса, 11 производитель, 12 тип по каталогу, 43 исполнение;tblDrawingUnits — габариты (unitBoundMinX…MaxZ) и монтажные поля.Замечание: deviceValueContent имеет тип sql_variant, который pyodbc не читает (ODBC type −150) — в запросах обязателен CAST(... AS nvarchar(400)).
tblElements, tblElementComponents, tblElementConnectors: компоненты и монтажные точки создаёт само приложение при вставке аппарата из «Репозитория». Эталонный блок берётся из проекта, куда аппарат вставлен штатно.server.py — MCP-сервер (stdlib + pyodbc + mcp) test_client.py — проверка: список инструментов и вызовы на копии проекта requirements.txt — фиксированные версии зависимостей README.md — это описание
.venv\Scripts\python.exe test_client.py
Ожидаемо: 5 инструментов, dkc_search отдаёт позиции, ramcube_apparatus_replace возвращает verified_instances с новым кодом и номиналом.