Revit MCP服务器
使用Claude AI通过自然语言控制Autodesk Revit。此项目实现了 模型上下文协议(MCP) 该服务器连接了Claude Desktop和Revit 2023,通过61个工具实现了人工智能驱动的BIM操作。
问克劳德 *“列出所有墙”*, *“创建包含建筑立面的图纸”*,或 *“按级别计数门”* 它直接在Revit模型中执行。
建筑
Claude Desktop ──(stdio/MCP)──► TypeScript MCP Server ──(HTTP :8080)──► C# Revit Plugin ──► Revit API| 组件 | 语言 | 角色 |
|---|---|---|
| MCP服务器 | Types/Node.js | 将Claude Desktop的MCP工具调用转换为HTTP请求 |
| Revit插件 CNET Framework 4.8 | 接收HTTP请求并在主线程上执行Revit API操作 |
C#插件使用 ExternalEvent 用于线程安全Revit API访问的模式。一 HttpListener 上 localhost:8080 接收工具请求,并通过将其排队 ExternalEvent,并等待结果。
先决条件
- Autodesk Revit 2023 (安装在默认路径
C:\Program Files\Autodesk\Revit 2023\) - Node.js v18+(下载)
- .NET Framework 4.8开发包 (下载)
- 克劳德桌面版 (下载)
项目结构
revit-mcp-server/
├── RevitPlugin/ # C# Revit Add-in
│ ├── App.cs # Plugin entry point (IExternalApplication)
│ ├── HttpServer.cs # HTTP server on localhost:8080
│ ├── ExternalEventHandler.cs # Thread-safe Revit API execution
│ ├── ToolRouter.cs # Routes tool names to handlers
│ ├── RevitMcpPlugin.csproj # .NET project file
│ ├── RevitMcpPlugin.addin # Revit add-in manifest
│ ├── Tools/
│ │ ├── QueryTools.cs # get_elements, find_elements, quantities
│ │ ├── ElementTools.cs # create/delete/move/copy elements
│ │ ├── ParameterTools.cs # get/set parameter values
│ │ ├── ViewTools.cs # manage views, duplicate, filters
│ │ ├── SheetTools.cs # create sheets, place viewports
│ │ ├── SelectionTools.cs # select elements by criteria
│ │ ├── VisibilityTools.cs # hide/isolate/unhide elements
│ │ ├── LevelGridTools.cs # levels, grids, rename elements
│ │ ├── MEPTools.cs # panel schedules, conduit QA, room contents
│ │ ├── AnnotationTools.cs # tags, duplicate tag detection
│ │ └── ProjectTools.cs # categories list, warnings
│ └── Helpers/
│ ├── CategoryHelper.cs # Category name resolution (60+ aliases)
│ ├── UnitHelper.cs # Unit conversions (mm/m/ft/in)
│ └── JsonHelper.cs # Element-to-JSON serialization
│
├── mcp-server/ # TypeScript MCP Server
│ ├── package.json
│ ├── tsconfig.json
│ ├── .env.example
│ └── src/
│ ├── index.ts # Entry point
│ ├── server.ts # MCP server setup + tool registration
│ ├── revit-client.ts # HTTP client for Revit plugin
│ ├── types.ts # TypeScript interfaces
│ └── tools/
│ ├── query-tools.ts # Element query tools
│ ├── element-tools.ts # Element creation/modification tools
│ ├── parameter-tools.ts # Parameter tools
│ ├── view-tools.ts # View management tools
│ ├── sheet-tools.ts # Sheet management tools
│ ├── selection-tools.ts # Selection tools
│ ├── visibility-tools.ts # Visibility tools
│ ├── level-grid-tools.ts # Level/grid tools
│ ├── mep-tools.ts # MEP tools
│ ├── annotation-tools.ts # Annotation tools
│ └── project-tools.ts # Project-wide tools
│
└── README.md安装说明
步骤1:构建C#Revit插件
- 打开终端并导航到
RevitPlugin文件夹:
cd RevitPlugin- 还原NuGet包并构建:
dotnet restore
dotnet build -c Release注: 这.csproj参考中的Revit API DLLC:\Program Files\Autodesk\Revit 2023\。如果您的Revit安装在其他地方,请更新 `条目在RevitMcpPlugin.csproj`.
- 构建输出将在
RevitPlugin\bin\Release\:
- RevitMcpPlugin.dll - Newtonsoft.Json.dll
步骤2:部署Revit插件
将三个文件复制到Revit 2023附加模块文件夹:
# Create target folder variable
set ADDIN_DIR=%APPDATA%\Autodesk\Revit\Addins\2023
# Copy the add-in manifest
copy RevitPlugin\RevitMcpPlugin.addin "%ADDIN_DIR%\"
# Copy the built DLLs
copy RevitPlugin\bin\Release\RevitMcpPlugin.dll "%ADDIN_DIR%\"
copy RevitPlugin\bin\Release\Newtonsoft.Json.dll "%ADDIN_DIR%\"复制后,文件夹应包含:
%APPDATA%\Autodesk\Revit\Addins\2023\
├── RevitMcpPlugin.addin
├── RevitMcpPlugin.dll
└── Newtonsoft.Json.dll步骤3:安装MCP服务器依赖项
cd mcp-server
npm install步骤4:构建MCP服务器
cd mcp-server
npx tsc这将TypeScript编译为JavaScript mcp-server/dist/ 文件夹。
步骤5:配置Claude桌面
打开Claude Desktop配置文件:
%APPDATA%\Claude\claude_desktop_config.json添加 revit 进入下 mcpServers:
{
"mcpServers": {
"revit": {
"command": "node",
"args": [
"C:\\FULL\\PATH\\TO\\github_revit_MCP_server\\mcp-server\\dist\\index.js"
],
"env": {
"REVIT_HOST": "localhost",
"REVIT_PORT": "8080"
}
}
}
}重要提示: 替换C:\\FULL\\PATH\\TO\\使用项目文件夹的实际绝对路径。使用双反睫毛\\JSON格式。
步骤6:启动
- 启动Revit 2023 并打开一个项目。该插件将自动加载并启动端口8080上的HTTP服务器。您应该看到一个确认对话框。
- 重新启动克劳德桌面 因此,它采用了新的MCP服务器配置。
- 开始聊天! 在Claude Desktop中打开一个新对话,然后尝试:
- *“列出模型中的所有墙”* - *“获取项目信息”* - *“按类型统计所有门”* - *“创建名为建筑立面的新图纸a-501”*
验证连接
您可以独立验证每个组件:
检查Revit插件HTTP服务器:
curl http://localhost:8080/health预期响应:
{
"success": true,
"status": "running",
"revitConnected": true,
"documentName": "YourProject.rvt",
"serverVersion": "1.0.0"
}直接测试工具调用:
curl -X POST http://localhost:8080/execute -H "Content-Type: application/json" -d "{\"tool\": \"get_project_info\", \"parameters\": {}}"可用工具(61)
查询工具(10)
| 工具 | 说明 |
|---|---|
get_elements | 按类别分页获取元素 |
get_element_parameters | 获取元素的所有参数 |
find_elements_by_parameter | 查找与参数值匹配的元素 |
calculate_quantities | 计算面积、长度、体积起飞 |
count_elements_by_category | 统计一个或所有类别中的元素 |
count_elements_by_family | 按族和类型对元素进行计数 |
get_element_by_id | 获取单个元素的详细信息 |
get_element_room | 找出哪个房间包含元素 |
get_project_info | 获取项目元数据 |
export_schedule_data | 将Revit明细表导出为JSON |
元素工具(8)
| 工具 | 说明 |
|---|---|
create_wall | 在两点之间创建墙 |
create_floor | 从边界点创建楼板 |
create_room | 在标高上的某个点创建房间 |
create_family_instance | 放置一个家庭实例(门、窗、家具) |
delete_elements | 按ID删除元素 |
move_element | 通过平移向量移动元素 |
rotate_element | 按度旋转元素 |
copy_element | 将元素复制到新位置 |
参数工具(4)
| 工具 | 说明 |
|---|---|
get_parameter_value | 获取特定的参数值 |
set_parameter_value | 设置参数值 |
get_parameter_names | 列出元素上的所有参数 |
batch_set_parameters | 在多个元素上设置相同的参数 |
查看工具(6)
| 工具 | 说明 |
|---|---|
get_views | 列出所有视图,按类型筛选 |
get_active_view | 获取当前活动视图 |
activate_view | 切换到其他视图 |
duplicate_view | 复制视图 |
create_dependent_view | 创建依赖视图 |
get_view_filters | 列出应用于视图的筛选器 |
板材工具(6)
| 工具 | 说明 |
|---|---|
get_sheets | 列出所有带有视口的图纸 |
create_sheet | 创建新工作表 |
place_view_on_sheet | 在图纸上放置视图 |
get_sheet_viewports | 在图纸上列出视口 |
rename_sheet | 重命名图纸 |
duplicate_and_place_view | 一步复制视图并将其放置在图纸上 |
选择工具(8)
| 工具 | 说明 |
|---|---|
get_current_selection | 获取当前选定的元素 |
select_elements_by_ids | 按ID选择元素 |
select_all_by_category | 选择类别的所有元素 |
select_elements_by_level | 选择特定级别的元素 |
select_by_parameter_value | 选择与参数匹配的元素 |
select_and_hide_category | 选择并隐藏类别 |
select_and_isolate_category | 隔离一个类别 |
clear_selection | 清除当前选择 |
可见性工具(6)
| 工具 | 说明 |
|---|---|
hide_elements_by_category | 隐藏类别的所有元素 |
unhide_elements_by_category | 取消隐藏类别 |
isolate_elements_by_category | 暂时隔离一个类别 |
isolate_elements_by_selection | 隔离当前选择 |
unhide_all | 重置活动视图中的所有隐藏/隔离 |
unisolate_all | 重置临时隔离 |
水平和网格工具(4)
| 工具 | 说明 |
|---|---|
get_levels | 列出所有标高 |
get_grids | 列出所有网格 |
create_level | 创建新关卡 |
rename_elements | 批量重命名元素 |
MEP工具(5)
| 工具 | 说明 |
|---|---|
get_panel_schedules | 获取配电盘明细表 |
calculate_conduit_bends | 分析导管弯曲计算 |
conduit_qa_check | 导管系统的质量保证检查 |
analyze_wall_lengths_by_level | 按标高分组的墙长/面积 |
get_elements_in_room | 查找房间内的元素 |
注释工具(4)
| 工具 | 说明 |
|---|---|
create_tag | 标记活动视图中的元素 |
tag_all_in_view | 自动标记类别中所有未标记的元素 |
find_duplicate_tags | 查找具有多个标签的元素 |
get_element_orientation | 获取元素的朝向 |
项目工具(2)
| 工具 | 说明 |
|---|---|
get_all_categories | 列出所有包含元素计数的类别 |
get_warnings | 获取所有Revit警告/错误 |
适应其他Revit版本
本项目目标 修订版2023 (.NET Framework 4.8)。要适应其他版本:
Revit 2024+(.NET Framework 4.8)
- 更新 `
在.csproj` 指向Revit 2024安装 - 部署到
%APPDATA%\Autodesk\Revit\Addins\2024\ - API应该大部分兼容
Revit 2025+(.NET 8)
- 改变 `
在.csproj从net48到net8.0-windows` - 更新 `` 到Revit 2025的安装路径
- 替换不推荐使用的API调用(某些
SpecTypeId图案可能不同) - 部署到
%APPDATA%\Autodesk\Revit\Addins\2025\
故障排除
Claude Desktop中的“服务器已断开连接”
- 检查MCP日志: 打开
%APPDATA%\Claude\logs\mcp-server-revit.log - 常见修复: 确保你用以下代码构建了TypeScript
npx tsc和路径在claude_desktop_config.json指向dist/index.js文件(不是src/index.ts) - 路径问题: 这
args数组必须包含 绝对路径 到dist/index.js双睫毛
Revit插件未加载
- 验证所有3个文件都在
%APPDATA%\Autodesk\Revit\Addins\2023\:
- RevitMcpPlugin.addin - RevitMcpPlugin.dll - Newtonsoft.Json.dll
- 检查一下
.addin文件未被阻止:右键单击>属性>取消阻止 - 部署后重新启动Revit
“工具执行超时”
- Revit可能正忙于其他操作。请稍候,然后重试。
- 大型型号可能需要超过30秒的超时时间
健康检查报告 revitConnected: false
- 确保Revit项目文档已打开(而不仅仅是开始屏幕)
运作原理
- 克劳德桌面版 发送MCP
tools/call请求(例如。,get_elements随着{category: "Walls"})通过stdio - 这 TypeScript MCP服务器 接收它,将其转换为HTTP POST
localhost:8080/execute - 这 C#Revit插件 HttpServer接收请求,在
ExternalEventHandler,并提出ExternalEvent - Revit拾取
ExternalEvent在其 主线程 并执行Revit API调用 - 结果返回:Revit API响应->JSON响应->HTTP响应->MCP响应->Claude Desktop
这 ExternalEvent + ManualResetEventSlim 模式确保所有Revit API调用都发生在主线程上(Revit需要),而HTTP服务器可以处理来自后台线程的请求。
变更后的重建
如果修改任何源文件:
C#插件更改:
cd RevitPlugin
dotnet build -c Release
# Re-copy DLLs to Revit addins folder
copy bin\Release\RevitMcpPlugin.dll "%APPDATA%\Autodesk\Revit\Addins\2023\"
# Restart RevitTypeScript MCP服务器更改:
cd mcp-server
npx tsc
# Restart Claude Desktop许可证
MIT许可证-请参阅 许可证 了解详情。
致谢
- 模型上下文协议 通过Anthropic
- Revit API文档
- 受启发于 archsalem101/revit mcp服务器
