pzfreo/build123d-mcp

pzfreo/build123d-mcp

от pzfreo
MCP сервер для 3D CAD на build123d, позволяющий AI-агентам создавать, инспектировать и итерировать геометрию. Закрывает цикл обратной связи: AI видит результат, а не пишет вслепую. Полезен инженера...

build123d-mcp

PyPI version Python CI License: Apache 2.0 build123d-mcp MCP server

An MCP (Model Context Protocol) server that exposes build123d CAD operations as tools, enabling AI assistants to build, inspect, and iterate on 3D geometry interactively.

Why

When using an AI to write build123d scripts, the AI writes blind — it cannot see the geometry it produces. This server closes the feedback loop: the AI can create geometry, render views, query dimensions, and catch errors incrementally rather than writing complete scripts and hoping they are correct.

Evidence it works: on the public CADGenBench leaderboard (June 2026), driving GPT‑5.5 through build123d‑mcp scores 0.457 — the top result on the board — versus 0.360 for the same model writing build123d scripts blind: a +27% gain that also raises CAD validity from 88% to 100%, and beats even the larger GPT‑5.5 Pro baseline. The feedback loop measurably improves what an LLM can model.

Tools

Core

  • execute — run build123d Python code in a persistent session; use show(shape, name) to register named parts
  • reset — clear session back to empty state (namespace, shapes, snapshots)
Инструменты были проиндексированы:
analyze_printabilityтолько чтение

Анализирует форму build123d на пригодность для FDM-печати с помощью augura (точный анализ BREP). Проверяет: нависания, замкнутость/водонепроницаемость, риск опрокидывания, необходимость brim/raft, минимальный вертикальный элемент (→ максимальная высота слоя) и тонкие стенки. Опционально проверяет соответствие столу относительно заданного объёма сборки. Возвращает текстовую сводку, за которой следует JSON-отчёт с деталями каждого обнаружения (тип, серьёзность, сообщение, область/расположение, если применимо). object_name: именованный объект из show() (по умолчанию: текущая форма). support_angle: грани, расположенные под углом менее этого значения в градусах от горизонтали, требуют поддержки (по умолчанию 45). nozzle: диаметр сопла в мм для проверки толщины стенок (по умолчанию 0.4). min_perimeters: стенки тоньше, чем min_perimeters × nozzle, отмечаются (по умолчанию 2). build_volume: опциональная рабочая область в виде 'X Y Z' в мм, например '256 256 256'; опустите, чтобы пропустить проверку соответствия столу. bed_tol: допуск по Z в мм для определения граней, контактирующих со столом (по умолчанию 0.001); увеличьте для деталей, чьи нижние грани находятся немного выше Z=0. min_feature: минимальный размер вертикального элемента в мм, который отмечать (по умолчанию 0.5).

Параметры
  • bed_tolnumber
  • build_volumestring
  • min_featurenumber
  • min_perimetersinteger
  • nozzlenumber
  • object_namestring
  • support_anglenumber
compareтолько чтение

Единый инструмент сравнения. kind='shape' сравнивает две именованные фигуры из show(), a и b, по объёму/bbox/топологии и локальному отклонению поверхности; b обязателен. kind='fit' сообщает пространственное отношение между двумя именованными фигурами, a и b: зазор, статус разделение/касание/вложение/взаимопроникновение, вложение и объёмы перекрытия; b обязателен. kind='align' проверяет две именованные фигуры, a и b, вдоль одной оси. axis: X, Y или Z. mode: flush (смещение крайней точки bbox), center (смещение центроида) или clearance (зазор между ближайшими гранями); b обязателен. kind='snapshot' сравнивает снимок a с текущим состоянием сессии или b как второй снимок. format: 'text' или 'json'.

Параметры
  • astringобязательный
  • axisstring
  • bstring
  • formatstring
  • kindstring
  • modestring
crop_drawingтолько чтение

Save one model-selected raster drawing region at readable scale. bbox_px is exact source-image [x0,y0,x1,y1]; scale is 0.25..12. Returns the saved PNG path and an exact crop-pixel→source-pixel transform, so coordinates read from the enlargement remain usable. This is a mechanical crop only: it performs no OCR, feature recognition, or geometry inference.

Параметры
  • autocontrastboolean
  • bbox_pxinteger[]обязательный
  • image_pathstringобязательный
  • output_pathstring
  • scalenumber
cross_sectionsтолько чтение

Вычисляет площади поперечных сечений на равномерно расположенных плоскостях вдоль оси. Возвращает список пар {позиция, площадь}. axis: X, Y или Z (по умолчанию Z). num_slices: количество плоскостей (по умолчанию 10, минимум 2). Полезно для обнаружения внутренних пустот, изменения толщины стенок или проверки соответствия профиля поперечного сечения фигуры эталону. object_name: именованный объект из show() (по умолчанию: текущая фигура).

Параметры
  • axisstring
  • num_slicesinteger
  • object_namestring
design_auditтолько чтение

