Turn plain English into editable, parametric Fusion 360 models using an LLM, a JSON feature plan, and an MCP server.
text2cad exposes 27 well-structured CAD tools with consistent naming (verb_noun pattern: create_sketch, draw_rectangle, extrude) and comprehensive parameter schemas. All tools have descriptions (avg ~120 chars) and typed input parameters with enums where appropriate. However, output schemas are not documented, responses are inferred from code but not formally declared. Parameter descriptions are present but often terse (e.g., 'Sketch reference @sketch_id' lacks guidance on when/why to use it). Error handling is minimal: tools return {ok: False, error: str(e)} but do not guide recovery or categorize errors. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear read/write semantics. Composition is strong, tools chain well (create_sketch → draw_* → extrude) and return IDs for reference. Security is adequate for a local CAD tool but lacks audit logging and permission gates.
Report which CAD backend is active (live Fusion 360 bridge or mock simulator).
Chamfer edges of a body at equal distance. edges: all|top_face|bottom_face|vertical.
Boolean combine two bodies (join/cut/intersect).
Create a named user parameter. Reference it by name in any dimension expression afterwards - this is what makes the model parametric.
Create a sketch on plane 'XY', 'XZ', 'YZ', or '@<offset_plane_id>'. Returns an id; pass '@<id>' as the sketch argument of draw_* and extrude tools.
Draw an arc by center, radius, start angle and sweep angle (degrees).
Draw a circle by center point [[x,y]] (mm) and diameter (number or expression).
Output schemas not documented. Tools return dicts with 'ok', 'error', 'id', 'result' fields, but LLMs cannot see the structure of nested results (e.g., what fields does get_body_bbox.result contain?). This forces LLMs to guess at response structure and risks extraction errors.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools like 'delete' operations (hole, shell, combine with cut) and read-only tools (list_parameters, get_body_bbox) lack semantic hints. Agents cannot distinguish safe retries from destructive operations without parsing descriptions.
Error handling lacks recovery guidance. All errors return {ok: False, error: str(e)} with no categorization (retryable vs user-fixable vs fatal) and no actionable next steps. E.g., 'BackendError: Fusion 360 not running' should suggest 'Start Fusion 360 or use TEXT2CAD_BACKEND=mock'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Draw a line from start [[x,y]] to end [[x,y]] (mm).
Draw a regular polygon (inscribed) by center, number of sides and radius.
Draw a rectangle in a sketch ('@sketch_id'). width/height accept parameter expressions and become real parametric dimensions in Fusion.
Draw a slot between two center points with the given width.
Validate and execute a complete JSON feature plan (dependency-ordered operations against the 28 CAD endpoints). Returns a step-by-step build report.
Export the active design to a STEP file.
Export the active design to an STL file.
Extrude sketch profiles into a solid. operation: new_body|join|cut|intersect; direction: positive|negative|symmetric. Returns a body id for new_body.
Round edges of a body. edges: all|top_face|bottom_face|vertical.
Get the bounding box of a body: [[min_x, min_y, min_z], [max_x, max_y, max_z]] in model mm.
Drill holes at [[x,y],...] (model mm) on a face ('top'/'bottom'/...) of a body. Metric fasteners: size='M4' with hole_type 'clearance' (4.5mm) or 'tap' (3.3mm tap drill). Or pass an explicit diameter. depth 0 = through-all.
List all bodies in the active design with their bounding boxes.
List all user parameters with expressions and current values.
Create a new Fusion 360 design document.
Create an offset plane parallel to a base plane (XY/XZ/YZ) at a distance.
Revolve sketch profiles around construction axis 'X', 'Y' or 'Z'.
Change an existing user parameter's expression; the model updates everywhere.
Set default length units: 'mm', 'cm' or 'in'.
Hollow a body to a wall thickness, removing one face (or 'none').
Apply a thread (e.g. 'M8x1.25') to the nth cylindrical face of a body.
Parameter descriptions are terse and lack context. E.g., 'Sketch reference @sketch_id' does not explain when to use it, what happens if you pass an invalid ID, or how to obtain a valid sketch ID. Descriptions should be 50 - 200 chars with actionable guidance.
No audit logging or permission gates. Tools like execute_plan and hole can modify designs without logging who called them, when, or with what parameters. Production CAD systems require audit trails for compliance and debugging.