Files
kompas3d-mcp/plugin/skills/kompas-3d/SKILL.md
T
mikhail 4e3d367637
ci / build (push) Successful in 28s
Каталог инструментов сжат под агента: 84 → 56
Инструменты были нарезаны по способу вызова, а не по смыслу: четыре отверстия,
двойники *_index, одиннадцать sketch_add_*. Агент платил за это дважды — 40 КБ
описаний в каждой сессии и лишние round-trip'ы, а каждый вызов это ещё и шанс
сбиться. Теперь инструмент называет ОПЕРАЦИЮ, вариант задаётся параметром,
объект выбирается индексом или точкой одним и тем же инструментом.

Проверка построения приходит сама. Каждая мутирующая операция дописывает к ответу
итог validate_part (AutoValidation): Create()/Update()==true не значит успех, а
правило навыка «проверяй после каждого шага» удваивало число вызовов. Выключается
через set_auto_validate или KOMPAS_MCP_AUTOVALIDATE=0 — сбой самой проверки уходит
в примечание и никогда не превращает удачную операцию в ошибку.

Эскиз: 16 инструментов → 3. sketch_create(plane|faceIndex|x,y,z, entities[],
autoClose) строит контур целиком; пакет выполняется за ОДИН заход на STA-поток
(PartModeler.AddEntitiesAsync), ошибка называет позицию примитива в списке.

Слияния: hole(type=simple|counterbore|countersink|conic), extrude/revolve(mode),
pattern(kind), mirror (без featureIds — всё тело), document_save(path?),
set_variable как upsert (разведочный вызов «есть ли такая» больше не нужен),
list_faces/list_edges(index?) вместо отдельных describe_*, get_part_info и
get_bounding_box — в describe_model(sections), где незапрошенные разделы вообще
не читаются из модели.

Селектор index|point: fillet_edge/chamfer_edge принимают edgeIndices списком —
одна операция дерева на все рёбра; для операций API7, умеющих только точку,
индекс переводится в точку через ModelInspectionService.FaceCenterPointAsync
(середина параметрической области грани).

Схема слитого инструмента не запрещает неверную комбинацию полей — это делает
валидация, и её сообщение называет type и недостающий параметр.

Тесты: 291 unit (+41) и 136 integration (+5), интеграционные — на живом КОМПАС.
Новые проверяют ровно рискованные места: точка-из-индекса лежит на грани и по ней
создаётся эскиз, мульти-ребёрное скругление даёт один узел дерева и убыль объёма,
upsert создаёт и затем меняет переменную с формулой, пакет сообщает позицию сбоя.
PluginSkillsTests теперь падает, если в публикуемом навыке всплывёт слитое имя.
2026-07-31 11:52:30 +03:00

16 KiB
Raw Blame History

name, description
name description
kompas-3d Методика работы с КОМПАС-3D через MCP-сервер плагина: построение и модификация деталей, импорт/экспорт STEP, работа со сборками, осмотр геометрии снимками и запросами. Используй ВСЕГДА, когда задача — что-то СДЕЛАТЬ в КОМПАС через MCP-инструменты (создать/править деталь, импортировать STEP, разобрать сборку, померить, отрендерить, экспортировать). Здесь — playbook'и и эвристики, проверенные на практике. Триггеры: «построй деталь в КОМПАС», «импортируй STEP», «что в этой сборке», «нарасти/измени деталь», «экспортируй STEP», «сделай снимок модели».

kompas-3d — методика управления КОМПАС-3D через MCP

MCP-сервер даёт общие операции КОМПАС (эскизы, формообразующие, осмотр, обмен), этот навык — методику: в каком порядке их применять, как выбирать геометрию, чем проверять результат и какие подводные камни обходить. Коротко: MCP = чем делать, навык = как делать.

Когда применять

Любая задача «сделать что-то В КОМПАС» через MCP: создать/править деталь, эскизы и операции, импорт/экспорт обменных форматов, разбор сборки, измерения, снимки.

Два правила прежде всего

1. «Зрение» — структурное, не по картинке. Чтобы «увидеть» деталь, вызывай describe_model — это единый структурный паспорт одним запросом: габарит, МЦХ, тела, топология (грани/рёбра, сгруппированные по типам), дерево построения с параметрами, переменные. Это точнее и дешевле по контексту, чем model_snapshot. Для деталей углубляйся list_faces(index=N) / list_edges(index=N) / measure / list_bodies|features|variables. model_snapshot бери только для визуально-пространственных вопросов, на которые паспорт не отвечает (общая форма, ориентация, правдоподобность результата, «куда смотрит грань»). Не анализируй изображение там, где достаточно чисел — снимок дорог по контексту и менее точен.

