# NativeCAD 0.23.0 "Eschenbach" — native FreeCAD 1.1 documents, cad_verify, cad_edit_guarded

**182 tools: the 180 from 0.22.1 plus `cad_verify` and `cad_edit_guarded`.** The command schema is unchanged (1.64.0). Installs on 0.17.2 and later pick this release up through the self-update.

* **Native FreeCAD 1.1 documents.** `cad_export_body {format:"fcstd"}` writes a parametric FreeCAD 1.1 PartDesign document from the whole op history: fully constrained sketches with Pad, Pocket, Revolution, Groove, Loft and Pipe; Fillet, Chamfer, Draft, Thickness and Holes with ISO thread tables; Linear, Polar, Mirrored and MultiTransform patterns; and a `Params` spreadsheet that drives every parameterised field. Change a value in FreeCAD and the part rebuilds. An op PartDesign cannot express is embedded as a B-rep snapshot and listed in `fcstd.fallbacks[]`, so nothing is dropped.
* **A lossless `.FCStd` reader and editor.** A no-op round trip is byte-identical; an edit rewrites only the changed element, so FreeCAD recomputes exactly what changed.
* **Verify before you save: `cad_verify`.** One read-only call checks validity, topology, a named-dimension spec with tolerances, an engineering drawing PNG (views found, registered and compared) or a reference `.step`/`.FCStd`, and returns a ranked list of problems, each with a concrete fix.
* **Edit behind a firewall: `cad_edit_guarded`.** It applies param, feature or append edits to the session document or an `.FCStd`, proves nothing outside the edit changed, and rolls back on failure. An `.FCStd` is restored byte-identical.
* **FreeCAD on the MCP host.** Fillet, chamfer, hole and pattern export, the B-rep fallback, `cad_verify`'s recompute check and `cad_edit_guarded` on an `.FCStd` need FreeCAD 1.1 on the MCP host with `FREECADCMD` set. Without it they say so by name (`E_FREECAD_MISSING`), never a raw `spawn ENOENT`. The FreeCAD scripts now ship inside the `.mcpb`, plugin and npm bundle.
* **Mesh to B-rep.** The near-flat cone gate is on by default: the Rotor 67 blade comes back closed and within -0.056 % of the mesh volume.

See `packages/mcp/CHANGELOG.md` under `## 0.23.0` for every field and refusal.

## Gates

* **bundle-smoke over stdio, on the shipped `.mcpb` and `.plugin`.** `cadsolver 0.23.0`, tools/list 182, staged git 1776c777.

**Downloads:** https://featureboard.ai/nativecad/releases/nativecad-mcp-0.23.0.mcpb, https://featureboard.ai/nativecad/releases/nativecad-mcp-0.23.0.plugin and https://featureboard.ai/nativecad/releases/nativecad-mcp-0.23.0.tgz, plus the kernel library https://featureboard.ai/nativecad/releases/nativecad-kernel-0.3.2.tgz (`latest.json` lists bytes and sha256).

```
f4cf339331995807570e9464faeb47da819078a9e4d824aec7c96f587f1da6a1  nativecad-mcp-0.23.0.mcpb
ec452f8e8aed825fb09ab67116a34b0deecc4b3631f6cd5dd8b91ce340b01459  nativecad-mcp-0.23.0.plugin
0fb1151e10f0828ce800230aa16a89c08b8f1693d5ca0c3eb81bb0e39f4ed928  nativecad-mcp-0.23.0.tgz
ddbff515ae856b23af40afcfbb1bfab11757de16d50748d4b1c54d46ad8f3056  nativecad-kernel-0.3.2.tgz
```

**Build.** Built in the Cowork VM from origin/master `1776c777` (which carries the 0.23.0 prep, `73b1be52`), with this release commit's install-line embeds applied, and `SOURCE_DATE_EPOCH` set to 1792286662 (that commit's time). `dist/server.min.js` (sha256 `38595add…`) is identical in the `.tgz`, the `.mcpb` and the `.plugin`.
