Parcad
Parametric CAD as code: model 3D-printable parts on an exact B-rep kernel, measured.
- Transport
- Not stated
- Package
- —
- Registry id
- io.github.ierehon1905/parcad
No install snippet on purpose. A working MCP config is a command, its arguments and an environment block — the last two are where API keys live, so this catalogue never stores them and cannot publish them. Follow the link above for the authors' own instructions.
Parametric CAD you write as code — for people, and for agents.
Status: 0.0.7, experimental. One author, and the DSL still moves. Every operation is checked against measured geometry (eval/cases/), but none of it has had the years of abuse that make a CAD kernel trustworthy. Measure a part before you machine it.

const plate = box(80, 60, 8).tag("plate");
const wall = box(8, 60, 40).at(-36, 0, 20).tag("wall");
const body = union(plate, wall, { blend: 6 }); // the blend is the fillet
const drilled = body.cut(...grid(2, 2, 36, 40).map(([x, y]) => cylinder(3, 32).at(x, y)));
return drilled
.edges({ curve: "circle", role: "hole", adjacentTo: { faceNormal: "+z" } })
.expect({ count: 4 }) // a build error, not a surprise
.fillet(0.8);
You never name an edge by index. You describe it — the circular rims that open onto the top face — and the description still works after you move a hole.

One graph, one exact kernel
Your script builds a small JSON graph, and an exact kernel reads it — OpenCASCADE: real faces and edges, STEP export, and a refusal rather than an approximation when it cannot do something faithfully. The graph is what keeps today's script working after tomorrow's kernel swap.

Parts get measured, not assumed — volume, wall thickness, whether two bores actually meet. An agent gets the same numbers over MCP, with no screen to look at.
And when it does look, it gets pictures made for reading: views that share one scale, sections through the inside, and every surface coloured by the tag that built it.

It is aimed at small mechanical parts — brackets, flanges, manifolds, heat sinks, the things you print or machine one of. examples/ is twenty-two.
Why not CadQuery, build123d or OpenSCAD
Those are good, and much older. Three differences. Selectors are descriptive and
checked — .expect({ count: 4 }) turns a selector that silently started
matching three edges into a build error, which is the failure mode that makes
code-CAD fragile. What you see, what you measure and what you export come off
one exact B-rep, so the preview and the STEP file are one model, not two
projects. And measurement is an output rather than something you eyeball,
which is what makes the MCP surface real instead of a wrapper.
Install it
With Homebrew, on macOS or Linux (Linux from 0.0.6), which installs the host and no window:
brew tap ierehon1905/parcad
brew trust ierehon1905/parcad
brew install parcad
Then add it to your agent, which starts parcad when it
needs it. To use the app yourself, run parcad serve and open
http://127.0.0.1:4242 — the whole app is there, in your browser.
On Windows, from 0.0.6, the desktop app through winget:
winget install ParCAD.ParCAD
Nothing on the Homebrew path is quarantined. The same parcad is the headless driver
(parcad part.js), and a client of the running host: parcad tools
lists what an agent can call over MCP and parcad call <tool> calls it from
a shell.
Or the desktop app, from Releases:
| platform | download |
|---|---|
| macOS, Apple silicon | ParCAD-aarch64-apple-darwin.zip — unzip, drag to Applications |
| Linux x86_64 | .deb or .AppImage |
| Windows x86_64 | .msi or -setup.exe |
From the project's README.