Cxddie

Rhino

NURBS modelling in Rhino 8, through RhinoMCP.

Kind: App MCP · Document: model.3dm · Install: brew install --cask rhino · Override: CXDDIE_RHINO

Cxddie drives Rhino through RhinoMCP and serves the usual CAD session on the workspace's port, so agents get the same tools as everywhere else.

One-time setup

  1. In Rhino 8, open Tools → Package Manager, install rhinomcp and restart Rhino.
  2. Run the mcpstart command in Rhino.
  3. Install uv (brew install uv, or winget install astral-sh.uv on Windows). Cxddie runs RhinoMCP with uvx.

If Rhino isn't running, Start launches it and waits for the plugin.

One document per workspace

Every workspace gets its own Rhino document, tagged with the workspace's id and made active before every call. Workspaces using Rhino take turns, so several agents can share one Rhino safely. save writes model.3dm to the worktree, and an existing .3dm in the repo is opened when the workspace starts.

What agents get

run_code runs RhinoScript-Python in the workspace's document. These are in scope:

  • rs (rhinoscriptsyntax)
  • sc (scriptcontext), with sc.doc set to this workspace's document
  • Rhino (RhinoCommon) and doc

print() output is returned. RhinoMCP's other tools are offered too, as rhino_<tool>. That includes its RhinoScript docs lookup, object queries and the Grasshopper tools.

Conventions agents are told

  • Use the document's model units (millimetres for new documents).
  • Name objects and put them on meaningful layers.
import rhinoscriptsyntax as rs
corners = [(0, 0, 0), (60, 0, 0), (60, 30, 0), (0, 30, 0),
           (0, 0, 6), (60, 0, 6), (60, 30, 6), (0, 30, 6)]
plate = rs.AddBox(corners)
hole = rs.AddCylinder((40, 15, -1), 8, 2.5)
rs.BooleanDifference(plate, hole)

Rhino support is new and has been tested against a stand-in server, not yet against every Rhino release. If something doesn't work, please let us know.

On this page