zenve3d-mcp
Model parametric CAD parts for Zenve 3D from Claude, or from any other MCP client.
Ask for a box and you get a project — a sketch, its dimensions, an extrude, a timeline you can go back and edit — not a mesh someone has to live with.
Install
// Claude Desktop ▸ Settings ▸ Developer ▸ Edit Config
{
"mcpServers": {
"zenve3d": { "command": "uvx", "args": ["zenve3d-mcp"] }
}
}
macOS on Apple silicon, and nothing else installed: the wheel carries the engine. Zenve 3D itself is a separate install from the App Store — you need it to open what the agent builds, but not to build it.
The four tools
| Tool | What it does |
|---|---|
guide |
The complete .zcmd language reference. The agent reads it once, then writes parts. |
run |
Runs a script through the real engine and reports what it saw — regions, faces, edges, solver state, the body table, every feature's state. Saves the script (and, on request, an STL) into ~/Downloads/Zenve. |
describe |
The same report for the project you have open in the app, so the agent can work from what you already have. |
apply |
Edits that project, live in your viewport, as one undoable step. |
run is the loop, and the loop is the point. A script cannot predict the
enumerations a kernel produces — a plate with a hole is two regions — so the
agent writes a few lines, runs them, reads back what exists, and writes the
next few against the truth instead of a guess. A refusal names its line and
still prints everything before it, which is usually what says what the right
answer was.
Each call gets a fresh engine and nothing is remembered between them. The script is the state: to change a part, the agent sends it again with the change in it.
Getting the part into the app
The finished script is already on disk: run saves it as
~/Downloads/Zenve/<name>.zcmd and names the path in what it reports back. One
file per part, rewritten on every run, so what is in the folder at the end is
the finished thing rather than a dozen numbered attempts. Open it with
File ▸ New from Script… in Zenve 3D. On iPad, send the file over AirDrop or
through Files and import it there.
Ask for an STL alongside it once the part is right, and it lands beside the script ready to slice.
Set ZENVE_OUTPUT_DIR to put those files somewhere else.
Working on the project you have open
Turn on AI mode — the lock beside the panel buttons — and the agent can
read your open project with describe and edit it with apply. The edit
appears in the viewport straight away and ⌘Z takes the whole thing back, however
many commands were in it.
The lock is the whole contract. It stops the app's own editing while an agent is working, which is what keeps the part it is picking faces and edges off from moving underneath it, and it is what puts the app's pointer to the open project where this server can find it. Turn it off and both tools say so instead of guessing.
Nothing lands silently. apply refuses if the lock is off or if the document
has moved since the agent last read it, and if the app does not take the edit
within ten seconds it withdraws it and says which of the three likely reasons
to check.
The projects folder is ~/zenve3d by default — the one the app asks you to
pick on first launch. If you picked somewhere else, set ZENVE_SESSION_DIR to
it.
Building from a checkout
./scripts/build-zenve3d.sh # stages the binary and the guide
cd clients/mcp && uv build --wheel
The binary is built against the static OCCT slice in prebuilt/occt/, so it
depends on nothing but macOS — checked by the build script rather than assumed.
Release files for zenve3d-mcp 0.8.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zenve3d_mcp-0.8.0-py3-none-macosx_14_0_arm64.whl | Python 3 | none | macOS 14.0+ ARM64 | Details |
Release files / zenve3d_mcp-0.8.0-py3-none-macosx_14_0_arm64.whl
| Download URL | zenve3d_mcp-0.8.0-py3-none-macosx_14_0_arm64.whl |
|---|---|
| Size | 12.0 MB |
| Tags | Python 3 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
10db9132ffb0406bce68b0086fa90783c7cbe919ded5676f923fdce3b1fff888
|
|
BLAKE2b-256 checksum How to use checksums |
00a252c523aa62cf6877ae97e13d15855ffcb41958793510df0bb3ab40a71866
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|