Driving Grasshopper by conversation.
A field guide to the rhino-gh-mcp server, organized around its defining idea — the scenario mode you put the canvas in before you prompt. One collapsible chapter per mode, plus a capstone that walks a single object through all of them. Every prompt is real, transcribed from live test sessions. Tap a section to open it.
Setup Before you start
The server bridges two sides — a Rhino plugin (the rhino_* tools) and a Grasshopper canvas component (the gh_* tools). Both must be live before the agent can read or build anything.
- Rhino 8 open, plugin service started — run
_ToggleMcpService(listener on127.0.0.1:9876). - Grasshopper open with the rhino-gh-mcp Server component on the canvas,
Run = True(bridge on:9999). - Server registered in your AI client (Claude Desktop / Claude Code) — see the repo README for the config entry.
- Sanity check — ask “check the Rhino and Grasshopper connection.” The agent should report
gh_statusandrhino_statusboth available.
The key idea The five modes
The canvas component gates what the agent is allowed to do through a single Scenario dropdown. Pick the mode before you prompt — it is the difference between “explain this” and “rebuild this.” The rest of this guide is one chapter per mode; the names below jump to them.
- If a call comes back
capability denied, the Scenario is too restrictive for what you asked — bump it up and re-prompt. Scope changes to the server component only take effect after agh_recompute.
Scenario mode · read-only Inspect 1 workflow The agent may read the canvas and document only — it changes nothing. Point it at a definition someone handed you and get back a plain-language account of how it works.
Explain a definition
The fastest way to onboard onto an unfamiliar file — or to audit your own before you hand it off. The agent traces the graph and narrates it; because it can’t touch anything, the output is safe to run on a client’s file.
Inspect changes nothing on the canvas — the whole deliverable is the written read-out it hands back. Here is the actual response for this definition:
Scenario mode · parameters only Tune 1 workflow The agent may change slider and parameter values only — never the topology. You keep the definition you built and re-aim its behavior through the controls it already exposes.
Re-aim a perforated facade
You already have a perforated facade with an attractor curve on the canvas. You don’t want it rebuilt — you want the behavior re-aimed: bigger holes overall, but tightening toward the curve. Tune finds the values that satisfy that intent.
- Read the exposed sliders and find which map to hole min / max and the attractor falloff.
- Raise the base hole scale, then invert the remap direction so proximity to the curve now shrinks holes rather than growing them.
- Recompute and confirm no cell self-intersects at the new maximum.
Scenario mode · the default · edit & narrate Coach 2 workflows The default mode. The agent may tune values and add components from the active Skill’s allowed set — but not script. Every change is highlighted on the live canvas and explained in chat, each reply closing with a structured “What I changed” block — so a fix becomes a lesson, not a black box.
Reorganize & document a messy definition
A working-but-illegible definition, cleaned up without touching what it produces — grouped into named stages, colour-coded, and every slider given a descriptive nickname. The explicit “don’t change the logic” guardrail keeps it a pure readability pass.
- Related components collected into named groups, one per workflow stage.
- A consistent colour per stage, so the pipeline reads at a glance.
- Sliders renamed to what they actually drive — no more
Number×20. - A closing “What I changed” block itemizing every edit; outputs verified identical.
Fix a flagged node — narrated
The same louver definition applied to two different surfaces — but on the larger one, the components turn red. Coach traces why, fixes it so the large set renders like the small one, and highlights exactly what it touched — then, in the same conversation, re-aims the twist.
- Same script, different surface, red components. A definition that resolves on one surface can flag on another — Coach traces the flagged node upstream to find the cause instead of rebuilding from scratch.
- The fix is narrated. Coach highlights the region it changed and annotates it right on the canvas, so you can see — and trust — exactly what moved.
- Then keep designing. Once it renders, the same conversation re-aims the result — flipping the incremental twist — without ever leaving the canvas.
Scenario mode · run curated & plugin Execute 1 workflow · 4 parts The agent may run curated components and scripts — including third-party plugins. Proof it drives more than stock Grasshopper: a full Ladybug Tools climate study that ends in a facade answering the wind.
Climate analysis → wind-responsive facade
Four parts, each its own prompt — the agent builds on the canvas it left. Weather data in, sun and wind analysed on the site, then geometry driven by the findings.
[facade] fin sliders.Each part below is one prompt and the result it produced, in the order they were run:
- If Direct Sun Hours reads 0 everywhere, check your normals. A facade whose normals point into the building reports zero sun even at noon — ray-test the open side and flip it outward before blaming the weather file.
- Ladybug lives outside the curated component scope — widen the canvas’s component scope to
defaultsorallso the agent can place its components. (That’s a different knob from the server’s policy preset —parameter/curated/full— set when the server starts.) Install via Rhino’s_PackageManager(searchladybug-tools). - The heavy LB components are slow to place; expect the agent to verify with
gh_canvas_summaryinstead of re-adding on a timeout.
Scenario mode · build from scratch Author 2 workflows The agent may add, wire, and script components freely — the full build. Two proofs it isn’t facade-specific: a site and a product, both from an empty canvas.
Parametric landform
A terrain definition that balances drama with buildable flats — and, because it was asked for, explains itself and comes out organized into stages.
A native heightfield — layered Lorentzian hills and sine undulation over a grid — with the drivers grouped and labelled so the terrain stays legible and editable. No scripts.
Parametric jewelry ring
The same author-a-definition loop at millimetre scale — engraving, adjustable stones, bezels, faceted cuts — built and refined across two prompts.
Min(x, 0.9·y) → Faceted gems + bezels.- Author is the widest gate — it can script. It shouldn’t reach for one first, though: if a native recipe exists, that’s the build (see Traps).
Capstone · one object, every mode Cross-scenario 1 object · 4 modes The clearest way to feel the scenario dial: take a single object — a twisted, perforated lantern — and walk it through Author → Coach → Tune → Inspect. Same canvas, four completely different jobs.
An elliptical profile (Rx ≠ Ry so the twist reads) that rotates as it rises, lofted into a body, then opened into a continuous perforated shell with attractor-graded holes. Pure native components.
- Profile + twist —
Ellipse→Rotate Axis(angles fromRange 0…twist) →Moveup (Unit Zfactors) into a stacked, progressively rotated stack. - Body —
Loftthe profiles into one untrimmed surface. - Panel grid —
Divide Domain²→Isotrimcells →Areacentroids. - Hole sizing —
Distancecentroid→attractor →Bounds→Remapinto a (min, max) hole scale. - Perforated shell — per cell: naked
Brep Edges→Join= outer boundary;Scaleabout centroid = hole;Loft [outer, inner]= an open frame. Adjacent frames share edges, so it reads as one continuous pierced shell.
Re-pattern the shell — but have the agent show its work. The changed components are highlighted on the live canvas and the reply ends with a “What I changed” block.
The fastest loop of the four. No topology change — only the sliders the definition already exposes, hunting for the values that satisfy “bigger, but don’t let holes collide.”
Hand the finished canvas to someone who’s never seen it. Inspect touches nothing — it reads the graph and explains the data flow, which components drive what, and what each slider does.
…plus tables summarizing the key design elements — their corresponding components and the parameters they’re set to:
Reference Traps we hit
Hard-won across the sessions above. Read these once and you’ll skip most of the dead ends.
- Start with a summary when a definition already exists. Before touching an unfamiliar canvas, ask the agent to summarize the definition first — it forces the MCP to actually read and understand the base it’s working from, so its edits build on what’s already there instead of guessing at intent.
- Don’t retry timeouts blindly. When the 3D preview is heavy, group / panel / component adds can time out on the MCP side yet still land on the canvas. A blind retry makes duplicates — verify with
gh_canvas_summaryfirst. - Tag and name your sliders. Give the controls that matter descriptive, prefixed nicknames —
[facade] fin_depth,[site] slope,[twist] max_angle— instead of a wall of “Number Slider.” Labelled sliders make manual tuning far faster, and they let a later pass in another mode (a Tune sweep, a Coach edit) find and adjust — or clear — a whole subsystem in one go rather than guessing which grey node does what.
- The agent will sometimes jump to a Python script even when a native recipe exists. If a typology has a recipe, the recipe is the build — “smooth random”, “evenly spaced”, “wavy”, “attractor-driven” all have native graphs.
- Reserve scripting for the genuine cases: (a) Voronoi/Delaunay with > 50 sites where graph nodes flood the canvas, (b) image-driven attractor fields, (c) RhinoCommon-only operations (e.g.
Mesh.CreateFromBrep).