Проверяет текущую программу сеанса как проект, а не просто форму: выявляет её именованные числовые параметры (Θ) и проверяет, насколько каждый из них устойчив к редактированию. Анализирует собранную программу (см. script()) на наличие присваиваний числовых значений верхнего уровня (например, plate_thickness = 5.0), затем перестраивает программу, изменяя каждый параметр на ±epsilon (по умолчанию ±10%) в строго ограниченном подпроцессе (текущий сеанс никогда не изменяется) и проверяет каждый результат через шлюз валидности. Возвращает JSON: {parameters, baseline, audit:[{name, value, perturbations:[{delta_pct (realized), new_value, discrete_step?, rebuilt, passes_gate, volume_delta_pct, reasons?}], brittle}], summary:{robust, brittle, inconclusive, ...}, note}. Параметр считается brittle, если небольшое изменение не приводит к перестройке или падает ниже шлюза валидности — режим отказа тонкой стенки / координационного рассуждения, когда валидная форма не является редактируемым проектом (Arko-T §6); параметр, переопределённый на верхнем уровне, считается inconclusive (возмущение перезаписывается) и не учитывается как устойчивый. Если именованные параметры не найдены, программа использует встроенные магические константы, и примечание рекомендует вынести их в блок параметров. Известное ограничение: только литеральные значения верхнего уровня отображаются как Θ — производный параметр (radius = diameter / 2) не отображается, хотя возмущение его вышестоящего литерала распространяется. Ограничено бюджетом реального времени и max_params (возвращает частичный отчёт, а не рискует тайм-аутом). epsilon: относительное возмущение, 0<epsilon<1. max_params: максимальное количество проверяемых параметров.

Параметры
  • epsilonnumber
  • max_paramsinteger
destroy_sessionидемпотентный

Закрывает CAD-сессию ЭТОГО клиента, отбрасывая его пространство имён, объекты и снимки, и освобождает рабочий подпроцесс. Следующий вызов инструмента прозрачно запускает новую сессию под тем же дескриптором. Используйте при полном отказе от модели; лучше используйте reset() для очистки геометрии с сохранением сессии. Действует только при использовании HTTP с настроенным дескриптором сессии.

Параметры

Без параметров.

execute

Выполняет код build123d Python в постоянной сессии. Ошибки содержат автоматические подсказки по исправлению — прочитайте их перед повторной попыткой. Используйте show(shape, name) для регистрации именованных объектов (по умолчанию name — 'shape'); show() сразу выводит объём и количество граней, подтверждая, что форма не пуста. После любой булевой операции (-, +, &) вызывайте measure(), чтобы убедиться в её успешности (проверьте topology.faces). named_face(shape, name) это встроенный помощник: named_face(box, 'top') возвращает грань с наибольшим Z, 'bottom'/'front'/'back'/'left'/'right' работают аналогично. find_edges(shape, geom='circle', radius=4.25, at_z=10.2, length=None, tol=0.05) фильтрует рёбра для выбора скругления/фаски и выводит, что совпало. Аналитические примитивы вызываются ВНУТРИ кода execute() и возвращают реальные Python-объекты, чтобы вы могли выполнять композицию (фильтрацию, арифметику) вместо копирования чисел из результата инструмента: measure(shape) -> dict (measure(part)['volume']), clearance(a, b) -> dict, cross_sections(shape) -> список {position,area}, find_holes(shape) -> записи отверстий с .location (кортеж (x,y,z)), .diameter, .depth, … ([h for h in find_holes(part) if h.location[0] < 5]); find_bosses(shape) / find_bored_bosses(shape) / find_countersinks(shape) / find_hole_patterns(shape) тоже возвращают записи распознавателя; align_check(a, b, axis='Z', mode='flush') -> dict (align_check(a,b)['delta'] — это float). Для автономных вызовов сравнения MCP используйте compare(a='axle', b='frame', kind='fit'), compare(a='a', b='b', kind='align'), compare(a='before', b='after', kind='shape') или compare(a='before', kind='snapshot'). shape по умолчанию равен текущей форме, а measure/clearance/cross_sections остаются ограниченными на больших формах. save_json(name, obj) записывает структурированные аналитические данные (инвентаризации граней, таблицы отверстий) в серверный временный файл и возвращает его путь — используйте это вместо вывода больших результатов; open()/os остаются заблокированными.

Параметры
  • codestringобязательный
execute_file

Execute a canonical build123d .py file in a clean namespace and atomically promote its result. The prior active model is restored if the source has a syntax/runtime error, times out, produces no shape, or does not produce result_name. Assign a Shape to result or call show(); optionally set result_name to require/register a specific Shape or BuildPart variable. snapshot saves the promoted geometry checkpoint. Returns source SHA-256 provenance plus captured output. The source must be UTF-8, under an allowed read root, and no larger than BUILD123D_MAX_SCRIPT_BYTES (default 2 MiB). Use this for substantial generation revisions: edit model.py, execute_file(), then validate/measure/render/export through MCP.

Параметры
  • pathstringобязательный
  • result_namestring
  • snapshotstring
exportидемпотентный

