MCP Connector Rhino Documentation
How to install, configure, and use MCP Connector Rhino to connect AI clients like Claude Desktop, Claude Code, and Cursor to Rhino via Model Context Protocol.
Requirements
- Rhino 7 or Rhino 8
- Windows (64-bit)
Rhino 7 or Rhino 8 is required. Rhino 5 and 6 are not supported. One install covers both versions. Rhino 8 also runs inside Revit via Rhino.Inside.Revit, and the connector works there too.
Rendering and entourage tools work with the built-in Rhino renderer. Chaos Cosmos assets need V-Ray for Rhino installed and the Cosmos browser used at least once, so the assets are on disk.
AI Applications
- Claude Desktop
- Claude Code
- Cursor
- VS Code (GitHub Copilot agent mode)
- Visual Studio 2022 17.14+ / 2026 (GitHub Copilot)
- GitHub Copilot CLI
- Any other MCP client (via manual configuration below)
Installation
Close Rhino before starting the installation.
Manual Configuration
Claude Desktop and Cursor are configured automatically by the installer. For any other MCP client, add this to its MCP server configuration:
{
"mcpServers": {
"AUTOM8LABS_Rhino": {
"command": "C:\\ProgramData\\AUTOM8LABS\\MCPConnectorRhino\\Bridge\\MCPConnectorRhino.Bridge.exe"
}
}
}
After changing MCP configuration, restart the AI client completely for the changes to take effect.
GitHub Copilot
GitHub Copilot agent mode is a plain stdio MCP client too. VS Code and Visual Studio
2022 17.14+ / 2026 read the same "servers" shape; add this to
%APPDATA%\Code\User\mcp.json (VS Code) or %USERPROFILE%\.mcp.json
(Visual Studio):
{
"servers": {
"AUTOM8LABS_Rhino": {
"type": "stdio",
"command": "C:\\ProgramData\\AUTOM8LABS\\MCPConnectorRhino\\Bridge\\MCPConnectorRhino.Bridge.exe"
}
}
}
For the GitHub Copilot CLI, add this to %USERPROFILE%\.copilot\mcp-config.json:
{
"mcpServers": {
"AUTOM8LABS_Rhino": {
"type": "local",
"command": "C:\\ProgramData\\AUTOM8LABS\\MCPConnectorRhino\\Bridge\\MCPConnectorRhino.Bridge.exe",
"tools": ["*"]
}
}
}
Trial and Licence
The 14-day trial
Every install starts with a free 14-day trial of all 82 tools. The trial starts automatically the first time a tool runs, and it needs an internet connection to start.
When the trial ends, the connector locks. Every tool returns a purchase prompt until a licence is activated.
Activating a licence
After purchase, your licence key arrives by email. Activate it once from a terminal:
"C:\ProgramData\AUTOM8LABS\MCPConnectorRhino\Bridge\MCPConnectorRhino.Bridge.exe" --activate YOUR-KEY
One activation covers every AI client on the machine: Claude Desktop, Cursor, and Claude Code. Use --status to check the current trial or licence state, and --deactivate to release the seat before moving to another machine.
Quickstart
Tool Reference
All 82 tools are available during the 14-day trial and with a licence. See Trial and Licence.
| Tool | Example prompt |
|---|---|
| Test the connection between the AI client and Rhino | |
ping | Ping Rhino and tell me if you are connected |
| Summarise the open model: units, layers, object counts and extents | |
get_document_summary | Summarise the open Rhino model before I change anything |
| List objects in the model, filtered by layer, type or name | |
get_objects | List every object on the layer FACADE |
| Inspect the type, layer, material and bounding box of one object | |
get_object_info | What is the object I just created, and how big is it? |
| Read what the user currently has selected | |
get_selected_objects_info | What have I got selected right now? |
| Get the current view, units, active layer and render state | |
get_rhino_context | What view and units am I working in? |
| Get the RhinoCommon API cheat sheet before writing a script | |
get_rhinocommon_reference | Look up the RhinoCommon reference before you write that script |
| Create a single layer with a colour | |
create_layer | Create a layer called STRUCTURE in red |
| Create several layers at once | |
create_layers | Create layers for WALLS, SLABS, GLAZING and CORE |
| List the layers in the model | |
get_layers | List the layers in this model |
| Delete a layer and optionally its objects | |
delete_layer | Delete the empty SCRATCH layer |
| Read or change the active layer | |
get_or_set_current_layer | Set the current layer to GLAZING |
| List the linetypes available in the document | |
get_linetypes | What linetypes are loaded in this file? |
| Define a block from existing objects | |
create_block_definition | Turn the selected desk and chair into a block called WORKSTATION |
| List the block definitions in the model | |
list_block_definitions | What blocks are defined in this file? |
| Place instances of a block at given points | |
place_block_instances | Place the WORKSTATION block along the north wall at 1.8m centres |
| Create one piece of geometry | |
create_object | Create a 10m by 6m box at the origin |
| Create several objects in one call | |
create_objects | Create the six floor slabs at 3.5m centres |
| Move, rotate, scale or re-layer one object | |
modify_object | Move the core 2m north |
| Apply the same change to many objects | |
modify_objects | Move everything on the FACADE layer up 500mm |
| Delete one object | |
delete_object | Delete the object I just made |
| Delete many objects at once | |
delete_objects | Delete everything on the SCRATCH layer |
| Select objects by layer, type, name or colour | |
select_objects | Select every curve on the SITE layer |
| Array objects along a curve | |
array_along_curve | Array the balustrade post along the stair string at 300mm centres |
| Array objects around a centre point | |
array_polar | Array the column 12 times around the atrium centre |
| Mirror objects about a plane | |
mirror | Mirror the east wing across the centre line |
| Extrude a curve into a surface or solid | |
extrude_curve | Extrude the floor outline up 3.5m as a solid |
| Offset a curve by a distance | |
offset_curve | Offset the site boundary in by 5m |
| Offset a surface to give it thickness | |
offset_surface | Offset the roof surface down 300mm to give it thickness |
| Loft a surface through curves | |
loft | Loft between the three floor outlines |
| Sweep a profile along one rail | |
sweep1 | Sweep the handrail profile along the stair curve |
| Pipe a curve into a tube | |
pipe | Pipe the balustrade rails at 40mm diameter |
| Split a curve at points or by another curve | |
split_curve | Split the boundary curve where the road crosses it |
| Find intersections between curves | |
intersect_curves | Where do the grid lines cross the site boundary? |
| Project a curve onto a plane | |
project_curve | Project the roof outline down to the ground plane |
| Project a curve onto a surface | |
project_curve_to_surface | Project the path onto the terrain surface |
| Build a surface from boundary curves | |
create_surface_from_curves | Cap the courtyard with a surface from those four edges |
| Fillet the edges of a solid | |
fillet_edges | Fillet the top edges of the plinth at 25mm |
| Divide a surface into panels | |
panelize_surface | Panelise the facade into 1.5m by 3m panels |
| Union solids together | |
boolean_union | Union the tower and the podium |
| Subtract solids from one another | |
boolean_difference | Cut the window openings out of the wall |
| Keep only the overlap of solids | |
boolean_intersection | Keep just where the massing overlaps the site envelope |
| Merge touching solids per layer, keeping materials | |
union_touching | Merge the touching roof solids so they read as one |
| Take a section through the model | |
section_cut | Cut a section through the atrium at 1.5m |
| Generate 2D line work from the 3D model | |
make2d | Make a 2D elevation of the north facade |
| Create a SubD object | |
create_subd | Create a SubD box for the seating pod |
| Create several SubD objects at once | |
create_subds | Create SubD pods at each of those five points |
| Loft a SubD through curves | |
subd_from_loft | Loft a SubD through the three section curves |
| Convert a mesh to SubD | |
subd_from_mesh | Convert that scanned mesh to SubD so I can push and pull it |
| Convert a surface to SubD | |
subd_from_surface | Turn the canopy surface into a SubD |
| Convert SubD back to NURBS | |
subd_to_nurbs | Convert the pod SubD to NURBS so I can fabricate from it |
| Add a subdivision level | |
subdivide_subd | Subdivide the pod once more so it reads smoother |
| Move SubD vertices to shape the form | |
edit_subd_vertices | Pull the top vertices of the pod up 400mm |
| Assign a material to objects or a layer | |
set_material | Give the GLAZING layer a blue-tinted glass material |
| Control how a texture maps onto geometry | |
set_texture_mapping | Box-map the brick texture at 215mm so the courses read right |
| Apply a whole-model look in one step | |
apply_look | Apply the brutalist concrete look to the whole model |
| Add lights to the scene | |
create_lights | Add a sun from the south west and a soft fill |
| Set the environment, HDRI and skylight | |
setup_environment | Set up a bright overcast sky |
| Render the current view, with exposure and denoising | |
render_frame | Render the current view a stop brighter and denoise it |
| Capture the viewport as an image the AI can see | |
capture_viewport | Capture the viewport and tell me if the massing reads correctly |
| Change the viewport display mode | |
set_display_mode | Switch to Rendered display mode |
| Set the camera: named views, or eye and target | |
set_view | Give me a three-quarter view from the south east |
| Find coplanar faces, open solids, duplicates and stray lights | |
check_model | Check the model for anything that will bite me later |
| Measure surface or planar area | |
measure_area | What is the floor area of each slab? |
| Measure between points or objects | |
measure_distance | How far is the core from the east facade? |
| Measure the volume of closed solids | |
measure_volume | What is the total volume of the massing? |
| Analyse surface curvature | |
curvature_analysis | Show me where the canopy curvature is tightest |
| Analyse solar position and exposure | |
analyze_solar | Where does the sun hit the courtyard in June? |
| Export selected geometry to a file | |
export_geometry | Export the massing to OBJ for the visualiser |
| Place procedural trees, shrubs and figures | |
place_entourage | Put some trees along the street edge and a few figures on the plaza |
| Place a reference image in the viewport to model against | |
place_reference_image | Put this elevation photo in the viewport so I can trace the proportions |
| List the Chaos Cosmos assets available locally | |
list_cosmos_assets | What Cosmos assets have I got downloaded? |
| Place a Chaos Cosmos proxy in the model | |
place_cosmos_asset | Drop that Cosmos oak tree at the plaza corner |
| Ask the user to pick a point in Rhino | |
pick_point | Ask me to pick where the entrance goes |
| Ask the user to pick one object | |
pick_object | Ask me which wall you should work on |
| Ask the user to pick several objects | |
pick_objects | Ask me to pick the slabs you should renumber |
| Run any Rhino command by name | |
run_command | Run the Rhino ZoomExtents command |
| Undo the last action | |
undo | Undo that |
| Redo the action you just undid | |
redo | Redo it |
| List the tested modelling recipes available | |
list_recipes | What modelling recipes have you got? |
| Fetch one recipe with its parameters | |
get_recipe | Get the sawtooth stair recipe and run it at 3.5m floor to floor |
| Write and run RhinoCommon Python directly | |
execute_code | Write a script that reports the floor area of every closed solid by layer |
FAQ
Changelog
First release
- 82 tools to model, inspect, render and repair Rhino geometry with natural language
- One install covers Rhino 7 and Rhino 8, including Rhino running inside Revit via Rhino.Inside
- NURBS and SubD modelling, booleans, curves and surfaces, layers and blocks
- Materials, lighting, environment and rendered frames, plus viewport capture so the AI can see and correct its own work
- Model hygiene checks for coplanar faces, open solids, duplicates and stray lights
- Tested modelling recipes for stairs, screens, grids, facades and entourage
- Entourage, reference images and Chaos Cosmos proxies