Revit模型协议连接器

通过模型上下文协议(MCP)将Claude与Autodesk Revit连接,实现模型信息查询、脚本执行和文件管理等功能。

  • by BIM4GIB
  • C#
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 BIM4GIB/MCP.Revit

使用说明

Revit MCP

通过模型上下文协议将Claude连接到Autodesk Revit。

支持的版本

Revit 。NET目标 ElementId 状态
2022 净值4.8 int 构造器+ IntegerValue 支持
2023年 净值4.8 int 构造器+ IntegerValue 支持
2024 净值4.8 long 构造器+ Value (int已弃用) 支持
2025 网络8.0 windows long 构造器+ Value (int已弃用) 支持
2026 网络8.0窗口 long 构造器+ Value 仅(int 移除) 支持
2027 net8.0-windows(预期) 与2026年相同(预期)

建筑

Claude (Claude Desktop / Claude Code)
        |  MCP (stdio)
        v
  mcp-server/          <- TypeScript MCP server (Node.js)
        |  HTTP localhost:8765
        v
  RevitMcpBridge.dll   <- C# Revit add-in (runs inside Revit.exe)
        |  Revit API
        v
  Revit (open model)

可用工具

工具 说明
revit_ping 检查桥是否还活着
get_model_info 项目信息、文件路径、Revit版本、图元计数
get_categories 模型中的所有元素类别
get_levels 所有标高
query_elements 按类别、族、类型、级别、参数过滤元素
get_element_by_id 一个元素的完整参数列表
run_dynamo_script 执行a .dyn Dynamo图
run_pyrevit_script 执行a .py pyRevit脚本
suggest_save_as_name 预览命名规则中的输出文件名
save_as_with_rule 使用基于规则的名称将模型保存到新文件夹
open_and_upgrade 打开并升级旧版 .rvt 文件

命名规则令牌

在中使用这些令牌 namingTemplate:

令牌 已替换为
{originalName} 不带扩展名的文件名
{date} YYYYMMDD
{time} HHmmss
{year} / {month} / {day} 日期部件
{revitVersion} 例如。 2024
{projectNumber} 来自Revit项目信息
{projectName} 来自Revit项目信息
{buildingName} 来自Revit项目信息
{suffix} 用户提供的字符串
{counter:N} 零填充计数器,N位数字宽

例子: {projectNumber}_{buildingName}_RVT{revitVersion}_{date}

先决条件

  • 修订版2022-2027
  • Node.js 18+
  • .NET SDK 8.0+(用于构建C#插件)
  • Dynamo for Revit(可选,用于Dynamo脚本)
  • pyRevit(可选,用于pyRevit脚本)

设置

1.构建C#Revit加载项

cd revit-addin

# Build for Revit 2024 (default)
dotnet build RevitMcpBridge/RevitMcpBridge.csproj

# Build for a specific version
dotnet build RevitMcpBridge/RevitMcpBridge.csproj -p:RevitVersion=2025
dotnet build RevitMcpBridge/RevitMcpBridge.csproj -p:RevitVersion=2026
dotnet build RevitMcpBridge/RevitMcpBridge.csproj -p:RevitVersion=2027

# Custom Revit install location
dotnet build RevitMcpBridge/RevitMcpBridge.csproj -p:RevitVersion=2026 -p:RevitInstallDir="D:\Autodesk\Revit 2026"

将输出文件复制到部署文件夹(例如。 C:\RevitMcpBridge\):

  • RevitMcpBridge.dll
  • Newtonsoft.Json.dll

2.注册Revit加载项

编辑 revit-addin/RevitMcpBridge.addin:

  • 集 <Assembly> 到部署的完整路径 RevitMcpBridge.dll

复制 RevitMcpBridge.addin 致:

%APPDATA%\Autodesk\Revit\Addins\2026\

替换 2026 您的Revit版本年份。

重新启动Revit。查看日志 %LOCALAPPDATA%\RevitMcpBridge\bridge.log.

3.构建MCP服务器

cd mcp-server
npm install
npm run build

4.向Claude注册

添加到您的Claude桌面配置(%APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "revit": {
      "command": "node",
      "args": ["C:/path/to/RevitMCP/mcp-server/dist/index.js"],
      "env": {
        "REVIT_BRIDGE_PORT": "8765"
      }
    }
  }
}

重新启动克劳德桌面。Revit工具将出现在Claude的工具列表中。

自定义端口

集 REVIT_MCP_PORT 启动Revit之前:

$env:REVIT_MCP_PORT = "9000"
& "C:\Program Files\Autodesk\Revit 2026\Revit.exe"

在MCP服务器配置中匹配它: "REVIT_BRIDGE_PORT": "9000".

多版本构建说明

C#项目使用条件编译来处理API的差异:

  • ElementIdHelper.cs 包裹 ElementId 构造和值提取,以便对所有Revit版本(2022-2027)编译相同的代码。
  • 编译符号(REVIT2026, REVIT_V_GTE_2024, REVIT_V_GTE_2026等)基于 -p:RevitVersion= 构建参数。
  • 2022-2024年修订目标 net4.8;Revit 2025+目标 net8.0-windows.

Revit 2026已处理重大更改

  • ElementId(int) 构造函数 移除 ->使用 ElementId(long) 通过 ElementIdHelper.Create()
  • ElementId.IntegerValue 移除 ->使用 ElementId.Value 通过 ElementIdHelper.GetValue()
  • CefSharp已从Revit安装中删除(不影响此附加模块)
  • 插件依赖隔离现在可用(UseRevitContext 清单选项)

Revit 2027准备

Revit 2027尚未发布,但该项目已预先布线:

  • REVIT2027 和 REVIT_V_GTE_2027 编译符号就绪
  • 预计将继续。净值8/ net8.0-windows
  • ElementIdHelper 已经使用64位API,因此不需要进一步迁移
  • 注意:弃用的API将被删除(电气类、Curve.Intersect重载、Zone API、钢筋挂钩到终止重命名),以及潜在的新的所需清单设置

故障排除

问题 修复
无法访问桥 检查Revit是否加载了附加模块(“附加模块”选项卡)
端口权限被拒绝 注册HTTP前缀(见下文)
Dynamo脚本失败 确保DynamoRevit已安装且路径正确
未找到pyRevit 将pyRevit添加到PATH
文件保存失败 确保目标文件夹存在并且Revit具有写入权限
程序集版本冲突(2026+) 已设置 UseRevitContext 到 false in.addin清单

注册HTTP前缀(一次性,以管理员身份运行)

netsh http add urlacl url=http://localhost:8765/ user=Everyone