关于 Rhino
RhinoMCP 将 Rhino 3D 与 Grasshopper 连接到 AI 助手,使用户可以通过自然语言建模、读取文档并构建 Grasshopper 定义。目标平台为 Rhino 8 的 Windows 和 macOS。
主要功能
- 01自然语言建模与几何创建
- 02读取文档与视口截图
- 03编写与连接 Grasshopper 组件
- 04运行 Rhino 命令与脚本
- 05按名称、颜色或类别筛选对象
适用场景
- 01通过对话批量创建或修改 Rhino 几何体
- 02根据视口截图获取可视化反馈
- 03用自然语言搭建 Grasshopper 参数化定义
MCP 相关
该项目是一个 MCP 服务,通过 Python 服务端向 MCP 客户端暴露 Rhino 与 Grasshopper 的工具,并经 TCP 连接到 Rhino 插件。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
70收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| curve_ids | array | 是 | |
| name | any | 否 | |
| closed | boolean | 否 | |
| loft_type | integer | 否 |
详细介绍
RhinoMCP
用自然语言通过 AI 控制 Rhino 3D 和 Grasshopper。
RhinoMCP 通过模型上下文协议将 Rhino 连接到 AI Agent, 让 Claude 和 Cursor 等助手只需通过聊天,就能为你创建几何体、读取文档并构建 Grasshopper 定义。
快速开始 · 功能介绍 · 使用方法 · 示例 · 工具参考
English · 简体中文
亮点
如需开展自主改进实验,请先阅读 后续指南。
- 描述你的需求,助手就会在 Rhino 中为你创建。
- 它会读取你的文档并截取视口,因此能根据屏幕上实际显示的内容进行操作。
- 它会为你编写 Grasshopper 脚本:查找组件、连接组件、设置滑块并求解。
- 一个插件和一条配置项即可同时支持 Rhino 和 Grasshopper。
- 需要更多控制时,它可以运行原生 Rhino 命令、RhinoScript-Python 或 RhinoCommon C#。
说明
RhinoMCP 面向 Windows 和 macOS 上的 Rhino 8。
演示
|
双向交互: AI 既能创建几何体,也能读取几何体。 |
自定义脚本: AI 在 Rhino 中编写并运行脚本。 |
想看完整介绍?Nate 制作了演示视频和安装教程。
功能介绍
Rhino
| 区域 | AI 可以做什么 |
|---|---|
| 创建几何体 | 创建点、直线、折线、圆、圆弧、椭圆、曲线、长方体、球体、圆锥体、圆柱体和曲面,支持逐个创建或批量创建 |
| 变换和编辑 | 移动、旋转、缩放、重新着色、重命名和删除对象 |
| 高级建模 | 放样、拉伸、扫掠、偏移、管状化;布尔并集、差集和交集 |
| 曲线操作 | 投影、求交和拆分曲线 |
| 图层和属性 | 创建、删除和切换图层;读取和写入对象属性 |
| 检查和选择 | 查看文档摘要和对象信息,并按名称、颜色或类别筛选对象(支持 AND / OR 逻辑) |
| 查看模型 | 捕获视口画面,让 AI 获得视觉反馈 |
| 分析 | 测量长度、面积、体积、边界框等 |
| 深入探索 | 运行任意 Rhino 命令、执行 RhinoScript-Python 或运行 RhinoCommon C#,并内置 RhinoScript 文档查询功能 |
Grasshopper
| 区域 | AI 可以做什么 |
|---|---|
| 查找组件 | 搜索已安装的组件库,并在放置组件前查看其输入和输出 |
| 构建画布 | 添加、定位、排列、更新和删除组件 |
| 连接组件 | 在组件之间连接和断开参数 |
| 设置和读取值 | 控制滑块、开关、面板和值列表;读取输出中的结构化数据 |
| 求解 | 运行求解并显示运行时警告和错误 |
| 一次构建完成 | 通过单次批量操作构建并连接整个图,或修改现有图 |
快速开始
分为三个步骤:安装 Rhino 插件、连接 AI 客户端,然后在 Rhino 中启动桥接程序。
1. 安装 Rhino 插件
在 Rhino 中打开 工具 → 包管理器,搜索 rhinomcp,然后点击 安装。重启 Rhino。
2. 连接 AI 客户端
选项 A:让 AI 助手为你安装(推荐)
如果你使用 Agent 式助手(Codex、Claude Code、Cursor、Cline 等),请粘贴此提示词:
Please install https://github.com/jingcheng-chen/rhinomcp as a local MCP server named `rhino`.
选项 B:安装 MCP 服务或手动编辑配置
Codex,一条命令:
codex mcp add rhino --env RHINO_MCP_HOST=127.0.0.1 -- uvx rhinomcp@latest
Claude Code,一条命令:
claude mcp add rhino -- uvx rhinomcp@latest
**ChatGPT:**使用上面的 Codex 本地设置。ChatGPT 应用/MCP 连接器目前连接的是远程 MCP 服务,而非 uvx rhinomcp 这类本地 stdio 命令。如果想围绕 RhinoMCP 构建 ChatGPT 应用,请使用 ChatGPT 开发者模式,并配置远程或隧道 MCP 端点。
你也可以手动编辑配置:
{
"mcpServers": {
"rhino": {
"command": "uvx",
"args": ["rhinomcp@latest"],
"env": {
"RHINO_MCP_HOST": "127.0.0.1"
}
}
}
}
重要
启动器
uvx来自 uv。如果尚未安装: macOSbrew install uv· Windowspowershell -c "irm https://astral.sh/uv/install.ps1 | iex"每次只运行一个 RhinoMCP 服务(Codex、Claude、Cursor 等,不能同时运行多个)。
让 AI 客户端自动重启服务(可选)
每次客户端启动时,清理残留的 rhinomcp 进程:
macOS / Linux
{
"mcpServers": {
"rhino": {
"command": "sh",
"args": ["-c", "killall rhinomcp 2>/dev/null; uvx rhinomcp@latest"]
}
}
}
Windows
{
"mcpServers": {
"rhino": {
"command": "cmd",
"args": ["/c", "taskkill /F /IM rhinomcp.exe 2>nul & uvx rhinomcp@latest"]
}
}
}
3. 启动 Rhino 桥接
打开 Rhino 后,在命令行中输入 mcpstart。这会启动服务连接所需的 TCP 桥接(运行 mcpstop 可停止)。每次 Rhino 会话运行一次即可。
保持最新
RhinoMCP 包含三个分别更新的部分:
- Python 服务。
uvx rhinomcp@latest会在客户端每次启动服务时向 PyPI 查询最新版本;普通的uvx rhinomcp则会保留首次下载的版本。如果你需要离线工作,可使用uv tool install rhinomcp安装一次,并在方便时运行uv tool upgrade rhinomcp。 - Rhino 插件。 通过 Package Manager 安装后,Rhino 会在启动时检查更新;启用“Automatically update packages when Rhino starts”后,Rhino 会安装更新,新版本将在下次重启时加载。通过将
.rhp拖入 Rhino 安装的插件不会更新。 - AI 客户端。 客户端会在启动服务时读取工具列表,因此更新后请重启客户端(或重新连接服务)。
服务连接时会读取插件版本;如果两者版本不同,会在日志中发出警告。需要较新插件的工具会提示更新,而不是悄悄执行其他操作;describe_capabilities 会报告这两个版本。
使用方法
桥接已运行且客户端已连接后,你会看到 RhinoMCP 工具。接下来只需聊天:让助手建模、检查场景,或构建 Grasshopper 图。

