# КОМПАС-3D MCP — управление CAD через LLM

Возможности

## Что умеет MCP-сервер

Инструменты сгруппированы вокруг живого инженерного цикла моделирования — от подключения к КОМПАС до построения и опроса детали.

🔌

### Подключение к КОМПАС

Attach к запущенному или launch нового экземпляра по ProgID, переход на API7 через `ksGetApplication7()`, управление видимостью окна.

📄

### Документы

Создание, открытие, сохранение и закрытие деталей, сборок, чертежей и фрагментов через `IDocuments`.

✏️

### Эскизы

Эскиз на плоскости или грани, примитивы (линия, окружность, дуга, прямоугольник), безопасный цикл `BeginEdit → EndEdit`.

🧊

### 3D-операции

Выдавливание и вырез, вращение, перестроение. Управление направлением, глубиной и типом окончания (`ksEndTypeEnum`).

🔍

### Структурный осмотр

`describe_model` — паспорт детали (МЦХ, тела, дерево, переменные) одним вызовом. `describe_face` · `describe_edge` · `measure`. Предпочтительнее снимка — без расхода токенов изображения.

🎯

### Выборка и запросы

Перечисление граней, рёбер и компонентов сборки с классификацией; МЦХ, габарит. `list_faces` · `list_edges` · `list_components`.

📦

### STEP импорт / экспорт

Импорт .step/.stp в новый документ (деталь или сборка, создание файлов компонентов); экспорт в AP203/AP214/AP242 через встроенный конвертер КОМПАС.

✂️

### Прямое редактирование

`move_face`: сдвинуть грань на N мм вдоль нормали (наружу или внутрь). Работает на импортированной B-rep через `FaceMover` API7.

👁️

### Зрение агента

Рендер модели в PNG через временный файл и возврат как image-контент MCP — агент видит результат. Fallback после `describe_model` для визуально-пространственных вопросов.

Ядро сценария

## Цикл «эскиз → операция → эскиз»

Главный пользовательский поток v1 — итеративное параметрическое моделирование с визуальной проверкой: рисуем профиль, превращаем в объём, смотрим на результат, выбираем грань, рисуем следующий профиль.

01

#### Документ

создать деталь (part)

→
02

#### Эскиз

на плоскости XOY, профиль

→
03

#### Выдавить

boss-операция → тело

→
04 👁

#### Снимок

агент видит результат

→
05

#### Выбрать грань

по точке на теле

→
06

#### Вырез

новый эскиз → cut

↻ Повторять со зрением — снимок → новая грань → новый эскиз → новая операция → снова снимок, пока деталь не готова

Технологии

## Стек решения

Выбор обоснован первоклассным COM-интеропом .NET и официальным C# MCP SDK — подробности в документе архитектуры.

Платформа
.NET 8C# · win-x64
MCP SDK
ModelContextProtocolтранспорт stdio
Интероп
COM AutomationAPI7 + API5 (.tlb)
Потоки
STA-потокнасос сообщений
Прогресс

## TODO проекта

Честный срез состояния: фундамент подготовки готов, реализация сервера — впереди.

Общий прогрессv3+: STEP · move_face · структурный осмотр · богатые эскизы (пакет A) · shell+rib+sweep+loft (пакет B) · массивы+зеркало (пакет C) · переменные (пакет D start) · offset-plane (пакет E start) · hole (API7) · hole_counterbore · hole_countersink · hole_conic · draft (API5) · assembly_add_component · assembly_add_mate · drawing_create_standard_views · drawing_fill_title_block · drawing_add_linear_dimension · drawing_add_diametral_dimension · drawing_add_radial_dimension · drawing_add_angular_dimension · drawing_add_rough · drawing_add_text · drawing_set_technical_requirements · associate (ассоциативная привязка диам./радиального) · drawing_set_sheet_format (формат листа) · drawing_add_leader (выноска) · навык kompas-3d · 83 инструмента · 331 тест

### Подготовка ГОТОВО

Исследование, документация и инструменты разработчика

- ✓Исследование SDK и COM API (API5/API7, паттерны подключения)
- ✓CLAUDE.md — гайд по репозиторию и API
- ✓Навигатор по справке: `kdoc.py` (навык kompas-sdk-research) + индекс на 26k стр.
- ✓Документ архитектуры `docs/ARCHITECTURE.md`
- ✓Выбор стека: .NET/C#, stdio, цикл «эскиз↔операция»
- ✓Решение о визуальной обратной связи (зрение агента, рендер в растр)

### Фундамент v1 ГОТОВО

Скелет сервера и связь с КОМПАС

- ✓Спайки S1–S4: interop, подключение, STA, рендер
- ✓Решение Core/Host/Tests, Directory.Build.props, git
- ✓Маппинг перечислений (enum ↔ строка)
- ✓STA-диспетчер (выделенный поток, очередь задач)
- ✓MCP-хост на stdio, логи в stderr
- ✓Подключение по ProgID (attach/launch)

