---
title: "Parametric Part → STEP — an editable BREP solid for any CAD tool"
tier: hero
format: 3d-asset
theme: cad engineering parametric step freecad cadquery manufacturing pro-tool-spine
persona: mechanical engineer, product designer, hardware team, CAD user
duration: "1 brief → an editable parametric STEP solid in ~10–30s"
budget_usd: "$0.02 per part (CadQuery/OCC render; LLM authoring is cheap)"
caps: ["cad-step"]
verbs: ["create_cad_step"]
skills: ["cad-pipeline"]
showcases: ["/chapters/parametric-cad-to-step-example.html"]
status: "live (2026-06-20) — cad-step (CadQuery/OpenCASCADE) on tool-staging-1; the bracket below rendered E2E as a true BREP solid (14 ADVANCED_FACE, MANIFOLD_SOLID_BREP)."
requires: "PRO_PIPELINE_ENABLED on the MCP server (the create_cad_step verb)."
reliability: 4.4 # deterministic OCC kernel; −0.3 LLM CadQuery authoring can need a refine pass; −0.3 complex parts; +0.5 proven E2E (parametric bracket)
---

# Parametric Part → STEP (the FreeCAD-family path)

Describe a part → get a **true parametric STEP solid** (BREP, editable in
Fusion / FreeCAD / SolidWorks / Onshape) — not a mesh. Powered by **CadQuery**,
the OpenCASCADE kernel FreeCAD uses, run headless.

## Why this and not `idea-to-printable-part`?

| | `idea-to-printable-part` (OpenSCAD) | **this** (`create_cad_step`, CadQuery) |
|---|---|---|
| Output | mesh STL (triangles) | **parametric BREP solid** + STEP |
| Edit later | no (it's a mesh) | **yes — real faces, fillets, holes** |
| For | quick 3D print | CAD interchange, manufacturing, assemblies |

`convert stl→step` gives a *tessellated shell* (mesh wrapped in STEP). This
gives a *real solid* (ADVANCED_FACE / MANIFOLD_SOLID_BREP) — the difference
between a STEP a CAD tool can edit and one it can only display.

## The verb

```
create_cad_step  prompt="wall bracket, 80×40×5mm base, 30mm wall, four M4 holes, 3mm fillets"
create_cad_step  code="<CadQuery python>"                 # skip authoring
create_cad_step  code="<...>"  instruction="thicken the wall to 8mm"   # refine
```
CLI: `livepeer cad-step "wall bracket, 80×40×5mm, four M4 holes"` · `livepeer cad-step --code part.py`

Returns: `step_url` (the editable solid), the CadQuery `code` (so you can tweak +
refine), and a validation report (brep_solid, n_solids, bbox_mm, watertight,
volume_mm3). A preview STL is produced too (`return_file:"stl"`).

## How the agent should run this (interaction contract)

1. **CONFIRM + RESTATE DIMENSIONS (≤1 line)** — exact mm + features. A wrong
   dimension is worse than a wrong image.
2. **AUTHOR + RENDER** — `create_cad_step` writes CadQuery, runs the cad-step
   cap, returns the STEP + report.
3. **CHECK the report** — `brep_solid: true` confirms a real solid; surface
   `watertight` + `volume_mm3`. If the LLM's first attempt errors, pass the
   returned `code` back with an `instruction` to refine.
4. **DELIVER** — hand over the STEP (CAD) + the STL (print/preview).

## Proven E2E (see the example)

A parametric wall bracket → STEP with **14 ADVANCED_FACE, 1 MANIFOLD_SOLID_BREP,
8 CYLINDRICAL_SURFACE (the M4 holes), watertight, 15,643 mm³** — a genuine BREP
solid, zero triangulation.

## Notes / honesty

- CadQuery = OpenCASCADE (the FreeCAD kernel), headless + LLM-writable. It's the
  right engine for parametric solids; raw FreeCAD scripting is heavier + less
  LLM-friendly.
- Security: authored code runs in a restricted namespace (cadquery + math only;
  no imports / file IO / network) on a non-root container — a staging posture.
- Very complex / organic shapes are still better as mesh (`idea-to-printable-part`
  or AI mesh caps). This path is for precise, dimensioned, editable parts.
