Install
$ agentstack add mcp-tanishqbhattad-rhino-mcp ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Rhino MCP - RhinoAIBridge v4.8.0
The Rhino MCP server: full AI control of Rhino 8 / Rhinoceros 3D through the Model Context Protocol. Works with Claude Desktop, Claude Code, ChatGPT, Codex, Gemini and local Ollama models.
> The most powerful Rhino MCP server. 117 tools (curated into lean/standard/full profiles via RHINO_TOOLS) give Claude, ChatGPT, Codex, or Ollama full control of Rhino 8 - create geometry, manipulate layers, capture viewports, manage materials, generate architectural drawings, trace PDFs, and more. No .NET SDK required on the target machine.
[](LICENSE) [](https://www.rhino3d.com/) [](https://modelcontextprotocol.io/) [](https://claude.ai/) [](https://openai.com/) [](https://openai.com/codex) [](https://ollama.com/)
Why this Rhino MCP?
There are several Rhino MCP servers; this one is built for serious, long modeling sessions:
| | RhinoAIBridge | |---|---| | Tools | 117 total, exposed via profiles: RHINO_TOOLS=lean (~21, for small/local models), standard (~65, default), full (everything). Pruned tools stay callable via batch. | | Protocol | v5 multiplexed - reads, ping and cancel answer instantly while long scripts run | | Reliability | Idempotent retries (no duplicate geometry on reconnect), atomic batches with rollback, write-ahead log crash recovery | | Vision loop | Auto-thumbnails after every edit, multi-angle review sets, before/after pixel diffs | | Install | Pre-built plugin - no .NET SDK needed, one-click INSTALL.bat |
If Rhino MCP saves you modeling time, please star the repo - stars are how other Rhino users find it.
For Architects - No Coding Needed
You do not need to be a programmer to use this. If you can describe a building, you can model it:
> "Create a 4-storey office massing on a 30x18m footprint, taller ground floor, derive the floor slabs, add a core with two lifts and a stair, then put windows on the north facade every 3 metres."
Claude does the modeling in Rhino while you watch - and shows you what it built after every step. You can ask for:
- Massing studies - footprints, levels, setbacks, quick volume options side by side
- Floor plans and sections - cut, captured and restored without touching your viewport
- Area schedules - GFA/NFA by layer, level or name, ready to paste into a report
- Materials and views - "make the facade glass, the core concrete, show me a hero shot"
- Drawing imports - trace a PDF site plan or import a DWG and build on top of it
Setup is one double-click (INSTALL.bat) plus loading the plugin in Rhino - the [Installation Guide](INSTALL_GUIDE.txt) walks through every step with no jargon. If you get stuck, ask Claude itself: "help me set up Rhino MCP".
What is this?
RhinoAIBridge is a Model Context Protocol (MCP) server that bridges any MCP-compatible AI - Claude Desktop, ChatGPT, Codex, or local Ollama models - directly into Rhino 3D (version 8). The AI can read your scene, create and modify geometry, manage layers, run scripts, capture viewport images, generate architectural drawings, manage materials, trace PDFs, and execute any Rhino command - all from a natural language conversation.
This is the fastest, most feature-complete Rhino AI integration available:
- Sub-millisecond ping with in-process scene cache (no full scene walks)
- Local authenticated TCP bridge - per-user token handshake on
127.0.0.1 - Auto-thumbnails - every mutation returns a viewport JPEG so the AI sees what it built
- Atomic batches - multi-step operations roll back as one unit on failure
- No .NET SDK required on target machines - plugin is pre-built
- 117 MCP tools across 12 categories, curated into context-friendly profiles (
RHINO_TOOLS=lean|standard|full; defaultstandard≈65 tools) - Protocol 5: multiplexed connection (reads & ping answer while long commands run), idempotent retries (no duplicate geometry on reconnect), cooperative cancellation, binary image frames, and a write-ahead log for crash recovery
Quick Install (2 minutes)
Requirements for release ZIP users: Rhino 8, Python managed by uv (auto-installed if missing), and Claude Desktop / Codex / Gemini Antigravity / another MCP client.
Build-from-source requirement: .NET 8 SDK. Release ZIP users do not need the .NET SDK.
Windows
- Download the latest release zip from Releases and unzip anywhere
- Close Rhino, then double-click
INSTALL.bat- copies the pre-built plugin, installs dependencies, and patches Claude Desktop, Codex, and Gemini Antigravity automatically - Open Rhino 8 -> type
PluginManager-> Install -> browse to:
%APPDATA%\McNeel\Rhinoceros\8.0\Plug-ins\RhinoAIBridge\RhinoAIBridge.rhp (First time only - auto-loads on future starts)
- In Rhino command line, type:
AIBridge, then choose Safe, Standard, or Developer mode - Restart Claude Desktop -> ask: "ping Rhino"
That is it. No Visual Studio. No .NET SDK. No manual config editing.
For a detailed walkthrough see INSTALL_GUIDE.txt.
117 MCP Tools (profiles: lean / standard / full)
Set RHINO_TOOLS=lean|standard|full in the MCP server env to control how many tools are advertised to the client (default standard, ≈65). Anything not exposed in the active profile remains callable as a batch sub-op, and the live command list is available from the rhino://capabilities resource.
Scene & Context
| Tool | What it does | |------|-------------| | ping | Liveness check - returns doc name, unit system, object count, protocol version | | query_scene | Smart scene query: filter by type, layer, name, bbox, visibility | | get_rhino_commands | Discover all available Rhino commands with substring filter | | get_state | Read persistent key-value state | | set_state | Write persistent key-value state | | clear_state | Clear all persistent state |
Geometry Creation
| Tool | What it does | |------|-------------| | create_object | Universal create: Box, Cylinder, Sphere, Wall, Slab, Column, Roof, Curve, Point... | | derive_floors_from_mass | Auto-generate floor slabs by intersecting a massing solid | | create_core | Structural core punched through a massing solid | | place_openings_on_facade | Parametric window/door placement on any brep face | | revolve_profile | Create solids of revolution from profile curves | | get_cross_section | Cut a section curve at any Z height |
Modify & Transform
| Tool | What it does | |------|-------------| | modify_object | Change name, layer, colour, visibility, material | | transform_objects | Move, rotate, scale, mirror, array | | boolean_operation | Union, difference, intersection | | delete_objects | Delete by ID list | | align_to_grid | Snap objects to a grid | | undo | Undo last operation |
Layers & Organization
| Tool | What it does | |------|-------------| | create_layer | Create layer with colour | | create_layer_tree | Create hierarchical layer structure | | setup_arch_layers | One-call layer stack: Site, Structure, Facade, Slab, Core, Roof... | | batch_layer_visibility | Show/hide multiple layers at once | | name_group | Name a group of objects | | get_group | Get group info | | get_all_groups | List all groups |
Materials & Appearance
| Tool | What it does | |------|-------------| | set_layer_material | PBR material: color, roughness, metallic, opacity, emission | | set_pbr_material | Full PBR material on individual objects | | search_materials | Search AmbientCG material library | | download_material | Download and apply materials from AmbientCG | | edit_material | Edit existing material properties | | list_materials | List all materials in the document | | get_material | Get details of a specific material |
Viewport & Capture
| Tool | What it does | |------|-------------| | capture_viewport | JPEG/PNG viewport image with auto-downscale + state restore | | capture_review_set | Hero, plan, elevation, and detail captures in one multi-image call | | compare_before_after | Capture before, run a batch, capture after, and return visual diff metrics | | set_view | Switch to Top/Front/Right/Perspective/named view | | set_display_mode | Wireframe, Shaded, Rendered, Ghosted, Arctic... | | set_camera | Position camera by location+target or zoom to bounding box | | select_objects | Highlight objects in the Rhino viewport | | thumbnail | Quick low-res viewport thumbnail |
Sections & Drawings
| Tool | What it does | |------|-------------| | create_section | Define a section plane | | create_elevation | Create elevation view | | cut_section | Generate section cut geometry | | align_view_to_section | Orient viewport to match section | | create_plan | Generate a plan view at a given level | | create_all_plans | Auto-generate all floor plans | | list_sections | List defined sections | | update_section | Modify section parameters | | remove_section | Delete a section |
Display Mode Engine
| Tool | What it does | |------|-------------| | create_display_mode | 8 presets: diagram, technical, blueprint, sketch, axonometric, atmospheric, monochrome, cutaway | | apply_display_mode | Apply a custom display mode | | list_display_modes | List available display modes | | adjust_display_mode | Fine-tune display mode parameters | | delete_display_mode | Remove a custom display mode | | capture_illustration | Capture viewport with illustration settings |
PDF & File Import
| Tool | What it does | |------|-------------| | get_pdf_info | PDF metadata and page count | | preview_pdf_page | Preview a PDF page as image | | trace_pdf | Trace PDF geometry into Rhino (vector + OCR pipeline) | | clear_trace_layers | Remove traced PDF layers | | get_trace_layers | List traced PDF layers | | import_dwg | Import DWG/DXF files | | calibrate_scale | Calibrate imported geometry scale | | export_objects | Export objects to various formats |
Analysis & Measurement
| Tool | What it does | |------|-------------| | measure_object | Area, volume, bounding box, centroid | | measure_distance | Distance between two points | | check_intersection | Detect clashes between objects | | validate_objects | Check for bad geometry / open edges | | report_areas | Area schedule grouped by layer or type | | analyze_architecture | Architectural analysis of the model | | get_building_systems | Identify building systems | | get_level_summary | Summary per floor level | | detect_design_patterns | Detect repeated design patterns | | find_unassigned_geometry | Find geometry not assigned to any layer category |
Design Memory & Provenance
| Tool | What it does | |------|-------------| | set_design_brief | Store design intent and constraints | | get_design_brief | Retrieve current design brief | | tag_object | Tag objects with metadata | | get_provenance | Get object creation/modification history | | search_memory | Search design memory by keyword | | get_related_objects | Find objects related by design intent | | add_design_rule | Add a design validation rule | | log_session | Log a design session summary | | get_scene_diff | Compare current scene to a previous state | | get_change_log | Get change history | | get_tracker_version | Get change tracker version |
Scripting & Workflow
| Tool | What it does | |------|-------------| | run_command | Execute any Rhino command string; returns new object IDs | | execute_script | Run RhinoScript or Python code | | execute_python3 | Run Rhino 8 CPython 3 via RhinoCode/rhinocode in Developer mode | | batch | Send multiple operations as one atomic transaction | | batch_preview | Preview batch operations without executing | | get_log | Inspect bridge command log with timestamps and timing | | save_checkpoint | Save scene checkpoint for rollback | | restore_checkpoint | Restore scene to a saved checkpoint | | list_checkpoints | List available checkpoints |
Connecting Different AI Providers
Claude Desktop (recommended)
The installer patches claude_desktop_config.json automatically. Just restart Claude Desktop after install.
Manual config - %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"rhino-architect": {
"command": "uv",
"args": ["--directory", "C:\\path\\to\\rhino-mcp\\server", "run", "--frozen", "rhino-architect"]
}
}
}
OpenAI Codex
INSTALL.bat option [4] writes %USERPROFILE%\.codex\config.toml automatically.
Manual config - ~/.codex/config.toml:
[mcp_servers.rhino_architect]
command = "uv"
args = ["--directory", "C:\\path\\to\\rhino-mcp\\server", "run", "--frozen", "rhino-architect"]
startup_timeout_sec = 20
tool_timeout_sec = 120
enabled = true
[mcp_servers.rhino_architect.env]
RHINO_HOST = "127.0.0.1"
RHINO_PORT = "9544"
RHINO_SAFE_MODE = "0"
Or via CLI:
codex mcp add rhino_architect --env RHINO_SAFE_MODE=0 -- uv --directory "C:\path\to\rhino-mcp\server" run --frozen rhino-architect
codex mcp list
Then in Rhino run AIBridge, and ask Codex: "ping Rhino"
Gemini Antigravity
INSTALL.bat configures %USERPROFILE%\.gemini\antigravity\mcp_config.json automatically when Antigravity is detected.
Restart Antigravity after installation, run AIBridge in Rhino, choose an access mode, and ask: "ping Rhino"
ChatGPT
chat.py is a legacy direct-TCP demo client. For the full MCP tool surface, use the MCP server with Claude, Codex, Gemini Antigravity, or another MCP-capable client.
cd server
set OPENAI_API_KEY=sk-...
uv run python chat.py --provider openai --model gpt-4o
Ollama (fully local, free)
chat.py is useful for quick local experiments, but it intentionally exposes a smaller legacy direct-TCP tool surface than the MCP server.
ollama pull qwen2.5-coder:7b
cd server
uv run python chat.py --provider ollama --model qwen2.5-coder:7b
Best local models: qwen2.5-coder:32b, deepseek-r1:32b, llama3.1:70b
Anthropic API directly
cd server
set ANTHROPIC_API_KEY=sk-ant-...
uv run python chat.py --provider anthropic --model claude-opus-4-6
Architecture
Claude Desktop / ChatGPT / Codex / Ollama
| MCP (stdio)
v
server/src/rhino_architect/server.py <- FastMCP Python server (117 tools, profile-gated)
| TCP 127.0.0.1:9544
| local auth token + [1-byte flag][4-byte len][JSON payload]
v
plugin/RhinoAIBridge.rhp <- C# Rhino 8 plugin (.NET 8)
| UI thread dispatch + deferred redraw
v
Rhino 8 Document
Wire protocol: The local bridge requires a per-user auth token before it accepts commands. Responses use raw JSON framing to avoid Rhino plugin-loader runtime dependency failures. The scene snapshot cache means repeated query_scene calls are O(1) regardless of object count.
Atomic batches: Send batch(commands=[...], atomic=true) and the entire sequence runs inside one Rhino undo record. Any failure triggers Doc.Undo() - the scene is left exactly as it was.
Auto-thumbnails: Every mutating tool captures a 240x180 JPEG after the viewport redraws and embeds it in the response. Claude sees the result immediately without a separate capture_viewport call.
Building from Source
Only needed if you want to modify the C# plugin. Target machines do NOT need the .NET SDK.
Requirements: .NET 8 SDK, Rhino 8 (for RhinoCommon)
cd plugin
dotnet build --configuration Release
Output: plugin/bin/Release/net8.0/. Copy .rhp, DLLs, JSON runtime files, and runtimes/ to the Rhino plugin folder.
Troubleshooting
"Cannot connect to Rhino" - Make sure Rhino is open and you have run the AIBridge command in Rhino
…
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: tanishqbhattad
- Source: tanishqbhattad/rhino-mcp
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.