Rhino has three routes to a working MCP connection — McNeel's official RhinoAI, the community rhinomcp package, and ZirenAI. The community route is the one people get stuck on, almost always at the same step: the bridge has to be started by hand with a Rhino command.
A plugin runs inside Rhino and listens on a local TCP port. A separate server process is what your AI client launches, and it forwards typed tool calls to that port. Three things can therefore be wrong: the plugin is not loaded, the listener was never started, or the client cannot launch the server.
Rhino differs from SketchUp in one useful way — the listener is not automatic. You start it explicitly, which means you can also check it explicitly.
McNeel publishes RhinoAI under an MIT licence at github.com/mcneel/rhinoai. The quickest path is to download their Rhino3D connector and let it install the plugin for you. It lists Claude Desktop, Claude Code, GitHub Copilot, OpenAI Codex, Gemini CLI and local models as compatible clients, and development currently targets a Rhino 9 branch.
If you already pay for one of those clients, start here. It is official, open source, and runs against the Rhino on your own machine — you supply the AI client. The comparison is on the main Rhino MCP page.
In Rhino, go to Tools → Package Manager, search for rhinomcp, install it, and restart Rhino. The restart is not optional; the plugin will not register its commands until you do.
This is the step everyone misses. In Rhino's command line, type:
mcpstart
That starts the TCP listener on 127.0.0.1:1999. Until you run it, the plugin is installed and completely inert — no error, no warning, nothing. mcpstop shuts it down again.
If mcpstart is not recognised as a command, the plugin did not load. Check Tools → Options → Plug-ins before going further.
The server runs through uvx. Confirm it is on your PATH:
uvx --version
If that is not found, fix it now — it resurfaces later as a confusing client-side error. See spawn uvx ENOENT.
{
"mcpServers": {
"rhino": {
"command": "uvx",
"args": ["rhinomcp@latest"],
"env": {
"RHINO_MCP_HOST": "127.0.0.1"
}
}
}
}
The file must be valid JSON. Restart the client completely — most read the configuration only at startup.
Ask for something read-only first: "how many layers are in this document?" If that answers, the whole chain works. Only then try something that creates geometry.
ZirenAI does the whole of Route 2 for you, per application. It detects the modelling software you have and sets each one up on its own — plugin, runtime, and the bridge. No Package Manager, no mcpstart to remember, no JSON, no AI client to register.
The community rhinomcp package covers Grasshopper as well as Rhino — searching for components, building and wiring a canvas, setting parameters and solving. If authoring parametric definitions is what you want, that is the route to take.
ZirenAI deliberately does not touch Grasshopper definitions. It works on Rhino document geometry, layers and blocks and leaves your definitions alone.
Rhino's failures are more legible than SketchUp's because the listener is explicit — but there are still about eight ways it goes wrong, each with a recognisable symptom.
Troubleshooting →