ИИ-Ассистент в КонтрCAD: Инструкция по подключению (MCP)
КонтрCAD начиная с версии 0.9.80 поддерживает Model Context Protocol (MCP) — открытый стандарт, который позволяет нейросетям (DeepSeek, Claude, ChatGPT, Cursor и другим) напрямую управлять вашей 3D-моделью.
Вы просто пишете в чат: «Создай корпус для Raspberry Pi 4» — и ассистент строит его через историю операций: создаёт примитивы, эскизы, выдавливания, булевы операции и фаски. Всё это остаётся обычными параметрическими операциями, которые можно отменить (Ctrl+Z) или поправить в панели истории.
Ниже — настройка для веб-версии и десктопного приложения, список инструментов и решение типовых проблем.
Что выбрать: веб или десктоп
| Способ | Веб-версия | Десктопная версия |
|---|---|---|
| Транспорт | WebMCP (встроенный в браузер) | Streamable HTTP (локальный сервер) |
| Что нужно | Chrome 126+ / Edge и расширение-клиент | Установленный КонтрCAD Desktop + любой MCP-клиент |
| Где живут инструменты | в открытой вкладке редактора | в приложении, пока оно запущено |
| Доступно сразу | 16 инструментов (ядро), остальные — по группам | все 68 инструментов |
Если работаете в браузере — берите первый вариант. Если нужен «полный» ассистент в Cursor/Claude Desktop/DeepSeek Harness — второй.
Настройка для веб-версии
Веб-версия использует WebMCP: редактор регистрирует свои инструменты в браузере, и ассистент «видит» открытую вкладку и управляет ей напрямую.
Что понадобится
- Браузер Google Chrome (версия 126 или новее) либо Microsoft Edge.
- Клиент с поддержкой WebMCP — например, официальное расширение DeepSeek Harness (подойдёт и другой WebMCP-клиент).
Пошаговая настройка
- Установите расширение-клиент (для DeepSeek Harness — из Chrome Web Store).
- Настройте клиент: в настройках расширения укажите адрес локального сервера, например http://127.0.0.1:3080, если запускаете DSH локально. Обычно Harness сам предлагает команду для терминала, которая всё настроит.
- Откройте редактор в браузере: kontrcad.ru/editor или dev.kontrcad.ru.
- Начните диалог: откройте боковую панель расширения поверх редактора. Ассистент подхватит инструменты автоматически.
Если инструменты не появились после обновления редактора — перезагрузите вкладку с ?nocache=1 (или сбросьте кэш кнопкой в редакторе): редактор кэшируется service worker'ом.
Важно: группы инструментов
В веб-версии по умолчанию активны только 13 инструментов ядра + 3 мета-инструмента (16). Остальные — в группах, чтобы не забивать контекст модели:
| Группа | Что внутри |
|---|---|
| core | чтение сцены, примитивы, трансформации, булевы операции *(активна всегда)* |
| history | undo/redo/jump, изменение параметров, описания операций |
| sketches | плоскости, эскизы, текст, DOF-анализ, extrude/revolve/sweep/loft |
| images | скриншот вьюпорта, рендер-превью, мозаика 4 видов |
| library | встроенная библиотека моделей |
| files | проекты в локальной БД, экспорт STL/STEP/3MF/OBJ/PLY/GLTF |
| advanced | фаски, резьба, шестерни, массивы, группы, repair, decimate |
Ассистент открывает нужную группу сам:
list_tool_groups() → какие группы есть и что активно
enable_tool_group({ groups: ["sketches", "advanced"] }) → включить
enable_tool_group в десктопной версии просто отвечает «все инструменты доступны сразу» — там группы не нужны.
Промт для веб-версии
Скопируйте в чат ассистента:
Ты — инженер-ассистент в параметрическом CAD КонтрCAD (веб-версия, WebMCP).
КАНАЛ: только mcp__chrome__evaluate → window.__kc.call(name, args).
• Возвращает объект/JSON — работай с данными, не пересказывай их целиком.
• Нет __kc → перезагрузи вкладку с ?nocache=1.
• images-инструменты сами открывают вкладку, base64 в контекст НЕ приходит.
ГРУППЫ: по умолчанию активны только core (16 инструментов с мета).
• Нужного инструмента нет в списке → list_tool_groups() → enable_tool_group({groups:[...]}).
• sketches — эскизы/текст/DOF/профильные операции; advanced — фаски, резьба, массивы;
images — превью; files — проекты и экспорт; library — библиотека; history — история.
• Справка по теме: get_help({topic}) — вызывай вместо перебора инструментов.
ДИСЦИПЛИНА:
• get_scene_state — один раз в начале, дальше работай по известным UUID.
• list_objects дешевле get_scene_state; get_object — для одного объекта.
• Не перепроверяй успешные операции и не вызывай get_scene_state после каждого шага.
• Несколько последовательных шагов → batch({steps:[...], rollback:true}).
• get_multi_view — только в финале. Новая задача — новый чат.
ИСТОРИЯ:
• update_operation сливает параметры (передавай только изменения).
• undo/redo/jump_to требуют expected_current_id.
СТИЛЬ: кратко, прогресс галочками (✅ шаг N: …), финал — 3–5 предложений + превью.
Не объясняй очевидное.
Проверка
Отправьте: _«Создай куб 40×40×40, вычти цилиндр Ø24 высотой 60 и покажи результат через get_model_preview»_. Если через 10–15 секунд появилась деталь с отверстием — всё работает.
Настройка для десктопной версии (Electron + Streamable HTTP)
Десктопная версия не зависит от браузерных расширений и не требует Chrome. При обычном запуске КонтрCAD Desktop поднимает локальный MCP-сервер:
http://127.0.0.1:3100/mcp
Транспорт — Streamable HTTP, рекомендованный для актуальных MCP-клиентов (DeepSeek Harness, Cursor, Claude Desktop).
⚠️ Сервер доступен только пока запущено приложение «КонтрCAD». Закрыли редактор — соединение оборвалось. Сервер слушает только 127.0.0.1 и не требует авторизации, поэтому не пробрасывайте порт наружу.
Что понадобится
- Запущенное приложение КонтрCAD Desktop (обычный запуск, без флагов).
- MCP-клиент. В примерах — DeepSeek Harness.
Способ А: через интерфейс DeepSeek Harness (рекомендуется)
Плагин dsh-mcp-center добавляет в Harness отдельную страницу управления MCP-серверами. Установите его один раз:
dsh plugin --profile web add dsh-mcp-center
- Перезапустите dsh web и откройте Settings → MCP Center.
- Нажмите + Add MCP server и заполните:
- Name: kontrcad (станет префиксом инструментов: mcp__kontrcad__*)
- Type: Streamable HTTP
- URL: http://127.0.0.1:3100/mcp
- Auth Mode: none (сервер локальный, токен не нужен)
- Нажмите Save. Рядом с сервером появится статус Connected (68 tools).
Способ Б: через конфигурационный файл
Добавьте в agent.cordis.yml (или cordis.patch.yml) вашего профиля:
- id: mcp-kontrcad name: '@deepseek-ai/dsh-mcp-client' config: serverName: kontrcad transport: streamable-http url: http://127.0.0.1:3100/mcp
Перезапустите Harness: плагин подключится, вызовет tools/list и зарегистрирует все 68 инструментов.
Способ В: STDIO (Claude Desktop и подобные)
Клиенты вроде Claude Desktop умеют сами запускать сторонние программы. КонтрCAD стартует в скрытом режиме, отдаёт инструменты и завершается при отключении клиента.
{
"mcpServers": {
"kontrcad": {
"command": "C:\\Путь\\К\\Установленному\\КонтрCAD.exe",
"args": ["--mcp"]
}
}
}
При запуске из исходников команда — npm, аргументы — ["start", "--", "--mcp"]. После сохранения конфига перезапустите клиент.
Проверка подключения
В логах Harness (или в окне MCP Center) должно появиться:
kontrcad Connected (68) No auth · http://127.0.0.1:3100/mcp
Промт для ассистента (десктопная версия)
Ты — инженер-ассистент в параметрическом CAD КонтрCAD (десктопная версия).
Ты управляешь моделью через MCP-сервер kontrcad (Streamable HTTP, локальный).
ВОЗМОЖНОСТИ: доступны все 68 инструментов — чтение сцены, примитивы, эскизы и текст,
DOF-анализ, профильные операции (extrude/revolve/sweep/loft), булевы операции,
фаски, резьба, массивы, история, проекты, библиотека, изображения.
ДИСЦИПЛИНА:
• get_scene_state — один раз в начале, дальше работай по известным UUID.
• list_objects дешевле get_scene_state; get_object — для одного объекта.
• Не перепроверяй успешные операции.
• Несколько шагов подряд → batch({steps:[...], rollback:true}).
• Справка по теме: get_help({topic}) вместо перебора инструментов.
• get_multi_view / get_model_preview — для финального показа.
ИСТОРИЯ:
• update_operation сливает параметры (передавай только изменения) — так меняются размеры
без потери зависимых операций.
• undo/redo/jump_to требуют expected_current_id.
СТИЛЬ: кратко, прогресс галочками (✅ шаг N: …), финал — 3–5 предложений + превью.
Быстрый тест после подключения
Отправьте ассистенту:
Создай куб 40×40×40, вычти из него цилиндр Ø24 высотой 60,
и покажи результат через get_model_preview.
Если через 10–15 секунд появится изображение детали с отверстием — интеграция работает.
Какие инструменты доступны ИИ
ИИ работает не с пикселями, а с параметрическим ядром: он создаёт настоящие операции, которые можно отменить (Ctrl+Z) или изменить параметры. Всего — 68 инструментов (65 в группах + 3 мета-инструмента).
Ядро и чтение сцены (core, активна всегда)
- get_scene_state(include_objects?, include_operations?) — полное состояние: объекты (UUID, имена, типы, позиции, размеры) и история операций.
- list_objects() — краткий список объектов. Дешевле, чем get_scene_state.
- get_object(uuid) — подробно про один объект: bbox, size, position, position_bottom (центр нижней грани).
- body_topology(uuid, mode: "cylinders") — найденные цилиндрические поверхности тела (валы/отверстия: тип, диаметр, глубина, ось).
- create_primitive(type, …) — 18 типов: куб, сфера, цилиндр, конус, тор, пирамида, шестигранник, труба, полусфера, звезда, сердце, клин, крыши и др.
- move_object / rotate_object / scale_object — трансформации. move_object поддерживает position_mode: preserve | bottom | center.
- boolean_union / boolean_subtract / boolean_intersect — булевы операции на Manifold (watertight-результат).
- delete_objects(uuids) — удаление (каскадно для групп).
- batch(steps, rollback: true) — несколько инструментов одним вызовом с откатом при ошибке.
История операций (history)
- undo(expected_current_id) / redo(expected_current_id) / jump_to(target_index, expected_current_id) — навигация по истории с защитой от гонки.
- update_operation(operation_id, new_params) — изменить параметры операции; зависимые операции перестраиваются автоматически.
- update_object_parameter(uuid, param_name, value) — упрощённо: один параметр по UUID объекта.
- remove_operation(operation_id) — удалить операцию (откажется, если на неё ссылаются).
- describe_operation(operation_id | object_uuid, description) — подписать операцию для туториала/истории.
Зачем expected_current_id: пользователь может в любой момент нажать Ctrl+Z или добавить операцию руками. С проверкой ассистент получит ошибку и пересинхронизируется, без неё — сломал бы сцену. Это «оптимистичная блокировка».
Эскизы, текст и профильные операции (sketches)
- create_workplane(face_ref | position+normal, name, plane_type) — плоскость эскиза (ассоциативно к грани или снапшотом).
- add_sketch_entities(plane_id, entities) — линии, окружности, дуги, овалы, полилинии, сплайны, точки; у каждой сущности можно задать pinned.
- remove_sketch_entities / update_sketch_entity — правка и удаление элементов (в т.ч. pinned).
- add_sketch_constraint / remove_sketch_constraint — ограничения: horizontal, vertical, parallel, perpendicular, angle, equality, coincident, point_on_line, tangent, distance и др.
- add_sketch_text(plane_id, text, position, height, font_name, anchor, direction, pinned) — текст в эскизе: глифы превращаются в замкнутые полилинии. По умолчанию текст закреплён (pinned: true), поэтому не увеличивает DOF.
- get_sketch_state(plane_id) — элементы, регионы (готовые профили для выдавливания), ограничения.
- get_sketch_dof(plane_id?, tolerance?, include_entities?) — анализ степеней свободы: зафиксирован ли чертёж, сколько степеней осталось, есть ли конфликт или избыточные связи, какие элементы ещё подвижны.
- extrude — выдавливание профиля (figures или selected_regions_data) с наклоном, скруткой и масштабированием; operation_type: new | cut | join.
- revolve — тело вращения (ось или line_axis_points).
- sweep — профиль по траектории (path_points).
- loft — плавное соединение 2+ сечений.
Изображения (images)
- get_viewport_screenshot(max_size?, hide_helpers?) — «что видит пользователь».
- get_model_preview(uuids?, view?, wireframe?, max_size?, background?) — чистый рендер объекта с ракурса.
- get_multi_view(uuids?, views?, max_size?) — мозаика 2×2 (front/right/top/iso) одним изображением, вчетверо дешевле четырёх скриншотов.
Нужен vision в MCP-клиенте. В веб-версии изображение открывается в отдельной вкладке и не попадает в контекст как base64.
Библиотека (library)
- list_library_items(category_id?, search?, limit?) — каталог встроенной библиотеки (без параметров — категории). Вызывайте до импорта.
- import_library_model(item_id | name_query, position?, color?) — вставить модель из библиотеки.
Проекты и экспорт (files)
- new_project(confirm: true) — очистить сцену и начать с нуля.
- save_project(name, description?, existing_key?, overwrite?) — сохранить в локальную БД.
- list_saved_projects(search?, limit?) / open_saved_project(key, confirm: true) / delete_saved_project(key, confirm: true).
- export_project_file(compact?) — скачать .kbcad для бэкапа или переноса.
- export_model(format: stl | stl-ascii | obj | ply | gltf | 3mf | step, file_name?, selected_only?).
Импорт проекта из файла остаётся за пользователем — ассистент не может открыть диалог выбора файла.
Продвинутое (advanced)
- fillet_chamfer(target_uuid, edges, distance1, distance2?, segments?) — фаска/скругление по рёбрам. Перед вызовом получите рёбра: get_object_edges.
- get_object_edges(uuid, axis?, min_length?, min_crease_angle?, near_point?, radius?, limit?) — рёбра в мировых координатах.
- get_object_faces(uuid, axis?, min_area?, near_point?, radius?, limit?, include_face_ref?) — грани (в т.ч. face_ref для создания плоскости по грани).
- thickness(uuid, thickness, mode?, segments?, inset?) — оболочка заданной толщины.
- create_thread(type, standard?, diameter, pitch, length, threadType, …) — отдельное тело резьбы.
- thread_cut(target_uuid, diameter, pitch, length, position, …) — нарезать резьбу на существующем теле (внутреннюю/наружную).
- create_gear(teeth, module, faceWidth, …) — эвольвентная шестерня.
- split_by_plane(uuid, plane_id) — разрезать плоскостью.
- repair_geometry(uuids, …) — починить «грязный» STL (manifold).
- decimate_mesh(uuids, reduction_factor?, …) — уменьшить число полигонов.
- create_text3d(text, font_size?, depth?, …) — объёмный текст.
- array_linear / array_circular — массивы.
- mirror_object, duplicate_object, group_objects, ungroup_objects.
- change_color, change_name, change_visibility.
Мета-инструменты (доступны всегда)
- list_tool_groups(include_tools?) — какие группы есть, что активно, сколько инструментов.
- enable_tool_group(groups) — включить группы (в вебе; в десктопе всё уже доступно).
- get_help(topic) — подробная справка по теме вместо длинных описаний в схеме: general, sketch, extrude, move_object, boolean_operations, fillet_chamfer, get_object_edges, repair_geometry, create_primitive.
Как экономить контекст
- get_help(topic) — длинные инструкции не висят в схеме инструментов, их запрашивают по необходимости.
- batch — несколько последовательных шагов одним вызовом (с rollback: true при ошибке сцена откатится).
- expect — во многих инструментах (create_primitive, move_object, булевы, extrude, fillet_chamfer) можно передать ожидаемые bbox/volume: ассистент сразу узнает, что размер не сошёлся, без отдельной проверки.
- list_objects вместо get_scene_state, get_object для одного объекта, изображения — только для финального показа.
Примеры промптов
Простой:
Создай куб 50×50×50 мм, затем цилиндр радиусом 10 мм и высотой 60 мм. Вычти цилиндр из куба — получится сквозное отверстие.
Корпус:
Создай корпус: куб 100×80×50 мм. Сделай оболочку (thickness) с толщиной стенок 2 мм. Затем 4 цилиндра радиусом 3 мм на расстоянии 10 мм от углов и вычти их из корпуса. В конце — фаска 1 мм на верхних рёбрах.
Эскиз с текстом и проверкой DOF:
На верхней грани корпуса создай плоскость эскиза. Нарисуй прямоугольник 40×15 и добавь текст «КонтрCAD» высотой 6 мм по центру. Проверь get_sketch_dof — текст должен быть закреплён. Выдави прямоугольник на 2 мм и вырежи текст на 0.5 мм.
Резьба:
На валу Ø20 нарежь внешнюю резьбу M20×2.5 длиной 15 мм. position подбери так, чтобы витки начинались в 3 мм от основания вала. Покажи результат через get_multi_view.
Ограничения и безопасность
- Локальность. Десктопный сервер слушает только 127.0.0.1:3100, авторизации нет — не публикуйте порт в сеть.
- Жизненный цикл. HTTP-сервер живёт, пока запущен КонтрCAD; STDIO-режим завершается вместе с клиентом.
- Необратимое — только вручную. Сжатие/очистка истории, импорт файла проекта и выбор файлов остаются за пользователем.
- История защищена. undo/redo/jump_to требуют expected_current_id — ассистент не «перескочит» через ваши правки.
- Группы. В веб-версии набор инструментов ограничен активными группами — это не баг, а экономия контекста.
Решение проблем
| Симптом | Что делать |
|---|---|
| Ассистент пишет «инструмент не найден» | В вебе включите группу: list_tool_groups() → enable_tool_group({groups:[...]}) |
| Ошибки с UUID «объект не найден» | Попросите get_scene_state или list_objects — ассистент увидит актуальные UUID |
| Нет window.__kc в веб-версии | Перезагрузите вкладку с ?nocache=1 (или сбросьте кэш в редакторе) |
| Ассистент ищет КОМПАС-3D или другие программы | Уточните: «Ты работаешь внутри редактора КонтрCAD. Используй только свои MCP-инструменты» |
| В десктопе не подключается http://127.0.0.1:3100/mcp | Проверьте, что КонтрCAD запущен; не занят ли порт 3100 другой программой; в консоли приложения должно быть [MCP] Streamable HTTP server: http://localhost:3100/mcp |
| В MCP Center статус не Connected | Проверьте тип транспорта (Streamable HTTP, не SSE) и URL с /mcp на конце |
| Инструменты есть, но модель «не видит» изображения | Включите группу images и убедитесь, что у клиента есть vision |