@parkhill/mcp-server-for-rhino
v0.3.0
Published
MCP server for modeling in Rhino 3D (native geometry + Grasshopper) through AI assistants. Parkhill fork of McNeel's Rhino MCP.
Maintainers
Readme
@parkhill/mcp-server-for-rhino
An MCP server for modeling in Rhino 3D through AI assistants (Claude Desktop, Claude Code, Cursor, and others). It covers Grasshopper, and it also builds geometry directly in the Rhino document.
This is Parkhill's fork of McNeel's Rhino MCP, MIT licensed. The fork adds native geometry tools and installs side by side with the official plugin.
How it works
This npm package is a small launcher. The MCP server itself runs inside a Rhino plugin, the Parkhill-Rhino-MCP yak package. The launcher finds that plugin's router and connects your AI client to it.
AI client ──stdio──▶ npx @parkhill/mcp-server-for-rhino ──▶ router (in the yak) ──HTTP──▶ RhinoIf the Rhino plugin isn't installed yet, the server starts with a single install_parkhill_rhino_mcp tool. That tool installs the plugin from a local .yak file (see below).
Requirements
- Rhino 8 (Windows or macOS), or Rhino 9 WIP
- Node.js 18+
1. Install the Rhino plugin
Download parkhill-rhino-mcp-<version>-rh8_*-win.yak from the releases page, or get it from your team share. Then use one of these:
- Drag the
.yakonto an open Rhino window and restart Rhino. - Set
PARKHILL_RHINO_MCP_YAKto the.yakfile, or to the folder that holds it, in the MCP config below. Then ask the assistant to "install the Rhino plugin". The launcher extracts it for you.
2. Add the MCP server to your client
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"rhino-parkhill": {
"command": "npx",
"args": ["-y", "@parkhill/mcp-server-for-rhino", "--default-version", "8"],
"env": {
"PARKHILL_RHINO_MCP_YAK": "\\\\server\\share\\rhino-mcp"
}
}
}
}Claude Code:
claude mcp add rhino-parkhill -- npx -y @parkhill/mcp-server-for-rhino --default-version 8The env block is optional. It's only needed for the automatic plugin install.
Start Rhino, or let the server launch Rhino for you, and ask the assistant to model something.
Tools
Native geometry
| Tool | Operations |
|---|---|
| create_curve | line, polyline, curve, interpcrv, rectangle, circle, arc, ellipse |
| create_solid | plane, box, cylinder, sphere |
| create_surface | planar_srf, edge_srf, extrude_crv, extrude_srf, loft, sweep1, sweep2, revolve, cap |
| transform_objects | move, rotate, scale, scale1d, mirror, array_linear, array_rect, array_polar |
| edit_geometry | break, join, trim, split, extend, explode, offset, offset_srf |
| boolean_objects | union, difference, split, boolean_intersection, intersect |
| group_objects | group, ungroup |
Every call:
- is a single undo step in Rhino
- returns the ids of the objects it created
- accepts an optional
layerandnamewhen it creates objects
Everything from upstream
run_command,run_python,run_csharp- selection and object queries, viewport capture and camera
- document open, save and close
- Grasshopper 1 and 2 canvas tools
- multi-Rhino slot management
Options
| Flag / env | Meaning |
|---|---|
| --default-version 8\|9\|WIP | Which Rhino to launch when none is running (default 8) |
| PARKHILL_RHINO_MCP_YAK | Path to a .yak file, or a folder of them, used by the install fallback |
| PARKHILL_RHINO_MCP_RHINO_EXE_8 / _9 / _WIP | Custom Rhino executable path |
| PARKHILL_RHINO_MCP_STARTUP_TIMEOUT | Seconds to wait for a spawned Rhino (default 120) |
Coexisting with McNeel's plugin
The Parkhill plugin uses its own names and state, so both plugins can be installed at the same time:
- plugin id and command names (
PHMCPStart,PHMCPSpawn, …) - ports, starting at 10600
- state in
%LOCALAPPDATA%\Parkhill\rhino-mcp - MCP config key
rhino-parkhill
