AI插件驱驱控 Rhino & Grasshopper 完全指南:从零搭建 Cline + DeepSeek + Woyeai + 双 MCP 服务实现
1. 项目缘起:让 AI 真正 “动手” 设计
在建筑设计、工业造型领域,Rhino 和 Grasshopper 是黄金搭档,但传统操作依赖鼠标。随着大模型编程能力爆发,MCP(Model Context Protocol) 的出现让我们能够在 Cline 中定义工具,由 AI 自动调用。然而让 AI 直接操控桌面端建模软件,一直存在通讯、线程安全、进程管理等深坑。
经过多轮迭代与踩坑,我们成功打造了一套纯 stdio、零额外端口、严格 JSON‑RPC 2.0 规范的 Rhino/Grasshopper AI 控制体系。本文将完整复盘技术架构、关键代码、部署步骤与未来蓝图,为所有希望让 AI “上手” 的设计师提供一份可落地的实战手册。
2. 核心架构:一条管道连接万物
text
Cline (VS Code) ←→ MCP Server EXE ←→ Rhino 插件 (HTTP 内部桥) ←→ Rhino / GH
为什么不用 TCP/HTTP 直连?
因为 Cline 的 MCP 支持标准输入输出(stdio),启动一个本地进程即可安全通信,无需占用额外端口,也不需要处理跨域问题。我们采用 EXE → 插件 HTTP API(127.0.0.1:9002) 的桥接方式,因为 Rhino 插件只能在主线程操作模型,通过 HTTP 同步到 UI 线程是最稳妥的做法。
整体架构:
-
Cline (VS Code): 作为 MCP 客户端,通过配置文件启动
MCPRhino.exe/MCPGH.exe进程 -
MCPRhino.exe / MCPGH.exe: 纯 stdio 的 JSON‑RPC 2.0 服务器,处理工具列表和调用,内部用
HttpClient向插件发起请求 -
Woyeai 插件 (Rhino .rhp): 同时包含一个
HttpListener,提供/draw/circle、/draw/box、/gh/add_component等端点,所有操作在RhinoApp.InvokeOnUiThread中安全执行 -
Global Mutex: 防止 Cline 与插件面板重复启动 EXE 导致互锁
3. 关键实现:从 0 到 1 填过的坑
3.1 插件面板 & 进程管理
我们设计了一个 WinForms 面板,不仅可以启动/停止 MCP 进程,还集成了日志监控。但最关键的是 “放手” —— 最终让 Cline 自行管理进程。因为如果用户在面板点击“启动 RHINO MCP”,EXE 内部的全局互斥体已被占用,Cline 再启动就会冲突退出。
正确姿势:面板打开即启动 HTTP API,不要手动点按钮;Cline 的命令配置为 MCPRhino.exe,它会自动拉起,仅实例一个。
3.2 纯 stdio 通信与严格的 JSON‑RPC 规范
Cline 要求非常严格:
-
id不能为null(必须返回空字符串"") -
成功包不能带
error字段,错误包不能带result -
protocolVersion必须为日期格式"2024-11-05" -
必须有
serverInfo.name和serverInfo.version
我们在 EXE 的主循环里逐行解析 JSON,并用 Newtonsoft.Json 构建响应对象,所有不符合规范的地方都可能导致 invalid_union 错误。
最终解决代码片段:
csharp
// 初始化响应必须包含 serverInforesult =new{ protocolVersion ="2024-11-05", capabilities =new{}, serverInfo =new{ name ="MCPRhino", version ="1.0.0"}}// 错误包中 id 不能为 nullerrorResp =new{ jsonrpc ="2.0", id ="", error =new{ code =-32700, message ="..."}};
3.3 真实驱动 Rhino 画圆、立方体
我们首先在插件 MCPPanelLogic 里实现了 HTTP API:
csharp
// http://127.0.0.1:9002/draw/circleRhinoApp.InvokeOnUiThread(()=>{var circle =newCircle(newPoint3d(x,y,z), radius); doc.Objects.AddCircle(circle); doc.Views.Redraw();});
MCPRhino.exe 收到 tools/call 后,通过 HttpClient.PostAsync 调用上述端点,将结果包装成 MCP 响应返回给 Cline。用户只需说 “画一个半径 20 圆心 (5,8,9) 的圆”,Cline 自动调用 draw_circle 工具,Rhino 视窗立刻出现几何体。
3.4 打通 Grasshopper 画布
在插件中添加 /gh/add_component 端点,直接通过 Grasshopper SDK 在活跃 GH 文档上创建组件:
csharp
var ghDoc = Grasshopper.Instances.ActiveCanvas?.Document;if(ghDoc ==null){...}var panel =newGrasshopper.Kernel.Special.GH_Panel();panel.CreateAttributes();panel.Attributes.Pivot =newPointF(x, y);ghDoc.AddObject(panel,false);ghDoc.NewSolution(false);
MCPGH.exe 同理注册工具 gh_add_component、gh_run_solver、gh_get_document_info。Cline 现在可以响应 “在 GH 画布上添加一个 Panel 组件” 这样的指令。
4. 当前基础功能一览
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
演示对话效果:
用户:“在犀牛上画一个半径 20 圆心 5,8,9 的圆”
Cline:✅ 调用 draw_circle → Rhino 出现圆形 → 返回成功文本
用户:“在 GH 画布上添加一个 Number Slider”
Cline:✅ 调用 gh_add_component → GH 出现滑杆 → 返回成功
5. 未来扩展方向:从单指令到全栈设计助手
当下的实现只是冰山一角。基于已打通的 插件 HTTP 桥 + MCP EXE 框架,我们可以任意添加工具,最终打造一个完整的 Rhino/Grasshopper 全功能 AI 代理。
5.1 实时控制类工具(需要 Rhino/GH 运行)
Rhino 增强
-
get_document_info→ 返回当前文档文件名、对象数量、图层 -
get_object_info→ 查询指定对象的几何类型、包围盒、材质 -
create_object/create_objects→ 统一创建点、线、圆、球、方块等 -
modify_object→ 修改对象名称、图层、颜色、可见性 -
execute_rhino_command→ 执行原生 Rhino 命令,如_ExtrudeCrv,_BooleanDifference -
view_control→ 切换视图、缩放、更改显示模式 -
capture_viewport→ 截取视口图像回传给 AI
Grasshopper 增强
-
gh_create→ 统一创建参数电池与普通组件(支持 GUID 精确创建) -
gh_connect→ 智能连线,自动匹配输入输出端口 -
gh_batch→ 批量事务,多次操作一次执行,支持回滚 -
gh_snapshot→ 获取画布快照,用于调试与回滚 -
gh_search/gh_registry_sync→ 本地组件搜索与注册表管理,辅助 AI 找到正确的组件
5.2 文件离线分析工具(无需 Rhino 运行)
计划新建 MCPFile.exe,利用 RhinoCommon 的 File3dm 直接读取 .3dm 文件,实现:
-
analyze_rhino_file→ 解析文件结构、对象统计 -
list_objects→ 列举所有对象及其类型 -
extract_geometry→ 提取指定对象的几何数据 -
measure_distance→ 测量文件中两对象距离
这类工具完全独立,AI 可在 Rhino 关闭时即可分析模型状态,极大提升批处理、模型审查场景效率。
5.3 参数化设计全自动工作流
依托 gh_create + gh_connect,AI 可以自动搭建参数化生成逻辑。例如一句 “用三个滑杆控制立方体的长宽高,并实时预览”,就能在 Grasshopper 中自动创建 Number Sliders → 连接 Box 组件 → 触发 solver,设计师随后只需手动调整滑块即可获得参数化结果。
6. 复现指南:5 分钟部署你自己的 AI 建模环境
-
环境准备:Visual Studio 2022、Rhino 8、Grasshopper 载入、VS Code + Cline 插件
-
克隆/重建项目(见文末仓库)
-
编译 Woyeai 插件(确保引用 RhinoCommon、Grasshopper、Newtonsoft.Json),将生成的
.rhp和.dll放入C:\Users\<用户>\AppData\Roaming\Grasshopper\Libraries\net48\ -
编译 MCPRhino.exe 和 MCPGH.exe,同样放入上述目录
-
配置 Cline MCP 在
cline_mcp_settings.json中添加:json
"mcpServers":{"woyeai-rhino":{"command":"C:\\Users\\DELL\\AppData\\Roaming\\Grasshopper\\Libraries\\net48\\MCPRhino.exe"},"woyeai-gh":{"command":"C:\\Users\\DELL\\AppData\\Roaming\\Grasshopper\\Libraries\\net48\\MCPGH.exe"}}
-
启动 Rhino,执行
Woyeai命令打开面板,确保日志出现✅ HTTP API 已启动 (http://127.0.0.1:9002) -
打开 Grasshopper(可选)
-
在 Cline 对话中直接下达建模指令,享受 AI 控模的快感!
7. 总结
我们成功将 Cline + DeepSeek + 自定义Rhino 插件 + 双 MCP EXE开发 打造成了一个工业级 AI‑CAD 交互框架初步。整个方案具有 纯 stdio、零额外端口、线程安全、易于扩展 的特点,实现了 “画圆和画盒” 的基础操作,更铺平了向全功能参数化设计助手演进的道路。
未来,我们计划开源完整代码,并持续丰富工具集(Rhino 编辑、GH 参数化、文件分析、AI 协作设计等),欢迎关注交流。
技术细节与完整源码可关注公众号后续推送,回复“Woyeai”获取最新版本。
撰文:沃野设计AI技术团队 执笔:shearlock
日期:2026-04-26
夜雨聆风