2. Проверка построения приходит сама — читай её. Любая операция может «пройти» (Create()/Update()==true), оставив деталь в ошибке, поэтому каждая мутирующая операция (extrude/revolve/fillet_edge/chamfer_edge/hole/pattern/mirror/shell/rib/sweep/loft/ draft/move_face/move_body/boolean_union/set_variable/сборочные) сама дописывает итог проверки к своему ответу: «Построение чистое» = порядок, «⚠ Внимание: N операц. в ошибке» (напр. et3dError54) = провал — не продолжай и не экспортируй, исправь или переделай другим методом. Отдельный validate_part после каждого шага не нужен; зови его вручную, только если авто-проверку выключили (set_auto_validate(false) или KOMPAS_MCP_AUTOVALIDATE=0 — так делают на тяжёлой модели, где проверка после каждого шага заметно тормозит). Перед export_step/выдачей результата убедись, что последняя операция отчиталась чисто.

Инструменты MCP

Реализованы (56 инструментов). Инструмент назван по СМЫСЛУ операции, а вид задаётся параметром — не ищи отдельный инструмент под каждый вариант:

  • Система/документы: kompas_connect, kompas_set_visible, kompas_status, set_auto_validate; document_create|open|save|close|active (document_save(path) — сохранить новый документ или копию, без path — на прежнее место).
  • Эскиз (три инструмента вместо шестнадцати): sketch_create — основание задаётся plane (+offset) ЛИБО faceIndex ЛИБО точкой x,y,z, а геометрия сразу списком entities[{type: line|circle|rectangle|arc|arc3points|ellipse|polyline|polygon|spline|point|axis, …}]; sketch_add — дополнить открытый эскиз; sketch_close.
  • Формообразующие: extrude(mode=boss|cut), revolve(mode=boss|cut), fillet_edge/chamfer_edge (список edgeIndices — одной операцией на все рёбра — либо точка), shell, rib, sweep, loft, draft, rebuild.
  • Отверстия: hole(type=simple|counterbore|countersink|conic) — грань по faceIndex (центр грани) либо точкой.
  • Массивы и зеркало: pattern(kind=linear|circular), mirror (без featureIds — всё тело, с ними — только эти операции).
  • Прямое редактирование (без дерева, в т.ч. импортированная B-rep): move_face (сдвинуть грань на N мм по нормали; грань — faceIndex или точка), split_solid_by_plane (рассечь тело плоскостью), move_body (сдвинуть тело на вектор), boolean_union (объединить тела).
  • Переменные: set_variable (создаёт, если нет — проверять заранее не нужно), delete_variable.
  • Обмен: import_step, export_step.
  • Сборка: assembly_add_component, assembly_add_mate.
  • 2D-чертёж: drawing_create_standard_views, drawing_fill_title_block, drawing_set_sheet_format, drawing_add_linear|diametral|radial|angular_dimension, drawing_add_rough, drawing_add_text, drawing_add_leader, drawing_set_technical_requirements.
  • Запрос/осмотр: describe_model (структурный паспорт; sections=box,mass,bodies,topology,tree,variables сужает ответ и чтение), list_faces/list_edges (без index — список, с index — подробности объекта), list_components, list_bodies, list_features, list_variables, measure, model_snapshot.
  • Проверка: validate_part — нужен, только если авто-проверка выключена (см. правило 2).

Набор растёт от версии к версии — актуальный перечень с описаниями параметров отдаёт сам MCP-сервер; если инструмента под задачу нет, собирай результат из имеющихся общих операций.

Базовый цикл (эскиз → операция → осмотр)

Опорный сценарий построения, проверен end-to-end:

  1. kompas_connect (+ kompas_set_visible true).
  2. document_create part.
  3. sketch_create(plane="XOY", entities=[…])весь контур одним вызовом; эскиз закрывается сам (autoClose по умолчанию).
  4. extrude(mode="boss", depth=…) / revolve(mode="boss", …) → читаешь итог проверки прямо в ответе (правило 2).
  5. Осмотр — структурно: describe_model (паспорт: габарит, МЦХ, топология, дерево); нужен кусок — describe_model(sections="box,mass"). Снимок — только если нужен визуальный контроль.
  6. Итерация «на грани»: list_faces (при нужде list_faces(index=N) за подробностями) → sketch_create(faceIndex=N, entities=[…]) → операция.

