Revit自动化的MCP服务器示例
    
一个示例模型上下文协议(MCP)远程服务器(HTTP),使Claude等AI助手能够通过以下方式自动化Autodesk Revit操作 自动化API 使用 服务到服务身份验证(SSA).
https://github.com/user-attachments/assets/43a5aabc-d2a3-47ff-a9e1-8bd61d24a81e
______________________________________________________________________
⚠️ 免责声明\ 这是一个 vibe编码样本解决方案 -迭代开发的探索性概念证明。它展示了模式和可能性,但可能并不遵循所有生产级实践。此README由以下人员生成 GitHub Copilot 基于对实际代码库的分析,确保文档与实现相匹配。
🔗 配套存储库\ 此MCP服务器与 APS Automation API Revit MCP工具示例 -在Automation API中执行实际工具的Revit AppBundle。部署该AppBundle以使用此MCP服务器。
______________________________________________________________________
🎯 概述
MCP Revit自动化 通过模型上下文协议将AI助手与Autodesk Revit连接起来。它实现了Revit在云托管模型(ACC/BIM360)上无头、可扩展的自动化操作,而无需手动交互。
目标受众: AEC公司、BIM经理、BIM协调员、开发人员构建AI驱动的BIM工作流程
主要特点
- 🔐 SSA身份验证 -具有RSA签名的JWT承载令牌,用于服务间身份验证
- 🏗️ 流利的API -具有编译时验证的类型安全模型配置
- 📦 双JSON架构 -将模型上下文与工具输入分离
- 🤖 MCP集成 -自然地将工具暴露给AI助手
- ☁️ 云原生 -适用于Autodesk云模型
🔧 可扩展工具系统
- 易于添加新的Revit自动化工具
- 所有操作的一致模式
- 无需更改核心服务
🤖 MCP协议支持
- 将工具暴露给Claude或VS Code Copilot等人工智能助手
- Revit自动化的自然语言
- HTTP传输具有广泛的兼容性
☁️ 云原生
- 适用于Autodesk云模型(ACC/BIM360)-工作共享和非工作共享
- 可扩展的工作项提交
- 用于Revit集成的自动化API
______________________________________________________________________
🏛️ 建筑
MCP Client (Claude/VS Code)
↓ MCP Protocol
MCP Server (This Project)
├─ RevitAutomationTools (MCP tool definitions)
├─ RevitAutomationService (Workitem submission)
└─ SsaTokenService
↓ HTTPS + Bearer Token
Autodesk Automation API for Revit (Cloud execution)双JSON模式:
revitmodel.json-模型上下文(区域、项目、模型GUID、工具名称)toolinputs.json-工具特定参数
______________________________________________________________________
📦 先决条件
- .NET 10 SDK (下载)
- 一 Autodesk平台服务 启用了自动化API的服务器到服务器应用程序
- 服务账户 已配置(SSA管理工具)
- 自动化活动 部署用于 APS Automation API Revit MCP工具示例
______________________________________________________________________
🚀 安装
git clone https://github.com/autodesk-platform-services/aps-sample-mcp-server-revit-automation.git
cd mcp-revit-automation
dotnet restore
dotnet build --configuration Release创建 appsettings.json:
{
"Forge": {
"ClientId": "your-client-id",
"ClientSecret": "your-client-secret",
"ServiceAccountId": "your-service-account-id",
"KeyId": "your-key-id",
"PrivateKeyPath": "path/to/private-key.pem"
}
}运行(http): dotnet run
______________________________________________________________________
⚙️ 配置
从以下位置获取凭据 APS开发人员门户:
- 创建启用自动化API的APS应用程序→ Get
ClientId&ClientSecret - 创建服务帐户→ 生成RSA密钥对→ Get
ServiceAccountId&KeyId - 将私钥下载为
.pemfile → 在中设置路径PrivateKeyPath
______________________________________________________________________
📘 用法
MCP客户端配置
Visual Studio代码: 了解如何配置MCP服务器 这里
{
"inputs": [],
"servers": {
"revit-automation-mcp": {
"url": "http://localhost:6223",
"type": "http"
}
}
}Fluent API示例
// Model configuration (type-safe, compile-time validated)
var modelConfig = ModelConfiguration.Create()
.WithRegion("US")
.WithProject("project-guid")
.WithModelGuid("model-guid")
.WithToolName("link_models")
.Save(true)
.Configure();
// Tool-specific inputs (flexible dictionary)
var toolInputs = new Dictionary
{
{ "modelName", "My Model" },
{ "linksToAdd", new[] { new { modelName = "Link1", modelGuid = "guid1" } } },
{ "linksToRemove", Array.Empty() }
};
var result = await service.SubmitWorkItemAsync(modelConfig, toolInputs);______________________________________________________________________
🛠️ 可用工具
| 工具 | 说明 |
|---|---|
create_model | 从样板创建新的Revit模型 |
link_models | 添加/删除Revit模型链接 |
创建Revit模型
Revitmodel.json
{
"region": "US",
"projectGuid": "00000000-0000-0000-0000-000000000000",
"modelGuid": "11111111-1111-1111-1111-111111111111",
"toolName": "create_model",
"save": false
}toolinputs.json
{
"enableWorksharing": true,
"accountId": "00000000-0000-0000-0000-000000000000",
"projectId": "00000000-0000-0000-0000-000000000000",
"folderId": "urn:adsk.wipprod:fs.folder:co.example",
"modelName": "NewModel.rvt"
}管理模型链接
Revitmodel.json
{
"region": "US",
"projectGuid": "00000000-0000-0000-0000-000000000000",
"modelGuid": "00000000-0000-0000-0000-000000000000",
"toolName": "link_models",
"save": true
}toolinputs.json
{
"region": "US",
"projectGuid": "00000000-0000-0000-0000-000000000000",
"linksToAdd": [
{
"modelName": "Architectural_Link.rvt",
"modelGuid": "11111111-1111-1111-1111-111111111111"
},
{
"modelName": "Structural_Link.rvt",
"modelGuid": "22222222-2222-2222-2222-222222222222"
}
],
"linksToRemove": [
{
"modelName": "Old_Link.rvt",
"modelGuid": "99999999-9999-9999-9999-999999999999"
}
]
}➕ 添加新工具
1.在“工具”/“RevitAutomationTools.cs”中
[McpServerTool(Name = "my_tool")]
public async Task MyTool(...)
{
var modelConfig = ModelConfiguration.Create()
.WithRegion(region)
.WithProject(projectGuid)
.WithModelGuid(modelGuid)
.WithToolName("my_tool")
.Configure();
var toolInputs = new Dictionary { /* tool params */ };
return await revitAutomationService.SubmitWorkItemAsync(modelConfig, toolInputs);
}
2.在Revit AppBundle中:添加“my_tool”的大小写。查看如何添加新工具 这里
______________________________________________________________________
资源
- Revit AppBundle(配套回购): aps自动化api revit mcp工具示例
- APS门户: aps.autodesk.com
- APS自动化API: 文档
- APS SSA API: 开发者指南
- MCP规范: 模型上下文协议.io
- .NET MCP服务器模板: 微软学习
______________________________________________________________________
许可证
此样品根据以下条款获得许可 MIT许可证. 请参阅 许可证 文件以获取完整详细信息。
______________________________________________________________________
制作❤️ AEC社区| Vibe使用GitHub Copilot编码
