Skip to content

MCP tools

The server exposes 26 tools. Each relays to the app's REST API, so they behave like the equivalent action in the UI. All take a project_id. The payloads execute_command accepts are in the command catalog.

One write path

execute_command is the only tool that changes a project. Everything else is a read and is safe to call at any time.

The run_* and slice_* tools go through the app's job registry and poll until the run finishes. They obey the one-expensive-job-per-project rule: if another job holds the project they return {"error": ...} instead of queueing.

Catalog and execution

Tool Signature Returns
get_command_catalog () The command type / payload JSON schemas execute_command accepts. Versioned with the app, so it is the authority on what this deployment takes.
execute_command (project_id, type, payload) Applies one command. status is accepted (with new_revision) or rejected (with a structured reason). project_id is filled in automatically; retries once on a stale revision.

Inspect the model

Tool Signature Returns
get_model_tree (project_id) Parts, sketches, features and their rebuild statuses.
get_assembly_overview (project_id, assembly_id=None) Per assembly: its parts (bounding box, feature/instance counts), sub-assembly occurrences with their placements, and composed bounding boxes. The first call to orient in a multi-part or nested project, before drilling into one part.
get_motion_state (project_id, assembly_id) Every joint in an assembly: current position (angle in degrees, offset in mm, measured from where the joint was created) and its travel limits (null when unbounded). Read it back after assembly.joint.set_value to confirm the mechanism moved.
get_diagnostics (project_id) Features in a non-ok rebuild state (failed, warning, unresolved_reference, stale) with structured diagnostics.
get_topology (project_id, part_id) A part's faces (id, surface type, centroid, normal, area, bbox, cylinder info), edge count and bounding box. The starting point for finding geometry to edit.
find_entities (project_id, part_id, entity, ...) Selects faces or edges by predicate (surface/curve type, normal axis, area/length/radius bounds, internal-cylinder, extreme position) instead of guessing indices. The best way to target a hole, top face or fillet edge. A filter belonging to the other entity type (cyl_internal on an edge query) is rejected rather than quietly matching nothing.
get_sketch (project_id, part_id, sketch_id) A sketch's elements (type plus 2D params), its plane and constraint count.
get_command_log (project_id, limit=20) Recent commands (type, actor, payload, status, new revision, rejection). Useful to see what just happened or to replay a command.
list_parameters (project_id) Named parameters and their resolved values.
get_screenshot (project_id, view="multiview", width=1024, height=768) Renders the model to a PNG. multiview is a 2x2 orthographic sheet (front, top, right, iso); pass a single view (front, back, top, bottom, left, right, iso) when that is enough. Use it to check proportions and that features landed where you meant.

Resolve reference geometry

Tool Signature Returns
get_face_plane (project_id, part_id, face_id) A planar face's sketch plane {origin, normal, x_dir}, ready to pass as a plane_def. Errors for non-planar faces.
get_face_axis (project_id, part_id, face_id) A cylindrical or conical face's axis {axis_origin, axis_dir, radius, internal, half_angle?}. internal: true is a hole. Use for concentric cuts, revolve, circular pattern or mirror.
get_part_references (project_id, part_id) Inferred reference geometry: datum_planes, axes, holes (through or blind, with any counterbore/countersink step) and recognized fillets / chamfers. A starting point for remodeling imported STEP parts; empty for reference-only meshes.

Measure and estimate

Tool Signature Returns
measure (project_id, part_id, kind, ...) volume returns volume, surface area and center of mass; distance the minimum distance between two entities; angle the angle between them. Entity ids come from get_topology.
estimate_spacing (project_id, part_id, mode, ...) Size-aware pattern spacing so copies do not overlap. linear returns extent and suggested spacing, circular extent and suggested radius. Advisory.
diff_parts (project_id, part_a_id, part_b_id) Geometric diff of two solids overlaid at their local origins: added_volume, removed_volume, common_volume, symmetric_difference_volume and match_ratio (1.0 = identical). Verifies a parametric remodel against an imported reference. Solids only.
check_interference (project_id, assembly_id=None, part_ids=None) Body pairs tested where the assembly places them, each positioned through its occurrence chain, so a part used several times is checked at each position. Each pair is clash (with volume in mm³), touch, clear (with the gap in mm) or failed. Defaults to every root assembly.

Simulation

Tool Signature Returns
list_stress_studies (project_id, part_id) The stress studies on a part (id, name, fixtures, loads). Call before running one.
run_stress_study (project_id, part_id, study_id) Runs a linear-static study: max von Mises, max displacement, min safety factor and per-face max stress. Define the study first with simulation.create.
list_flow_studies (project_id, part_id) The flow studies on a part (id, name, mode, fluid, domain, resolution). Define them with flow.create.
run_flow_study (project_id, part_id, study_id) Runs a flow study and returns its scalars and diagnostics. Both modes give force_n and moment_n_mm; rotation adds flow_rate_mm3_s and torque_n_mm. Takes minutes (one to ten by resolution preset). It is a design-stage trend tool: a rotating body's torque holds its sign and order of magnitude under refinement, not its figure.

See Materials and stress simulation for the workflow these mirror.

Fabrication

Tool Signature Returns
list_slice_setups (project_id, part_id) {printers, setups} for the project and part. Define them with slicer.printer.create and slicer.setup.create. Part-scoped; there is no assembly-level equivalent.
slice_part (project_id, part_id, setup_id) Slices a part: stats (layer count, object height, estimated time, filament mm/g, per-role breakdowns), warnings and bed placement. Filament settings come from the part's material; without a printable one it slices as generic PLA and warns. The layer preview is omitted here.