Инструменты были нарезаны по способу вызова, а не по смыслу: четыре отверстия, двойники *_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 теперь падает, если в публикуемом навыке всплывёт слитое имя.
16 KiB
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:
kompas_connect(+kompas_set_visible true).document_create part.sketch_create(plane="XOY", entities=[…])— весь контур одним вызовом; эскиз закрывается сам (autoCloseпо умолчанию).extrude(mode="boss", depth=…)/revolve(mode="boss", …)→ читаешь итог проверки прямо в ответе (правило 2).- Осмотр — структурно:
describe_model(паспорт: габарит, МЦХ, топология, дерево); нужен кусок —describe_model(sections="box,mass"). Снимок — только если нужен визуальный контроль. - Итерация «на грани»:
list_faces(при нуждеlist_faces(index=N)за подробностями) →sketch_create(faceIndex=N, entities=[…])→ операция.
Не разбивай построение на лишние вызовы. Прямоугольник с четырьмя отверстиями — это ОДИН
sketch_create со списком из пяти примитивов, а не шесть вызовов. Скругление восьми рёбер — один
fillet_edge(radius, edgeIndices=[…]), а не восемь. Каждый лишний вызов — лишний шанс сбиться.
Работа с импортом / сборками
Конвейер «импорт → разбор → извлечение детали → осмотр → модификация → экспорт»:
- Импорт STEP в новый документ (под капотом: встроенный конвертер по коду формата
ksConverterFromSTEP, затемConvertFromAdditionFormat). Тип документа выбирается по содержимому: сборка →.a3d, одиночное тело → деталь. - Разбор сборки: перечислить компоненты (имя, обозначение, габарит, файл) — обход
TopPart → Parts. - Извлечение отдельной детали: при импорте включать «создавать файлы компонентов», тогда
компоненты пишутся как отдельные
.m3dрядом; открывать деталь самостоятельным документом (OpenSourceDocument). Гашение видимости компонента на снимок не влияет — изоляция так не делается. - Осмотр детали — структурно:
describe_model(габарит по осям → какая ось «высота», МЦХ, тела, топология). Грани/рёбра под операцию —list_faces/list_faces(index=N),measure.model_snapshot(или стандартные проекции#Спереди/#Сверху/#Слева/#Справа/#Изометрия) — только если нужен визуально-пространственный контроль формы. - Модификация на «тупой» импортированной 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().
- Простой случай —
- Проверка перед выдачей: последняя операция отчиталась «Построение чистое»; затем
Экспорт 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.