### Инструменты v3+ ГОТОВО

83 инструмента, отдаются по MCP-протоколу

- ✓`System`: connect · status · set_visible
- ✓`Documents`: create · open · save · save_as · close · active
- ✓`Sketch`: create · on_face (точка/индекс) · on_offset_plane (смещённая плоскость) · add line/circle/arc/arc_3points/rectangle/axis/ellipse/polyline/polygon/spline/point · close
- ✓`Features`: extrude · revolve · fillet_edge/chamfer_edge (точка + индекс) · shell (оболочка) · rib (ребро жёсткости) · sweep (кинематическая) · loft (по сечениям) · linear_pattern · circular_pattern · mirror_operation · mirror_body · hole (API7) · hole_counterbore (цековка, API7) · hole_countersink (зенковка, API7) · hole_conic (коническое, API7) · draft (уклон, API5) · rebuild
- ✓`Edit`: move_face · split_solid_by_plane · move_body · boolean_union
- ✓`Inspection`: describe_model · list_features · list_bodies · list_variables · describe_face · describe_edge · measure
- ✓`Vision`: model_snapshot 👁️ (fallback)
- ✓`Query`: get_part_info · get_bounding_box · list_faces · list_edges · list_components
- ✓`Variables`: create_variable · set_variable · delete_variable (пакет D)
- ✓`Conversion`: import_step · export_step
- ✓`Assembly`: assembly_add_component (вставка компонента .m3d/.a3d в сборку, API7) · assembly_add_mate (сопряжения coincidence/distance, API7)
- ✓`Drawing`: drawing_create_standard_views (стандартные ассоциативные виды чертежа, API7) · drawing_fill_title_block (основная надпись/штамп: обозначение, наименование, материал, API7) · drawing_add_linear_dimension (линейный размер на виде, ISymbols2DContainer, API7) · drawing_add_diametral_dimension (диаметральный размер Ø, IDiametralDimension, associate=true для ассоциативной привязки к окружности, API7) · drawing_add_radial_dimension (радиальный размер R, IRadialDimension, associate=true аналогично, API7) · drawing_add_angular_dimension (угловой размер, IAngleDimension, angleType=min/max/more, API7) · drawing_add_rough (знак шероховатости, IRough/IRoughParams, signType=delete/without/none, API7) · drawing_add_text (свободный текст на виде, IDrawingContainer/IDrawingText, API7) · drawing_set_technical_requirements (тех. требования документа, IDrawingDocument/TechnicalDemand, API7) · drawing_set_sheet_format (формат и ориентация листа, ILayoutSheet/ISheetFormat, PaperFormat A0–A5/user, API7) · drawing_add_leader (линия-выноска с текстом, ISymbols2DContainer/IBaseLeader/IBranchs/ILeader, ShelfDirection enum, API7)
- →2D-чертёж: рамка/основная надпись по ГОСТ-стилю (LayoutLibraryFileName/LayoutStyleNumber), несколько листов · привязка к дуге (Arcs), ассоциативный угловой размер, ассоциативная шероховатость (IRough.BaseObject) · обозначения баз (Bases), допуски формы (Tolerances), специальные выноски (позиция/клеймо/маркер) · пакет E (ось, угловая плоскость) · пакет D параметрика: параметрические эскизы (API2D) — исследовано, недоступно через COM API · прочие типы сопряжений (parallel/perpendicular/concentric/angle/tangency)

### Качество и поставка В РАБОТЕ

Тесты, сборка, интеграция с клиентом

- ✓Unit-тесты — без COM: диспетчер, enum-маппинг, StepFormat, InspectionText
- ✓Интеграционные тесты с КОМПАС: подключение, документы, снимок, цикл, STEP round-trip, сборка, move_face, инспекция
- ✓Итого 331 тест зелёных (201 unit + 130 integration)
- ✓Сборка `kompas-mcp.exe`, README с конфигом клиента
- ✓Навык `kompas-3d` (методика) + полигон `usecases/`
- In-process тест MCP-клиента, релизный publish

Дорожная карта

## После v1

Наращиваем покрытие API волнами — от простых операций к параметрике, черчению и сборкам.

v1 · готово ✓

#### Цикл моделирования

Документы, эскизы, выдавливание/вырез, снимок модели

v2 · готово ✓

#### Операции, выборка, STEP

Эскиз на грани · вращение · скругление/фаска · list_faces/edges · import_step · export_step · list_components · навык kompas-3d

v3 · готово ✓

#### B-rep + структурный осмотр

move_face (сдвиг грани на N мм) · describe_model · list_features · list_bodies · list_variables · describe_face · describe_edge · measure

пакет A · готово ✓

#### Богатые эскизы

