返回市场
犀牛_gh_mcp

犀牛_gh_mcp

作者:goldsmith3232 星标更新:2025-11-15

项目介绍

<div align="center"> <img src="logo.png" alt="研讨会标志" width="300"/> </div>

研讨会 1:使用 MCP 的代理 AI 设计编排

AAG2025: 建筑几何学进展 - 麻省理工学院 | 2025年11月16日-17日 | 研讨会页面

<div align="center"> <img src="img_1.jpg" width="30%" /> <img src="img_2.jpg" width="30%" /> <img src="img_3.jpg" width="30%" /> </div>

Rhino Grasshopper MCP 服务器

一个模型上下文协议(MCP)服务器,提供超过30种工具,通过自然语言与Rhino 3D和Grasshopper进行交互。功能包括参数化几何生成、跨文件工作流、智能几何传输和自动化工作流建议。采用HTTP桥接架构来处理MCP(Python 3.10+)和Rhino的IronPython之间的Python版本兼容性。

架构

┌─────────────────┐         ┌──────────────────┐         ┌─────────────┐
│   MCP 客户端    │ ◄─────► │   MCP 服务器     │ ◄─────► │   Rhino     │
│                 │   MCP   │ (Python 3.10+)   │  HTTP   │   桥接      │
└─────────────────┘         └──────────────────┘         └─────────────┘
                                                              ▲
                                                              │
                                                         Rhino API
                                                         Grasshopper API

主要特性

  • 30+ 工具 - 全面的工具集用于Rhino 3D和Grasshopper自动化
  • 智能几何传输 - 自动转换和验证文件间的几何(线、曲线、表面、网格、Brep)
  • EML 规范 - 使用 eml_ 前缀自动发现参数以支持跨文件工作流
  • 工作流建议 - JSON元数据系统建议文件序列和参数连接
  • 文件管理 - 自动启动Grasshopper,批量文件操作,文件验证
  • DEBUG_MODE - 通过.env文件切换详细输出,在生产中节省60-80%的令牌
  • 自定义脚本 - 在Grasshopper中执行Python代码,完全访问组件数据
  • 几何烘焙 - 用户控制烘焙到Rhino,带有图层管理和确认
  • 自动发现 - 基于装饰器的工具注册,无需手动配置

项目结构

MCP/

MCP服务器和客户端集成:

  • main.py - 自动发现的MCP服务器
  • bridge_client.py - 与Rhino通信的HTTP客户端
  • config/ - 配置模板
  • requirements.txt - Python 3.10+依赖项

Rhino/

运行在Rhino内部的HTTP桥接服务器:

  • rhino_bridge_server.py - HTTP服务器(IronPython 2.7/3.9)
  • start_rhino_bridge.py - 启动脚本

Tools/

基于装饰器自动发现的工具定义:

  • rhino_tools.py - Rhino 3D工具
  • gh_tools.py - Grasshopper工具
  • tool_registry.py - 自动发现系统
  • Grasshopper 文件库/ - .gh文件存储

快速开始

1. 安装MCP服务器依赖项

cd MCP/
pip install -r requirements.txt

2. 启动Rhino桥接服务器

  1. 打开Rhino 8
  2. 打开Python脚本编辑器:工具 > 脚本 > 编辑
  3. 加载并运行:
    exec(open(r'C:\path\to\rhino_gh_mcp\Rhino\start_rhino_bridge.py').read())
    
  4. 验证:访问http://localhost:8080/status

3. 配置MCP客户端

添加到您的MCP客户端配置文件(可选:如果在虚拟环境中运行,可以指向该Python可执行文件):

{
  "mcpServers": {
    "rhino_gh": {
      "command": "python",
      "args": ["C:\\path\\to\\rhino_gh_mcp\\MCP\\main.py"]
    }
  }
}

4. 重启MCP客户端

重启您的MCP客户端以加载服务器。

配置

DEBUG_MODE(可选)

控制工具响应的详细程度以优化令牌使用:

  1. .env.example复制到项目根目录下的.env
  2. 设置DEBUG_MODE=true用于开发或DEBUG_MODE=false用于生产
  3. 重启Rhino桥接服务器以应用更改

优点:

  • DEBUG_MODE=false - 通过移除冗长的调试日志节省60-80%的令牌(推荐用于生产)
  • DEBUG_MODE=true - 完整的诊断输出用于故障排除

详情见Tools/README.md

工作流元数据(可选)

添加JSON元数据以描述Grasshopper文件并启用工作流建议:

  1. Tools/Grasshopper 文件库/创建metadata.json
  2. 定义文件输入、输出、依赖关系和工作流
  3. 使用suggest_grasshopper_workflow工具获取智能文件顺序建议

示例元数据结构见Tools/Grasshopper 文件库/metadata.json

可用工具

Rhino 工具(5)

  • draw_line_rhino - 在3D空间中绘制线
  • get_rhino_info - 获取会话信息
  • typical_roof_truss_generator - 生成参数化桁架
  • get_selected_rhino_objects - 获取选定对象的数据
  • get_rhino_object_geometry - 提取几何

Grasshopper 文件管理(5)

  • list_gh_files - 列出可用的.gh文件
  • open_gh_file - 打开文件(自动启动Grasshopper)
  • open_all_gh_files - 一次性打开所有文件
  • get_active_gh_files - 获取当前打开的文件
  • close_gh_file - 关闭特定文件

