Tool tree
gradeNot graded
page: Every page
cad.new_projectAction
Create and open one fresh Cadding project for this agent session. Repeated calls reuse the same editor project. Set forceNew only when the user explicitly asks for another separate project.
View tool JSON
{
"name": "cad.new_project",
"kind": "act",
"impl": "imperative",
"description": "Create and open one fresh Cadding project for this agent session. Repeated calls reuse the same editor project. Set forceNew only when the user explicitly asks for another separate project.",
"inputSchema": {
"type": "object",
"properties": {
"forceNew": {
"type": "boolean",
"description": "Create another separate project instead of reusing the current agent editor. Use only when the user explicitly requests a new additional project.",
"default": false
}
},
"additionalProperties": false
},
"page": "/"
}cad.open_editorAction
Open a fresh public Cadding editor project. This compatibility alias behaves like cad.new_project.
View tool JSON
{
"name": "cad.open_editor",
"kind": "act",
"impl": "imperative",
"description": "Open a fresh public Cadding editor project. This compatibility alias behaves like cad.new_project.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"page": "/"
}cad.get_editor_linkAction
Return a shareable Cadding link. For a guest browser scene, persist a copy as an account-free MCP editor link; signed-in account-project sharing remains available through the Share UI.
View tool JSON
{
"name": "cad.get_editor_link",
"kind": "act",
"impl": "imperative",
"description": "Return a shareable Cadding link. For a guest browser scene, persist a copy as an account-free MCP editor link; signed-in account-project sharing remains available through the Share UI.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"page": "/"
}page: Editor
cad.add_shapeAction
Create one primitive part. The primitive kind is the shape parameter; tube and ring are not operations. Sphere, hemisphere, and cylinder are the starting mass for curved shells that later boolean_parts will isolate — do not skip them in favor of a planar extrude when the body is not flat.
View tool JSON
{
"name": "cad.add_shape",
"kind": "act",
"impl": "imperative",
"description": "Create one primitive part. The primitive kind is the shape parameter; tube and ring are not operations. Sphere, hemisphere, and cylinder are the starting mass for curved shells that later boolean_parts will isolate — do not skip them in favor of a planar extrude when the body is not flat.",
"inputSchema": {
"type": "object",
"title": "add_shape",
"description": "Arguments for add_shape.",
"properties": {
"shape": {
"type": "string",
"description": "Primitive shape. Use hollow_cylinder for a tube and torus for a ring.",
"enum": [
"box",
"rounded_box",
"sphere",
"cylinder",
"half_cylinder",
"cone",
"truncated_cone",
"torus",
"ring",
"disk",
"tube",
"pipe",
"pyramid",
"wedge",
"hexagon",
"octagon",
"star",
"gear",
"heart",
"lightning",
"arrow",
"moon",
"leaf",
"diamond",
"shield",
"clover",
"petal",
"dome",
"capsule",
"plane",
"prism",
"ellipsoid",
"hemisphere",
"paraboloid",
"hyperboloid",
"frustum_pyramid",
"helix",
"thread",
"rounded_cylinder",
"cylinder_arc",
"curved_tube",
"angle",
"text",
"tetrahedron",
"octahedron",
"dodecahedron",
"icosahedron",
"bolt",
"screw",
"hollow_cylinder",
"frustum",
"regular_polygon"
]
},
"name": {
"type": "string",
"description": "Display name for the new part."
},
"componentId": {
"type": "string",
"description": "Opaque owner/component ID."
},
"parameters": {
"type": "object",
"description": "Shape-specific dimensions and controls. Use the keys documented by the selected shape. For ring/torus: majorRadiusMm, minorRadiusMm, axis (\"z\" for flat on plate), and optional Sweep arc (radians) or arcDeg — 2π/360 full, 3π/2/270 three-quarter, π/180 half, π/2/90 quarter.",
"default": {
"widthMm": 40,
"depthMm": 30,
"heightMm": 20
},
"additionalProperties": true
},
"positionMm": {
"type": "array",
"description": "Exact CAD position [x, y, z] in millimeters.",
"default": [
0,
0,
0
],
"items": {
"type": "number"
}
},
"rotationDeg": {
"type": "array",
"description": "Exact CAD rotation [x, y, z] in degrees.",
"default": [
0,
0,
0
],
"items": {
"type": "number"
}
},
"color": {
"type": "string",
"description": "Hex color."
},
"parentPartId": {
"type": "string",
"description": "Optional GROUP id to nest under. It must resolve to type=group; never pass a solid enclosure/body id because that makes the child a boolean operand and destroys separate appearance. Use boolean_parts for real unions/subtractions. When replacing a nested body, pass its deleted parent only when that parent is a group."
}
},
"required": [
"shape"
],
"additionalProperties": false
},
"page": "/editor"
}cad.add_tube_betweenAction
Create a straight tube whose local axis is automatically oriented from startMm to endMm in the fixed CAD frame (+Z up). Use this for handles, pipes, axles, struts, and cable runs when a bent sweep is unnecessary. Do not manually guess Euler rotationDeg.
View tool JSON
{
"name": "cad.add_tube_between",
"kind": "act",
"impl": "imperative",
"description": "Create a straight tube whose local axis is automatically oriented from startMm to endMm in the fixed CAD frame (+Z up). Use this for handles, pipes, axles, struts, and cable runs when a bent sweep is unnecessary. Do not manually guess Euler rotationDeg.",
"inputSchema": {
"type": "object",
"title": "add tube between points",
"description": "Arguments for add_tube_between.",
"properties": {
"startMm": {
"type": "object",
"description": "CAD start point {x,y,z} or [x,y,z] in millimeters.",
"additionalProperties": true
},
"endMm": {
"type": "object",
"description": "CAD end point {x,y,z} or [x,y,z] in millimeters.",
"additionalProperties": true
},
"outerRadiusMm": {
"type": "number",
"description": "Outer tube radius in millimeters."
},
"wallThicknessMm": {
"type": "number",
"description": "Wall thickness in millimeters. Omit or set 0 for a solid rod."
},
"name": {
"type": "string",
"description": "Optional part name."
},
"componentId": {
"type": "string",
"description": "Opaque owner/component ID for deterministic coverage tracking."
},
"color": {
"type": "string",
"description": "Hex color."
},
"parentPartId": {
"type": "string",
"description": "Optional GROUP id to nest under."
}
},
"required": [
"startMm",
"endMm",
"outerRadiusMm"
],
"additionalProperties": false
},
"page": "/editor"
}cad.add_constructionAction
Create one editable, reusable construction family as a coherent parametric part tree. This is the preferred fast path for common mechanical roots such as shells, brackets, hole patterns, bosses, bushings, shafts, wheels, clamps, hinges, lids, snap-fits, threads, adapters, rails, gears, pulleys, bearing holders, knobs, hooks, and flanges. Dimensions inside parameters are millimeters. The result stays editable through its Construction parameters. Hole Pattern creates subtractive cutter geometry; use boolean_parts mode=subtract to apply it to a host.
View tool JSON
{
"name": "cad.add_construction",
"kind": "act",
"impl": "imperative",
"description": "Create one editable, reusable construction family as a coherent parametric part tree. This is the preferred fast path for common mechanical roots such as shells, brackets, hole patterns, bosses, bushings, shafts, wheels, clamps, hinges, lids, snap-fits, threads, adapters, rails, gears, pulleys, bearing holders, knobs, hooks, and flanges. Dimensions inside parameters are millimeters. The result stays editable through its Construction parameters. Hole Pattern creates subtractive cutter geometry; use boolean_parts mode=subtract to apply it to a host.",
"inputSchema": {
"type": "object",
"title": "add construction family",
"description": "Arguments for add_construction.",
"properties": {
"family": {
"type": "string",
"description": "Construction family. Use get_construction_catalog(family) when exact parameters or option values are not already known.",
"enum": [
"shell_body",
"bracket",
"hole_pattern",
"boss_standoff",
"bushing_spacer",
"shaft_pin",
"wheel",
"clamp",
"hinge",
"lid",
"snap_fit",
"threaded_connection",
"adapter",
"rail_slider",
"gear",
"pulley",
"bearing_holder",
"knob",
"hook",
"flange"
]
},
"name": {
"type": "string",
"description": "Optional Layers name for this family instance."
},
"parameters": {
"type": "object",
"description": "Family-specific parameters. All dimensional values, including position arrays inside structured fields, are millimeters; angles are degrees; counts and ratios are unitless.",
"default": {},
"additionalProperties": true
},
"positionMm": {
"type": "array",
"description": "Exact instance position [x, y, z] in millimeters. Omit for safe automatic placement.",
"items": {
"type": "number"
}
},
"rotationDeg": {
"type": "array",
"description": "Exact instance rotation [x, y, z] in degrees.",
"items": {
"type": "number"
}
},
"placementFrame": {
"type": "object",
"description": "Optional placement frame with positionMm/originMm and rotationDeg. Top-level positionMm/rotationDeg win.",
"additionalProperties": true
},
"targetPartId": {
"type": "string",
"description": "Optional related target part. The relationship is recorded for later CAD operations; geometry is not silently fused or cut. Use boolean_parts or assemble explicitly."
},
"targetFace": {
"type": "string",
"description": "Optional target face identifier associated with targetPartId."
},
"parentPartId": {
"type": "string",
"description": "Optional GROUP id to nest the new family under."
},
"color": {
"type": "string",
"description": "Hex color."
}
},
"required": [
"family",
"parameters"
],
"additionalProperties": false
},
"page": "/editor"
}cad.add_robot_partAction
Create one of the verified robotics building blocks. Dimensions inside parameters are millimeters; hole positions are millimeter pairs. These are intentionally simple parts for reliable AI assembly planning.
View tool JSON
{
"name": "cad.add_robot_part",
"kind": "act",
"impl": "imperative",
"description": "Create one of the verified robotics building blocks. Dimensions inside parameters are millimeters; hole positions are millimeter pairs. These are intentionally simple parts for reliable AI assembly planning.",
"inputSchema": {
"type": "object",
"title": "add robot part",
"description": "Arguments for add_robot_part.",
"properties": {
"part": {
"type": "string",
"description": "Robot part type.",
"enum": [
"wheel",
"axle",
"spacer",
"standoff",
"l_bracket",
"u_bracket",
"mounting_bracket",
"motor_mount",
"servo_bracket",
"bearing_block",
"shaft_coupler",
"hub",
"linkage",
"servo_horn",
"chassis_plate",
"electronics_tray",
"battery_holder",
"sensor_bracket",
"washer",
"hex_nut",
"socket_head_screw",
"countersunk_screw",
"threaded_insert",
"shaft_collar",
"retaining_ring",
"clevis_pin",
"dowel_pin",
"r_clip",
"flange",
"o_ring",
"rubber_foot",
"vibration_mount",
"caster_wheel",
"cable_clamp",
"cable_gland",
"cable_tie_mount",
"pcb_clip",
"t_slot_extrusion"
]
},
"name": {
"type": "string",
"description": "Optional part name."
},
"parameters": {
"type": "object",
"description": "Part-specific dimensions in millimeters.",
"additionalProperties": true
},
"positionMm": {
"type": "array",
"description": "Exact position [x,y,z] in millimeters.",
"items": {
"type": "number"
}
},
"rotationDeg": {
"type": "array",
"description": "Exact rotation [x,y,z] in degrees.",
"items": {
"type": "number"
}
},
"color": {
"type": "string",
"description": "Hex color."
}
},
"required": [
"part",
"parameters"
],
"additionalProperties": false
},
"page": "/editor"
}cad.add_profile_shapeAction
Create geometry from a profile, sketch, image trace, revolve, sweep, or loft. method=trace_image is only for a user-requested trace of a verified orthographic/planar true prism; extrude is only for a true prism (both large faces planar AND parallel, thickness = one extrude axis). Do not trace a general perspective product photo as a substitute for reconstructing its 3D form. Do not flatten a cupped wall into an extruded 2D outline, and do not fake a lean with extra rotationDeg — that mapping is sketch-plane onto CAD axes only (typically 90° about one axis). Circular-pattern phase belongs on pattern_parts. Curved shells use method=revolve or loft, or add_shape primitives plus boolean_parts. Prefer add_shape cylinder|truncatedCone|tube (or shell_part) when the axisymmetric wall is constant radius or a single linear taper with a coaxial bore — do not invent a custom revolve meridian or high radialSegments for that case. For a vessel with a genuinely changing meridian, use revolve with an outer meridian only, shell="hollow", openTop=true, openBottom=false, wallThicknessMm, and radialSegments ≤ 64; do not use a primary mouth cutter. For a handle/grip/loop/spout, use sweep with either absolute pathPointsMm or startMm/endMm plus optional viaPointsMm, pathMode="curve", profileKind="circle", tubeRadiusMm, and endpoints penetrating the host; do not follow that authored sweep with a generic mate_parts call.
View tool JSON
{
"name": "cad.add_profile_shape",
"kind": "act",
"impl": "imperative",
"description": "Create geometry from a profile, sketch, image trace, revolve, sweep, or loft. method=trace_image is only for a user-requested trace of a verified orthographic/planar true prism; extrude is only for a true prism (both large faces planar AND parallel, thickness = one extrude axis). Do not trace a general perspective product photo as a substitute for reconstructing its 3D form. Do not flatten a cupped wall into an extruded 2D outline, and do not fake a lean with extra rotationDeg — that mapping is sketch-plane onto CAD axes only (typically 90° about one axis). Circular-pattern phase belongs on pattern_parts. Curved shells use method=revolve or loft, or add_shape primitives plus boolean_parts. Prefer add_shape cylinder|truncatedCone|tube (or shell_part) when the axisymmetric wall is constant radius or a single linear taper with a coaxial bore — do not invent a custom revolve meridian or high radialSegments for that case. For a vessel with a genuinely changing meridian, use revolve with an outer meridian only, shell=\"hollow\", openTop=true, openBottom=false, wallThicknessMm, and radialSegments ≤ 64; do not use a primary mouth cutter. For a handle/grip/loop/spout, use sweep with either absolute pathPointsMm or startMm/endMm plus optional viaPointsMm, pathMode=\"curve\", profileKind=\"circle\", tubeRadiusMm, and endpoints penetrating the host; do not follow that authored sweep with a generic mate_parts call.",
"inputSchema": {
"type": "object",
"title": "add_profile_shape",
"description": "Arguments for add_profile_shape.",
"properties": {
"method": {
"type": "string",
"description": "Construction method. trace_image requires an explicit user trace request and a verified orthographic/planar true-prism view; extrude also requires a true prism (planar AND parallel large faces). For ordinary perspective reference images, reconstruct the full visible 3D form instead. extrude/sketch_extrude requires parameters.profilePointsMm, segments, or profilePreset on the call. Extra rotationDeg is not a substitute for curvature; pattern phase is pattern_parts, not the prototype. If the wall cups, use revolve/loft or add_shape + boolean_parts. Use sweep for a constant-section member along a bent 3D path. Prefer parameters.startMm + parameters.endMm + optional parameters.viaPointsMm for a simple handle; use parameters.pathPointsMm for a multi-waypoint route. All points are absolute CAD x=right,y=front/back,z=up millimeters. Use pathMode=curve for an intentional smooth bend, profileKind=circle|rect, and tubeRadiusMm or rectWidthMm/rectDepthMm. Authored sweep endpoints should contact the host directly, so generic mate_parts is normally unnecessary and unsafe.",
"enum": [
"extrude",
"trace_image",
"sketch_extrude",
"revolve",
"sweep",
"loft"
]
},
"name": {
"type": "string",
"description": "Display name for the new part."
},
"componentId": {
"type": "string",
"description": "Opaque owner/component ID."
},
"guideMode": {
"type": "string",
"description": "Loft guide interpolation. Use spline with guidePointsMm for a smooth centripetal spline rail; omit it or use polyline for straight station interpolation.",
"enum": [
"polyline",
"spline"
]
},
"parameters": {
"type": "object",
"description": "Method-specific profile, path, section, and dimension data. Millimeter suffixes are authoritative. For method=extrude/sketch_extrude, set profilePlane=\"XY\" for a top/footprint outline or \"XZ\" for a side/elevation outline (U/V map to the named CAD plane; extrudeDepthMm is perpendicular to that plane). For method=trace_image, require an explicit user trace request and a verified orthographic/planar true-prism view; only then set useReferenceImage=true and extrudeDepthMm (and optional referenceWidthMm/widthMm). For ordinary perspective product photos, reconstruct the 3D geometry instead of tracing. Use silhouettePrompt / isolateFromReference only to isolate one explicitly named component from a multi-object photo, or when no photo is attached and silhouette generation is explicitly requested. For method=revolve: parameters.segments is the visible outer wall as EDGES (Umm=radius from the spin axis, Vmm=height along CAD +Z), bottom→top. One line per straight run; arc/bezier (midUmm/midVmm on the curve) for blends; two meeting lines for a sharp corner. Do not sample a curve as many short lines (that lathes into stacked rings). Do not include the inner wall or axis-seal points — set shell/openTop/openBottom instead. Call-level radiusMm/axialHeightMm are envelope fallbacks only when segments are omitted.",
"default": {},
"additionalProperties": true
},
"positionMm": {
"type": "array",
"description": "Exact CAD position [x, y, z] in millimeters.",
"default": [
0,
0,
0
],
"items": {
"type": "number"
}
},
"rotationDeg": {
"type": "array",
"description": "Exact CAD rotation [x, y, z] in degrees.",
"default": [
0,
0,
0
],
"items": {
"type": "number"
}
},
"color": {
"type": "string",
"description": "Hex color."
},
"targetPartId": {
"type": "string",
"description": "Optional host/body id for an attached sweep or other profile member. Use the exact live id from scene context or an explicit result alias such as \"$handle\"; never use latest-created/prototype order or a display name. This records the intended relationship; sweep endpoints still define the exact placement."
},
"targetFace": {
"type": "string",
"description": "Optional host face id for the attached profile member; inspect the host first and do not guess."
},
"parentPartId": {
"type": "string",
"description": "Optional GROUP id to nest under. It must resolve to type=group; never pass a solid enclosure/body id because that makes the child a boolean operand and destroys separate appearance. Use boolean_parts for real unions/subtractions. When replacing a nested body, pass its deleted parent only when that parent is a group."
}
},
"required": [
"method"
],
"additionalProperties": false
},
"page": "/editor"
}cad.inspect_partAnswer
Read exact transform, dimensions, bounds, faces, face frames, edges, vertices, hierarchy, and editable parameters. Revolve and extrusion parts include profilePointsMm; loft parts include pointsAMm/pointsBMm and loftHeightMm for a later edit_part / set_dimensions reshape.
View tool JSON
{
"name": "cad.inspect_part",
"kind": "answer",
"impl": "imperative",
"description": "Read exact transform, dimensions, bounds, faces, face frames, edges, vertices, hierarchy, and editable parameters. Revolve and extrusion parts include profilePointsMm; loft parts include pointsAMm/pointsBMm and loftHeightMm for a later edit_part / set_dimensions reshape.",
"inputSchema": {
"type": "object",
"title": "get part",
"description": "Arguments for inspect_part.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
}
},
"required": [
"targetPartId"
],
"additionalProperties": false
},
"page": "/editor"
}cad.get_sceneAnswer
Read every live part, hierarchy relationship, transform, dimensions, visibility, and stable ID in the current scene.
View tool JSON
{
"name": "cad.get_scene",
"kind": "answer",
"impl": "imperative",
"description": "Read every live part, hierarchy relationship, transform, dimensions, visibility, and stable ID in the current scene.",
"inputSchema": {
"type": "object",
"title": "get scene",
"description": "Arguments for get_scene.",
"properties": {},
"additionalProperties": false
},
"page": "/editor"
}cad.get_construction_catalogAnswer
Read the authoritative construction-family defaults, units, options, and full parameter vocabulary before creating a precision family.
View tool JSON
{
"name": "cad.get_construction_catalog",
"kind": "answer",
"impl": "imperative",
"description": "Read the authoritative construction-family defaults, units, options, and full parameter vocabulary before creating a precision family.",
"inputSchema": {
"type": "object",
"title": "get construction catalog",
"description": "Arguments for get_construction_catalog.",
"properties": {
"family": {
"type": "string",
"description": "Optional family filter. Omit to list all families.",
"enum": [
"shell_body",
"bracket",
"hole_pattern",
"boss_standoff",
"bushing_spacer",
"shaft_pin",
"wheel",
"clamp",
"hinge",
"lid",
"snap_fit",
"threaded_connection",
"adapter",
"rail_slider",
"gear",
"pulley",
"bearing_holder",
"knob",
"hook",
"flange"
]
}
},
"additionalProperties": false
},
"page": "/editor"
}cad.get_robot_part_catalogAnswer
Read the verified robotics building-block catalog and millimeter defaults.
View tool JSON
{
"name": "cad.get_robot_part_catalog",
"kind": "answer",
"impl": "imperative",
"description": "Read the verified robotics building-block catalog and millimeter defaults.",
"inputSchema": {
"type": "object",
"title": "get robot part catalog",
"description": "Arguments for get_robot_part_catalog.",
"properties": {
"part": {
"type": "string",
"description": "Optional robot part filter.",
"enum": [
"wheel",
"axle",
"spacer",
"standoff",
"l_bracket",
"u_bracket",
"mounting_bracket",
"motor_mount",
"servo_bracket",
"bearing_block",
"shaft_coupler",
"hub",
"linkage",
"servo_horn",
"chassis_plate",
"electronics_tray",
"battery_holder",
"sensor_bracket",
"washer",
"hex_nut",
"socket_head_screw",
"countersunk_screw",
"threaded_insert",
"shaft_collar",
"retaining_ring",
"clevis_pin",
"dowel_pin",
"r_clip",
"flange",
"o_ring",
"rubber_foot",
"vibration_mount",
"caster_wheel",
"cable_clamp",
"cable_gland",
"cable_tie_mount",
"pcb_clip",
"t_slot_extrusion"
]
}
},
"additionalProperties": false
},
"page": "/editor"
}cad.get_component_kitAnswer
Read the required functional hardware and interface checklist for a production-oriented product profile. Use this before building a chair, robot, wallet, pen, or other multi-part product so connections, supports, retention, and cable interfaces are explicit.
View tool JSON
{
"name": "cad.get_component_kit",
"kind": "answer",
"impl": "imperative",
"description": "Read the required functional hardware and interface checklist for a production-oriented product profile. Use this before building a chair, robot, wallet, pen, or other multi-part product so connections, supports, retention, and cable interfaces are explicit.",
"inputSchema": {
"type": "object",
"title": "get production component kit",
"description": "Arguments for get_component_kit.",
"properties": {
"product": {
"type": "string",
"description": "Product profile. Omit for the universal hardware checklist.",
"enum": [
"universal",
"chair",
"robot",
"ledger_wallet",
"pen",
"coffee_machine",
"game_controller"
]
}
},
"additionalProperties": false
},
"page": "/editor"
}cad.get_mcmaster_catalogAnswer
List curated preferred McMaster hardware (M3 screws, nuts, USB-C, etc.) plus any live-fetched cache. Not the full McMaster site — search by query (e.g. "m3 screw", "usb-c") then place with add_mcmaster_part.
View tool JSON
{
"name": "cad.get_mcmaster_catalog",
"kind": "answer",
"impl": "imperative",
"description": "List curated preferred McMaster hardware (M3 screws, nuts, USB-C, etc.) plus any live-fetched cache. Not the full McMaster site — search by query (e.g. \"m3 screw\", \"usb-c\") then place with add_mcmaster_part.",
"inputSchema": {
"type": "object",
"title": "get McMaster catalog",
"description": "Arguments for get_mcmaster_catalog.",
"properties": {
"query": {
"type": "string",
"description": "Optional part number or name filter."
},
"partNumber": {
"type": "string",
"description": "Exact part number filter (alias of query)."
},
"partFamily": {
"type": "string",
"description": "Optional physical family filter such as motor, connector, wheel, cable_harness, or fastener."
},
"manufacturingClass": {
"type": "string",
"description": "Optional acquisition filter such as purchased_component or cable_or_harness. McMaster items are normally purchased components, not printable geometry."
},
"printability": {
"type": "string",
"description": "Optional print filter. McMaster hardware normally returns not_applicable; use the unified component catalog for printable procedural parts."
}
},
"additionalProperties": false
},
"page": "/editor"
}cad.add_mcmaster_partAction
Place one licensed McMaster-Carr catalog part by part number. If missing from the local Coolify library, live-fetches STEP via the authorized McMaster session (cookies) and caches it. Mate afterward with connect_parts / mate_parts when needed.
View tool JSON
{
"name": "cad.add_mcmaster_part",
"kind": "act",
"impl": "imperative",
"description": "Place one licensed McMaster-Carr catalog part by part number. If missing from the local Coolify library, live-fetches STEP via the authorized McMaster session (cookies) and caches it. Mate afterward with connect_parts / mate_parts when needed.",
"inputSchema": {
"type": "object",
"title": "add McMaster part",
"description": "Arguments for add_mcmaster_part.",
"properties": {
"partNumber": {
"type": "string",
"description": "McMaster part number, e.g. 91290A117."
},
"name": {
"type": "string",
"description": "Optional Layers display name."
},
"mediaUrl": {
"type": "string",
"description": "Optional override URL for the STEP/mesh asset."
},
"positionMm": {
"type": "array",
"description": "Exact position [x,y,z] in millimeters.",
"items": {
"type": "number"
}
},
"rotationDeg": {
"type": "array",
"description": "Exact rotation [x,y,z] in degrees.",
"items": {
"type": "number"
}
},
"color": {
"type": "string",
"description": "Hex color."
},
"componentId": {
"type": "string",
"description": "Opaque owner/component ID for coverage tracking."
},
"parentPartId": {
"type": "string",
"description": "Optional GROUP id to nest under."
}
},
"required": [
"partNumber"
],
"additionalProperties": false
},
"page": "/editor"
}cad.get_facesAnswer
Read stable face IDs, centers, normals, and local frames for one part.
View tool JSON
{
"name": "cad.get_faces",
"kind": "answer",
"impl": "imperative",
"description": "Read stable face IDs, centers, normals, and local frames for one part.",
"inputSchema": {
"type": "object",
"title": "get faces",
"description": "Arguments for get_faces.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
}
},
"required": [
"targetPartId"
],
"additionalProperties": false
},
"page": "/editor"
}cad.get_edgesAnswer
Read stable edge IDs and their measured CAD polylines for one part.
View tool JSON
{
"name": "cad.get_edges",
"kind": "answer",
"impl": "imperative",
"description": "Read stable edge IDs and their measured CAD polylines for one part.",
"inputSchema": {
"type": "object",
"title": "get edges",
"description": "Arguments for get_edges.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
}
},
"required": [
"targetPartId"
],
"additionalProperties": false
},
"page": "/editor"
}cad.get_verticesAnswer
Read stable vertex IDs and measured local/world CAD coordinates for one part.
View tool JSON
{
"name": "cad.get_vertices",
"kind": "answer",
"impl": "imperative",
"description": "Read stable vertex IDs and measured local/world CAD coordinates for one part.",
"inputSchema": {
"type": "object",
"title": "get vertices",
"description": "Arguments for get_vertices.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
}
},
"required": [
"targetPartId"
],
"additionalProperties": false
},
"page": "/editor"
}cad.get_parametersAnswer
Read editable CAD parameters and transform state for one part without changing the scene. Revolve and extrusion parts include profilePointsMm — copy those {x,y} stations into edit_part.changes.profilePointsMm or set_dimensions.profilePointsMm to reshape the live body without deleting it. Loft parts include pointsAMm/pointsBMm (closed UV end loops) and loftHeightMm — copy those into edit_part.changes or set_dimensions; do not delete and recreate.
View tool JSON
{
"name": "cad.get_parameters",
"kind": "answer",
"impl": "imperative",
"description": "Read editable CAD parameters and transform state for one part without changing the scene. Revolve and extrusion parts include profilePointsMm — copy those {x,y} stations into edit_part.changes.profilePointsMm or set_dimensions.profilePointsMm to reshape the live body without deleting it. Loft parts include pointsAMm/pointsBMm (closed UV end loops) and loftHeightMm — copy those into edit_part.changes or set_dimensions; do not delete and recreate.",
"inputSchema": {
"type": "object",
"title": "get parameters",
"description": "Arguments for get_parameters.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
}
},
"required": [
"targetPartId"
],
"additionalProperties": false
},
"page": "/editor"
}cad.select_partsAction
Select one or more parts by stable ID.
View tool JSON
{
"name": "cad.select_parts",
"kind": "act",
"impl": "imperative",
"description": "Select one or more parts by stable ID.",
"inputSchema": {
"type": "object",
"title": "select_parts",
"description": "Arguments for select_parts.",
"properties": {
"partIds": {
"type": "array",
"description": "Part IDs to select.",
"items": {
"type": "string"
}
}
},
"required": [
"partIds"
],
"additionalProperties": false
},
"page": "/editor"
}cad.select_topologyAction
Select one measured face, edge, or vertex on a part (IDs from get_faces / get_edges / get_vertices / inspect_part).
View tool JSON
{
"name": "cad.select_topology",
"kind": "act",
"impl": "imperative",
"description": "Select one measured face, edge, or vertex on a part (IDs from get_faces / get_edges / get_vertices / inspect_part).",
"inputSchema": {
"type": "object",
"title": "select face / edge / vertex",
"description": "Arguments for select_topology.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"element": {
"type": "string",
"description": "Topology element kind.",
"enum": [
"face",
"edge",
"vertex"
]
},
"elementId": {
"type": "string",
"description": "Stable face, edge, or vertex ID."
}
},
"required": [
"targetPartId",
"element",
"elementId"
],
"additionalProperties": false
},
"page": "/editor"
}cad.set_transformAction
Set or offset a part world position and world rotation using CAD Z-up coordinates. Scale is the part's parent-local scale, matching the scale reported by get_parameters and the scene context. Nested positions/rotations are converted into the parent local frame automatically.
View tool JSON
{
"name": "cad.set_transform",
"kind": "act",
"impl": "imperative",
"description": "Set or offset a part world position and world rotation using CAD Z-up coordinates. Scale is the part's parent-local scale, matching the scale reported by get_parameters and the scene context. Nested positions/rotations are converted into the parent local frame automatically.",
"inputSchema": {
"type": "object",
"title": "set_transform",
"description": "Arguments for set_transform.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"mode": {
"type": "string",
"description": "Set exact values or apply deltas.",
"enum": [
"set",
"offset"
]
},
"positionMm": {
"type": "array",
"description": "CAD [x, y, z] millimeters.",
"items": {
"type": "number"
}
},
"rotationDeg": {
"type": "array",
"description": "CAD [x, y, z] degrees.",
"items": {
"type": "number"
}
},
"scale": {
"type": "array",
"description": "Parent-local scale [x, y, z]. Copying a sibling's reported scale therefore produces the same scale inside their shared parent.",
"items": {
"type": "number"
}
}
},
"required": [
"targetPartId",
"mode"
],
"additionalProperties": false
},
"page": "/editor"
}cad.set_dimensionsAction
Set exact local size in millimeters. For primitives: width/depth/height (or diameterMm). For extrusions after create: widthMm/profileWidthMm (profile X), depthMm/lengthMm/profileDepthMm (profile length), heightMm/extrusionHeightMm (extrusion thickness), optional cornerRadiusMm, cornerSegments (1–24), and profileEdgeStyle (straight|curvy|soft — keeps the same outline vertices). For revolves/extrusions, top-level profilePointsMm replaces the live profile — do not delete and recreate. Revolve: x=radiusMm from the spin axis, y=heightMm along +Z. Extrude: closed UV outline in mm. For lofts: heightMm/loftHeightMm, widthMm/depthMm, surfaceMode (straight|ruled|rectilinear|smooth|curved|bulge|twist), and/or top-level pointsAMm/pointsBMm closed UV end loops from get_parameters.
View tool JSON
{
"name": "cad.set_dimensions",
"kind": "act",
"impl": "imperative",
"description": "Set exact local size in millimeters. For primitives: width/depth/height (or diameterMm). For extrusions after create: widthMm/profileWidthMm (profile X), depthMm/lengthMm/profileDepthMm (profile length), heightMm/extrusionHeightMm (extrusion thickness), optional cornerRadiusMm, cornerSegments (1–24), and profileEdgeStyle (straight|curvy|soft — keeps the same outline vertices). For revolves/extrusions, top-level profilePointsMm replaces the live profile — do not delete and recreate. Revolve: x=radiusMm from the spin axis, y=heightMm along +Z. Extrude: closed UV outline in mm. For lofts: heightMm/loftHeightMm, widthMm/depthMm, surfaceMode (straight|ruled|rectilinear|smooth|curved|bulge|twist), and/or top-level pointsAMm/pointsBMm closed UV end loops from get_parameters.",
"inputSchema": {
"type": "object",
"title": "set_dimensions",
"description": "Arguments for set_dimensions.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"dimensionsMm": {
"type": "object",
"description": "width/depth/height in mm. Extrusion: profileWidthMm, profileDepthMm/lengthMm, extrusionHeightMm, cornerRadiusMm, cornerSegments, profileEdgeStyle (straight/curvy/soft). Loft: loftHeightMm, widthMm, depthMm, surfaceMode. Omit when only profilePointsMm or pointsAMm/pointsBMm is sent.",
"default": {
"widthMm": 55,
"depthMm": 134,
"heightMm": 7,
"profileEdgeStyle": "curvy"
},
"additionalProperties": true
},
"profilePointsMm": {
"type": "array",
"description": "Replace the live revolve meridian or extrusion outline. Stations are {x,y} mm from get_parameters. Revolve: x=radiusMm, y=heightMm along +Z. Extrude: closed UV outline.",
"items": {
"type": "object",
"additionalProperties": true
}
},
"pointsAMm": {
"type": "array",
"description": "Replace the live loft start/bottom closed UV loop in mm (U=CAD X, V=CAD Y on the plate). Copy from get_parameters. Omit to keep the current loop.",
"items": {
"type": "object",
"additionalProperties": true
}
},
"pointsBMm": {
"type": "array",
"description": "Replace the live loft end/top closed UV loop in mm (same frame as pointsAMm). Copy from get_parameters. Omit to keep the current loop.",
"items": {
"type": "object",
"additionalProperties": true
}
}
},
"required": [
"targetPartId"
],
"additionalProperties": false
},
"page": "/editor"
}cad.set_appearanceAction
Set a part name and/or color.
View tool JSON
{
"name": "cad.set_appearance",
"kind": "act",
"impl": "imperative",
"description": "Set a part name and/or color.",
"inputSchema": {
"type": "object",
"title": "set_appearance",
"description": "Arguments for set_appearance.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"name": {
"type": "string",
"description": "New display name."
},
"color": {
"type": "string",
"description": "Hex color."
}
},
"required": [
"targetPartId"
],
"additionalProperties": false
},
"page": "/editor"
}cad.set_visibilityAction
Show or hide a part without deleting it.
View tool JSON
{
"name": "cad.set_visibility",
"kind": "act",
"impl": "imperative",
"description": "Show or hide a part without deleting it.",
"inputSchema": {
"type": "object",
"title": "set_visibility",
"description": "Arguments for set_visibility.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"visible": {
"type": "boolean",
"description": "True to show, false to hide."
}
},
"required": [
"targetPartId",
"visible"
],
"additionalProperties": false
},
"page": "/editor"
}cad.delete_partsSensitive Action
Delete parts by stable ID.
View tool JSON
{
"name": "cad.delete_parts",
"kind": "transact",
"impl": "imperative",
"description": "Delete parts by stable ID.",
"inputSchema": {
"type": "object",
"title": "delete_parts",
"description": "Arguments for delete_parts.",
"properties": {
"partIds": {
"type": "array",
"description": "Part IDs to delete.",
"items": {
"type": "string"
}
}
},
"required": [
"partIds"
],
"additionalProperties": false
},
"page": "/editor"
}cad.duplicate_partsAction
Duplicate parts and return the created IDs.
View tool JSON
{
"name": "cad.duplicate_parts",
"kind": "act",
"impl": "imperative",
"description": "Duplicate parts and return the created IDs.",
"inputSchema": {
"type": "object",
"title": "duplicate_parts",
"description": "Arguments for duplicate_parts.",
"properties": {
"partIds": {
"type": "array",
"description": "Part IDs to duplicate.",
"items": {
"type": "string"
}
}
},
"required": [
"partIds"
],
"additionalProperties": false
},
"page": "/editor"
}cad.group_partsAction
Create one hierarchy group without fusing geometry. On a new multi-body object, wrap the members under one named parent so later scale/move/rotate is a single set_transform. When the members share a parent assembly group, the new group is nested under that same parent (not promoted to the scene root). Pass name for the Layers folder label. Needs two or more members — wrapping one nested solid is not how you split for print.
View tool JSON
{
"name": "cad.group_parts",
"kind": "act",
"impl": "imperative",
"description": "Create one hierarchy group without fusing geometry. On a new multi-body object, wrap the members under one named parent so later scale/move/rotate is a single set_transform. When the members share a parent assembly group, the new group is nested under that same parent (not promoted to the scene root). Pass name for the Layers folder label. Needs two or more members — wrapping one nested solid is not how you split for print.",
"inputSchema": {
"type": "object",
"title": "create group",
"description": "Arguments for group_parts.",
"properties": {
"partIds": {
"type": "array",
"description": "Child part IDs.",
"items": {
"type": "string"
}
},
"name": {
"type": "string",
"description": "Folder label for the new group (kept exact when free; numbered only on collision)."
}
},
"required": [
"partIds"
],
"additionalProperties": false
},
"page": "/editor"
}cad.combine_partsAction
Fuse one or more selected solids or solid containers into one editable combined result. Unlike group_parts, this creates one baked solid and preserves the original operands so uncombine_parts can restore them. A container ID may be passed to combine its visible base and construction children together. Pass name to preserve the requested Layers label; otherwise the first meaningful operand name is retained with a Combine suffix.
View tool JSON
{
"name": "cad.combine_parts",
"kind": "act",
"impl": "imperative",
"description": "Fuse one or more selected solids or solid containers into one editable combined result. Unlike group_parts, this creates one baked solid and preserves the original operands so uncombine_parts can restore them. A container ID may be passed to combine its visible base and construction children together. Pass name to preserve the requested Layers label; otherwise the first meaningful operand name is retained with a Combine suffix.",
"inputSchema": {
"type": "object",
"title": "combine",
"description": "Arguments for combine_parts.",
"properties": {
"partIds": {
"type": "array",
"description": "Stable IDs of solids or solid containers to combine. Pass one expandable container to combine its visible contents.",
"items": {
"type": "string"
}
},
"name": {
"type": "string",
"description": "Optional Layers label for the combined result. Keep an explicit name such as \"Solid Circle - Combine\"."
}
},
"required": [
"partIds"
],
"additionalProperties": false
},
"page": "/editor"
}cad.ungroup_partsAction
Promote a group’s children to independent parts (the group’s parent, or the scene root). Pass the covering group id or any member id. Nested members resolve to their covering parent even when the member is itself a group. Nested construction subtracts stay on their host solids. Use this when the user wants separate printable/exportable/movable pieces — do not wrap a single member in group_parts, and do not hide nested construction subtracts as a print-package step.
View tool JSON
{
"name": "cad.ungroup_parts",
"kind": "act",
"impl": "imperative",
"description": "Promote a group’s children to independent parts (the group’s parent, or the scene root). Pass the covering group id or any member id. Nested members resolve to their covering parent even when the member is itself a group. Nested construction subtracts stay on their host solids. Use this when the user wants separate printable/exportable/movable pieces — do not wrap a single member in group_parts, and do not hide nested construction subtracts as a print-package step.",
"inputSchema": {
"type": "object",
"title": "ungroup",
"description": "Arguments for ungroup_parts.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Group id or any member id of the covering group to dissolve."
},
"partIds": {
"type": "array",
"description": "Optional extra member or group ids; each covering group is dissolved once.",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"page": "/editor"
}cad.uncombine_partsAction
Restore the original operands preserved by a combine_parts result. Pass the combined result ID, not a regular group or an arbitrary solid.
View tool JSON
{
"name": "cad.uncombine_parts",
"kind": "act",
"impl": "imperative",
"description": "Restore the original operands preserved by a combine_parts result. Pass the combined result ID, not a regular group or an arbitrary solid.",
"inputSchema": {
"type": "object",
"title": "uncombine",
"description": "Arguments for uncombine_parts.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the combined result to restore."
}
},
"required": [
"targetPartId"
],
"additionalProperties": false
},
"page": "/editor"
}cad.edit_partAction
Apply a coordinated edit to a part. Put only allowed keys in changes: dimensionsMm, positionMm, rotationDeg, scale, name, color, visible, profilePointsMm (revolve meridian or extrusion outline copied from get_parameters), pointsAMm/pointsBMm (loft end loops), loftHeightMm/widthMm/depthMm/surfaceMode for an existing loft, sweep {profileKind, tubeRadiusMm, rectWidthMm, rectDepthMm, pathPointsMm, pathMode} for an existing sweep, plus shape CAD params from get_parameters. Sweep and loft edits preserve the existing feature and omit fields you are not changing. Do not rewrite children, modifiers, features, id, or type. For small station tweaks, copy profile arrays into edit_part/set_dimensions. For a new irregular planar silhouette, use trace_image only if the user explicitly requested a trace and the view is verified to be a true prism; otherwise author an explicit profile instead of inventing a long profilePointsMm list.
View tool JSON
{
"name": "cad.edit_part",
"kind": "act",
"impl": "imperative",
"description": "Apply a coordinated edit to a part. Put only allowed keys in changes: dimensionsMm, positionMm, rotationDeg, scale, name, color, visible, profilePointsMm (revolve meridian or extrusion outline copied from get_parameters), pointsAMm/pointsBMm (loft end loops), loftHeightMm/widthMm/depthMm/surfaceMode for an existing loft, sweep {profileKind, tubeRadiusMm, rectWidthMm, rectDepthMm, pathPointsMm, pathMode} for an existing sweep, plus shape CAD params from get_parameters. Sweep and loft edits preserve the existing feature and omit fields you are not changing. Do not rewrite children, modifiers, features, id, or type. For small station tweaks, copy profile arrays into edit_part/set_dimensions. For a new irregular planar silhouette, use trace_image only if the user explicitly requested a trace and the view is verified to be a true prism; otherwise author an explicit profile instead of inventing a long profilePointsMm list.",
"inputSchema": {
"type": "object",
"title": "edit part",
"description": "Arguments for edit_part.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"changes": {
"type": "object",
"description": "Allowed keys: dimensionsMm {width,depth,height,cornerRadiusMm,cornerSegments,loftHeightMm,surfaceMode}, positionMm [x,y,z], rotationDeg [x,y,z], scale [x,y,z], name, color, visible, profilePointsMm [{x,y}, …] from get_parameters (revolve x=radiusMm y=heightMm; extrude closed UV), pointsAMm/pointsBMm [{x,y}, …] loft end loops, loftHeightMm/widthMm/depthMm/surfaceMode for an existing loft, sweep {profileKind, tubeRadiusMm, rectWidthMm, rectDepthMm, pathPointsMm, pathMode} for an existing sweep, and CAD params (widthMm/depthMm/heightMm/radiusMm/…). Not allowed: children, modifiers, features, id, type.",
"default": {
"dimensionsMm": {
"width": 40,
"depth": 30,
"height": 20
}
},
"additionalProperties": true
}
},
"required": [
"targetPartId",
"changes"
],
"additionalProperties": false
},
"page": "/editor"
}cad.split_partAction
Cut one part into two pieces with a plane. Use axis for the cut direction, and ratio 0–1 for where the cut sits (0.5 = halfway). Prefer ratio; use offsetMm only when you need an exact millimeter offset from the part center.
View tool JSON
{
"name": "cad.split_part",
"kind": "act",
"impl": "imperative",
"description": "Cut one part into two pieces with a plane. Use axis for the cut direction, and ratio 0–1 for where the cut sits (0.5 = halfway). Prefer ratio; use offsetMm only when you need an exact millimeter offset from the part center.",
"inputSchema": {
"type": "object",
"title": "split part",
"description": "Arguments for split_part.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"axis": {
"type": "string",
"description": "Local cut direction. z = top/bottom split (height). x / y = side splits (width / depth).",
"enum": [
"x",
"y",
"z"
],
"default": "z"
},
"ratio": {
"type": "number",
"description": "Where to cut along the axis, from 0 to 1. 0.5 = middle. Do NOT use 50 — that is wrong. Example: 0.5 for half, 0.25 for one-quarter from the low end.",
"default": 0.5
},
"offsetMm": {
"type": "number",
"description": "Optional exact cut offset in millimeters from the part center. Leave empty when using ratio."
}
},
"required": [
"targetPartId",
"axis"
],
"additionalProperties": false
},
"page": "/editor"
}cad.boolean_partsAction
Union parts or attach existing tool parts as LIVE subtractive operands under targetPartId. Creating a cutter alone does not cut anything. After subtracting, KEEP tool parts under their host: delete_parts on a cutter removes the opening. Subtract overlapping primitives to isolate curved-shell segments; do not flatten those segments into an extruded outline.
View tool JSON
{
"name": "cad.boolean_parts",
"kind": "act",
"impl": "imperative",
"description": "Union parts or attach existing tool parts as LIVE subtractive operands under targetPartId. Creating a cutter alone does not cut anything. After subtracting, KEEP tool parts under their host: delete_parts on a cutter removes the opening. Subtract overlapping primitives to isolate curved-shell segments; do not flatten those segments into an extruded outline.",
"inputSchema": {
"type": "object",
"title": "boolean_parts",
"description": "Arguments for boolean_parts.",
"properties": {
"mode": {
"type": "string",
"description": "Boolean operation.",
"enum": [
"union",
"subtract"
]
},
"targetPartId": {
"type": "string",
"description": "Host part for subtraction."
},
"toolPartIds": {
"type": "array",
"description": "Parts to union or use as cutters.",
"items": {
"type": "string"
}
}
},
"required": [
"mode",
"toolPartIds"
],
"additionalProperties": false
},
"page": "/editor"
}cad.add_holeAction
Create a circular, polygonal (including hexagonal), or slot opening on a part.
View tool JSON
{
"name": "cad.add_hole",
"kind": "act",
"impl": "imperative",
"description": "Create a circular, polygonal (including hexagonal), or slot opening on a part.",
"inputSchema": {
"type": "object",
"title": "add_hole",
"description": "Arguments for add_hole.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"face": {
"type": "string",
"description": "Target face ID or semantic face label."
},
"shape": {
"type": "string",
"description": "Opening shape.",
"enum": [
"circle",
"polygon",
"hex",
"slot"
]
},
"parameters": {
"type": "object",
"description": "Diameter, width, length, depth, offsets, polygon side count, and tilt in millimeters/degrees.",
"default": {},
"additionalProperties": true
}
},
"required": [
"targetPartId"
],
"additionalProperties": false
},
"page": "/editor"
}cad.add_featureAction
Add a recess, rim, raised detail, or face-stamped text. Letters/logos on a host face MUST use feature=text (or add_text) after the host exists — never add_shape shape=text, which stands on the plate along +Z.
View tool JSON
{
"name": "cad.add_feature",
"kind": "act",
"impl": "imperative",
"description": "Add a recess, rim, raised detail, or face-stamped text. Letters/logos on a host face MUST use feature=text (or add_text) after the host exists — never add_shape shape=text, which stands on the plate along +Z.",
"inputSchema": {
"type": "object",
"title": "add_feature",
"description": "Arguments for add_feature.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"feature": {
"type": "string",
"description": "Feature kind. text = emboss/engrave glyphs on the host face.",
"enum": [
"recess",
"rim",
"raised_detail",
"text",
"sculpt"
]
},
"face": {
"type": "string",
"description": "Target face ID or semantic label (required for text)."
},
"text": {
"type": "string",
"description": "Lettering for feature=text."
},
"mode": {
"type": "string",
"description": "emboss = shallow raised glyphs on the face; engrave = recessed. Default emboss.",
"enum": [
"emboss",
"engrave"
]
},
"parameters": {
"type": "object",
"description": "Feature-specific dimensions. For text: text, fontSizeMm, depthMm, mode, optional inPlaneRotationDeg (readable spin; omitted = world-up upright default).",
"default": {},
"additionalProperties": true
}
},
"required": [
"targetPartId",
"feature"
],
"additionalProperties": false
},
"page": "/editor"
}cad.shell_partAction
Hollow a part and optionally remove declared faces. For a revolve, this rebuilds the editable outer meridian as a native hollow C-section with the requested wall thickness; use openFaces=["Top"] for an open vessel mouth instead of a cavity cutter.
View tool JSON
{
"name": "cad.shell_part",
"kind": "act",
"impl": "imperative",
"description": "Hollow a part and optionally remove declared faces. For a revolve, this rebuilds the editable outer meridian as a native hollow C-section with the requested wall thickness; use openFaces=[\"Top\"] for an open vessel mouth instead of a cavity cutter.",
"inputSchema": {
"type": "object",
"title": "shell_part",
"description": "Arguments for shell_part.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"thicknessMm": {
"type": "number",
"description": "Wall thickness in millimeters."
},
"openFaces": {
"type": "array",
"description": "Face IDs or semantic labels to remove.",
"items": {
"type": "string"
}
}
},
"required": [
"targetPartId",
"thicknessMm"
],
"additionalProperties": false
},
"page": "/editor"
}cad.trash_facesAction
Remove declared faces while preserving the remaining shell.
View tool JSON
{
"name": "cad.trash_faces",
"kind": "act",
"impl": "imperative",
"description": "Remove declared faces while preserving the remaining shell.",
"inputSchema": {
"type": "object",
"title": "trash_faces",
"description": "Arguments for trash_faces.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"faceIds": {
"type": "array",
"description": "Faces to remove.",
"items": {
"type": "string"
}
},
"thicknessMm": {
"type": "number",
"description": "Wall thickness used when the result needs a shell.",
"default": 2
}
},
"required": [
"targetPartId",
"faceIds"
],
"additionalProperties": false
},
"page": "/editor"
}cad.pattern_partsAction
Create a linear, circular, or mirrored repetition from an existing part. Circular patterns require an explicit shared center: provide centerMm in absolute CAD millimeters or centerPartId for a live part whose world center is the pivot. Never assume the prototype center is the pattern center.
View tool JSON
{
"name": "cad.pattern_parts",
"kind": "act",
"impl": "imperative",
"description": "Create a linear, circular, or mirrored repetition from an existing part. Circular patterns require an explicit shared center: provide centerMm in absolute CAD millimeters or centerPartId for a live part whose world center is the pivot. Never assume the prototype center is the pattern center.",
"inputSchema": {
"type": "object",
"title": "pattern_parts",
"description": "Arguments for pattern_parts.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"mode": {
"type": "string",
"description": "Pattern mode.",
"enum": [
"linear",
"circular",
"mirror"
]
},
"axis": {
"type": "string",
"description": "CAD x, y, or z axis."
},
"count": {
"type": "number",
"description": "Total instance count."
},
"spacingMm": {
"type": "number",
"description": "Linear spacing."
},
"angleDeg": {
"type": "number",
"description": "Circular angle span."
},
"centerMm": {
"type": "array",
"description": "Required for circular mode: absolute world pivot [x,y,z] in CAD millimeters.",
"items": {
"type": "number"
}
},
"centerPartId": {
"type": "string",
"description": "Required for circular mode: existing live part ID whose world center is the shared pivot."
},
"plane": {
"type": "string",
"description": "Mirror plane.",
"enum": [
"xy",
"xz",
"yz"
]
}
},
"required": [
"targetPartId",
"mode"
],
"additionalProperties": false
},
"page": "/editor"
}cad.align_partsAction
Line parts up after they are already roughly placed (usually after assemble). center = match centers on an axis. flush = push parts so they share the same outer face on that axis. distribute = keep outermost centers fixed and space the middle parts evenly along one axis (needs 3+; no referencePartId). rotation = copy the reference world orientation onto the movers (center stays put; axis selects which Euler components to match, default xyz = full orientation). Pick which parts move with partIds, and which stays put with referencePartId (center/flush/rotation only).
View tool JSON
{
"name": "cad.align_parts",
"kind": "act",
"impl": "imperative",
"description": "Line parts up after they are already roughly placed (usually after assemble). center = match centers on an axis. flush = push parts so they share the same outer face on that axis. distribute = keep outermost centers fixed and space the middle parts evenly along one axis (needs 3+; no referencePartId). rotation = copy the reference world orientation onto the movers (center stays put; axis selects which Euler components to match, default xyz = full orientation). Pick which parts move with partIds, and which stays put with referencePartId (center/flush/rotation only).",
"inputSchema": {
"type": "object",
"title": "align",
"description": "Arguments for align_parts.",
"properties": {
"mode": {
"type": "string",
"description": "center = share the same center on the axis. flush = share the same outer side on the axis. distribute = even spacing between outermost centers (3+ parts). rotation = match the reference orientation (full or per-axis).",
"enum": [
"center",
"flush",
"distribute",
"rotation"
],
"default": "center"
},
"partIds": {
"type": "array",
"description": "Parts that should move into alignment (or be redistributed for distribute).",
"items": {
"type": "string"
}
},
"referencePartId": {
"type": "string",
"description": "Part that stays fixed for center/flush/rotation. Unused for distribute (outermost on the axis stay fixed). Defaults to the first partIds entry if omitted."
},
"axis": {
"type": "string",
"description": "CAD axis to align on. Use x/y/z for one axis, or xz to center in the build-plane. For mode=rotation, x/y/z/xyz selects which orientation components to match (default xyz).",
"enum": [
"x",
"y",
"z",
"xy",
"xz",
"yz",
"xyz"
],
"default": "x"
},
"direction": {
"type": "string",
"description": "Only for flush: which side of the reference to flush against.",
"enum": [
"positive",
"negative"
],
"default": "positive"
}
},
"required": [
"mode",
"partIds",
"axis"
],
"additionalProperties": false
},
"page": "/editor"
}cad.mate_partsAction
Stick two parts together so movingFace meets fixedFace (normals oppose). For several copies on the same face (pins, legs, posts), put the sideways station in arguments.inPlaneOffsetMm {uMm,vMm} — do not write the offset only in reason text. Omit inPlaneOffsetMm to keep the moving part’s current sideways placement; pass {uMm:0,vMm:0} to center. Do not use a generic face mate on an explicitly authored sweep/curvedTube whose absolute path endpoints already contact the host; edit its path or provide measured movingPointMm/fixedPointMm anchors instead.
View tool JSON
{
"name": "cad.mate_parts",
"kind": "act",
"impl": "imperative",
"description": "Stick two parts together so movingFace meets fixedFace (normals oppose). For several copies on the same face (pins, legs, posts), put the sideways station in arguments.inPlaneOffsetMm {uMm,vMm} — do not write the offset only in reason text. Omit inPlaneOffsetMm to keep the moving part’s current sideways placement; pass {uMm:0,vMm:0} to center. Do not use a generic face mate on an explicitly authored sweep/curvedTube whose absolute path endpoints already contact the host; edit its path or provide measured movingPointMm/fixedPointMm anchors instead.",
"inputSchema": {
"type": "object",
"title": "assemble",
"description": "Arguments for mate_parts.",
"properties": {
"movingPartId": {
"type": "string",
"description": "Part that moves."
},
"fixedPartId": {
"type": "string",
"description": "Part that stays put."
},
"movingFace": {
"type": "string",
"description": "Face on the moving part that should touch (e.g. Bottom). From get_faces / inspect_part.",
"default": "Bottom"
},
"fixedFace": {
"type": "string",
"description": "Face on the fixed part to land on (e.g. Top). From get_faces / inspect_part.",
"default": "Top"
},
"movingPointMm": {
"type": "array",
"description": "Optional local contact point on the moving part [x,y,z] mm instead of a whole face.",
"items": {
"type": "number"
}
},
"fixedPointMm": {
"type": "array",
"description": "Optional local contact point on the fixed part [x,y,z] mm instead of a whole face.",
"items": {
"type": "number"
}
},
"inPlaneOffsetMm": {
"type": "object",
"description": "Face-frame offset from the fixed face center { uMm, vMm }. Required when two+ copies share one face and need different stations. Omit = keep current sideways placement. {uMm:0,vMm:0} = center.",
"default": null,
"additionalProperties": true
}
},
"required": [
"movingPartId",
"fixedPartId"
],
"additionalProperties": false
},
"page": "/editor"
}cad.place_on_plateAction
Ground parts on the CAD Z=0 build plate. Default layFlat=false (translate only — keep authored rotation). layFlat:true may tip a body onto its largest face; use only when a part is clearly upside-down or on a thin edge vs the reference.
View tool JSON
{
"name": "cad.place_on_plate",
"kind": "act",
"impl": "imperative",
"description": "Ground parts on the CAD Z=0 build plate. Default layFlat=false (translate only — keep authored rotation). layFlat:true may tip a body onto its largest face; use only when a part is clearly upside-down or on a thin edge vs the reference.",
"inputSchema": {
"type": "object",
"title": "place_on_plate",
"description": "Arguments for place_on_plate.",
"properties": {
"partIds": {
"type": "array",
"description": "Part IDs to place.",
"items": {
"type": "string"
}
},
"layFlat": {
"type": "boolean",
"description": "If true, also rotate to a max-footprint face before grounding. Prefer false so image-matched rotation is kept.",
"default": false
}
},
"required": [
"partIds"
],
"additionalProperties": false
},
"page": "/editor"
}cad.place_insideAction
Place a part inside a hollow container using a measured interior face returned by get_faces. Solid parts expose no interior faces and are rejected.
View tool JSON
{
"name": "cad.place_inside",
"kind": "act",
"impl": "imperative",
"description": "Place a part inside a hollow container using a measured interior face returned by get_faces. Solid parts expose no interior faces and are rejected.",
"inputSchema": {
"type": "object",
"title": "place_inside",
"description": "Arguments for place_inside.",
"properties": {
"partId": {
"type": "string",
"description": "Part to move inside the container."
},
"containerPartId": {
"type": "string",
"description": "Hollow container part."
},
"interiorFace": {
"type": "string",
"description": "Measured interior face ID, usually interior:bottom or interior:wall.",
"default": "interior:bottom"
},
"movingFace": {
"type": "string",
"description": "Measured face on the inserted part that should contact the interior face.",
"default": "Bottom"
},
"clearanceMm": {
"type": "number",
"description": "Gap from the measured interior face in millimeters.",
"default": 0
},
"inPlaneOffsetMm": {
"type": "object",
"description": "Optional measured face-frame offset { uMm, vMm } from the interior face center.",
"default": {
"uMm": 0,
"vMm": 0
},
"additionalProperties": true
}
},
"required": [
"partId",
"containerPartId"
],
"additionalProperties": false
},
"page": "/editor"
}cad.edit_topologyAction
Edit one measured face, edge, or vertex by ID from get_faces / get_edges / get_vertices. Face parameters: scaleX/scaleY/scaleZ (or width/depth/height mm). Edge: offsetMm. Vertex: offsetX/offsetY/offsetZ mm.
View tool JSON
{
"name": "cad.edit_topology",
"kind": "act",
"impl": "imperative",
"description": "Edit one measured face, edge, or vertex by ID from get_faces / get_edges / get_vertices. Face parameters: scaleX/scaleY/scaleZ (or width/depth/height mm). Edge: offsetMm. Vertex: offsetX/offsetY/offsetZ mm.",
"inputSchema": {
"type": "object",
"title": "edit topology",
"description": "Arguments for edit_topology.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"element": {
"type": "string",
"description": "Topology element kind.",
"enum": [
"face",
"edge",
"vertex"
]
},
"elementId": {
"type": "string",
"description": "Face, edge, or vertex ID from inspect_part / get_faces / get_edges / get_vertices."
},
"parameters": {
"type": "object",
"description": "Face: { scaleX, scaleY, scaleZ } or { width, depth, height }. Edge: { offsetMm }. Vertex: { offsetX, offsetY, offsetZ }. Do not mix kinds.",
"default": {
"scaleX": 1.1,
"scaleY": 1.1,
"scaleZ": 1.1
},
"additionalProperties": true
}
},
"required": [
"targetPartId",
"element",
"elementId"
],
"additionalProperties": false
},
"page": "/editor"
}cad.fillet_edgesAction
Round edges. Prefer selector (all, all_vertical, top_rim, bottom_rim) or pass edgeIds from get_edges. Required: radiusMm. Optional: segments, direction (outward|inward). Do not nest fields in parameters{}.
View tool JSON
{
"name": "cad.fillet_edges",
"kind": "act",
"impl": "imperative",
"description": "Round edges. Prefer selector (all, all_vertical, top_rim, bottom_rim) or pass edgeIds from get_edges. Required: radiusMm. Optional: segments, direction (outward|inward). Do not nest fields in parameters{}.",
"inputSchema": {
"type": "object",
"title": "fillet edges",
"description": "Arguments for fillet_edges.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"edgeIds": {
"type": "array",
"description": "Measured edge IDs from get_edges. Optional when selector is set.",
"items": {
"type": "string"
}
},
"selector": {
"type": "string",
"description": "Semantic edge group when you do not want to list IDs.",
"enum": [
"all_vertical",
"top_rim",
"bottom_rim",
"all"
]
},
"radiusMm": {
"type": "number",
"description": "Fillet radius in millimeters.",
"default": 2
},
"segments": {
"type": "number",
"description": "Preview tessellation segments.",
"default": 6
},
"direction": {
"type": "string",
"description": "Fillet side when supported.",
"enum": [
"outward",
"inward"
],
"default": "outward"
}
},
"required": [
"targetPartId",
"radiusMm"
],
"additionalProperties": false
},
"page": "/editor"
}cad.add_connectorAction
Place a mechanical connector. Complete hardware (hinge, pin-hinge, thread, twist-lock) can omit targetPartId and sit on the plate as its own part. Face features (holes, snaps, studs) still need a host part and usually a face.
View tool JSON
{
"name": "cad.add_connector",
"kind": "act",
"impl": "imperative",
"description": "Place a mechanical connector. Complete hardware (hinge, pin-hinge, thread, twist-lock) can omit targetPartId and sit on the plate as its own part. Face features (holes, snaps, studs) still need a host part and usually a face.",
"inputSchema": {
"type": "object",
"title": "add connector",
"description": "Arguments for add_connector.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"connectorType": {
"type": "string",
"description": "Ready mechanical Connect-tool kind. Screw Hole pairs with Screw at the same M-size; snap types pair tab+slot; press-fit peg/hole pair; stud-grid places an 8 mm-pitch stud array (mate click cuts sockets); magnet-pocket takes a disc magnet; hinge places a complete flush hinge (both leaves + pin) as its own part — no host face required. joint-pin-hinge is a legacy alias of hinge. Legacy snap-male / snap-female aliases map to snap-tab / snap-slot.",
"enum": [
"fastener-screw",
"fastener-screw-hole",
"fastener-bolt-hole",
"fastener-countersink",
"fastener-counterbore",
"fastener-nut-trap",
"fastener-heatset",
"fastener-standoff",
"connector-peg-hole",
"connector-alignment-pin",
"connector-alignment-pin-hole",
"connector-snap-tab",
"connector-snap-slot",
"connector-magnet-pocket",
"connector-stud-grid",
"press-fit-male",
"press-fit-female",
"joint-hinge",
"joint-pin-hinge",
"snap-male",
"snap-female"
]
},
"connectorSizeMm": {
"type": "number",
"description": "Feature size in millimeters.",
"default": 5
},
"face": {
"type": "string",
"description": "Host face label (Top/Bottom/Front/Back/Left/Right, Face N, or interior:*)."
},
"type": {
"type": "string",
"description": "Legacy alias for connectorType."
},
"sizeMm": {
"type": "number",
"description": "Legacy alias for connectorSizeMm."
},
"studsX": {
"type": "number",
"description": "Stud grid columns for connector-stud-grid. Default 2."
},
"studsY": {
"type": "number",
"description": "Stud grid rows for connector-stud-grid. Default 4."
},
"fit": {
"type": "string",
"description": "FDM clutch fit for stud-grid sockets. Default normal.",
"enum": [
"tight",
"normal",
"loose"
]
},
"variant": {
"type": "string",
"description": "Studs (male) or sockets (female) for connector-stud-grid.",
"enum": [
"male",
"female"
]
}
},
"required": [
"connectorType"
],
"additionalProperties": false
},
"page": "/editor"
}cad.add_mechanical_jointAction
Mate two parts face-to-face and generate a paired mechanical interface (currently pin hinge). The moving part is aligned to the host, then hinge/barrel geometry is added to both.
View tool JSON
{
"name": "cad.add_mechanical_joint",
"kind": "act",
"impl": "imperative",
"description": "Mate two parts face-to-face and generate a paired mechanical interface (currently pin hinge). The moving part is aligned to the host, then hinge/barrel geometry is added to both.",
"inputSchema": {
"type": "object",
"title": "add mechanical joint",
"description": "Arguments for add_mechanical_joint.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the moving part to align to the host."
},
"referencePartId": {
"type": "string",
"description": "Fixed host part."
},
"face": {
"type": "string",
"description": "Face on the moving part that contacts the host."
},
"referenceFace": {
"type": "string",
"description": "Face on the host that contacts the moving part."
},
"targetFace": {
"type": "string",
"description": "Legacy alias for referenceFace."
},
"mechanicalJointKind": {
"type": "string",
"description": "Interface kind. Only pinHinge is committable.",
"enum": [
"pinHinge"
],
"default": "pinHinge"
},
"jointId": {
"type": "string",
"description": "Opaque joint id used by generated geometry."
},
"hostPartId": {
"type": "string",
"description": "Legacy alias for referencePartId."
},
"type": {
"type": "string",
"description": "Legacy alias for mechanicalJointKind."
},
"sizeMm": {
"type": "number",
"description": "Legacy joint diameter/size."
},
"hostComponentId": {
"type": "string",
"description": "Opaque host component id."
},
"targetComponentId": {
"type": "string",
"description": "Opaque moving component id."
},
"parameters": {
"type": "object",
"description": "Optional joint parameters (pin diameter, barrel length, etc.).",
"default": {},
"additionalProperties": true
},
"manufacturingProcess": {
"type": "string",
"description": "Process used for clearances.",
"enum": [
"fdm",
"sla",
"sls",
"cnc",
"injection_molding"
],
"default": "fdm"
},
"fit": {
"type": "string",
"description": "Fit class.",
"enum": [
"tight",
"normal",
"loose"
],
"default": "normal"
}
},
"required": [
"referencePartId",
"face",
"referenceFace"
],
"additionalProperties": false
},
"page": "/editor"
}cad.connect_partsAction
Atomically connect two live parts through measured ports. Resolves both world frames, moves only the target body into contact, creates paired interface geometry, persists the assembly graph edge, and rolls back the entire call if any step fails. Use this instead of mixing mate_parts with add_connector for one interface; groups are organizational and do not replace a connection.
View tool JSON
{
"name": "cad.connect_parts",
"kind": "act",
"impl": "imperative",
"description": "Atomically connect two live parts through measured ports. Resolves both world frames, moves only the target body into contact, creates paired interface geometry, persists the assembly graph edge, and rolls back the entire call if any step fails. Use this instead of mixing mate_parts with add_connector for one interface; groups are organizational and do not replace a connection.",
"inputSchema": {
"type": "object",
"title": "connect parts",
"description": "Arguments for connect_parts.",
"properties": {
"sourcePartId": {
"type": "string",
"description": "Exact live ID or explicit result alias (for example \"$base\") of the fixed/source part. Do not use prototype, last_created, or a display name."
},
"sourcePort": {
"type": "object",
"description": "Measured source port: {face, localPointMm?, localNormal?, localTangentUMm?}; a face string is accepted for simple planar ports.",
"additionalProperties": true
},
"targetPartId": {
"type": "string",
"description": "Exact live ID or explicit result alias (for example \"$lid\") of the moving/target part. Do not use prototype, last_created, or a display name."
},
"targetPort": {
"type": "object",
"description": "Measured target port: {face, localPointMm?, localNormal?, localTangentUMm?}; a face string is accepted for simple planar ports.",
"additionalProperties": true
},
"connectionType": {
"type": "string",
"description": "Atomic interface contract.",
"enum": [
"fixed_mount",
"shaft_bushing",
"revolute",
"peg_socket",
"snap_fit",
"screw_boss",
"magnet",
"pin_hinge"
]
},
"clearanceMm": {
"type": "number",
"description": "Manufacturing clearance in millimeters.",
"default": 0.2
},
"engagementMm": {
"type": "number",
"description": "Insertion/overlap engagement in millimeters.",
"default": 3
},
"sizeMm": {
"type": "number",
"description": "Nominal connector or shaft size in millimeters.",
"default": 5
},
"fit": {
"type": "string",
"description": "FDM fit class.",
"enum": [
"tight",
"normal",
"loose"
],
"default": "normal"
},
"motion": {
"type": "object",
"description": "Optional motion constraint, for example {type:\"revolute\", axis:\"X\", limitsDeg:[0,120]}.",
"additionalProperties": true
},
"manufacturingProcess": {
"type": "string",
"description": "Process used to derive clearance.",
"enum": [
"fdm",
"sla",
"sls",
"cnc",
"injection_molding"
],
"default": "fdm"
}
},
"required": [
"sourcePartId",
"sourcePort",
"targetPartId",
"targetPort",
"connectionType"
],
"additionalProperties": false
},
"page": "/editor"
}cad.route_cableAction
Create a continuous swept cable between two measured ports and atomically attach both endpoints. The path is authored in absolute CAD millimeters; endpoint contact and clearance are validated, and crossing another part without endpoint interfaces never counts as connected.
View tool JSON
{
"name": "cad.route_cable",
"kind": "act",
"impl": "imperative",
"description": "Create a continuous swept cable between two measured ports and atomically attach both endpoints. The path is authored in absolute CAD millimeters; endpoint contact and clearance are validated, and crossing another part without endpoint interfaces never counts as connected.",
"inputSchema": {
"type": "object",
"title": "route cable",
"description": "Arguments for route_cable.",
"properties": {
"sourcePartId": {
"type": "string",
"description": "Stable source endpoint part ID."
},
"sourcePort": {
"type": "object",
"description": "Measured source port {face, localPointMm?, localNormal?}.",
"additionalProperties": true
},
"targetPartId": {
"type": "string",
"description": "Stable target endpoint part ID."
},
"targetPort": {
"type": "object",
"description": "Measured target port {face, localPointMm?, localNormal?}.",
"additionalProperties": true
},
"pathPointsMm": {
"type": "array",
"description": "At least two absolute CAD points; first/last are replaced by the measured port anchors.",
"items": {
"type": "object",
"additionalProperties": true
}
},
"cableRadiusMm": {
"type": "number",
"description": "Cable radius in millimeters."
},
"clearanceMm": {
"type": "number",
"description": "Minimum route clearance in millimeters.",
"default": 0.5
},
"attachmentType": {
"type": "string",
"description": "Endpoint attachment interface.",
"enum": [
"peg_socket",
"fixed_mount",
"magnet"
],
"default": "peg_socket"
},
"name": {
"type": "string",
"description": "Display name for the cable."
},
"color": {
"type": "string",
"description": "Hex color."
},
"parentPartId": {
"type": "string",
"description": "Optional GROUP id for organization; the cable is nested without changing its world pose."
}
},
"required": [
"sourcePartId",
"sourcePort",
"targetPartId",
"targetPort",
"pathPointsMm",
"cableRadiusMm"
],
"additionalProperties": false
},
"page": "/editor"
}cad.add_jointAction
Add a connector or mechanical joint between measured parts/faces.
View tool JSON
{
"name": "cad.add_joint",
"kind": "act",
"impl": "imperative",
"description": "Add a connector or mechanical joint between measured parts/faces.",
"inputSchema": {
"type": "object",
"title": "add_joint",
"description": "Arguments for add_joint.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"kind": {
"type": "string",
"description": "Joint kind.",
"enum": [
"connector",
"mechanical_joint"
]
},
"referencePartId": {
"type": "string",
"description": "Second part for a mechanical joint."
},
"face": {
"type": "string",
"description": "Target face."
},
"referenceFace": {
"type": "string",
"description": "Second face."
},
"parameters": {
"type": "object",
"description": "Joint size and type parameters.",
"default": {},
"additionalProperties": true
}
},
"required": [
"targetPartId",
"kind"
],
"additionalProperties": false
},
"page": "/editor"
}cad.get_auth_statusAnswer
Check whether the current Cadding browser session is signed in and whether protected project operations are available. Returns no credentials or tokens.
View tool JSON
{
"name": "cad.get_auth_status",
"kind": "answer",
"impl": "imperative",
"description": "Check whether the current Cadding browser session is signed in and whether protected project operations are available. Returns no credentials or tokens.",
"inputSchema": {
"type": "object",
"title": "get_auth_status",
"description": "Arguments for get_auth_status.",
"properties": {},
"additionalProperties": false
},
"page": "/editor"
}cad.request_sign_inAction
Open Cadding’s sign-in page and return to the editor afterward. The user must complete sign-in in the browser; never ask for or pass passwords, OTPs, recovery codes, or tokens to this tool.
View tool JSON
{
"name": "cad.request_sign_in",
"kind": "act",
"impl": "imperative",
"description": "Open Cadding’s sign-in page and return to the editor afterward. The user must complete sign-in in the browser; never ask for or pass passwords, OTPs, recovery codes, or tokens to this tool.",
"inputSchema": {
"type": "object",
"title": "request_sign_in",
"description": "Arguments for request_sign_in.",
"properties": {},
"additionalProperties": false
},
"page": "/editor"
}cad.list_projectsAnswer
List projects owned by the signed-in user, including public sharing metadata.
View tool JSON
{
"name": "cad.list_projects",
"kind": "answer",
"impl": "imperative",
"description": "List projects owned by the signed-in user, including public sharing metadata.",
"inputSchema": {
"type": "object",
"title": "list_projects",
"description": "Arguments for list_projects.",
"properties": {
"limit": {
"type": "number",
"description": "Maximum projects to return (1–200).",
"default": 50
}
},
"additionalProperties": false
},
"page": "/editor"
}cad.open_projectAction
Open a saved project owned by the signed-in user in the current editor session.
View tool JSON
{
"name": "cad.open_project",
"kind": "act",
"impl": "imperative",
"description": "Open a saved project owned by the signed-in user in the current editor session.",
"inputSchema": {
"type": "object",
"title": "open_project",
"description": "Arguments for open_project.",
"properties": {
"projectId": {
"type": "string",
"description": "Saved Cadding project ID."
}
},
"required": [
"projectId"
],
"additionalProperties": false
},
"page": "/editor"
}cad.save_projectAction
Save the live editor scene to the signed-in user’s Cadding account. Call this before publishing so the public model contains the latest edits.
View tool JSON
{
"name": "cad.save_project",
"kind": "act",
"impl": "imperative",
"description": "Save the live editor scene to the signed-in user’s Cadding account. Call this before publishing so the public model contains the latest edits.",
"inputSchema": {
"type": "object",
"title": "save_project",
"description": "Arguments for save_project.",
"properties": {},
"additionalProperties": false
},
"page": "/editor"
}cad.set_project_publicAction
Publish or unpublish the active saved project. When publishing, returns a durable publicUrl that the agent should send to the user. Requires sign-in and a successful save_project call first.
View tool JSON
{
"name": "cad.set_project_public",
"kind": "act",
"impl": "imperative",
"description": "Publish or unpublish the active saved project. When publishing, returns a durable publicUrl that the agent should send to the user. Requires sign-in and a successful save_project call first.",
"inputSchema": {
"type": "object",
"title": "set_project_public",
"description": "Arguments for set_project_public.",
"properties": {
"isPublic": {
"type": "boolean",
"description": "True to publish and obtain a public URL; false to make the project private."
},
"publicSlug": {
"type": "string",
"description": "Optional requested public slug. Omit to retain or generate the project slug."
}
},
"required": [
"isPublic"
],
"additionalProperties": false
},
"page": "/editor"
}cad.export_modelAction
Export the live model. Signed-in users receive a durable public download URL saved in Exports; guests can request a browser download but do not receive a durable URL.
View tool JSON
{
"name": "cad.export_model",
"kind": "act",
"impl": "imperative",
"description": "Export the live model. Signed-in users receive a durable public download URL saved in Exports; guests can request a browser download but do not receive a durable URL.",
"inputSchema": {
"type": "object",
"title": "export_model",
"description": "Arguments for export_model.",
"properties": {
"format": {
"type": "string",
"description": "Export file format. Use stl-package for one STL per printable component plus an assembly guide.",
"enum": [
"stl",
"stl-package",
"3mf",
"glb",
"step",
"iges",
"x_t",
"x_b",
"gerber"
],
"default": "stl"
},
"download": {
"type": "boolean",
"description": "Also start a browser download for the user.",
"default": false
}
},
"additionalProperties": false
},
"page": "/editor"
}cad.generate_ai_meshAction
Generate a controlled AI mesh and add it to the live scene. Use for explicit organic, character, sculpture, figurine, relief, logo, or decorative geometry that is inefficient to model parametrically. Requires sign-in. The realization declares whether the result is decorative or intended for later manufacturing validation.
View tool JSON
{
"name": "cad.generate_ai_mesh",
"kind": "act",
"impl": "imperative",
"description": "Generate a controlled AI mesh and add it to the live scene. Use for explicit organic, character, sculpture, figurine, relief, logo, or decorative geometry that is inefficient to model parametrically. Requires sign-in. The realization declares whether the result is decorative or intended for later manufacturing validation.",
"inputSchema": {
"type": "object",
"title": "generate_ai_mesh",
"description": "Arguments for generate_ai_mesh.",
"properties": {
"prompt": {
"type": "string",
"description": "Text description of the mesh to generate."
},
"imageUrl": {
"type": "string",
"description": "Source image URL. Use prompt or imageUrl, not both."
},
"name": {
"type": "string",
"description": "Display name for the generated part."
},
"quality": {
"type": "string",
"description": "Generation quality.",
"enum": [
"draft",
"standard",
"high"
]
},
"realization": {
"type": "string",
"description": "Mesh role. Decorative meshes remain separate visual parts; manufacturing candidates require validation before print or boolean operations.",
"enum": [
"decorative_mesh",
"manufacturing_candidate"
],
"default": "decorative_mesh"
}
},
"additionalProperties": false
},
"page": "/editor"
}cad.generate_moldAction
Generate a multi-part mold around one target part.
View tool JSON
{
"name": "cad.generate_mold",
"kind": "act",
"impl": "imperative",
"description": "Generate a multi-part mold around one target part.",
"inputSchema": {
"type": "object",
"title": "generate_mold",
"description": "Arguments for generate_mold.",
"properties": {
"targetPartId": {
"type": "string",
"description": "Stable ID of the part to inspect or modify."
},
"partCount": {
"type": "number",
"description": "Number of mold pieces (2–8).",
"default": 2
},
"axis": {
"type": "string",
"description": "Primary mold split axis.",
"enum": [
"x",
"y",
"z"
]
},
"marginMm": {
"type": "number",
"description": "Margin around the source body in millimeters."
}
},
"required": [
"targetPartId"
],
"additionalProperties": false
},
"page": "/editor"
}cad.capture_viewportAction
Capture the current editor viewport, a standard view, or a crop of one visible part as an image data URL.
View tool JSON
{
"name": "cad.capture_viewport",
"kind": "act",
"impl": "imperative",
"description": "Capture the current editor viewport, a standard view, or a crop of one visible part as an image data URL.",
"inputSchema": {
"type": "object",
"title": "capture_viewport",
"description": "Arguments for capture_viewport.",
"properties": {
"view": {
"type": "string",
"description": "View to capture.",
"enum": [
"current",
"top",
"front",
"side",
"isometric"
],
"default": "current"
},
"targetPartId": {
"type": "string",
"description": "Optional visible part ID to crop around."
}
},
"additionalProperties": false
},
"page": "/editor"
}