arc · arc_3points · ellipse · polyline · polygon · spline · point (+7 инструментов); PartModeler разбит на partial-классы; SketchGeometry

пакет B · готово ✓

#### Формообразующие операции

shell ✓ · rib ✓ · sweep ✓ · loft ✓ (по сечениям) · offset-plane ✓ (пакет E)

пакет C · готово ✓

#### Массивы и зеркало

linear_pattern ✓ · circular_pattern ✓ · mirror_operation ✓ · mirror_body ✓ · hole ✓ (API7)

draft · готово ✓

#### Уклон

draft ✓ (API5 `ksInclineDefinition`, o3d_incline=42) · 64 инструмента · 115 тестов

пакет D start · готово ✓

#### Переменные модели

create_variable · set_variable · delete_variable (API5 VariableService) · list_variables исправлен · 67 инструментов

отверстия под крепёж · готово ✓

#### Цековка, зенковка и конус

hole_counterbore (ksHTCounterbore) · hole_countersink (ksHTCountersinking) · hole_conic (ksHTConic, IConicHoleParameters) · HoleCore рефакторен (configure-колбэк) · 70 инструментов · 119 тестов

сборки start · готово ✓

#### Вставка компонентов

assembly_add_component (API7 IParts7.AddFromFile + IPlacement3D)

сборки инкремент 2 · готово ✓

#### Сопряжения

assembly_add_mate (coincidence/distance, API7 IMateConstraints3D) · IntegrationTestBase · 72 инструмента · 156 тестов

2D-чертёж · инкремент 2 ✓

#### Стандартные виды + основная надпись

drawing_create_standard_views (AddStandartViews, API7) · drawing_fill_title_block (IStamp.Text[id].Str, API7) · 74 инструмента · 188 тестов

2D-чертёж · инкремент 3 ✓

#### Линейные размеры

drawing_add_linear_dimension (ISymbols2DContainer/LineDimensions.Add/ILineDimension, локальная СК вида, API7) · ViewNumbers в результате видов · 75 инструментов · 203 теста

2D-чертёж · инкремент 4 ✓

#### Диаметральный размер

drawing_add_diametral_dimension (ISymbols2DContainer.DiametralDimensions.Add/IDiametralDimension, Xc/Yc/Radius/Angle рад, API7) · RequireSymbols2DContainer общий хелпер · DimensionAngles.ToRadians · 76 инструментов · 218 тестов

2D-чертёж · инкремент 5 ✓

#### Радиальный и угловой размеры

drawing_add_radial_dimension (IRadialDimension, DimensionType=true, API7) · drawing_add_angular_dimension (IAngleDimension, angleType=min/max/more, AngleDimensionType enum, API7) · базовое семейство размеров завершено · 78 инструментов · 241 тест

2D-чертёж · инкремент 6 ✓

#### Текстовые обозначения

drawing_add_rough (IRough/IRoughParams, signType=delete/without/none, API7) · drawing_add_text (IDrawingContainer/IDrawingText/IText, API7) · drawing_set_technical_requirements (IDrawingDocument/TechnicalDemand, уровень документа, API7) · DrawingAnnotationResult · RoughSignType enum · 81 инструмент · 267 тестов

2D-чертёж · инкремент 7 ✓

#### Ассоциативная привязка к окружности

associate=true у drawing_add_diametral_dimension и drawing_add_radial_dimension · CircularObjectMatch (поиск по центру+радиусу, допуск 1 мм) · RequireViewContainers · dim.BaseObject=circle · значение из геометрии · 81 инструмент · 278 тестов

2D-чертёж · инкремент 8 ✓

#### Формат и ориентация листа

drawing_set_sheet_format (ILayoutSheet.Format / ISheetFormat, ksDocumentFormatEnum, A0–A5/user, VerticalOrientation) · PaperFormat enum · SheetFormatResult · ValidateFormatDimensions · 82 инструмента · 308 тестов

2D-чертёж · инкремент 9 ✓

#### Линия-выноска

drawing_add_leader (ISymbols2DContainer.Leaders.Add / IBaseLeader / IBranchs.AddBranchByPoint / ILeader.TextOnShelf, ShelfDirection enum auto/right/left/up/down, API7) · DrawingAnnotationResult · 83 инструмента · 331 тест

далее · в работе ▶

#### Оформление чертежа

Рамка/надпись по ГОСТ-стилю (LayoutLibraryFileName) · несколько листов · привязка к дуге (Arcs) · ассоциативный угловой размер · ассоциативная шероховатость (IRough.BaseObject) · обозначения баз (Bases) · допуски формы (Tolerances) · специальные выноски (позиция/клеймо/маркер) · пакет E (ось, угловая плоскость) · прочие типы сопряжений (parallel/perpendicular/concentric/angle/tangency) · пакет D параметрика — параметрические эскизы недоступны через COM API