Any app with an MCP server
Add a CAD app Cxddie doesn't know yet, from one JSON file.
Any CAD app with an MCP server can be used in Cxddie without changing Cxddie. In New workspace, click Add a CAD app with an MCP server…, then give it a name and the server: a URL for an HTTP server, or the command that starts a stdio server. That writes ~/.cxddie/cad-apps/<id>.json, and the app can be picked for workspaces at once.
What agents get
- Straight away: all of the app's own tools, named
<id>_<tool>. - Mapped in the file: Cxddie's own tools (
get_scene,save,export,screenshot,run_code), which work on the workspace's own document and feed the live 3D view, sidecars and merges. Tools the file doesn't map are hidden from agents rather than failing.
The file
{
"id": "toolcad",
"label": "ToolCAD",
"mcp": { "url": "http://127.0.0.1:3000/mcp" },
"document": { "ext": ".tcad", "binary": true },
"run": { "tool": "execute_code", "arg": "code", "language": "Python" },
"ops": {
"activate": { "tool": "open_document", "args": { "path": "{file}" } },
"scene": { "tool": "list_objects" },
"save": { "tool": "save_document", "args": { "path": "{path}" } },
"export_stl": { "tool": "export_mesh", "args": { "path": "{path}", "format": "stl" } },
"export_step": { "tool": "export_cad", "args": { "path": "{path}" } }
},
"screenshot": { "tool": "capture_view", "args": { "view": "{view}", "width": "{width}" } },
"instructions": "Units are millimetres."
}| Field | |
|---|---|
id, label | Required. The id is lowercase letters, digits and dashes. |
mcp | Required. { "url": … } for streamable HTTP, or { "command": …, "args": [ … ] } for stdio. |
document | The workspace's file: model<ext>. binary files are tracked with LFS and locked. |
run | A tool that runs code in the app. The agent's code is sent as is, with the workspace's document made active first. |
ops.activate | Opens or switches to the workspace's document ({file}, a stable {key}). Without it, workspaces sharing the app share its active document. |
ops.scene | Returns { "objects": [ { "name", "label", "type", "visible", "bbox" } ] } as JSON text. |
ops.save, ops.export_stl, ops.export_step | Write the document or its geometry to {path}. STL export also drives the live 3D view and thumbnails. |
screenshot | Returns an image of the viewport ({view}, {width}, {height}). Without it, Cxddie renders the exported STL. |
instructions | Notes agents read, such as units and conventions. |
A placeholder that is a whole value keeps its type, so "{width}" is sent as a number. Cxddie reads the files again whenever New workspace opens, so edits show up there. A file Cxddie can't read is listed in New workspace with what's wrong.