Экспортирует модель. Формат: step, stl, 3mf, dxf, svg или список, разделённый запятыми, например 'step,stl' или 'dxf,svg'. Трёхмерные тела (твёрдые тела) экспортируются в step/stl/3mf; двумерные фигуры (эскизы и размерные чертежи, созданные через build123d.drafting) экспортируются в dxf/svg. 3mf — это минимальный экспорт сетки по основной спецификации (один объект, без цвета/материала), предназначенный для слайсеров (Bambu Studio, PrusaSlicer, Orca) — используйте STEP для взаимодействия с CAD-системами. Смешивание 2D и 3D форматов для одной фигуры приводит к ошибке с понятным сообщением. object_name: именованный объект из show(), '' для экспорта всех именованных фигур как сборной сборки (по умолчанию: текущая фигура). Экспорт STEP переносит имена сеансов как метки — экспорт одного объекта использует object_name, экспорт '' создаёт Compound с меткой 'assembly', где каждый дочерний элемент помечен именем из show(). Инструменты CAD (FreeCAD, Fusion) увидят структурированную сборку с именованными телами. Используйте dxf для передачи инженерных чертежей в другие CAD-инструменты; svg — для встраивания в документы/вики. Результат выводит объём/габаритный контейнер/количество граней экспортированной фигуры (или габаритный контейнер/количество рёбер для 2D) в качестве финальной проверки, что записан правильный, невырожденный объект.

Параметры
  • filenamestringобязательный
  • formatstring
  • object_namestring
find_bored_bossesтолько чтение

Находит подходящие выступы с отверстиями и выдает информацию для выбора цели/редактирования: расположение отверстия, ось в деталь, наружная ось, диаметр/глубина отверстия, плоские торцевые поверхности у отверстия, разделена ли торцевая поверхность по нескольким граням, и рекомендации по конструированию. Используйте это перед тем, как удлинить квадратный или скругленный квадратный выступ с центральным отверстием; этот инструмент только для чтения и диагностический, а не подтверждение запрошенной цели.

Параметры
  • object_namestring
find_bossesтолько чтение