Не разбивай построение на лишние вызовы. Прямоугольник с четырьмя отверстиями — это ОДИН sketch_create со списком из пяти примитивов, а не шесть вызовов. Скругление восьми рёбер — один fillet_edge(radius, edgeIndices=[…]), а не восемь. Каждый лишний вызов — лишний шанс сбиться.

Работа с импортом / сборками

Конвейер «импорт → разбор → извлечение детали → осмотр → модификация → экспорт»:

  1. Импорт STEP в новый документ (под капотом: встроенный конвертер по коду формата ksConverterFromSTEP, затем ConvertFromAdditionFormat). Тип документа выбирается по содержимому: сборка → .a3d, одиночное тело → деталь.
  2. Разбор сборки: перечислить компоненты (имя, обозначение, габарит, файл) — обход TopPart → Parts.
  3. Извлечение отдельной детали: при импорте включать «создавать файлы компонентов», тогда компоненты пишутся как отдельные .m3d рядом; открывать деталь самостоятельным документом (OpenSourceDocument). Гашение видимости компонента на снимок не влияет — изоляция так не делается.
  4. Осмотр детали — структурно: describe_model (габарит по осям → какая ось «высота», МЦХ, тела, топология). Грани/рёбра под операцию — list_faces/list_faces(index=N), measure. model_snapshot (или стандартные проекции #Спереди/#Сверху/#Слева/#Справа/#Изометрия) — только если нужен визуально-пространственный контроль формы.
  5. Модификация на «тупой» импортированной B-rep (итог проверки читаешь в ответе каждой операции):
    • Простой случайmove_face: сдвинуть плоскую грань на +N мм (наружу) или −N (внутрь); грань бери по faceIndex из list_faces. ⚠ На сложном торце (с отверстием/пазом) FaceMover может дать et3dError54.
    • Вставка N мм в середину призматической ножки (надёжно, грани совпадают): split_solid_by_plane(plane, offset)move_body(индекс верхнего тела, dz=N)move_face(distance=+N, точка на грани реза) (мост) → boolean_union().
  6. Проверка перед выдачей: последняя операция отчиталась «Построение чистое»; затем Экспорт STEP export_step(path, format=auto|ap203|ap214|ap242).

Эвристики и подводные камни

  • Зрение — структурное (правило 1). Осматривай через describe_model / list_faces(index=…) / list_edges(index=…) / measure, а не снимком. model_snapshot — только для визуально-пространственных вопросов; не гоняй картинку зря.
  • Итог проверки — в ответе операции (правило 2). Create()/Update()==true ≠ успех; «⚠ N операц. в ошибке» (напр. et3dError54) — деталь невалидна, в STEP/печать не брать.
  • Грань/ребро по индексу надёжнее, чем по точке. Сначала list_faces/list_edges, затем передавай faceIndex/edgeIndices в sketch_create, hole, move_face, fillet_edge, chamfer_edge. Координаты точки (SelectByPoint) — только когда индекс не подходит. Если выбирал точкой, ответ подскажет, какой это оказался объект.
  • Направление операции. extrude(..., forward) / move_face(distance±) может уйти «не туда» — сверяй результат числами (describe_model(sections="box,mass")), снимок лишь при необходимости.
  • МЦХ. Объём/масса меняющейся геометрии — describe_model(sections="mass"); перед чтением после правок — rebuild.
  • id эскизов/операций недействительны после смены активного документа (create/open/close).
  • Единицы — мм (геометрия) и кг (масса). Локальные координаты эскиза ≠ мировые координаты модели.

Открытые вопросы / границы

  • Прямое редактирование B-rep — реализовано полностью: move_face, split_solid_by_plane, move_body, boolean_union. Цепочка cut→spread→union проверена end-to-end (проставка 39.45→41.45 мм, построение чистое).
  • Параметрика ограничена. set_variable хранит и пересчитывает значения, но двигает геометрию только в параметрической модели (размеры эскиза привязаны к именам переменных). Если эскиз построен литеральными координатами, set_variable изменит значение, а не форму.
  • 2D и сборки покрыты частично. Чертёж: стандартные виды, штамп, формат листа, размеры, шероховатость, текст, выноски, техтребования. Сопряжения: совпадение и расстояние.

Связанное

  • Проверка окружения (КОМПАС установлен, сервер запускается, подключение живое): команда /kompas:doctor.
  • Установка, требования и настройка сервера: README плагина.
  • Правила проектирования под FDM/FFF-печать: навык kompas-fdm-design.