EML 参数工具(4)

基于eml_前缀的自动化工作流工具:

  • list_eml_parameters - 发现带有eml_前缀的组件
  • get_eml_parameter_value - 提取参数值
  • set_eml_parameter_value - 设置参数值
  • suggest_eml_connections - 建议数据流连接

跨文件工作流工具(2)

  • transfer_eml_geometry_between_files - 直接几何传输
  • execute_eml_workflow - 多文件工作流编排

传统 Grasshopper 工具(16)

  • list_grasshopper_sliders / set_grasshopper_slider
  • set_multiple_grasshopper_sliders
  • analyze_grasshopper_sliders
  • analyze_grasshopper_inputs_with_context
  • analyze_grasshopper_outputs_with_context
  • get_grasshopper_overview
  • get_grasshopper_components
  • list_grasshopper_valuelist_components
  • set_grasshopper_valuelist_selection
  • list_grasshopper_panels / set_grasshopper_panel_text
  • get_grasshopper_panel_data
  • set_grasshopper_geometry_input
  • extract_grasshopper_geometry_output
  • debug_grasshopper_state

高级工具(5)

  • bake_grasshopper_geometry - 将几何烘焙到Rhino,带有图层控制
  • execute_custom_grasshopper_script - 在GH上下文中运行Python
  • suggest_grasshopper_workflow - 根据元数据获取工作流建议
  • set_active_gh_file - 切换活动文档
  • predict_truss_tonnage - 基于多项式回归模型预测长跨度桁架吨位

使用Grasshopper文件

重要: 在使用MCP工具之前,请确保Grasshopper文件已正确配置:

Grasshopper文件的前提条件:

  1. 首先手动测试文件 - 直接在Grasshopper中打开每个.gh文件,验证其无错误加载
  2. 安装所需插件 - 确保所有插件依赖项已在Rhino/Grasshopper中安装
  3. 检查文件引用 - 验证任何外部文件引用或链接资源是否可访问
  4. 正确保存文件 - 确保文件在没有错误的情况下保存在一个稳定的状态

常见问题:

  • 文件无法通过MCP打开 - 通常表示缺少插件或文件错误。手动在Grasshopper中打开以查看具体错误消息。
  • 超时错误 - 文件可能太大或有循环引用导致解决方案缓慢。简化或禁用重型组件。

只有在验证文件在Grasshopper中正常工作后,才能使用MCP工具进行自动化。

将验证过的.gh文件存储在Tools/Grasshopper 文件库/中,以便与文件管理工具一起使用。

EML 规范

eml_(外部ML)前缀使Grasshopper中的组件自动发现成为可能:

支持的组件:

类型示例目的
数字滑块eml_panel_count数值输入
面板eml_output_data文本显示
布尔开关eml_enable_feature开关
值列表eml_material_type下拉菜单
几何参数eml_input_curve几何输入/输出

工作流示例:

1. 打开带有`eml_output_curve`的generator.gh
2. 使用`list_eml_parameters`提取几何
3. 打开带有`eml_input_curve`的processor.gh
4. 使用`transfer_eml_geometry_between_files`传输

这使得跨文件自动化无需手动重新连线。

添加新工具

工具使用基于装饰器的自动发现。将两个装饰器添加到同一文件中:

# MCP工具(客户端侧)
@rhino_tool(name="create_circle", description="创建一个圆...")
async def create_circle(center_x: float, center_y: float, radius: float):
    return call_bridge_api("/create_circle", {
        "center_x": center_x,
        "center_y": center_y,
        "radius": radius
    })

# 桥接处理器(服务器侧)
@bridge_handler("/create_circle")
def handle_create_circle(data):
    import rhinoscriptsyntax as rs
    center = [data['center_x'], data['center_y'], 0]
    radius = data['radius']
    circle_id = rs.AddCircle(center, radius)
    return {"success": True, "circle_id": str(circle_id)}

重启两个服务器以激活新工具。

故障排除

桥接服务器未响应:

  • 检查Rhino是否打开且桥接脚本正在运行
  • 访问http://localhost:8080/status进行验证
  • 检查防火墙是否阻止了8080端口

工具未出现:

  • 验证MCP客户端配置路径是否正确
  • 配置更改后重启MCP客户端
  • 检查MCP/main.py路径是否使用绝对路径

Grasshopper工具失败:

  • 确保Grasshopper插件已加载到Rhino中
  • 代码更改后重启桥接服务器
  • 检查Rhino Python控制台中的错误

桥接中的类型错误:

  • IronPython不支持所有类型提示
  • 在桥接处理器中使用简单类型或省略类型提示

测试

  1. 桥接状态: curl http://localhost:8080/status
  2. 列出端点: curl http://localhost:8080/info
  3. 测试工具: 使用MCP客户端执行工具
  4. 调试: 检查Rhino Python控制台中的桥接错误

要求

  • 支持Python的Rhino 8
  • Python 3.10+用于MCP服务器
  • Grasshopper(可选,用于参数化工具)
  • 与MCP兼容的客户端

许可证

MIT许可证

作者

Hossein Zargar (Seyed Hossein Zargar)