Revit自然语言控制服务器

通过Claude AI自然语言控制Autodesk Revit的MCP服务器,实现AI驱动的BIM操作,提供61种工具支持。

  • by archsalem101
  • C#
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 archsalem101/Cutom_Revit_MCP_server

使用说明

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插件

  1. 打开终端并导航到 RevitPlugin 文件夹:
cd RevitPlugin
  1. 还原NuGet包并构建:
dotnet restore
dotnet build -c Release

注: 这 .csproj 参考中的Revit API DLL C:\Program Files\Autodesk\Revit 2023\。如果您的Revit安装在其他地方,请更新 <HintPath> 条目在 RevitMcpPlugin.csproj.

  1. 构建输出将在 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:启动

  1. 启动Revit 2023 并打开一个项目。该插件将自动加载并启动端口8080上的HTTP服务器。您应该看到一个确认对话框。

  2. 重新启动克劳德桌面 因此,它采用了新的MCP服务器配置。

  3. 开始聊天! 在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)

  • 更新 <HintPath> 在 .csproj 指向Revit 2024安装
  • 部署到 %APPDATA%\Autodesk\Revit\Addins\2024\
  • API应该大部分兼容

Revit 2025+(.NET 8)

  • 改变 <TargetFramework> 在 .csproj 从 net48 到 net8.0-windows
  • 更新 <HintPath> 到Revit 2025的安装路径
  • 替换不推荐使用的API调用(某些 SpecTypeId 图案可能不同)
  • 部署到 %APPDATA%\Autodesk\Revit\Addins\2025\

故障排除

Claude Desktop中的“服务器已断开连接”

  1. 检查MCP日志: 打开 %APPDATA%\Claude\logs\mcp-server-revit.log
  2. 常见修复: 确保你用以下代码构建了TypeScript npx tsc 和路径在 claude_desktop_config.json 指向 dist/index.js 文件(不是 src/index.ts)
  3. 路径问题: 这 args 数组必须包含 绝对路径 到 dist/index.js 双睫毛

Revit插件未加载

  1. 验证所有3个文件都在 %APPDATA%\Autodesk\Revit\Addins\2023\:
    • RevitMcpPlugin.addin
    • RevitMcpPlugin.dll
    • Newtonsoft.Json.dll
  2. 检查一下 .addin 文件未被阻止:右键单击>属性>取消阻止
  3. 部署后重新启动Revit

“工具执行超时”

  • Revit可能正忙于其他操作。请稍候,然后重试。
  • 大型型号可能需要超过30秒的超时时间

健康检查报告 revitConnected: false

  • 确保Revit项目文档已打开(而不仅仅是开始屏幕)

运作原理

  1. 克劳德桌面版 发送MCP tools/call 请求(例如。, get_elements 随着 {category: "Walls"})通过stdio
  2. 这 TypeScript MCP服务器 接收它,将其转换为HTTP POST localhost:8080/execute
  3. 这 C#Revit插件 HttpServer接收请求,在 ExternalEventHandler,并提出 ExternalEvent
  4. Revit拾取 ExternalEvent 在其 主线程 并执行Revit API调用
  5. 结果返回: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 Revit

TypeScript MCP服务器更改:

cd mcp-server
npx tsc
# Restart Claude Desktop

许可证

MIT许可证-请参阅 许可证 了解详情。

致谢