mcpField
P
ParCAD

ParCAD

Local
github.comMedia & Design10Updated 5d ago

About ParCAD

ParCAD is a code-driven parametric CAD tool for people and agents designing small mechanical parts. It uses an exact OpenCASCADE B-rep kernel, tying measurements, previews, and STEP exports to one model, with checked descriptive selectors.

Key features

  1. 01Build parametric parts from code
  2. 02Use the exact OpenCASCADE B-rep kernel
  3. 03Select and validate edges and faces descriptively
  4. 04Measure volume, wall thickness, and bore relationships
  5. 05Generate sections and tag-colored views
  6. 06Export STEP files

Use cases

  1. 01Design mechanical parts for printing or machining
  2. 02Check hole positions, wall thickness, and geometry
  3. 03Let agents assess parts using measured data
  4. 04Create previews and STEP files from one model

MCP support

ParCAD exposes MCP tools for operations such as evaluating parts and reading documentation. Agents can connect to a running app or host, or `parcad mcp` can host one for the duration of a client connection; the same tools are also available through the CLI.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

No install method listed yet

We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.

Repository
Packages
mcpbparcad-mcp-aarch64-apple-darwin.mcpb
mcpbparcad-mcp-x86_64-unknown-linux-gnu.mcpb
mcpbparcad-mcp-x86_64-pc-windows-msvc.mcpb

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

ParCAD

Parametric CAD you write as code — for people, and for agents.

Status: 0.0.13, experimental. Made by Maging Studio, 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.

Start here: Getting started, five minutes in a browser tab.

A bracket built by the script below, in the parcad viewport

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.

Fillet, chamfer, blended union, intersect, loft, sweep, helix, revolve, shell, draft, polar pattern and mirror, each built by the exact kernel

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.

Every kernel returns valid-looking wrong answers somewhere, OpenCASCADE and NVIDIA's newly open SMLIB included. ParCAD carries five patches to OpenCASCADE 8.0.1 for the cases its parts ran into, and checks each build itself after the kernel reports success.

Three cases on stock OpenCASCADE 8.0.1, NVIDIA SMLIB 1.0 and ParCAD: sixteen beads fused on a sphere, a union with its mirror, and a round where a disc meets a plate as wide as itself

The same manifold block cut open on a plane, cut faces in orange

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.

What an agent is shown: four views at one scale, two sections, and faces coloured by tag

It is aimed at small mechanical parts — brackets, flanges, manifolds, heat sinks, the things you print or machine one of. examples/ has thirty-one.

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.

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:

platformdownload
macOS, Apple siliconParCAD-aarch64-apple-darwin.zip — unzip, drag to Applications
Linux x86_64.deb or .AppImage (also on AppImageHub)
Windows x86_64.msi or -setup.exe (a winget package is waiting for review)

Each platform's build measures the whole eval corpus with the worker it ships before it is uploaded. The Mac app is not notarised yet, so macOS refuses it the first time: run xattr -dr com.apple.quarantine /Applications/ParCAD.app once. The Windows installer is not signed yet: SmartScreen warns, More info, then Run anyway. Every platform also has a parcad-cli-* archive — parcad, its worker beside it and the seed parts — for running the host without a window. Keep the two binaries together.

Build it

macOS, Linux and Windows. Day-to-day development is on macOS; the release workflow builds and measures on all three, and Linux on arm64 builds too.

You need Rust (the toolchain is pinned; rustup honours it), Bun, CMake, a C++ compiler, patch(1) and Python 3.11+. A full build wants around 20 GB free. On Linux the window also needs WebKitGTK (libwebkit2gtk-4.1-dev), and libclang-dev for the script sandbox's bindings. On Windows, use MSVC (Visual Studio Build Tools) and run the scripts from Git Bash, which also provides patch.

cd app && bun install --frozen-lockfile && cd ..   # first: the Rust build shells out to bun
cargo build --locked --release
tools/build-worker.sh --release   # the exact kernel — ~5 min on 14 cores, once
cd app && bun run tauri dev

cargo build produces a dev app whatever the profile — Tauri's switch is the custom-protocol feature, not --release — so launch the window through tauri dev or tauri build, never the bare binary. And a root cargo build deliberately does not build OpenCASCADE; tools/build-worker.sh does.

tools/check.sh            # everything that gates a change (~5 min)
tools/check.sh --fast     # the kernel crates and the editor tests (~4 s)

Or headless:

bun tools/run.ts examples/bracket.js > /tmp/bracket.json
./target/release/parcad /tmp/bracket.json --out out --step out/part.step

The app serves its UI and an MCP endpoint on http://127.0.0.1:4242. Parts live in ~/Library/Application Support/parcad as plain .js files you can edit anywhere.

Use it from an agent

With nothing installed: open ParCAD web, choose Connect your AI, and give your client the link it shows — Claude Code, the Claude app as a custom connector, Cursor, VS Code, or any client that connects to a URL. The tab is the server, with the same tools as the app, and it has to stay open; a relay passes the messages and keeps none (relay/README.md).

Every route below runs the same parcad on your machine: the one Homebrew installs, which the desktop app carries too. Install either first.

As a plugin, which brings the MCP server and a skill that says how to use it:

/plugin marketplace add ierehon1905/parcad
/plugin install parcad@parcad

In Codex, which finds parcad on PATH, so the Homebrew install:

codex plugin marketplace add ierehon1905/parcad
codex plugin add parcad@parcad

In Cursor or VS Code, with parcad on PATH:

Install in Cursor Install in VS Code

Or add the server by hand, in any client that launches stdio servers:

claude mcp add parcad -- parcad mcp
codex mcp add parcad -- parcad mcp

parcad mcp relays to the app or parcad serve when one is running, so the agent shares the live session with your window. When none is running it hosts one itself, for as long as the client stays connected. A client that connects by URL can use http://127.0.0.1:4242/mcp directly, but only while a host is up; brew services start parcad keeps one up from login.

The same tools are on the command line, with the same names and arguments — parcad tools lists them, parcad call evaluate_part --set [email protected] calls one — and they work whether or not the app is open.

ParCAD is also in the official MCP Registry as io.github.ierehon1905/parcad, so clients that browse it can install it by that name.

Start the agent on the read_docs tool, which hands over the whole language in one call.

More

Privacy

ParCAD collects nothing about you: no accounts, no analytics, no telemetry. PRIVACY.md lists everything that touches the network.

Licensing

ParCAD is free software under the GNU AGPL-3.0 or later: use it, change it and share it, but a modified ParCAD you distribute or run as a service must publish its source too. The parts you make are yours — part scripts and everything ParCAD exports from them can be licensed however you like, and the seed parts in examples/ are MIT. Releases through v0.0.9 stay MIT or Apache-2.0.

Built on components under other licences: OpenCASCADE and its bindings under vendor/ are LGPL-2.1, and one file of our own, crates/parcad-core/src/occlusion.rs, is MPL-2.0 because it was ported from fidget. Building from source is unencumbered; redistributing a binary carries obligations — NOTICE.md spells them out, including how to swap in your own OpenCASCADE.

This software makes use of facilities provided by the Open CASCADE Technology software.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.