乐于分享
好东西不私藏

AI插件驱驱控 Rhino & Grasshopper 完全指南:从零搭建 Cline + DeepSeek + Woyeai + 双 MCP 服务实现

AI插件驱驱控 Rhino & Grasshopper 完全指南:从零搭建 Cline + DeepSeek + Woyeai + 双 MCP 服务实现

当自然语言遇见参数化设计——我们有很多现成的工具可以测试使用,但是为了技术探索,可以自己手搓一个ai插件,会有很多坑,现在笔者给一个开源信息,如何让 Cline 直接指挥 Rhino 建模、Grasshopper 画板,并且仅通过一条 stdio 管道实现。

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_componentgh_run_solvergh_get_document_info。Cline 现在可以响应 “在 GH 画布上添加一个 Panel 组件” 这样的指令。


4. 当前基础功能一览

工具
服务
功能
状态
draw_circle
MCPRhino
创建圆形
✅ 稳定
draw_box
MCPRhino
创建立方体
✅ 稳定
gh_add_component
MCPGH
添加 Panel/Number Slider 到 GH 画布
✅ 稳定
gh_run_solver
MCPGH
触发 GH 解算
✅ 稳定
gh_get_document_info
MCPGH
获取 GH 文档信息
✅ 稳定

演示对话效果

用户:“在犀牛上画一个半径 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 建模环境

  1. 环境准备:Visual Studio 2022、Rhino 8、Grasshopper 载入、VS Code + Cline 插件

  2. 克隆/重建项目(见文末仓库)

  3. 编译 Woyeai 插件(确保引用 RhinoCommon、Grasshopper、Newtonsoft.Json),将生成的 .rhp 和 .dll 放入 C:\Users\<用户>\AppData\Roaming\Grasshopper\Libraries\net48\

  4. 编译 MCPRhino.exe 和 MCPGH.exe,同样放入上述目录

  5. 配置 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"}}
  6. 启动 Rhino,执行 Woyeai 命令打开面板,确保日志出现 ✅ HTTP API 已启动 (http://127.0.0.1:9002)

  7. 打开 Grasshopper(可选)

  8. 在 Cline 对话中直接下达建模指令,享受 AI 控模的快感!


7. 总结

我们成功将 Cline + DeepSeek + 自定义Rhino 插件 + 双 MCP EXE开发 打造成了一个工业级 AI‑CAD 交互框架初步。整个方案具有 纯 stdio、零额外端口、线程安全、易于扩展 的特点,实现了 “画圆和画盒” 的基础操作,更铺平了向全功能参数化设计助手演进的道路。

未来,我们计划开源完整代码,并持续丰富工具集(Rhino 编辑、GH 参数化、文件分析、AI 协作设计等),欢迎关注交流。

技术细节与完整源码可关注公众号后续推送,回复“Woyeai”获取最新版本。


撰文:沃野设计AI技术团队 执笔:shearlock
日期:2026-04-26