工作坊1:使用MCP进行代理AI设计编排
AAG2025:建筑几何进展-麻省理工学院 | 2025年11月16日至17日 | 工作坊页面
Rhino Grasshopper MCP服务器
一个模型上下文协议(MCP)服务器,提供30多种工具,用于通过自然语言与Rhino 3D和Grasshopper进行交互。功能包括参数化几何图形生成、跨文件工作流、智能几何图形传输和自动化工作流建议。使用HTTP桥架构来处理MCP(Python 3.10+)和Rhino的IronPython之间的Python版本兼容性。
建筑
┌─────────────────┐ ┌──────────────────┐ ┌─────────────┐
│ MCP Client │ ◄─────► │ MCP Server │ ◄─────► │ Rhino │
│ │ MCP │ (Python 3.10+) │ HTTP │ Bridge │
└─────────────────┘ └──────────────────┘ └─────────────┘
▲
│
Rhino API
Grasshopper API主要特点
- 30+工具 -Rhino 3D和Grasshopper自动化的综合工具集
- 智能几何传输 -自动转换和验证文件之间的几何图形(直线、曲线、曲面、网格、Breps)
- 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内部运行的HTTP网桥服务器:
rhino_bridge_server.py-HTTP服务器(IronPython 2.7/3.9)start_rhino_bridge.py-启动脚本
工具/
基于装饰器的自动发现工具定义:
rhino_tools.py-Rhino 3D工具gh_tools.py-蚱蜢工具tool_registry.py-自动发现系统Grasshopper File Library/-.gh文件存储
快速开始
1.安装MCP服务器依赖项
cd MCP/
pip install -r requirements.txt2.启动Rhino Bridge服务器
- 打开Rhino 8
- 打开Python脚本编辑器:
Tools > Script > Edit - 加载并运行:
exec(open(r'C:\path\to\rhino_gh_mcp\Rhino\start_rhino_bridge.py').read())- 验证:访问
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客户端以加载服务器。
配置
调试模式(可选)
控制工具响应冗长度以优化令牌使用:
- 复制
.env.example到.env在项目根中 - 集
DEBUG_MODE=true发展或DEBUG_MODE=false用于生产 - 重新启动Rhino桥服务器以应用更改
优点:
DEBUG_MODE=false-通过删除详细的调试日志节省60-80%的令牌(建议用于生产)DEBUG_MODE=true-用于故障排除的完整诊断输出
看 Tools/README.md 以获取详细示例。
工作流元数据(可选)
添加JSON元数据来描述Grasshopper文件并启用工作流建议:
- 创建
metadata.json在Tools/Grasshopper File Library/ - 定义文件输入、输出、依赖关系和工作流
- 使用
suggest_grasshopper_workflow智能文件序列建议工具
元数据结构示例可在 Tools/Grasshopper File Library/metadata.json.
可用工具
犀牛工具(5)
draw_line_rhino-在三维空间中绘制线条get_rhino_info-获取会话信息typical_roof_truss_generator-生成参数化桁架get_selected_rhino_objects-获取选定对象数据get_rhino_object_geometry-提取几何图形
蚱蜢档案管理(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-多文件工作流编排
传统蚱蜢工具(16)
list_grasshopper_sliders/set_grasshopper_sliderset_multiple_grasshopper_slidersanalyze_grasshopper_slidersanalyze_grasshopper_inputs_with_contextanalyze_grasshopper_outputs_with_contextget_grasshopper_overviewget_grasshopper_componentslist_grasshopper_valuelist_componentsset_grasshopper_valuelist_selectionlist_grasshopper_panels/set_grasshopper_panel_textget_grasshopper_panel_dataset_grasshopper_geometry_inputextract_grasshopper_geometry_outputdebug_grasshopper_state
高级工具(5)
bake_grasshopper_geometry-使用层控制将几何体烘焙到Rhinoexecute_custom_grasshopper_script-在GH上下文中运行Pythonsuggest_grasshopper_workflow-从元数据中获取工作流建议set_active_gh_file-切换活动文档predict_truss_tonnage-基于样本数据多项式回归模型的大跨度特拉斯吨位预测
使用Grasshopper文件
重要: 在将Grasshopper文件与MCP工具一起使用之前,请确保它们已正确配置:
Grasshopper文件的先决条件:
- 首先手动测试文件 -直接在Grasshopper中打开每个.gh文件,以验证其是否正确加载
- 安装所需插件 -确保Rhino/Grasshopper中安装了所有插件依赖项
- 检查文件引用 -验证是否可以访问任何外部文件引用或链接资源
- 正确保存文件 -确保文件以稳定状态保存,没有错误
常见问题:
- 无法通过MCP打开文件 -通常表示缺少插件或文件错误。在Grasshopper中手动打开以查看特定的错误消息。
- 超时错误 -文件可能太大或具有循环引用,导致解决方案速度较慢。简化或禁用重型组件。
只有在验证文件在Grasshopper中正常工作后,您才能将其与MCP工具一起用于自动化。
将已验证的.gh文件存储在 Tools/Grasshopper File Library/ 用于文件管理工具。
EML公约
这 eml_ (外部ML)前缀可在Grasshopper中实现自动组件发现:
支持的组件:
| 类型 | 示例 | 目的 |
|---|---|---|
| 数字滑块 | eml_panel_count | 数字输入 |
| 面板 | eml_output_data | 文本显示 |
| 布尔切换 | eml_enable_feature | 开/关开关 |
| 价值清单 | eml_material_type | 下拉菜单 |
| 几何参数 | eml_input_curve | 几何I/O |
工作流示例:
1. Open generator.gh with eml_output_curve
2. Extract geometry using list_eml_parameters
3. Open processor.gh with eml_input_curve
4. Transfer using transfer_eml_geometry_between_files这实现了跨文件自动化,而无需手动重新布线。
添加新工具
工具使用基于装饰器的自动发现。将两个装饰器添加到同一个文件中:
# MCP tool (client-side)
@rhino_tool(name="create_circle", description="Create a circle...")
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 (server-side)
@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插件已加载到Rhino中
- 代码更改后重新启动网桥服务器
- 检查Rhino Python控制台是否有错误
桥中的类型错误:
- IronPython不支持所有类型提示
- 在桥处理程序中使用简单类型或省略类型提示
测试
- 桥梁状态:
curl http://localhost:8080/status - 列出端点:
curl http://localhost:8080/info - 测试工具: 使用MCP客户端执行工具
- 调试: 检查Rhino Python控制台是否存在桥接错误
需求
- Rhino 8支持Python
- MCP服务器的Python 3.10+
- Grasshopper(可选,用于参数化工具)
- MCP兼容客户端
许可证
MIT许可证
作者
侯赛因·扎尔加(赛义德·侯赛因·扎尔加)
