feat(query): перечисление граней + выбор грани по индексу QueryService.ListFacesAsync: обход EntityCollection(o3d_face), для каждой грани — индекс, тип поверхности (plane/cylinder/cone/sphere/torus/nurbs через ksFaceDefinition.Is*) и площадь (GetArea, мм²). Запись FaceInfo. PartModeler.OpenSketchOnFaceIndexAsync: эскиз на грани по индексу из list_faces — надёжнее выбора по точке (агенту не нужно угадывать координаты). Новые инструменты: list_faces, sketch_create_on_face_index. Тест List_faces_and_sketch_by_index: цилиндр → 3 грани (2 plane + 1 cylinder), площади торца ≈314 мм² и бока ≈1257 мм²; эскиз на торце по индексу → бобышка. Презентация: 28 инструментов, 18 тестов. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> @
kompas3d-mcp
MCP-сервер для управления CAD-системой КОМПАС-3D (АСКОН) языковой моделью.
Сервер — это COM-клиент КОМПАС-3D: он подключается к установленному КОМПАС и предоставляет LLM набор инструментов для создания документов, построения 3D-деталей (эскиз → выдавливание), а также снимок модели (агент «видит» результат и строит пошагово).
Подробности: docs/ARCHITECTURE.md · план — docs/IMPLEMENTATION_PLAN.md · спорные вопросы — docs/OPEN_QUESTIONS.md · обзор — docs/presentation.html
Требования
- Windows x64, установленный КОМПАС-3D (разрабатывалось на v24 Home).
- .NET SDK 8+ (собирается и на SDK 10; целевой фреймворк
net8.0-windows).
Сборка и запуск
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)
{
"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, rebuild |
| Vision | model_snapshot (PNG-снимок активной модели) |
Типовой сценарий
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
tools/kdoc.py поиск/чтение справки SDK КОМПАС (см. CLAUDE.md)
Тесты
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) → API7IApplication(ksGetApplication7). - 3D строится через API5
ksPart(эскизы, выдавливание); снимок —ksDocument3D.SaveAsToRasterFormat. - MCP — официальный C# SDK
ModelContextProtocol, транспорт stdio, логи в stderr.
Лицензирование
libs/kompas-interop/*.dll — interop-сборки АСКОН из состава SDK КОМПАС-3D; распространяются
согласно условиям АСКОН. Для работы требуется установленный КОМПАС-3D.