Files
autocad-mcp-pro/INSTALL.ru.md
T
anatoly d4fd6d2310
CI / lint (push) Canceled after 0s
CI / test-linux (3.11) (push) Canceled after 0s
CI / test-linux (3.12) (push) Canceled after 0s
CI / test-windows (push) Canceled after 0s
CI / package (push) Canceled after 0s
CI / docker (push) Canceled after 0s
CI / registry-validate (push) Canceled after 0s
docs: INSTALL.ru.md — наша эксплуатация, источники версий и порядок обновления
2026-10-05 17:54:33 +03:00

122 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AutoCAD MCP Pro — как у нас развёрнут и как обновлять
Этот репозиторий — **зеркало** открытого проекта `U-C4N/Autocad-MCP` (PyPI-пакет
`autocad-mcp-pro`), которым мы пользуемся для черчения из агентов Hermes.
## 1. Источники версий и обновлений (единственные авторитетные)
| Что | Где смотреть |
|---|---|
| Исходный репозиторий | https://github.com/U-C4N/Autocad-MCP |
| Релизы и теги (что нового) | https://github.com/U-C4N/Autocad-MCP/releases — теги `v1.3.0 … v1.6.0` |
| Список изменений | `CHANGELOG.md` в корне репозитория (самый подробный источник) |
| PyPI-пакет и доступные версии | https://pypi.org/pypi/autocad-mcp-pro/json (поле `info.version`, `releases`) |
| Внутренняя версия сервера | MCP-вызов `system_about` / ответ `initialize` (`serverInfo.version`) |
**Текущий пин зеркала:** ветка `main`, коммит `cdb1063` (после релиза **1.6.0 от 24.09.2026**).
Релизы: `v1.5.1` → `v1.6.0` (247 зарегистрированных инструментов, 242 отдаётся по умолчанию).
Обновления проверять так (без установки):
```bash
# последняя версия на PyPI
curl -s https://pypi.org/pypi/autocad-mcp-pro/json | python3 -c "import json,sys;d=json.load(sys.stdin);print(d['info']['version'], list(d['releases'])[-4:])"
# свежие релизы на GitHub
curl -s https://api.github.com/repos/U-C4N/Autocad-MCP/releases | python3 -c "import json,sys;[print(r['tag_name'], r['published_at']) for r in json.load(sys.stdin)[:5]]"
```
## 2. Как это работает у нас (архитектура)
```
Hermes (Docker, VM108) --HTTP MCP (Bearer)--> контейнер autocad-mcp :30015 --ezdxf--> DXF/PDF
контейнер autocad-mcp-160 :30016 (тестовый 1.6.0)
папка обмена: /var/lib/docker/volumes/hermes_hermes-data/_data/dxf → /opt/data/dxf
```
| Параметр | Значение |
|---|---|
| Рабочий контейнер | `autocad-mcp`, образ `autocad-mcp:latest` = **1.5.1 + наш патч**, порт **30015 → 8000** |
| Тестовый контейнер | `autocad-mcp-160`, образ `autocad-mcp:1.6.0` (апстрим без патча), порт **30016** |
| Бэкенд | `AUTOCAD_MCP_BACKEND=ezdxf` (headless, без AutoCAD; COM — только на Windows рядом с AutoCAD) |
| Токен доступа | файл `/opt/data/.autocad_mcp_token` (chmod 600, **в git не попадает**), передаётся как `Authorization: Bearer …` |
| Папка файлов | `ALLOWED_PATHS=/opt/data/dxf` — сервер принимает файлы **только** оттуда (иначе «Path rejected») |
| Профиль инструментов | `TOOL_PROFILE=full`; для слабых моделей есть `TOOL_PACKS=core,mech...` и `DISCOVERY_MODE=search` (2 инструмента / 356 токенов вместо 83 921) |
| Деплой-скрипты | `/opt/data/deploy_autocad_mcp.py` (рабочий, с тегом отката `autocad-mcp:prev`), `/opt/data/work/cad_mcp/deploy_160_test.py` (тестовый 1.6.0) |
| Логи сборки | `/opt/data/autocad_mcp_build.log`, `/opt/data/autocad_mcp_160_build.log` |
| Проверка живости | `python3 /opt/data/work/cad_mcp/tools_inventory.py 30015` (делает `initialize` → `tools/list`) |
## 3. Что в нашей рабочей сборке сверх апстрима (патч 01.10.2026)
Оверлей лежит в `/opt/data/autocad-mcp-build/patch/` и копируется поверх `site-packages`
(см. `Dockerfile` в `/opt/data/autocad-mcp-build/`). Этих инструментов в апстриме нет:
| Инструмент | Зачем |
|---|---|
| `titleblock_apply_gost_form3` | основная надпись по **ГОСТ Р 21.1101-2013 форма 3** (апстрим знает только ISO 7200) |
| `file_put` / `file_get` | передача файлов внутрь `ALLOWED_PATHS` и обратно (без Docker-томов и HTTP-моста) |
| `drawing_open_base64` / `drawing_save_base64` | обмен чертежами в base64 |
| `entity_create_attdef`, `block_get_attdefs` | символы-блоки с атрибутами (тип/высота/группа) |
| параметр `layout=` у инструментов **геометрии** (29 инструментов) | рисовать линии/полилинии прямо на ЛИСТЕ, а не только в модели |
| параметр `inline_font=True` (5 инструментов) | инлайн-кодировка ISOCPEUR в каждом тексте |
| `drawing_export_pdf(page_size="layout")` | страница PDF ровно по формату листа (в 1.5.1 апстрим подгонял по содержимому) |
| `layout_set_paper` | явный размер бумаги листа (A4 книжный и др.) |
| `template_apply_layers(spds)` | ГОСТ-набор слоёв (RAMKA, STAMPS, 00 БЛОКИ АННОТАЦИЙ, Стены) |
| `dimstyle_ensure`, `text_apply_style` | размерный стиль СПДС, текстовые стили |
⚠️ **Следствие:** апстрим 1.6.0 нельзя просто «поставить вместо» — часть наших возможностей
пропадёт (ГОСТ-штамп, file_put/file_get, `layout` у геометрии, `inline_font`). Поэтому 1.6.0
поднимается **рядом** (порт 30016), а перенос патча делается отдельным шагом.
## 4. Установка с нуля
```bash
# 1) образ (Docker-контекст: Dockerfile + patch/)
mkdir -p /opt/data/autocad-mcp-build && cd /opt/data/autocad-mcp-build
# Dockerfile:
# FROM python:3.11-slim
# RUN pip install --no-cache-dir autocad-mcp-pro==1.5.1 matplotlib
# COPY patch/ /usr/local/lib/python3.11/site-packages/
# EXPOSE 8000
# CMD ["autocad-mcp","--transport","http","--host","0.0.0.0","--port","8000"]
# 2) сборка и переустановка контейнера (Portainer API, безопасно: сначала образ, потом замена)
python3 /opt/data/deploy_autocad_mcp.py # рабочий (с тегом отката autocad-mcp:prev)
python3 /opt/data/work/cad_mcp/deploy_160_test.py # тестовый 1.6.0 на :30016
# 3) подключение в Hermes (конфиг защищён, менять через config set)
export PATH="/opt/hermes/.venv/bin:$PATH" HERMES_HOME=/opt/data HOME=/opt/data
hermes config set mcp_servers.autocad.type http
hermes config set mcp_servers.autocad.url http://10.26.5.108:30015/mcp
hermes config set mcp_servers.autocad.headers.Authorization "Bearer <токен из /opt/data/.autocad_mcp_token>"
hermes mcp test autocad # ожидаем "Connected" + число инструментов
# 4) проверка
python3 /opt/data/work/cad_mcp/tools_inventory.py 30015
python3 /opt/skills/devops/cad-automation/scripts/mcp_acceptance_test.py # приёмочный прогон
```
## 5. Обновление версии
1. Проверить новую версию (п. 1) и прочитать `CHANGELOG.md`.
2. Собрать **тестовый** образ на новую версию: скопировать
`/opt/data/autocad-mcp-build/Dockerfile` в новый каталог, заменить пин версии,
запустить `deploy_160_test.py` (порт 30016).
3. Прогнать инвентаризацию и приёмку по обоим портам, сравнить:
`tools_inventory.py 30015` против `tools_inventory.py 30016` — что появилось, что пропало.
4. Перенести наш патч (см. п. 3) либо решить, что из апстрима заменяет нашу доработку.
5. Переключить рабочий контейнер (`deploy_autocad_mcp.py`) — он сам ставит тег отката
`autocad-mcp:prev`; при проблеме вернуться на него.
**Откат:** остановить контейнер, создать заново из образа `autocad-mcp:prev` с теми же
параметрами (порт 30015 → 8000, `ALLOWED_PATHS=/opt/data/dxf`, тот же токен, User 10000:10000).
## 6. Грабли, которые уже собирали (не повторять)
- `tools/list` «сырым» POST даёт **HTTP 400** — нужен `initialize` → заголовок `Mcp-Session-Id` → `tools/list`.
- Файлы внутрь контейнера: только путь из `ALLOWED_PATHS` (`/opt/data/dxf`), иначе «Path rejected».
- У контейнера **свой том** — это не тот `/opt/data/dxf`, который видит агент; для передачи
файлов используем `file_put`/`file_get` или мост `dxf-bridge` (`http://10.26.5.108:30055/`).
- PDF: проверять медиабокс (`pymupdf` → `page.rect.width/72*25.4` ≈ формат листа) и шрифт (`ISOCPEUR`).
- Чертёж отдавать пользователю только после проверки движком AutoCAD (`accoreconsole /i … /s …`).
- COM-режим (живой AutoCAD) **невозможен из Docker** — сервер обязан работать на Windows рядом с AutoCAD.