Распознаёт внешние цилиндрические боссы на объекте сессии (по умолчанию текущая форма), включая наружный диаметр точеной детали. Фильтрует по диаметру относительно контура детали только для локальных боссов. Возвращает JSON: {count, bosses: [{axis (основание в сторону свободного конца), location (точка свободного конца), diameter, height}].

Параметры
  • object_namestring
find_countersinksтолько чтение

Распознаёт зенковки (конические углубления под головку винта) на объекте сессии (по умолчанию текущая форма) — инструмент find_holes сообщает о них только как о простом отверстии. Зенковка - это внутренний конус, расширяющийся от просверленного канала к большему отверстию, соосный со сверлом; конусы острия сверла и наружные фаски исключаются. Возвращает JSON: {count, countersinks: [{location (центр отверстия), axis (внутрь детали), major_diameter (диаметр зенковки на поверхности), drill_diameter, included_angle (град, напр. 82/90/100/120), depth}]}. object_name: именованный объект из show() (по умолчанию: текущая форма).

Параметры
  • object_namestring
find_hole_patternsтолько чтение

Распознаёт шаблоны отверстий на объекте сессии (по умолчанию — текущая форма): ≥3 отверстий с одинаковыми характеристиками, равномерно расположенных по окружности → bolt_circle (center, diameter/BCD), коллинеарные с постоянным шагом → linear_array (pitch, direction). Возвращает JSON: {count, patterns: [{type, holes: [HoleFeature records], center/diameter | pitch/direction}]}. Каждое отверстие принадлежит не более чем одному шаблону; make_drawing уже аннотирует их автоматически.

Параметры
  • object_namestring
find_holesтолько чтение

Распознаёт просверленные отверстия на объекте сессии (по умолчанию — текущая форма). Коаксиальные внутренние цилиндры группируются в одну запись на отверстие: стопки сверление + зенковка + цековка, отверстия с пазом под шпонку и отверстия, прерываемые пересекающимися отверстиями, считаются один раз. Возвращает JSON: {count, holes: [{axis (направление сверления, единичный вектор), location (точка начала), diameter, depth (глубина от верхней части до дна; кончик сверла исключается), bottom: through|flat|drill_point|unknown, cbore: {diameter, depth}|null, spotface: {diameter, depth}|null}]}. Зенковки читаются как отверстия (а не как ступени); резьба и нецилиндрические элементы не распознаются.

Параметры
  • object_namestring
health_checkтолько чтение

Проверяет, что зависимости рендеринга и экспорта работают. Тестирует рендер PNG (VTK), рендер SVG (build123d HLR), экспорт STEP и экспорт STL на простой фигуре. Возвращает JSON с ok/error для каждой возможности. Выполните в начале сессии, если подозреваете отсутствующую зависимость.

Параметры

Без параметров.

import_cad_file

Импортирует файл STEP (.step/.stp), STL (.stl) или 3MF (.3mf) как именованный объект в сессии. path: абсолютный или относительный путь к файлу. name: имя для регистрации формы (по умолчанию — имя файла без расширения). Форма становится как именованным объектом, так и current_shape. Многообъектный 3MF регистрирует агрегат под name, а каждый элемент — как name_1, name_2 и т.д.; результат включает сводки топологии по элементам. После импорта используйте render_view() для визуализации формы, measure() для запросов геометрии или compare(a='imported', b='model', kind='shape') для сравнения с объектом show(). Примечание: импорт STL создаёт оболочку (volume=0), а не твёрдое тело. 3MF обычно даёт редактируемые твёрдые тела, если его сетки замкнуты, но вызывающий код должен проверять возвращаемые поля solids и volume, а не предполагать, что любая сетка корректна. Если в session.objects есть и исходная построенная форма, и импортированная копия, рендерите импортированную по имени (например, objects='mypart'), чтобы избежать артефактов Z-борьбы от двух совмещённых форм.

Параметры
  • namestring
  • pathstringобязательный
inspect_drawingтолько чтение

УСТАРЕЛО (#465) — перенесено в draftwright; по умолчанию отключено в 0.4.0, удалено в 0.5.0. Вызов объясняет замену. Структурированный отчет о ограничивающих рамках и аннотациях для 2D-чертежа. Два режима: 1. Сеансовый режим (по умолчанию): проверяет объекты, зарегистрированные через annotate()/show(). Возвращает ограничивающие рамки для каждого объекта, количество граней и вершин, метаданные аннотаций (строку метки, измеренную длину, кончик/основание выноски) и структурную проверку. 2. Режим SVG (svg_path задан): разбирает SVG-файл с диска и сообщает размер страницы, идентификаторы слоев, текстовое содержимое + позиции и количество элементов. Разделяет проверку и процесс сборки-регистрации — работает с SVG из любого источника (артефакты CI, сторонние экспорты, предыдущие запуски). Используйте annotate(result, name) вместо show(result.shape, name) при работе с build123d_drafting, чтобы метаданные были захвачены: from build123d_drafting import Dimension, Draft draft = Draft(font_size=2.5, decimal_precision=1) w = Dimension((-10, -20, 0), (10, -20, 0), "below", 8, draft, label="40") annotate(w, "width_dim") Для обычного build123d.ExtensionLine/DimensionLine передавайте метку явно: w = ExtensionLine(border=[...], offset=6, draft=draft, label="40") annotate(w, "width_dim", label="40") Аргументы: objects: имена объектов через запятую (по умолчанию: все). Только для сеансового режима. svg_path: путь к SVG-файлу на диске. Переключает в режим SVG.

Параметры
  • objectsstring
  • svg_pathstring
inspect_partтолько чтение

Возвращает одну компактную инвентаризацию контрольной точки генерации: bbox, количество сплошных/топологических элементов, отверстия, сгруппированные по оси/диаметру/глубине/днищу, выступы, сгруппированные по оси/диаметру/высоте, распознанные шаблоны с количеством элементов и профиль площади поперечного сечения. expected — это необязательный JSON-объект, полученный из чертежа/спецификации; поддерживаемые ключи: bbox [x,y,z], solid_count, списки групп отверстий/выступов/шаблонов, section_varying и tolerance. Группы шаблонов могут проверять тип, диаметр, шаг, направление, центр, количество элементов и диаметр элементов. Предоставленная категория признаков — точная инвентаризация: неожиданные или неоднозначно сопоставленные группы не проходят. При наличии ожиданий возвращает явные PASS/FAIL и несоответствия. Без них возвращает INVENTORY и эвристические предупреждения о мелких частичных разрезах и почти постоянных сечениях. Неподдерживаемые ключи ожиданий отклоняются; этот инструмент не содержит встроенных ожиданий для приспособлений.

Параметры
  • expectedstring
  • object_namestring
  • section_axisstring
  • section_slicesinteger
install_skill

Копирует навык рабочего процесса b123d в текущий проект. Записывает соответствующий файл конфигурации для запрошенного агента, чтобы пошаговый рабочий процесс был доступен в будущих сессиях. skill: какой рабочий процесс установить (по умолчанию "modeling") - drawing → УСТАРЕЛ; всё ещё устанавливается, но генерация чертежей переехала в draftwright, который публикует свой собственный навык (#465) - modeling → создание 3D-деталей и сборок (в т.ч. по техническим чертежам) - edit → изменение существующего кода build123d и проверка геометрических отклонений - repair → исправление тела, которое не проходит проверку геометрии target: один из "claude" (по умолчанию), "agents-md", "cursor", "windsurf" - claude → .claude/skills/<skill-dir>/SKILL.md (Claude Code) - agents-md → AGENTS.md (Codex CLI, Antigravity, GitHub Copilot, Cline) - cursor → .cursor/rules/<skill-dir>.mdc - windsurf → .windsurfrules force: перезаписать существующую установку (по умолчанию False)

Параметры
  • forceboolean
  • skillstring
  • targetstring
last_errorтолько чтение

Возвращает сведения о последнем неудачном вызове execute(): тип исключения, сообщение и (для ошибок времени выполнения и синтаксических ошибок) номер строки и фрагмент из 5 строк вокруг ошибочной строки. Ошибки безопасности включают сообщение, но без строки/фрагмента. Возвращает {"error": null}, если последний execute() выполнился успешно или ещё не было неудачных вызовов execute(). Вызывайте эту функцию сразу после ошибки execute(), чтобы получить точную ошибочную строку — это намного быстрее, чем повторное чтение отправленного кода.

Параметры

Без параметров.

lint_drawingтолько чтение

I see you've shared a snippet of documentation or a deprecation notice about a drawing-quality checking tool for build123d, along with some usage details. Since you haven't asked a specific question, I'll summarize what this is describing and then ask how I can help you with it. ## What this is about This appears to be a deprecation notice for a function or module that performs structural drawing-quality checks in build123d (a Python CAD library). The key points: - Deprecated: The feature is marked as deprecated (#465) and has been moved to a separate package/library called draftwright. - Timeline: It's off by default in version 0.4.0 and will be removed in 0.5.0. Calling the deprecated function presumably shows a message explaining the replacement. - Purpose: The tool runs checks on technical drawings (e.g., DXF exports) to detect issues like: - Label vs. measured dimension mismatches (e.g., axis swap) - Leader lines passing through labels - Overlapping annotations/labels - Lines extending beyond page bounds - Redundant collinear lines - Native <text> elements in SVGs (which don't export to DXF properly) - Modes: - Session mode (default): Reconstructs annotations and delegates to build123d-drafting-helpers (lint_drawing + find_interferences). - SVG mode: Scans SVG files for export-only issues. - Parameters: - drawing_scale – to account for scaled-up geometry before projection. - view_shape_names – to detect overlaps with view outlines. ## How can I help? Are you: - Wondering how to migrate to the new draftwright package? - Seeing this deprecation warning and unsure what to do? - Looking for help using the replacement library or the described checks? - Trying to understand the purpose or implementation of a specific check? Please let me know what you'd like to accomplish, and I'll provide more targeted guidance. If you're simply sharing this for informational purposes, feel free to ask any question you have about it!

Параметры
  • drawing_scalenumber
  • svg_pathstring
  • view_shape_namesstring[] | null
list_sessionsтолько чтение

Сообщает, сколько сессий CAD удерживает этот серверный процесс, его настроенный лимит и как долго каждая из них простаивает. Хэндлы секретны и никогда не возвращаются. Инструмент оператора/диагностики для развертываний HTTP: через stdio всегда существует ровно одна сессия.

Параметры

Без параметров.

locate_gate_defectsтолько чтение

Сообщает, ГДЕ твердое тело не проходит проверку валидности, с 3D-координатами — чтобы вы могли исправить конкретное ребро/грань, а не гадать. validate()/export() сообщают, ЧТО не так (например «1 неориентируемое ребро», «BRepCheck не пройден»), но не где; вызывайте этот инструмент, когда validate() НЕ ПРОХОДИТ, чтобы получить посписковый перечень дефектов: brep_invalid_face (индекс грани + центр + статус BRepCheck, например неориентируемая BSpline), open_edge / nonmanifold_edge (середина ребра B-Rep + faces_incident), сетка касается сама себя — режектор CAD отвергает — mesh_nonmanifold_edge (середина ребра) и mesh_nonmanifold_vertex (точка касания угол-к-углу), mesh_untriangulated_face (грань, которую не удаётся триангулировать при базовом допуске), mesh_refined_untriangulated_face (грань, которая не проходит только при более мелком допуске) — и mesh_vertex_deflection_defect (конечная точка триангулированного ребра, отстоящая от собственной вершины B-Rep больше, чем допуск сетки — патченная/восстановленная грань, чья граница топологически замкнута, но геометрически вершина смещена; BRepCheck и даже счётчик незамкнутых рёбер могут показывать чистоту, но собственная проверка сетки режектора CAD всё равно отклоняет её). Каждый дефект включает общую подсказку по исправлению и метаданные diagnostic_class / repair_family / next_step; блок diagnosis верхнего уровня подсчитывает виды дефектов и рекомендует следующий путь верификации. Пустой список означает, что деталь проходит структурные проверки. Выполняется вне процесса (проверка сетки), так что огромная деталь возвращает чистую ошибку бюджета, а не зависает. object_name: именованный объект из show() (по умолчанию: текущая форма).

Параметры
  • object_namestring
measureтолько чтение

Измеряет фигуру и возвращает полную геометрическую сводку: объём (мм³), площадь поверхности (мм²), топологию (количество граней/рёбер/вершин), ограничивающий параллелепипед с размерами по каждой оси и центром, объёмный центр масс, 6-компонентный тензор инерции (Ixx/Iyy/Izz/Ixy/Ixz/Iyz) и перечень типов граней, классифицирующий каждую грань как Plane/Cylinder/Cone/Sphere/Torus/BSpline с площадью и параметрами, зависящими от типа (например, диаметр и ось цилиндра); одинаковые грани свёртываются с указанием количества, неаналитические узкие грани объединяются в одну сводную строку. При проверке геометрии отдавайте предпочтение measure, а не render_view — числа однозначны. Топология — это самое быстрое подтверждение успешности булевой операции: неудачное вырезание оставляет количество граней/рёбер/вершин без изменений. object_name: именованный объект из show() (по умолчанию текущая фигура). density (г/см³) или предустановка материала (steel, stainless, aluminum/6061, brass, copper, titanium, abs, pla, petg, nylon) добавляет mass_g и масштабирует инерцию до истинных моментов массы в г·мм².

Параметры
  • densitynumber
  • materialstring
  • object_namestring
prepare_drawingтолько чтение

Prepare a raster engineering drawing for efficient inspection. Detects substantial spatial regions, saves one labelled overview plus readable PNG crops, and returns their pixel bounding boxes and paths. Region ids are layout evidence only: this tool does NOT label views, recognise CAD features, interpret lines, infer dimensions, or trace geometry. Use it once near the start instead of repeatedly writing shell/PIL crop scripts; inspect the returned overview and only the relevant crops. Printed dimensions remain authoritative. image_path: PNG/JPEG/TIFF drawing under an allowed read root. output_dir: crop directory under an allowed write root. max_regions: 1..30. padding: crop padding in pixels, 0..500.

Параметры
  • image_pathstringобязательный
  • max_regionsinteger
  • output_dirstring
  • paddinginteger
recognise_featuresтолько чтение

Run the shared b123d-recognisers inventory once and return exact, run-local edit evidence. With families='' the response is a compact inventory and targetable-family count; pass comma-separated families such as 'holes,bosses,blends' for structured records and @feature handles. Returned handles are usable inside execute() as recognition_faces(handle), or recognition_faces(handle, role='defining'), and fail if their source geometry has been replaced. coordinate_frame='caller' (default) preserves the imported model coordinates used by edit instructions; 'part' uses a rigid-equivariant part-relative frame and returns that frame. include_faces adds exact caller-face indices and geometry descriptors. max_features limits expanded records to 1..100; counts remain exact.

Параметры
  • coordinate_framestring
  • familiesstring
  • include_facesboolean
  • max_featuresinteger
  • object_namestring
render_drawingтолько чтение

УСТАРЕЛО (#465) — перенесено в draftwright; по умолчанию отключено в 0.4.0, удалено в 0.5.0. Вызов объясняет замену. Растеризует существующий SVG-файл в PNG через resvg. Дополняет render_view (которая принимает shapes из build123d из активной сессии), принимая SVG, записанный вне песочницы — обычно коротким Python-скриптом, который напрямую вызывает ExportSVG. PNG возвращается инлайн, чтобы LLM могла увидеть рисунок без необходимости открывать файл в другом инструменте. Аргументы: svg_path: путь к SVG-файлу на диске. width: ширина выходного изображения в пикселях (по умолчанию 1200); высота задаётся пропорциями SVG. save_to: необязательный путь для записи PNG. Если пусто, байты PNG передаются только инлайн.

Параметры
  • save_tostring
  • svg_pathstringобязательный
  • widthinteger
render_viewтолько чтение

Render model. Auto-detects 3D vs 2D: solids use VTK; flat drawings use the 2D pipeline. Renders confirm appearance, not geometry. format: png, svg, dxf, or both. direction accepts top, bottom, front, rear, side, left, right, or iso. quality: preview, standard, or high; a timed-out standard/high PNG automatically retries once as a coarse preview. azimuth/elevation apply after the preset. objects selects comma-separated registered names. clip_plane: x/y/z. save_to writes the result. mode: auto/2d/3d. label_objects and highlights add PNG labels; colors controls object/layer colours.

Параметры
  • azimuthnumber
  • clip_atnumber | null
  • clip_planestring
  • colorsobject | null
  • directionstring
  • elevationnumber
  • formatstring
  • highlightsobject[] | null
  • label_objectsboolean
  • modestring
  • objectsstring
  • qualitystring
  • save_tostring
repair_adviceтолько чтение

Возвращает структурированные, проверенные на практике рецепты исправления/редактирования, которые агент может явно выполнить в execute(). В отличие от repair_hints(), которая даёт короткие подсказки по конкретной ошибке, этот инструмент выдает последовательный план с именами шаблонов кода, проверками приёмки и условиями остановки. Передаёт полный текст validate()/export()/last_error() как error_text, предполагаемое изменение как goal, а также любые дополнительные замечания из locate_gate_defects()/compare(a='before', b='after', kind='shape') как context. Инструмент доступен только для чтения и не изменяет геометрию.

Параметры
  • contextstring
  • error_textstring
  • goalstring
repair_hintsтолько чтение

Принимает сообщение об ошибке или причину отказа валидации и возвращает целенаправленные предложения по исправлению распространённых ошибок build123d и отказов проверки: неправильный синтаксис Location, отсутствующий .part, идиомы CadQuery, заблокированные импорты, вырожденные результаты булевых операций, выбор граней для скругления, дефекты B-репа, ошибки не-многообразия/открытых кромок сетки и другие. Передайте полную строку ошибки из execute(), last_error(), validate() или export().

Параметры
  • error_textstringобязательный
resetидемпотентный

Очищает текущий сеанс до пустого состояния, включая все снимки.

Параметры

Без параметров.

resolveидемпотентный

Оценивает выражение селектора для именованного объекта и возвращает дескриптор геометрии. selector - суффикс выражения Python, применяемый к объекту, например '.faces().filter_by(Axis.Z).last()'. Если указан label, дескриптор сохраняется в session.geometry_refs[label] и появляется в session_state(). Возвращает JSON: {label, ref, object, selector, type, geom_type, area/length, center}. center - истинный центр сущности - центр дуги для кругового/эллиптического ребра, центроид площади в противном случае - не параметрическая середина, которая для окружности или цилиндра лежит НА сущности на расстоянии радиуса от её оси. Плоская грань также несёт нормаль; изогнутая грань вместо этого несёт ось {origin, direction} и радиус, потому что у изогнутой грани нет единой нормали (сфера не несёт ни того, ни другого - её центр и радиус говорят всё). Селектор со списком значений несёт count, агрегированный центр, усреднённый по каждому совпадению, и дескрипторы для каждой сущности в entities (первые 50, с entities_truncated, когда их больше). Поле ref использует формат @cad[object#label].

Параметры
  • labelstring
  • object_namestringобязательный
  • selectorstringобязательный
restore_snapshotидемпотентный

Восстанавливает геометрическое состояние из ранее сохранённого снимка (current_shape и реестр show()). Пространство имён переменных Python НЕ восстанавливается - вызовы execute(), сделанные после снимка, остаются в области видимости, но current_shape и все объекты show() возвращаются к тому состоянию, которое было на момент создания снимка. Вызывает ошибку, если имя снимка не существует.

Параметры
  • namestringобязательный
save_drawing_annotations

УСТАРЕЛО (#465) — перенесено в draftwright; отключено по умолчанию в 0.4.0, удалено в 0.5.0. Вызов объясняет замену. Записывает файл .dims.json рядом с SVG-файлом с метаданными разметки. build123d отображает текст как залитые глифы, а не как элементы <text> SVG, поэтому строки разметки невозможно восстановить из готового SVG. Вызывайте этот инструмент после завершения чертежа (размечайте все размеры и выноски с помощью annotate()) и до или после экспорта SVG. Соседний файл автоматически читается inspect_drawing(svg_path=...) для восстановления содержимого разметки. Рабочий процесс: 1. Постройте чертёж с помощью Dimension / Leader / annotate() 2. Экспортируйте SVG: execute("exporter.write('drawing.svg')") 3. Сохраните метаданные: save_drawing_annotations("drawing.svg") 4. Проверьте позже: inspect_drawing(svg_path="drawing.svg") → включает полный словарь разметки из соседнего файла Аргументы: svg_path: путь к SVG-файлу (соседний файл записывается как <svg_path>.dims.json).

Параметры
  • svg_pathstringобязательный
save_snapshotидемпотентный

Сохраняет именованную контрольную точку текущего геометрического состояния (current_shape и реестр объектов show()). Пространство имён переменных Python НЕ сохраняется, только геометрия. Вызывайте это перед рискованными экспериментами, чтобы восстановить заведомо исправную геометрию без повторного выполнения всех предыдущих вызовов execute().

Параметры
  • namestringобязательный
scriptтолько чтение

Возвращает один Python-скрипт, собранный из всех успешно выполненных блоков кода в этом сеансе. Добавляет 'from build123d import *', если его ещё нет. Если указан save_to, записывает скрипт по этому пути и возвращает {script_path, blocks}; в противном случае возвращает {script, blocks}. Полезен для экспорта воспроизводимого скрипта после интерактивного сеанса.

Параметры
  • save_tostring
session_stateтолько чтение

Возвращает структурированный JSON-снимок текущей сессии: метрики current_shape, все именованные объекты (заменяет list_objects) со статистикой геометрии, имена снимков и сводку переменных пространства имён Python (тип + объём для форм, тип + длина для коллекций, тип + значение для скаляров). Используйте это для ориентации после сброса, восстановления или многошаговой сборки, чтобы подтвердить, какие геометрия и переменные активны.

Параметры

Без параметров.

suggest_view_layoutтолько чтение

УСТАРЕЛО (#465) - перемещено в draftwright; отключено по умолчанию в 0.4.0, удалено в 0.5.0. Вызов этой функции объясняет замену. Автоматически вычисляет безопасные позиции VIEW_X / VIEW_Y для многовидового инженерного чертежа. Измеряет ограничивающий прямоугольник указанной фигуры и возвращает позиции на странице для каждого вида (VIEW_X, VIEW_Y), значения look_at и векторы camera/up для стандартной компоновки в третьем углу: [plan ] [ ] [front] [ side ] [ iso ] [ title (bottom-right) ] Возвращает JSON с: views: {name: {VIEW_X, VIEW_Y, half_w, half_h, look_at, camera, up}} free_space: {name: {above/below: {x, y, h}, left/right: {x, y, w}}} - пустой прямоугольник снаружи каждого края вида, ограниченный соседними видами, штампом и полями; перед размещением аннотаций предусмотрите размерные уровни (шаг n × уровень должен помещаться в h/w) warnings: список проблем компоновки (выход за границы, перекрытие штампа) suggestion: рекомендуемые page_w/page_h/scale, если компоновка не помещается Параметры: object_name: имя из show() - используйте "" для измерения текущей фигуры page_w/page_h: размер листа в мм (по умолчанию A4 альбомная 297×210) scale: масштаб чертежа (по умолчанию 1.0; используйте 2.0 для 2:1) views: подмножество ["front","plan","side","iso"] для размещения title_block_w/h: зарезервированная область внизу справа (по умолчанию 150×30 мм) margin: поле страницы в мм (по умолчанию 10) extents: [x, y, z] размеры детали в мм - раскладка по этим числам вместо объекта сеанса (используйте, когда деталь не загружена, например, при сбое импорта) centroid: [x, y, z] начало look_at при использовании extents (по умолчанию [0, 0, 0]) Точность: позиции front/plan/side точны для ортографической проекции. Позиция iso приблизительна (75% от диагонали 3D как полуэкстент) - проверьте с помощью render_view() и при необходимости подправьте вручную, если iso перекрывает соседний вид.

Параметры
  • centroidnumber[] | null
  • extentsnumber[] | null
  • marginnumber
  • object_namestring
  • page_hnumber
  • page_wnumber
  • scalenumber
  • title_block_hnumber
  • title_block_wnumber
  • viewsstring[] | null
validateтолько чтение

Проверяет, пройдёт ли форма проверку на валидность CAD перед экспортом. Возвращает вердикт PASS/FAIL и JSON (passes_gate, n_solids, volume, is_manifold, brep_valid, reasons). Проверка повторяет требования CAD-оценщиков и downstream-инструментов: корректное (BRepCheck), водонепроницаемое, многообразное тело с ненулевым объёмом. FAIL означает, что экспорт в STEP/STL будет сразу отклонён (например, CADGenBench оценит его в ноль), частые причины: оставшийся 2D-эскиз или незамкнутая оболочка в качестве текущей формы, несоединённый составной объект или вырожденный результат булевой операции. Выполняйте эту проверку непосредственно перед export() для любой детали, которую собираетесь отправить или передать. object_name: именованный объект из show() (по умолчанию текущая форма).

Параметры
  • object_namestring
versionтолько чтение

Возвращает установленные версии сервера build123d-mcp, его ключевых зависимостей (build123d, build123d-drafting-helpers) и сопутствующих пакетов, импортируемых внутри execute() (bd_warehouse для резьб/крепежа/шестерён/подшипников, augura для анализа печатаемости). Используйте это, чтобы проверить, какая сборка сервера запущена: например, чтобы узнать, присутствует ли определённая функция или исправление, или общается ли клиент с устаревшей установкой.

Параметры

Без параметров.

view_axesтолько чтение

УСТАРЕЛО (#465) — перенесено в draftwright; отключено по умолчанию в 0.4.0, удалено в 0.5.0. Вызов объясняет замену. Возвращает сопоставление осей мир→страница для вызова project_to_viewport, вычисляется аналитически (без выполнения проекции). Используйте это ДО рендеринга проекционного вида, чтобы подтвердить, какая ось мира попадает на какую ось страницы и с каким знаком — ловит перестановки осей вида снизу/сбоку до того, как они появятся в рендере. Возвращает JSON вида {"world_X": ["page_X", -1.0], "world_Y": ["page_Y", 1.0], "world_Z": ["depth", 0.0]} — для начала вида снизу (0,0,-100), ось X мира становится отрицательной осью X страницы. Аргументы: viewport_origin: позиция камеры, тот же аргумент, что и в project_to_viewport. viewport_up: вектор вверх. По умолчанию (0,1,0). look_at: целевая точка. По умолчанию начало координат.

Параметры
  • look_atnumber[] | null
  • viewport_originnumber[]обязательный
  • viewport_upnumber[] | null
workflow_hintsтолько чтение

Даёт рекомендации по эффективному использованию этих инструментов. Вызывайте в начале сессии или когда не знаете, какой инструмент выбрать.

Параметры

Без параметров.

Похожие MCP-сервера

mikan-atomoki/text-to-model

mikan-atomoki/text-to-model

MCP сервер TextToModel подключает Claude к Fusion 360: по текстовому описанию создает 3D-модели с помощью 64 CAD-инструментов (эскизы, JIS-детали и другое). Полезен для инженеров и дизайнеров, рабо...

Python6
mcpware/ui-annotator-mcp

mcpware/ui-annotator-mcp

MCP сервер, который через обратный прокси добавляет на любую веб-страницу визуальные подписи ко всем элементам. Наведите курсор – увидите имя, селектор и размеры. Теперь вы и AI говорите на одном я...

JavaScript16
ahujasid/blender-mcp

ahujasid/blender-mcp

BlenderMCP подключает Claude AI к Blender через Model Context Protocol, позволяя управлять 3D-сценами голосом или текстом. Создавайте, редактируйте объекты, применяйте материалы и выполняйте Python...

Python28091
GLips/Figma-Context-MCP

GLips/Figma-Context-MCP

Framelink MCP для Figma даёт AI-ассистентам вроде Cursor доступ к макетам из Figma. Сервер упрощает данные дизайна, передавая только релевантную информацию о расположении и стилях — так модель точн...

TypeScript15834
themesberg/flowbite-mcp

themesberg/flowbite-mcp

MCP сервер для работы с компонентами Flowbite на Tailwind CSS. Даёт доступ к 60+ UI-элементам, умеет генерировать тему по hex-цвету и превращать Figma-макет в код. Помогает разработчикам быстрее создавать интерфейсы.

JavaScript41
mhmzdev/Figma-Flutter-MCP

mhmzdev/Figma-Flutter-MCP

Figma to Flutter MCP Server извлекает дизайн-данные из Figma (компоненты, стили, макеты) и передает их в AI-агент для генерации Flutter-кода. Ускоряет реализацию интерфейсов, работает в Cursor и др...

TypeScript244
© Каталог MCP, 2026. Все права защищены.
Проект не аффилирован с Anthropic и любыми упомянутыми продуктами.
Все названия и торговые марки принадлежат их владельцам.
Контакты для связи: hi@mcp-katalog.ru

Лука Никитин