Cxddie

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

~/.cxddie/cad-apps/toolcad.json
{
  "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, labelRequired. The id is lowercase letters, digits and dashes.
mcpRequired. { "url": … } for streamable HTTP, or { "command": …, "args": [ … ] } for stdio.
documentThe workspace's file: model<ext>. binary files are tracked with LFS and locked.
runA tool that runs code in the app. The agent's code is sent as is, with the workspace's document made active first.
ops.activateOpens or switches to the workspace's document ({file}, a stable {key}). Without it, workspaces sharing the app share its active document.
ops.sceneReturns { "objects": [ { "name", "label", "type", "visible", "bbox" } ] } as JSON text.
ops.save, ops.export_stl, ops.export_stepWrite the document or its geometry to {path}. STL export also drives the live 3D view and thumbnails.
screenshotReturns an image of the viewport ({view}, {width}, {height}). Without it, Cxddie renders the exported STL.
instructionsNotes 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.

On this page