MCP-сервер dkc-ramcube: каталог ДКС (DKC_data.mdf) + проект RamCube (XML). Поиск аппаратов, чтение проекта и габарита, замена аппаратов с правкой обоих наборов свойств, параметры проекта. Инструкция по установке и подключению — в README.
| .gitignore | 13 hours ago | ||
| README.md | 10 hours ago | ||
| requirements.txt | 13 hours ago | ||
| server.py | 13 hours ago | ||
| test_client.py | 13 hours ago | ||
Локальный MCP-сервер (stdio) для проектирования НКУ на оборудовании ДКС.
Скачать без доступа к GitBucket: https://ailabscrume.ru/downloads/dkc-ramcube.zip
(архив пересобирается автоматически при каждом пуше в main.)
Связывает две вещи, которые до этого приходилось сводить руками:
DKC_data.mdf из установки RAMcube (30 096 позиций,
Разбор 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}
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 с новым кодом и номиналом.