498eeaa847
feat(query): перечисление рёбер + скругление/фаска по индексу QueryService.ListEdgesAsync: обход EntityCollection(o3d_edge), для каждого ребра — индекс, тип кривой (line/circle/arc/ellipse/nurbs через ksEdgeDefinition.Is*) и длина (GetLength, мм). Запись EdgeInfo. Новый инструмент list_edges. PartModeler: выделены ядра CreateFillet/CreateChamfer и хелпер SelectEdgeByIndex; добавлены FilletEdgeIndexAsync/ChamferEdgeIndexAsync. Новые инструменты fillet_edge_index, chamfer_edge_index — выбор ребра по индексу (надёжнее точки). Тест List_edges_and_fillet_by_index: цилиндр → 2 круговых ребра ≈62.83 мм → скругление ребра по индексу → объём уменьшается. Итого 31 инструмент, 19 тестов. Документация синхронизирована через навык docs-delegate (Sonnet). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> @
86 lines
4.6 KiB
Markdown
86 lines
4.6 KiB
Markdown
# kompas3d-mcp
|
||
|
||
**MCP-сервер для управления CAD-системой КОМПАС-3D (АСКОН) языковой моделью.**
|
||
|
||
Сервер — это COM-клиент КОМПАС-3D: он подключается к установленному КОМПАС и предоставляет
|
||
LLM набор инструментов для создания документов, построения 3D-деталей (эскиз → выдавливание),
|
||
а также **снимок модели** (агент «видит» результат и строит пошагово).
|
||
|
||
> Подробности: [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) · план — [docs/IMPLEMENTATION_PLAN.md](docs/IMPLEMENTATION_PLAN.md)
|
||
> · спорные вопросы — [docs/OPEN_QUESTIONS.md](docs/OPEN_QUESTIONS.md) · обзор — [docs/presentation.html](docs/presentation.html)
|
||
|
||
## Требования
|
||
|
||
- **Windows x64**, установленный **КОМПАС-3D** (разрабатывалось на v24 Home).
|
||
- **.NET SDK 8+** (собирается и на SDK 10; целевой фреймворк `net8.0-windows`).
|
||
|
||
## Сборка и запуск
|
||
|
||
```powershell
|
||
dotnet build -c Release
|
||
# сервер (stdio):
|
||
dotnet run --project src/Kompas.Mcp.Host -c Release
|
||
# или собранный exe:
|
||
src/Kompas.Mcp.Host/bin/Release/net8.0-windows/kompas-mcp.exe
|
||
```
|
||
|
||
### Подключение к MCP-клиенту (stdio)
|
||
|
||
```json
|
||
{
|
||
"mcpServers": {
|
||
"kompas3d": { "command": "C:\\путь\\к\\kompas-mcp.exe", "args": [] }
|
||
}
|
||
}
|
||
```
|
||
|
||
## Инструменты (v1)
|
||
|
||
| Группа | Инструменты |
|
||
|---|---|
|
||
| System | `kompas_connect`, `kompas_status`, `kompas_set_visible` |
|
||
| Documents | `document_create`, `document_open`, `document_save`, `document_save_as`, `document_close`, `document_active` |
|
||
| Sketch | `sketch_create`, `sketch_add_line`, `sketch_add_circle`, `sketch_add_rectangle`, `sketch_close` |
|
||
| Features | `extrude_boss`, `extrude_cut`, `revolve_boss`, `revolve_cut`, `fillet_edge`, `chamfer_edge`, `fillet_edge_index`, `chamfer_edge_index`, `rebuild` |
|
||
| Vision | `model_snapshot` (PNG-снимок активной модели) |
|
||
| Query | `get_part_info`, `get_bounding_box`, `list_faces`, `list_edges` |
|
||
|
||
### Типовой сценарий
|
||
|
||
`kompas_connect` → `document_create part` → `sketch_create XOY` → `sketch_add_circle` →
|
||
`sketch_close` → `extrude_boss` → `model_snapshot` → (повтор для следующих элементов).
|
||
|
||
> ⚠️ Вызовы зависимых инструментов выполняйте **последовательно** (дождавшись ответа):
|
||
> сессия построения хранит эскизы по `id`, а сервер обрабатывает запросы конкурентно.
|
||
|
||
## Структура
|
||
|
||
```
|
||
src/Kompas.Mcp.Core/ COM-слой: STA-диспетчер, подключение, документы, эскизы/операции, снимок
|
||
src/Kompas.Mcp.Host/ MCP-сервер (stdio) + определения инструментов
|
||
tests/Kompas.Mcp.Tests/ unit (диспетчер) + integration (требуют КОМПАС)
|
||
libs/kompas-interop/ вендорские interop-сборки КОМПАС (из SDK Samples/Common)
|
||
docs/ архитектура, план, презентация, навигатор по справке SDK
|
||
.claude/skills/ навыки: docs-delegate, kompas-sdk-research (+ kdoc.py — навигатор справки SDK)
|
||
```
|
||
|
||
## Тесты
|
||
|
||
```powershell
|
||
dotnet test # все (integration требуют КОМПАС)
|
||
dotnet test --filter "Category=Unit" # только unit (без COM)
|
||
dotnet test --filter "Category=Integration" # только integration
|
||
```
|
||
|
||
## Архитектура (кратко)
|
||
|
||
- **STA-поток** (`KompasDispatcher`) владеет всеми COM-вызовами — КОМПАС однопоточный STA.
|
||
- Подключение через API5 `KompasObject` (`KOMPAS.Application.5`) → API7 `IApplication` (`ksGetApplication7`).
|
||
- 3D строится через API5 `ksPart` (эскизы, выдавливание); снимок — `ksDocument3D.SaveAsToRasterFormat`.
|
||
- MCP — официальный C# SDK `ModelContextProtocol`, транспорт stdio, логи в stderr.
|
||
|
||
## Лицензирование
|
||
|
||
`libs/kompas-interop/*.dll` — interop-сборки АСКОН из состава SDK КОМПАС-3D; распространяются
|
||
согласно условиям АСКОН. Для работы требуется установленный КОМПАС-3D.
|