Metadata-Version: 2.4
Name: zenve3d-mcp
Version: 0.4.0
Summary: Model parametric CAD parts for Zenve 3D from an MCP client
Project-URL: Homepage, https://zenve3d.com
Author: Zenve
License: Proprietary
Keywords: 3d-printing,cad,mcp,parametric
Classifier: Environment :: Console
Classifier: License :: Other/Proprietary License
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Multimedia :: Graphics :: 3D Modeling
Requires-Python: >=3.10
Requires-Dist: mcp>=2.0.0
Description-Content-Type: text/markdown

# zenve3d-mcp

Model **parametric CAD parts** for [Zenve 3D](https://zenve3d.com) 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

```jsonc
// 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 two 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. |

`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

Ask the agent for the finished script, save it as a `.zcmd` file, and open
**File ▸ New from Script…** in Zenve 3D. On iPad, send the file over AirDrop or
through Files and import it there.

## Building from a checkout

```sh
./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.
