Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c62794b415 | |||
| 3c091adbb2 |
@@ -11,7 +11,7 @@
|
|||||||
{
|
{
|
||||||
"name": "kompas",
|
"name": "kompas",
|
||||||
"source": "./plugin",
|
"source": "./plugin",
|
||||||
"description": "Управление КОМПАС-3D из Claude Code: 85 MCP-инструментов (детали, эскизы, формообразующие операции, массивы, отверстия, сборки и сопряжения, 2D-чертежи, STEP/STL, осмотр модели) и два навыка — построение (kompas-3d) и проектирование под FDM-печать (kompas-fdm-design).",
|
"description": "Управление КОМПАС-3D из Claude Code: 86 MCP-инструментов (детали, эскизы, формообразующие операции, массивы, отверстия, исполнения, сборки и сопряжения, 2D-чертежи, STEP/STL, осмотр модели) и два навыка — построение (kompas-3d) и проектирование под FDM-печать (kompas-fdm-design).",
|
||||||
"category": "productivity",
|
"category": "productivity",
|
||||||
"keywords": ["cad", "kompas", "3d", "step", "mcp", "fdm"]
|
"keywords": ["cad", "kompas", "3d", "step", "mcp", "fdm"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ STEP/STL, осмотр и измерение модели — плюс два н
|
|||||||
|
|
||||||
| | |
|
| | |
|
||||||
|---|---|
|
|---|---|
|
||||||
| **MCP-сервер `kompas`** | 85 инструментов: документы, эскизы, выдавливание/вращение/по сечениям/по траектории, оболочка, рёбра, уклон, скругления и фаски, массивы и зеркало, отверстия, булевы операции, прямое редактирование B-rep, переменные и параметризация, сборки и сопряжения, 2D-чертежи (виды, размеры, обозначения, тех. требования), STEP/STL, осмотр (`describe_model`, `list_faces`, `list_edges`, `measure`) |
|
| **MCP-сервер `kompas`** | 86 инструментов: документы, эскизы, выдавливание/вращение/по сечениям/по траектории, оболочка, рёбра, уклон, скругления и фаски, массивы и зеркало, отверстия, булевы операции, прямое редактирование B-rep, переменные и параметризация, **исполнения** (несколько геометрий одной модели в одном файле), сборки и сопряжения (в том числе по вспомогательным плоскостям и осям), 2D-чертежи (виды, размеры, обозначения, тех. требования), STEP/STL, осмотр (`describe_model`, `list_faces`, `list_edges`, `measure`) |
|
||||||
| **Навык `kompas-3d`** | методика построения: порядок работы, выбор подхода, проверенные приёмы и ловушки |
|
| **Навык `kompas-3d`** | методика построения: порядок работы, выбор подхода, проверенные приёмы и ловушки |
|
||||||
| **Навык `kompas-fdm-design`** | проектирование под FDM/FFF-печать: нависания, толщины стенок, зазоры и посадки, ориентация, бобышки и защёлки |
|
| **Навык `kompas-fdm-design`** | проектирование под FDM/FFF-печать: нависания, толщины стенок, зазоры и посадки, ориентация, бобышки и защёлки |
|
||||||
| **Команда `/kompas:doctor`** | диагностика установки |
|
| **Команда `/kompas:doctor`** | диагностика установки |
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "kompas",
|
"name": "kompas",
|
||||||
"displayName": "КОМПАС-3D",
|
"displayName": "КОМПАС-3D",
|
||||||
"version": "0.1.0",
|
"version": "0.2.1",
|
||||||
"description": "Управление КОМПАС-3D из Claude Code: детали, сборки, чертежи, STEP — через MCP-сервер",
|
"description": "Управление КОМПАС-3D из Claude Code: детали, сборки, чертежи, STEP — через MCP-сервер",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Shahovalov Mikhail",
|
"name": "Shahovalov Mikhail",
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -7,9 +7,9 @@
|
|||||||
"targets": {
|
"targets": {
|
||||||
".NETCoreApp,Version=v8.0": {},
|
".NETCoreApp,Version=v8.0": {},
|
||||||
".NETCoreApp,Version=v8.0/win-x64": {
|
".NETCoreApp,Version=v8.0/win-x64": {
|
||||||
"kompas-mcp/0.1.0": {
|
"kompas-mcp/0.2.1": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Kompas.Mcp.Core": "0.1.0",
|
"Kompas.Mcp.Core": "0.2.1",
|
||||||
"Microsoft.Extensions.Hosting": "8.0.1",
|
"Microsoft.Extensions.Hosting": "8.0.1",
|
||||||
"ModelContextProtocol": "2.0.0"
|
"ModelContextProtocol": "2.0.0"
|
||||||
},
|
},
|
||||||
@@ -483,21 +483,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Kompas.Mcp.Core/0.1.0": {
|
"Kompas.Mcp.Core/0.2.1": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Microsoft.Extensions.Logging.Abstractions": "10.0.10"
|
"Microsoft.Extensions.Logging.Abstractions": "10.0.10"
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"Kompas.Mcp.Core.dll": {
|
"Kompas.Mcp.Core.dll": {
|
||||||
"assemblyVersion": "0.1.0",
|
"assemblyVersion": "0.2.1",
|
||||||
"fileVersion": "0.1.0.0"
|
"fileVersion": "0.2.1.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"libraries": {
|
"libraries": {
|
||||||
"kompas-mcp/0.1.0": {
|
"kompas-mcp/0.2.1": {
|
||||||
"type": "project",
|
"type": "project",
|
||||||
"serviceable": false,
|
"serviceable": false,
|
||||||
"sha512": ""
|
"sha512": ""
|
||||||
@@ -761,7 +761,7 @@
|
|||||||
"path": "system.text.json/10.0.10",
|
"path": "system.text.json/10.0.10",
|
||||||
"hashPath": "system.text.json.10.0.10.nupkg.sha512"
|
"hashPath": "system.text.json.10.0.10.nupkg.sha512"
|
||||||
},
|
},
|
||||||
"Kompas.Mcp.Core/0.1.0": {
|
"Kompas.Mcp.Core/0.2.1": {
|
||||||
"type": "project",
|
"type": "project",
|
||||||
"serviceable": false,
|
"serviceable": false,
|
||||||
"sha512": ""
|
"sha512": ""
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -34,12 +34,21 @@ variables | errors | components` (`sections` сужает и ответ, и об
|
|||||||
форма, ориентация, правдоподобность, «куда смотрит грань»): снимок дорог по контексту и менее
|
форма, ориентация, правдоподобность, «куда смотрит грань»): снимок дорог по контексту и менее
|
||||||
точен, чем числа.
|
точен, чем числа.
|
||||||
|
|
||||||
|
**1а. Осмотр НЕ перестраивает документ.** Если модель правили снаружи (человек в GUI, соседний
|
||||||
|
агент) или операция запросила перестроение, `describe_model` покажет числа ДО правки — и ответ
|
||||||
|
будет выглядеть безупречным: размеры новые, положения старые, сопряжения валидны. Такой ответ сам
|
||||||
|
скажет «Документ ТРЕБУЕТ ПЕРЕСТРОЕНИЯ» (`needsRebuild: true`); увидел — `rebuild` и повтори осмотр,
|
||||||
|
выводов по непересчитанной модели не делай.
|
||||||
|
|
||||||
**2. Ответ мутирующей операции — это ТРИ проверки, читай все.** Любая операция может «пройти»
|
**2. Ответ мутирующей операции — это ТРИ проверки, читай все.** Любая операция может «пройти»
|
||||||
(`Create()==true`), оставив деталь в ошибке, поэтому каждая мутирующая операция сама дописывает
|
(`Create()==true`), оставив деталь в ошибке, поэтому каждая мутирующая операция сама дописывает
|
||||||
к ответу итог проверки построения и сводку состояния «Тел: N, объём V мм³»:
|
к ответу итог проверки построения и сводку состояния «Тел: N, объём V мм³»:
|
||||||
|
|
||||||
- **«⚠ N операц. в ошибке»** (напр. `et3dError54`) — деталь невалидна: не продолжай и не
|
- **«⚠ N операц. в ошибке»** (напр. `et3dError54`) — деталь невалидна: не продолжай и не
|
||||||
экспортируй, исправь или переделай другим методом. «Построение чистое» = порядок.
|
экспортируй, исправь или переделай другим методом. «Построение чистое» = порядок.
|
||||||
|
Строки с «ℹ» — не отказы: «требуется перестроение» лечится `rebuild`, а «не определено
|
||||||
|
положение (N)» означает, что компоненту не хватает сопряжений или фиксации. Бросать из-за них
|
||||||
|
исправную сборку не нужно; в обеих названы имя и индекс компонента.
|
||||||
- **«Тел: 2»** там, где ждёшь одно тело, — деталь распалась: касание объединением не считается
|
- **«Тел: 2»** там, где ждёшь одно тело, — деталь распалась: касание объединением не считается
|
||||||
(см. «Надписи»). Смотри на число ТЕЛ, а не граней: объединение сливает компланарные грани,
|
(см. «Надписи»). Смотри на число ТЕЛ, а не граней: объединение сливает компланарные грани,
|
||||||
и счётчик граней законно остаётся прежним.
|
и счётчик граней законно остаётся прежним.
|
||||||
@@ -89,7 +98,12 @@ variables | errors | components` (`sections` сужает и ответ, и об
|
|||||||
- *Обмен:* `import_model` (3D: step, iges, sat, xt, stl, c3d, jt, obj + родные форматы чужих САПР),
|
- *Обмен:* `import_model` (3D: step, iges, sat, xt, stl, c3d, jt, obj + родные форматы чужих САПР),
|
||||||
`import_drawing` (плоский .dxf/.dwg), `export_model` (`format=auto` по расширению: `.step` —
|
`import_drawing` (плоский .dxf/.dwg), `export_model` (`format=auto` по расширению: `.step` —
|
||||||
точная геометрия в другую САПР, `.stl` — сетка в слайсер).
|
точная геометрия в другую САПР, `.stl` — сетка в слайсер).
|
||||||
- *Сборка:* `assembly_add_component` (положение + поворот `rx/ry/rz`), `assembly_add_mate`
|
- *Исполнения:* `embodiment` (`set|add|delete|rename`; `kind=embodiment|mirror|variant`) — несколько
|
||||||
|
геометрий одной модели в одном файле; список с габаритом и массой каждого —
|
||||||
|
`describe_model(sections=embodiments)`.
|
||||||
|
- *Сборка:* `assembly_add_component` (положение + поворот `rx/ry/rz`, `embodiment` — какое исполнение
|
||||||
|
источника вставлять), `assembly_add_mate` (стороной может быть грань ИЛИ вспомогательный объект
|
||||||
|
`object1/object2`: плоскости и оси СК компонента, а без `componentIndex` — самой сборки)
|
||||||
(семь типов, `orientation`), `assembly_fix_component`, `assembly_delete`,
|
(семь типов, `orientation`), `assembly_fix_component`, `assembly_delete`,
|
||||||
`assembly_check_interference` (не налезли ли детали друг на друга — больше это не видно нигде),
|
`assembly_check_interference` (не налезли ли детали друг на друга — больше это не видно нигде),
|
||||||
`assembly_transform_point` (`to=world|local` — точка между ЛСК компонента и СК сборки).
|
`assembly_transform_point` (`to=world|local` — точка между ЛСК компонента и СК сборки).
|
||||||
@@ -207,7 +221,8 @@ variables | errors | components` (`sections` сужает и ответ, и об
|
|||||||
кроме помеченного `(ТЗ)`.
|
кроме помеченного `(ТЗ)`.
|
||||||
- **После связывания правка паспорта перестраивает деталь** (проверено: `set_variable(badge_T=4)` →
|
- **После связывания правка паспорта перестраивает деталь** (проверено: `set_variable(badge_T=4)` →
|
||||||
габарит по Z 3.00 → 4.00, объём 5154.5 → 5861.5 мм³). Это и есть параметрическая модель,
|
габарит по Z 3.00 → 4.00, объём 5154.5 → 5861.5 мм³). Это и есть параметрическая модель,
|
||||||
а не комментарий к ней.
|
а не комментарий к ней. **До связывания — не перестраивает**, и `set_variable` говорит об этом
|
||||||
|
прямо: «⚠ НИЧЕГО НЕ ВЕДЁТ». Такой ответ — не успех: число поменялось, деталь нет.
|
||||||
- **Сверка и уборка в конце:** `describe_model(sections=variables)` помечает «⚠ ничего не ведёт» — это либо забытая
|
- **Сверка и уборка в конце:** `describe_model(sections=variables)` помечает «⚠ ничего не ведёт» — это либо забытая
|
||||||
связь, либо мусор; разбери оба. `delete_variable(unused=true)` — только ПОСЛЕ `link_parameter`
|
связь, либо мусор; разбери оба. `delete_variable(unused=true)` — только ПОСЛЕ `link_parameter`
|
||||||
на всё, что должно вести геометрию: вычистка не отличает мусор от несвязанного размера из ТЗ.
|
на всё, что должно вести геометрию: вычистка не отличает мусор от несвязанного размера из ТЗ.
|
||||||
@@ -496,6 +511,38 @@ variables | errors | components` (`sections` сужает и ответ, и об
|
|||||||
5. **Перед выдачей:** последняя операция «Построение чистое» → `export_model` (STEP для обмена,
|
5. **Перед выдачей:** последняя операция «Построение чистое» → `export_model` (STEP для обмена,
|
||||||
STL для печати).
|
STL для печати).
|
||||||
|
|
||||||
|
## Исполнения: одна модель — несколько геометрий
|
||||||
|
|
||||||
|
Типоразмеры (профиль на 100, 200, 500 мм), правое и левое зеркало, версии с отверстием и без часто
|
||||||
|
живут **в одном файле** исполнениями. Тогда всё, что ты меришь и экспортируешь, относится к
|
||||||
|
**текущему** исполнению — не к «детали вообще».
|
||||||
|
|
||||||
|
- **Признак замечаешь не ты, а ответ.** У модели с несколькими исполнениями `describe_model` сам
|
||||||
|
пишет, сколько их и какое сейчас текущее. Увидел эту строку — прежде чем считать массу или резать
|
||||||
|
чертёж, посмотри `describe_model(sections=embodiments)`: там габарит и масса **каждого**, и это
|
||||||
|
чтение ничего не переключает.
|
||||||
|
- **Переключение равно смене документа.** `embodiment(action="set", target="L200")` обнуляет
|
||||||
|
сессию построения: хендлы `sk_…`/`op_…` после него мертвы. Сохраняй документ до переключения.
|
||||||
|
- **Индекс живёт до первой правки дерева**: после `delete` индексы смещаются. Адресуй обозначением
|
||||||
|
(«L500»), а индексом — только сразу после того, как увидел список.
|
||||||
|
- **Строишь новое исполнение** — `embodiment(action="add", number="02")`; оно сразу становится
|
||||||
|
текущим, строй в нём немедленно. `depended=false` нужен, когда правки НЕ должны наследоваться от
|
||||||
|
родителя, — иначе изменение уедет и в него.
|
||||||
|
- **В сборку исполнение выбирается явно**: `assembly_add_component(embodiment="L500")`. Без
|
||||||
|
параметра встанет **базовое** исполнение, а не то, что сохранено в файле текущим. Обозначение
|
||||||
|
нужно ПОЛНОЕ («ПРОБА.001-01», а не «-01»); сервер откажет, если КОМПАС подсунет базовое.
|
||||||
|
- **«Удлинить эти профили с 500 до 600» — это смена исполнения экземпляра, а не новая вставка**:
|
||||||
|
`embodiment(action="set", target="L600", component=N)` и затем `rebuild`. Сопряжения при этом
|
||||||
|
**сохраняются** — пересоздание вставки, наоборот, порвало бы их все. Какие исполнения есть у
|
||||||
|
конкретного экземпляра, показывает `describe_model(sections="embodiments", component=N)`.
|
||||||
|
- **Выгнать всю линейку на печать** — `export_model(embodiment="all")`: каждое исполнение в свой
|
||||||
|
файл с суффиксом обозначения.
|
||||||
|
- **После смены исполнения в собранном узле проверь сопряжения** (`sections="mates"`): если у нового
|
||||||
|
исполнения нет объекта, на который опиралась связь, она рвётся — «ССЫЛКА ПОТЕРЯНА», `valid: false`,
|
||||||
|
компонент недоопределён. Что было потеряно, хранит имя сопряжения; `assembly_delete` сотрёт и его.
|
||||||
|
|
||||||
|
Подробности и границы — `help(topic="embodiments")`.
|
||||||
|
|
||||||
## Эвристики и подводные камни
|
## Эвристики и подводные камни
|
||||||
|
|
||||||
- **Правила 1 и 2 действуют всегда:** осмотр структурный; «⚠ N операц. в ошибке» — в STEP/печать
|
- **Правила 1 и 2 действуют всегда:** осмотр структурный; «⚠ N операц. в ошибке» — в STEP/печать
|
||||||
|
|||||||
+4
-4
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"version": "0.1.0",
|
"version": "0.2.1",
|
||||||
"tag": "v0.1.0",
|
"tag": "v0.2.1",
|
||||||
"sourceSha": "c7b0387a24cfeae3f19c052eb16d29dcc8030e31",
|
"sourceSha": "c66bd2efc372ce5f1bc73222fbdb19fe935ec4dd",
|
||||||
"built": "2026-08-06T21:03:33Z"
|
"built": "2026-08-07T10:20:44Z"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user