对于 Grasshopper,只需打开 Rhino 并运行 mcpstart。助手可以自行打开或创建 Grasshopper 文档,然后构建定义。例如:“创建一个点吸引子图案,使用高度各异的圆柱体。”
示例提示词
从原点开始,在间距为 10 个单位的网格上创建 6×6×6 个方块,尺寸从 1 递增到 5,并根据尺寸为方块着色,颜色从蓝色渐变到红色。使用 RhinoScript Python。
用立方体块拼出一只卡通风格、色彩鲜艳的犀牛。然后将它的头改成红色,并将选中的对象绕 Z 轴旋转 90°。
在 Grasshopper 中创建一个点吸引子图案:生成一个圆柱体网格,其高度随它们与吸引子点的距离变化,并添加一个用于移动该点的滑块。
工具参考
Rhino 工具
| 工具 | 用途 | | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | | `create_object` / `create_objects` | 创建一个或多个对象 | | `modify_object` / `modify_objects` | 转换或编辑一个或多个对象 | | `delete_object` | 删除对象 | | `boolean_union` / `boolean_difference` / `boolean_intersection` | 布尔运算 | | `loft` / `extrude_curve` / `sweep1` / `offset_curve` / `pipe` | 高级曲面和实体建模 | | `project_curve` / `intersect_curves` / `split_curve` | 曲线操作 | | `analyze_objects` | 测量长度、面积、体积、边界框等 | | `select_objects` | 按筛选条件选择(名称、颜色、类别;AND / OR) | | `get_objects` / `get_object_info` / `get_selected_objects_info` | 查询对象 | | `get_object_attributes` / `update_object_attributes` | 读取和写入对象属性 | | `create_layer` / `delete_layer` / `get_or_set_current_layer` | 图层管理 | | `get_document_summary` | 当前文档概览 | | `capture_viewport` | 截取视口屏幕截图以提供视觉反馈 | | `run_command` | 运行任意 Rhino 原生命令 | | `execute_rhinoscript_python_code` | 执行 RhinoScript-Python | | `execute_rhinocommon_csharp_code` | 执行 RhinoCommon C# | | `search_rhinoscript_functions` / `get_rhinoscript_docs` / `list_rhinoscript_modules` / `get_module_functions` | 查找 RhinoScript API 文档 | | `get_commands` | 列出可用命令 | | `undo` / `redo` | 撤销和重做 |Grasshopper 工具
| 工具 | 用途 | | --------------------------------------------------------------------- | ------------------------------------------------- | | `gh_create_document` / `gh_get_document_info` / `gh_get_canvas_state` | 检查文档和画布 | | `gh_search_components` / `gh_batch_search_components` | 搜索组件库 | | `gh_list_component_categories` / `gh_get_available_components` | 浏览已安装的组件 | | `gh_get_component_type_info` / `gh_get_component_info` | 检查组件类型或实例 | | `gh_list_components` | 列出画布上的组件 | | `gh_add_component` / `gh_update_component` / `gh_delete_component` | 添加、更新或删除组件 | | `gh_layout_components` | 自动排列画布上的组件 | | `gh_clear_canvas` | 清空画布 | | `gh_connect_components` / `gh_disconnect_components` | 连接或断开参数 | | `gh_set_parameter_value` / `gh_get_parameter_value` | 设置输入、读取输出 | | `gh_run_solution` / `gh_expire_solution` | 求解或使解决方案过期 | | `gh_build_graph` / `gh_mutate_graph` | 通过一次批处理调用构建或修改整个图 | | `gh_get_graph` / `gh_clear_graph` | 按图 ID 检查或清除对象 |工作原理
AI client ──MCP (stdio)──► rhinomcp (Python) ──TCP 127.0.0.1:1999──► Rhino plugin ──► Rhino + Grasshopper
server/:一个 Python MCP 服务(官方 Python SDK 2.x),用于公开每个工具并将其转发到 Rhino。plugin/:一个 RhinoCommon C# 插件,在 Rhino 内运行 TCP 监听器,并在主线程上执行命令。使用 Rhino 命令mcpstart/mcpstop启动和停止它。contracts/:JSON Schema 定义,用于确保两层之间的线协议保持同步。
IMPLEMENTATION.md 对代码有更深入的介绍。
安全
Python 服务和 Rhino 插件通过未经身份验证的 TCP 回环链路
(127.0.0.1:1999)通信。run_command、execute_rhinoscript_python_code 和
execute_rhinocommon_csharp_code 等工具会向模型开放 Rhino 内部的执行接口。这适用于本地 Agent。未添加身份验证前,请勿将其暴露到回环接口之外。
运维开关(环境变量)
| 变量 | 默认值 | 作用 |
|---|---|---|
RHINO_MCP_HOST | 127.0.0.1 | 连接目标。除非设置 RHINO_MCP_ALLOW_REMOTE=1,否则会拒绝非回环主机。 |
RHINO_MCP_PORT | 1999 | TCP 端口。 |
RHINO_MCP_ENABLE_RUN_COMMAND | 1 | 设置为 0 可禁用 run_command 工具。 |
RHINO_MCP_ENABLE_RHINOSCRIPT | 1 | 设置为 0 可禁用 RhinoScript-Python 执行。 |
RHINO_MCP_ENABLE_CSHARP | 1 | 设置为 0 可禁用 RhinoCommon C# 执行。 |
RHINO_MCP_VALIDATE | warn | 预检模式验证:off / warn / strict。 |
RHINO_MCP_TIMEOUT | 15.0 | 套接字超时时间,单位为秒。 |
RHINO_MCP_DEBUG | 0 | 详细日志记录。 |
面向开发者
构建、测试和发布
Python 服务(在 server/ 中运行)
uv venv && uv pip install -e ".[dev]" # set up
uv run pytest # run tests (no Rhino needed; uses a mock server)
uv run ruff check src/rhinomcp # lint
uv run python ../contracts/test_schemas.py # validate JSON schemas
uv build && uv publish # publish to PyPI
C# 插件
dotnet restore plugin/rhinomcp.sln
dotnet build plugin/rhinomcp.sln --configuration Release
要发布插件:以 Release 配置构建,将 manifest.yml 复制到 bin/Release,然后运行
yak build 和 yak push rhinomcp_xxxx.yak。
贡献
欢迎贡献。欢迎提交问题或拉取请求。
免责声明
这是第三方集成,并非由 McNeel 制作。由 Jingcheng Chen 构建。
Star 历史
随服务分发的建模指南
Python 包包含可重复使用的变换、平面区域、组织、验证和恢复指南。使用 get_modeling_guidance("overview")、
asset_general_strategy MCP 提示词,或 rhinomcp://guidance/{topic} 资源。
基本工具语义保留在工具描述中。无需本地实验文件夹或单独的技能。有关可用主题和发布详情,请参阅打包的指南。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。

