5 Commits
55 changed files with 504 additions and 585 deletions
+3 -3
View File
@@ -16,9 +16,9 @@ STEP/STL, осмотр и измерение модели — плюс два н
(`SDK\Samples\CSharp.zip`, каталог `Common`); при первом запуске они распаковываются (`SDK\Samples\CSharp.zip`, каталог `Common`); при первом запуске они распаковываются
в `%LOCALAPPDATA%\kompas-mcp\interop\<ключ>`. Если SDK не установлен, укажите каталог в `%LOCALAPPDATA%\kompas-mcp\interop\<ключ>`. Если SDK не установлен, укажите каталог
с этими сборками в переменной окружения `KOMPAS_INTEROP_DIR`; с этими сборками в переменной окружения `KOMPAS_INTEROP_DIR`;
- **[.NET Runtime](https://dotnet.microsoft.com/download/dotnet) 8 или новее, x64** — сервер - **[.NET Runtime](https://dotnet.microsoft.com/download/dotnet) 10 или новее, x64** — сервер
поставляется framework-dependent (2,3 МБ вместо 34), поэтому рантайм берётся с машины. поставляется framework-dependent (2,3 МБ вместо 34), поэтому рантайм берётся с машины.
Проверить: `dotnet --list-runtimes` должен показать `Microsoft.NETCore.App 8.x` или новее; Проверить: `dotnet --list-runtimes` должен показать `Microsoft.NETCore.App 10.x` или новее;
- чекаут и рабочие файлы — вне синхронизируемых папок OneDrive. - чекаут и рабочие файлы — вне синхронизируемых папок OneDrive.
Запускать КОМПАС заранее не нужно: сервер присоединится к открытому окну, а если его нет — Запускать КОМПАС заранее не нужно: сервер присоединится к открытому окну, а если его нет —
@@ -48,7 +48,7 @@ STEP/STL, осмотр и измерение модели — плюс два н
| | | | | |
|---|---| |---|---|
| **MCP-сервер `kompas`** | 74 инструмента: документы, эскизы, выдавливание/вращение/по сечениям/по траектории, оболочка, рёбра, уклон, скругления и фаски, массивы и зеркало, отверстия, булевы операции, прямое редактирование B-rep, переменные и параметризация, **исполнения** (несколько геометрий одной модели в одном файле), внешний вид (цвет, прозрачность, текстуры), сборки и сопряжения (в том числе по вспомогательным плоскостям и осям), 2D-чертежи (виды, размеры, обозначения, тех. требования), STEP/STL, осмотр (`describe_model`, `list_faces`, `list_edges`, `measure`) | | **MCP-сервер `kompas`** | 78 инструментов: документы, эскизы, выдавливание/вращение/по сечениям/по траектории, оболочка, рёбра, уклон, скругления и фаски, массивы и зеркало, отверстия, булевы операции, прямое редактирование 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 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "kompas", "name": "kompas",
"displayName": "КОМПАС-3D", "displayName": "КОМПАС-3D",
"version": "0.4.0", "version": "0.7.2",
"description": "Управление КОМПАС-3D из Claude Code: детали, сборки, чертежи, STEP — через MCP-сервер", "description": "Управление КОМПАС-3D из Claude Code: детали, сборки, чертежи, STEP — через MCP-сервер",
"author": { "author": {
"name": "Shahovalov Mikhail", "name": "Shahovalov Mikhail",
+2 -2
View File
@@ -13,9 +13,9 @@
сервера не входят и берутся из установки (`SDK\Samples\CSharp.zip`, каталог `Common`). При первом сервера не входят и берутся из установки (`SDK\Samples\CSharp.zip`, каталог `Common`). При первом
запуске они распаковываются в `%LOCALAPPDATA%\kompas-mcp\interop\<ключ>`; если SDK не установлен, запуске они распаковываются в `%LOCALAPPDATA%\kompas-mcp\interop\<ключ>`; если SDK не установлен,
укажите каталог с этими сборками в переменной окружения `KOMPAS_INTEROP_DIR`; укажите каталог с этими сборками в переменной окружения `KOMPAS_INTEROP_DIR`;
- [**.NET Runtime**](https://dotnet.microsoft.com/download/dotnet) **8 или новее, x64** — сервер - [**.NET Runtime**](https://dotnet.microsoft.com/download/dotnet) **10 или новее, x64** — сервер
поставляется framework-dependent, рантайм берётся с машины. Проверка: `dotnet --list-runtimes` поставляется framework-dependent, рантайм берётся с машины. Проверка: `dotnet --list-runtimes`
показывает `Microsoft.NETCore.App 8.x` или новее; показывает `Microsoft.NETCore.App 10.x` или новее;
- чекаут репозитория и рабочие файлы — вне синхронизируемых папок OneDrive. - чекаут репозитория и рабочие файлы — вне синхронизируемых папок OneDrive.
## Установка ## Установка
+1 -1
View File
@@ -4,7 +4,7 @@ Codex не знает ни маркетплейсов, ни `${CLAUDE_PLUGIN_ROO
к каталогу плагина. к каталогу плагина.
1. Склонировать `https://git.shahovalov.ru/mikhail/kompas-plugin.git` — сервер лежит внутри, 1. Склонировать `https://git.shahovalov.ru/mikhail/kompas-plugin.git` — сервер лежит внутри,
в `plugin/bin/`, собирать ничего не нужно (требуется .NET Runtime 8+ x64). в `plugin/bin/`, собирать ничего не нужно (требуется .NET Runtime 10+ x64).
2. Вставить `config.snippet.toml` в `~/.codex/config.toml`, заменив `<PLUGIN>` на абсолютный путь 2. Вставить `config.snippet.toml` в `~/.codex/config.toml`, заменив `<PLUGIN>` на абсолютный путь
к каталогу `plugin/` клона. Лаунчер `scripts/launch-kompas-mcp.ps1` — тот же, что у плагина к каталогу `plugin/` клона. Лаунчер `scripts/launch-kompas-mcp.ps1` — тот же, что у плагина
Claude Code. Claude Code.
+1 -1
View File
@@ -1,7 +1,7 @@
# Подключение к opencode # Подключение к opencode
1. Склонировать `https://git.shahovalov.ru/mikhail/kompas-plugin.git` — сервер лежит внутри, 1. Склонировать `https://git.shahovalov.ru/mikhail/kompas-plugin.git` — сервер лежит внутри,
в `plugin/bin/` (требуется .NET Runtime 8+ x64). в `plugin/bin/` (требуется .NET Runtime 10+ x64).
2. Слить `opencode.json` со своим конфигом opencode, заменив `<PLUGIN>` на абсолютный путь к 2. Слить `opencode.json` со своим конфигом opencode, заменив `<PLUGIN>` на абсолютный путь к
каталогу `plugin/` клона. Используется тот же лаунчер `scripts/launch-kompas-mcp.ps1`. каталогу `plugin/` клона. Используется тот же лаунчер `scripts/launch-kompas-mcp.ps1`.
3. Навыки: скопировать `plugin/skills/{kompas-3d,kompas-fdm-design}` в каталог навыков агента 3. Навыки: скопировать `plugin/skills/{kompas-3d,kompas-fdm-design}` в каталог навыков агента
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
+4 -3
View File
@@ -1,14 +1,15 @@
{ {
"runtimeOptions": { "runtimeOptions": {
"tfm": "net8.0", "tfm": "net10.0",
"rollForward": "LatestMajor", "rollForward": "LatestMajor",
"framework": { "framework": {
"name": "Microsoft.NETCore.App", "name": "Microsoft.NETCore.App",
"version": "8.0.0" "version": "10.0.0"
}, },
"configProperties": { "configProperties": {
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false, "System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false,
"CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false
} }
} }
} }
+2 -2
View File
@@ -28,9 +28,9 @@ description: "Диагностика установки плагина КОМП
`/plugin update kompas@kompas-plugin`, затем `/reload-plugins`. `/plugin update kompas@kompas-plugin`, затем `/reload-plugins`.
4. **.NET Runtime.** Сервер поставляется framework-dependent, поэтому рантайм нужен на машине: 4. **.NET Runtime.** Сервер поставляется framework-dependent, поэтому рантайм нужен на машине:
`dotnet --list-runtimes` должен показать строку `Microsoft.NETCore.App 8.<любая>` или новее `dotnet --list-runtimes` должен показать строку `Microsoft.NETCore.App 10.<любая>` или новее
(x64). Ни одной подходящей строки или самой команды `dotnet` нет — это и есть причина сбоя (x64). Ни одной подходящей строки или самой команды `dotnet` нет — это и есть причина сбоя
пункта 3: попроси пользователя поставить .NET Runtime 8 или новее с пункта 3: попроси пользователя поставить .NET Runtime 10 или новее с
https://dotnet.microsoft.com/download/dotnet (нужен именно x64; Desktop Runtime не обязателен). https://dotnet.microsoft.com/download/dotnet (нужен именно x64; Desktop Runtime не обязателен).
5. **КОМПАС-3D установлен и, возможно, уже запущен.** Сервер подключается к КОМПАС лениво — не при 5. **КОМПАС-3D установлен и, возможно, уже запущен.** Сервер подключается к КОМПАС лениво — не при
+1 -1
View File
@@ -40,7 +40,7 @@ catch {
# Самая частая причина здесь — отсутствующий .NET Runtime: сервер поставляется # Самая частая причина здесь — отсутствующий .NET Runtime: сервер поставляется
# framework-dependent, и без рантайма apphost падает именно тут. # framework-dependent, и без рантайма apphost падает именно тут.
[Console]::Error.WriteLine("kompas-mcp launcher: не удалось запустить сервер: $($_.Exception.Message)") [Console]::Error.WriteLine("kompas-mcp launcher: не удалось запустить сервер: $($_.Exception.Message)")
[Console]::Error.WriteLine("kompas-mcp launcher: если .NET Runtime не установлен — https://dotnet.microsoft.com/download/dotnet (нужен .NET 8 или новее, x64)") [Console]::Error.WriteLine("kompas-mcp launcher: если .NET Runtime не установлен — https://dotnet.microsoft.com/download/dotnet (нужен .NET 10 или новее, x64)")
exit 1 exit 1
} }
+5 -4
View File
@@ -153,6 +153,8 @@ variables | errors | components` (`sections` сужает и ответ, и об
| Переменное сечение: хвост, гребень, переход круга в квадрат | `loft` по сечениям на смещённых плоскостях (`mode=boss` приклеивает к телу) | | Переменное сечение: хвост, гребень, переход круга в квадрат | `loft` по сечениям на смещённых плоскостях (`mode=boss` приклеивает к телу) |
| Труба, поручень, кант по кривой | `sweep(profileSketchId, pathSketchId)` — профиль и траектория на разных плоскостях | | Труба, поручень, кант по кривой | `sweep(profileSketchId, pathSketchId)` — профиль и траектория на разных плоскостях |
| Тонкая стенка, ободок по контуру | эскиз + `extrude(thinThickness, thinSide)` | | Тонкая стенка, ободок по контуру | эскиз + `extrude(thinThickness, thinSide)` |
| Наклонная полка, скос, элемент под углом | `sketch_create(plane, planeAngle, planeAxis)` или `planePoints` (три вершины) + `extrude`; сторону берёт нормаль из ответа — `help(topic="auxiliary-planes")` |
| Резьба на валу или в отверстии (M10, M8×1) | `thread` на цилиндрической грани — условное изображение, тело не режет; в отверстии сначала `hole` под сверло (M10 → Ø8.5), потом `thread` — `help(topic="threads")` |
Их **сочетают в одной детали**: корпусные объёмы — примитивами, сложные контуры — эскизами. Их **сочетают в одной детали**: корпусные объёмы — примитивами, сложные контуры — эскизами.
@@ -321,8 +323,8 @@ variables | errors | components` (`sections` сужает и ответ, и об
файл детали не меняется — но он перекрывает ВСЕ акценты детали (надпись станет цвета файл детали не меняется — но он перекрывает ВСЕ акценты детали (надпись станет цвета
компонента). Нужны акценты — оставь компоненту наследуемый цвет. Грань или тело ВНУТРИ компонента). Нужны акценты — оставь компоненту наследуемый цвет. Грань или тело ВНУТРИ
компонента из сборки не красятся: акценты, общие для всех экземпляров, задают в файле детали. компонента из сборки не красятся: акценты, общие для всех экземпляров, задают в файле детали.
- **Передача дальше**: STEP несёт цвета и прозрачность — ответ `export_model` их перечисляет; STL - **Передача дальше**: STEP несёт цвета и прозрачность, но не текстуры и вырезы; STL не несёт
цветов не несёт. оформления вовсе. Ответ `export_model` перечисляет попавшие цвета и называет, что потеряно.
- **Отделка по материалу**: металл — `finish="metal"` (`silver`, `gold`), пластик — `satin` или - **Отделка по материалу**: металл — `finish="metal"` (`silver`, `gold`), пластик — `satin` или
`matte`, `glossy` — умолчание КОМПАС. `matte`, `glossy` — умолчание КОМПАС.
- **Текстура — там, где она что-то говорит**: накатка на рукоятке (`texture="diamond knurl"`, - **Текстура — там, где она что-то говорит**: накатка на рукоятке (`texture="diamond knurl"`,
@@ -336,8 +338,7 @@ variables | errors | components` (`sections` сужает и ответ, и об
на снимке, не трогая массу и топологию. Нужны настоящие отверстия под крепёж или DFM — это на снимке, не трогая массу и топологию. Нужны настоящие отверстия под крепёж или DFM — это
`hole`/`pattern`, вырез их не заменяет. Рисунок «не тем боком» — `textureAngle`, сдвиг — `hole`/`pattern`, вырез их не заменяет. Рисунок «не тем боком» — `textureAngle`, сдвиг —
`textureOffset` (оба вместе с повтором имён `texture` и `cutout` — повернётся только то, что `textureOffset` (оба вместе с повтором имён `texture` и `cutout` — повернётся только то, что
названо в вызове; поворот 0…180°). Смена рисунка плитку и раскладку сохраняет. В STEP уходят названо в вызове; поворот 0…180°). Смена рисунка плитку и раскладку сохраняет.
только цвета — текстуры и вырезы остаются в `.m3d`.
- **Проверка — глазами**: `model_snapshot(view="iso")` после раскраски; что окрашено на самом - **Проверка — глазами**: `model_snapshot(view="iso")` после раскраски; что окрашено на самом
деле — `describe_model(sections=appearance)`. Прозрачность снимок не рисует — её видно только деле — `describe_model(sections=appearance)`. Прозрачность снимок не рисует — её видно только
в разделе `appearance`. в разделе `appearance`.
@@ -38,9 +38,11 @@
| «сдвинуть грань на N мм» | `move_face` | это он и есть | | «сдвинуть грань на N мм» | `move_face` | это он и есть |
| «диаметр отверстия (бобышки) должен стать D» | **`resize_face`** | задаётся ДИАМЕТР, ось не двигается; `move_face` сдвинул бы стенку на (D−d)/2, и это пришлось бы считать самому | | «диаметр отверстия (бобышки) должен стать D» | **`resize_face`** | задаётся ДИАМЕТР, ось не двигается; `move_face` сдвинул бы стенку на (D−d)/2, и это пришлось бы считать самому |
| «грань должна встать НА объект: на плоскость, на грань соседнего тела» | **`replace_face`** | расстояние считает КОМПАС; `move_face` требует вычислить его заранее | | «грань должна встать НА объект: на плоскость, на грань соседнего тела» | **`replace_face`** | расстояние считает КОМПАС; `move_face` требует вычислить его заранее |
| «убрать отверстие / скругление / фаску» с импорта (дефичеринг) | **`remove_face`** | соседние грани затягивают место сами; заливка отверстия телом и вычитание — лишние операции. `saveBody=false` оставляет дыру (тело-оболочка, объём 0) — нужен только если надо именно её |
| «увеличить / уменьшить деталь целиком», компенсация усадки (1.004) | **`scale_body`** | `scale` равномерно или `scaleX/Y/Z`; центр — начало координат либо `x,y,z`; объём сверяется ×kx·ky·kz. Размеры эскизов и переменные остаются прежними — масштабируется тело |
| вставка N мм в призматическую ножку | `split_solid_by_plane` → `move_body` → `move_face` (мост) → `boolean` | цепочка проверена end-to-end: проставка 39.45 → 41.45 мм | | вставка N мм в призматическую ножку | `split_solid_by_plane` → `move_body` → `move_face` (мост) → `boolean` | цепочка проверена end-to-end: проставка 39.45 → 41.45 мм |
`resize_face` и `replace_face` требуют КОМПАС v25; на версиях старше они отвечают отказом с `resize_face`, `replace_face` и `remove_face` требуют КОМПАС v25; на версиях старше они отвечают отказом с
номером установленной версии, и тогда остаётся `move_face` с арифметикой. номером установленной версии, и тогда остаётся `move_face` с арифметикой.
**Проверяйте прямое редактирование РАЗНОСТЬЮ ОБЪЁМОВ против аналитической формулы** — объём и так **Проверяйте прямое редактирование РАЗНОСТЬЮ ОБЪЁМОВ против аналитической формулы** — объём и так
+4 -4
View File
@@ -1,6 +1,6 @@
{ {
"version": "0.4.0", "version": "0.7.2",
"tag": "v0.4.0", "tag": "v0.7.2",
"sourceSha": "f1ecc6ff5a923d524a7aa8dc7b97c538d9cf1bb3", "sourceSha": "35dedb58ec6baf150e020a5c7295137bf5600028",
"built": "2026-10-15T03:15:33Z" "built": "2026-10-27T22:29:49Z"
} }