Revit MCP项目
此存储库构建了一个集成,该集成将所有Autodesk Revit API代码保留在一个正常的Revit插件中,并通过本地MCP服务器公开工具。
外部服务器通过流式HTTP与MCP通信。桥接和Revit-side处理程序保持分离,因此Revit API仅在Revit内部执行。
回购中有什么
src/
RevitMcp.Contracts/
BridgeRequest.cs
BridgeResponse.cs
RevitMcp.Core/
Services/
DocumentService.cs
WallService.cs
DuctPressureDropService.cs
RevitMcp.RevitAddin/
App.cs
CommandDispatcher.cs
Bridge/
BridgeExternalEventHandler.cs
BridgeRequestBroker.cs
LocalHttpBridge.cs
Handlers/
IRevitCommandHandler.cs
PingHandler.cs
GetActiveDocumentHandler.cs
ListWallsHandler.cs
ColorizeDuctPressureDropHandler.cs
Manifest/
RevitMcp.RevitAddin.addin
RevitMcp.Server/
Program.cs
BridgeClient.cs
Tools/
RevitTools.cs为什么形状看起来像这样
Revit API代码必须在Revit过程中运行,并在Revit-控制的执行中运行。
因此:
RevitMcp.RevitAddin拥有每个Revit API调用。RevitMcp.Server位于Revit之外,仅公开MCP工具。BridgeRequestBroker通过Revit整理传入的网桥呼叫ExternalEvent而不是直接从侦听器线程调用API。
最后一点很重要。简单的HTTP侦听线程无法安全地读取或修改活动的Revit文档。
支持的Revit版本
该项目支持:
- 修订版2024 (.NET Framework 4.8)
- 修订版2025 (.NET 8)
- 修订版2026 (.NET 8)
项目文件会根据以下内容自动选择正确的目标框架 RevitVersion 构建参数。Revit 2025+采用现代设计。NET 8运行时,而Revit 2024使用。NET框架4.8。
先决条件
在编译和运行加载项的机器上需要这些:
- Windows 10或Windows 11
- Autodesk Revit 2024、2025或2026
- 当前服务器项目目标的.NET 10 SDK
- Visual Studio 2022或其他支持MSBuild的环境
- .NET Framework 4.8开发人员包(仅Revit 2024版本需要)
编译所需的Revit参考
Revit项目使用来自本地Revit安装的直接部件参照。
对于 RevitMcp.RevitAddin:
RevitAPI.dllRevitAPIUI.dll
对于 RevitMcp.Core:
RevitAPI.dll
典型安装文件夹:
C:\Program Files\Autodesk\Revit 2024\
C:\Program Files\Autodesk\Revit 2025\
C:\Program Files\Autodesk\Revit 2026\这 .csproj 文件已经支持以下任一方法:
- 按版本构建:
dotnet build .\RevitMcp.sln /p:RevitVersion=2024
dotnet build .\RevitMcp.sln /p:RevitVersion=2025
dotnet build .\RevitMcp.sln /p:RevitVersion=2026- 通过显式安装文件夹构建:
dotnet build .\RevitMcp.sln /p:RevitInstallDir="C:\Program Files\Autodesk\Revit 2024"如果找不到DLL,Revit项目将提前失败,并显示明显的MSBuild错误。
声明依赖关系的位置
对。依赖项已写入项目文件中。
RevitMcp.sln仅列出哪些项目属于解决方案以及它们如何一起构建。.csproj文件包含真正的依赖关系声明。
当前依赖关系形状:
RevitMcp.RevitAddin.csproj
- ProjectReference 到 RevitMcp.Contracts - ProjectReference 到 RevitMcp.Core - 直接的 Reference 到 RevitAPI.dll - 直接的 Reference 到 RevitAPIUI.dll
RevitMcp.Core.csproj
- 直接的 Reference 到 RevitAPI.dll
RevitMcp.Server.csproj
- ProjectReference 到 RevitMcp.Contracts - PackageReference 到 ModelContextProtocol - PackageReference 到 ModelContextProtocol.AspNetCore
RevitMcp.Contracts.csproj
- PackageReference 到 System.Text.Json
Revit项目仍然使用来自本地Revit安装的直接DLL引用,而服务器使用NuGet包作为MCP宿主。
在哪里注册插件
Revit通过以下方式发现附加模块 .addin 清单文件。
每个用户的注册文件夹:
%AppData%\Autodesk\Revit\Addins\2024\
%AppData%\Autodesk\Revit\Addins\2025\
%AppData%\Autodesk\Revit\Addins\2026\所有用户注册文件夹:
%ProgramData%\Autodesk\Revit\Addins\2024\
%ProgramData%\Autodesk\Revit\Addins\2025\
%ProgramData%\Autodesk\Revit\Addins\2026\要注册此演示:
- 构建
RevitMcp.RevitAddin. - 编辑
src/RevitMcp.RevitAddin/Manifest/RevitMcp.RevitAddin.addin. - 替换占位符
Assembly价值与您构建的完整路径RevitMcp.RevitAddin.dll. - 将清单复制到目标Revit版本的Revit附加模块文件夹中。
例子:
C:\Repos\revit-mcp-cs-test\src\RevitMcp.RevitAddin\bin\Debug\net8.0-windows\RevitMcp.RevitAddin.dll生成脚本
在下面添加了两个PowerShell脚本 scripts/ 用于Windows开发。
构建整个解决方案:
.\scripts\build-all.ps1 -RevitVersion 2026 -Configuration Debug为当前用户生成并注册外接程序清单:
# For Revit 2024
.\scripts\build-all.ps1 -RevitVersion 2024 -Configuration Debug -RegisterAddin
# For Revit 2026
.\scripts\build-all.ps1 -RevitVersion 2026 -Configuration Debug -RegisterAddin根据自定义Revit安装文件夹进行构建:
.\scripts\build-all.ps1 -RevitVersion 2024 -RevitInstallDir "D:\Apps\Autodesk\Revit 2024"生成后单独注册清单:
.\scripts\register-addin.ps1 -RevitVersion 2024 -Configuration Debug -Scope CurrentUser对于机器范围内的注册:
.\scripts\register-addin.ps1 -RevitVersion 2024 -Configuration Release -Scope AllUsers手动构建和运行
1.构建Revit附加模块
# For Revit 2024 (builds against .NET Framework 4.8)
dotnet build .\src\RevitMcp.RevitAddin\RevitMcp.RevitAddin.csproj -c Debug /p:RevitVersion=2024
# For Revit 2026 (builds against .NET 8)
dotnet build .\src\RevitMcp.RevitAddin\RevitMcp.RevitAddin.csproj -c Debug /p:RevitVersion=20262.登记舱单
复制 src\RevitMcp.RevitAddin\Manifest\RevitMcp.RevitAddin.addin 更新后,将其放入匹配的Revit加载项文件夹中 Assembly 路径。
3.启动Revit
启动Revit 2024、2025或2026(无论您为哪个版本构建)并打开任何项目。
Revit完成初始化后,附加模块将在以下位置启动本地网桥侦听器:
http://127.0.0.1:5057/4.构建并运行MCP服务器
dotnet build .\src\RevitMcp.Server\RevitMcp.Server.csproj -c Debug
dotnet run --project .\src\RevitMcp.Server\RevitMcp.Server.csprojMCP服务器监听:
http://127.0.0.1:50995.连接MCP客户端
可流式传输的HTTP端点:
http://127.0.0.1:5099/mcp使用附带的脚本对MCP端点进行烟雾测试:
pip install mcp
python .\scripts\test-mcp-server.py
python .\scripts\test-mcp-server.py --tool ping
python .\scripts\test-mcp-server.py --tool get_active_document
python .\scripts\test-mcp-server.py --tool list_walls
python .\scripts\test-mcp-server.py --tool colorize_duct_pressure_drop --arguments "{\"topCount\":10}"
python .\scripts\test-mcp-server.py --tool color_elements_by_id --arguments "{\"elementIds\":[12345,67890],\"red\":255,\"green\":0,\"blue\":0}"
python .\scripts\test-mcp-server.py --tool get_low_velocity_duct_elements --arguments "{\"maxVelocityMetersPerSecond\":2.5}"
python .\scripts\test-mcp-server.py --tool set_duct_dimensions --arguments "{\"elementIds\":[12345],\"widthMillimeters\":400,\"heightMillimeters\":200}"
python .\scripts\test-mcp-server.py --tool set_flex_duct_diameter --arguments "{\"elementIds\":[67890],\"diameterMillimeters\":250}"
python .\scripts\test-mcp-server.py --tool extract_system_air_elements --arguments "{\"systemName\":\"Mechanical Supply Air 17\"}"
python .\scripts\test-mcp-server.py --tool check_zero_pressure_drop_fittings --arguments "{\"systemName\":\"Mechanical Supply Air 17\"}"
python .\scripts\test-mcp-server.py --tool set_fitting_specific_coefficient --arguments "{\"systemName\":\"Mechanical Supply Air 17\",\"coefficient\":0.2}"初始工具集
脚手架包括以下工具:
pingget_active_documentlist_wallscolorize_duct_pressure_drop(写入工具:应用活动视图元素替代)color_elements_by_id(编写工具:使用调用方提供的RGB在活动视图中显式显示Revit图元ID)get_low_velocity_duct_elements(读取工具:返回低于速度阈值(m/s)的风管和柔性风管)set_duct_dimensions(写入工具:按图元ID设置风管宽度和/或高度,单位为毫米)set_flex_duct_diameter(写入工具:按图元ID设置软风管直径(单位:毫米))extract_system_air_elements(写入工具:将元素颜色匹配为蓝色,并将JSON导出到本地磁盘)check_zero_pressure_drop_fittings(书写工具:为零压力管件着色并返回图元ID)set_fitting_specific_coefficient(写入工具:将拟合损失方法设置为特定系数,默认值为0.2)
这足以证明:
- 已加载Revit附加模块
- 这座桥是可以到达的
- 请求被安全地封送回Revit
- 可以从活动文档返回数据
关于大桥的说明
外接程序使用 HttpListener 当地的演示桥。这很容易检查和测试,但它不是最好的生产选择。
对于生产硬化焊道,请考虑:
- 命名管道而不是HTTP
- 共享密钥或本地身份验证保护
- 结构化测井
- 超时
- 请求验证
- 显式异常映射
- 排队执行限制
根据Windows机器策略, HttpListener 可能需要URL ACL保留。如果需要,在提升的shell中运行一次此命令:
netsh http add urlacl url=http://127.0.0.1:5057/ user=%USERNAME%关于MCP服务器的说明
外部服务器已经通过Streamable HTTP公开了一个真正的MCP表面。
这意味着:
- MCP客户端可以从协议中发现工具。
- C#服务器仍然是一个薄薄的包装
BridgeClient. - Revit附加模块仍然只能通过Revit注册
.addin显示。
写入操作
首先从只读工具开始。添加写入工具时,请在正常的Revit事务中执行它们。
示例模式:
using (var tx = new Transaction(doc, "Create Demo Wall"))
{
tx.Start();
// Revit API write operations go here.
tx.Commit();
}建议的后续步骤
- 添加
get_active_view - 添加
list_levels - 添加
list_rooms - 添加
list_sheets - 在事务后面添加一个安全写入操作
- 根据需要添加更多MCP工具
