NavisworksMCP
AI 驅動的 Navisworks 自動化控制系統透過 Model Context Protocol (MCP) 讓 Claude、Gemini、VS Code Copilot 等 AI 平台直接操控 Autodesk Navisworks。
系統架構
┌──────────────┐ stdio ┌──────────────┐ WebSocket ┌──────────────────┐
│ AI 平台 │ ◄──────────────► │ MCP Server │ ◄──────────────► │ Navisworks 插件 │
│ Claude │ MCP 協議 │ (Node.js) │ port 2233 │ (C# Add-in) │
│ Gemini │ │ │ │ │
│ VS Code │ │ index.ts │ │ Application.cs │
└──────────────┘ └──────────────┘ └──────────────────┘
三層分離設計:
- AI 平台 — 發送自然語言指令,由 MCP 協議轉譯為工具呼叫
- MCP Server — Node.js/TypeScript 中繼層,管理 WebSocket 連線與命令路由
- Navisworks Add-in — C# Plugin,在 NW 主執行緒中安全執行 .NET API 操作
快速開始
環境需求
| 項目 | 版本 |
|---|---|
| Navisworks Manage | 2025 |
| .NET Framework | 4.8 |
| Node.js | 20+ LTS |
| Visual Studio | 2019+ |
安裝步驟
# 1. 一鍵安裝 MCP Server 依賴並編譯
scripts\setup.bat
# 2. 在 Visual Studio 開啟解決方案
# → 確認 NavisworksMCP.csproj 中的 NavisworksPath 正確
# → Build Release
# 3. 部署 Plugin(需要管理員權限)
powershell -ExecutionPolicy Bypass -File scripts\install-addon.ps1
啟動服務
- 開啟 Navisworks Manage 2025
- 載入你的 NWF/NWD 模型
- 在 Add-ins 面板找到 "MCP 服務 (開/關)" 按鈕,點擊啟動
- 看到提示
WebSocket 端口: 2233即表示服務就緒
連接 AI 平台
VS Code / Claude Code: 已配置 .vscode/mcp.json,開箱即用
Claude Desktop: 在設定中加入:
{
"mcpServers": {
"navisworks": {
"command": "node",
"args": ["C:/Users/你的帳號/DESKTOP/NV_mcp/MCP-Server/build/index.js"],
"env": { "NAVIS_MCP_PORT": "2233" }
}
}
}
使用模式
NavisworksMCP 提供 27 個工具,設計為五步驟工作流程:
Step 1 — 了解模型
「這個模型有什麼?裡面有幾個來源檔案?主要分類是哪些?」
get_document_info → 文件名稱、單位、模型數量
get_model_info → 各來源檔案的根節點與子項目數
get_model_statistics → 按分類/圖層/來源檔案統計數量 ★ 核心工具
get_all_categories → 列出所有屬性分類名稱
get_model_tree → 展開模型樹結構(可指定深度)
典型對話:
用戶:「幫我分析一下這個模型的組成」
AI 呼叫:get_model_statistics(groupBy: "sourceFile")
→ 回傳:Architectural.nwc (3,200 items), MEP.nwc (1,800 items), Structure.nwc (950 items)
AI 呼叫:get_model_statistics(groupBy: "classDisplayName")
→ 回傳:Wall (420), Door (180), Pipe (650), Duct (320)...
Step 2 — 篩選與定位
「找出所有的門」「選擇 Selection Set 裡的機電管線」「用搜尋集過濾」
get_selection_sets → 列出所有已儲存的選擇集
get_selection_set_items → 讀取 Set 內容(不改變選擇) ★ 安全讀取
execute_search_set → 執行 Search Set 並回傳結果 ★ 搜尋集
search_items → 自定義搜尋(按分類+屬性+值)
select_items_by_search → 搜尋並選擇項目
select_items_by_set → 選擇指定 Set 的所有項目
clear_selection → 清除選擇
典型對話:
用戶:「模型裡有哪些選擇集?」
AI 呼叫:get_selection_sets
→ 回傳:MEP-Piping (Search Set, 650 items), Clash-Group-A (120 items)...
用戶:「看一下 MEP-Piping 裡面有什麼」
AI 呼叫:get_selection_set_items(name: "MEP-Piping", maxResults: 50)
→ 回傳項目清單(不影響當前選擇狀態)
用戶:「找出所有 Element 分類中 Type 是 Wall-200mm 的項目」
AI 呼叫:search_items(category: "Element", property: "Type", value: "Wall-200mm")
get_selection_set_items vs select_items_by_set 的差別:
| 工具 | 改變選擇? | 用途 |
|---|---|---|
get_selection_set_items |
不改變 | 安全探索,了解 Set 內容 |
select_items_by_set |
改變 | 需要後續操作(上色、隱藏等)時使用 |
Step 3 — 偵測現有狀態
「哪些東西被隱藏了?有沒有被凍結的項目?模型的篩選狀態是什麼?」
get_override_status → 綜合報告:隱藏/凍結概覽 ★ 狀態總覽
get_hidden_items → 列出所有被隱藏的項目
get_frozen_items → 列出所有被凍結的項目
典型對話:
用戶:「看看模型現在的篩選狀態」
AI 呼叫:get_override_status(scope: "all", maxResults: 50)
→ 回傳:隱藏 23 項、凍結 5 項,附帶路徑清單
用戶:「哪些管線被隱藏了?」
AI 呼叫:get_hidden_items(maxResults: 200)
→ 回傳所有隱藏項目的名稱、分類、路徑
Step 4 — 資料抽取
「把所有門的 ID 和高度匯出」「讀取選擇集的特定屬性」
get_item_properties → 單項完整屬性(所有分類)
batch_get_properties → 批量抽取,可指定欄位 ★ 資料匯出
get_item_geometry_info → 幾何包圍盒與中心點座標
典型對話:
用戶:「把 MEP-Piping 選擇集裡所有管線的直徑和材質抽出來」
AI 呼叫:batch_get_properties(
setName: "MEP-Piping",
fields: ["Element.Diameter", "Element.Material"],
maxResults: 500
)
→ 回傳表格式資料,每列包含 displayName、path、指定欄位值
用戶:「看一下選中項目的完整屬性」
AI 呼叫:get_item_properties
→ 回傳所有分類 > 屬性名 > 值 > 資料類型
batch_get_properties 兩種模式:
| 模式 | 參數 | 說明 |
|---|---|---|
| 從 Selection Set | setName: "MEP-Piping" |
直接讀取,不影響選擇 |
| 從當前選擇 | 不指定 setName |
讀取 CurrentSelection |
Step 5 — 視覺管理
「把管線標紅色」「隱藏結構柱」「切換到 3D 視點」
set_item_override_color → 覆蓋選中項目的顯示顏色 (RGB)
clear_override_colors → 清除顏色覆蓋(重設材質)
hide_items → 隱藏選中項目
unhide_all → 取消隱藏所有項目
zoom_to_selection → 視圖對準選中項目
get_viewpoints → 列出已儲存的視點
set_active_viewpoint → 切換到指定視點
get_current_selection → 確認當前選了什麼
典型對話:
用戶:「把碰撞區域的管線標成紅色」
AI 呼叫:select_items_by_set(name: "Clash-Group-A")
AI 呼叫:set_item_override_color(r: 255, g: 0, b: 0)
AI 呼叫:zoom_to_selection
用戶:「隱藏所有結構柱,只看機電」
AI 呼叫:search_items(category: "Element", property: "Category", value: "Structural Columns")
AI 呼叫:select_items_by_search(category: "Element", property: "Category", value: "Structural Columns")
AI 呼叫:hide_items
用戶:「恢復全部顯示」
AI 呼叫:unhide_all
AI 呼叫:clear_override_colors
完整工具清單
讀取工具(不改變模型狀態)— 17 個
| 工具 | 說明 |
|---|---|
get_document_info |
文件基本資訊 |
get_model_info |
來源模型清單 |
get_model_tree |
模型樹結構 |
get_model_statistics |
按分類/圖層/來源統計 |
get_all_categories |
屬性分類名稱 |
get_current_selection |
當前選擇清單 |
get_item_properties |
單項屬性詳情 |
get_item_geometry_info |
幾何包圍盒 |
get_selection_sets |
選擇集清單 |
get_selection_set_items |
選擇集內容(不選擇) |
get_viewpoints |
視點清單 |
get_clash_tests |
碰撞測試清單 |
get_clash_results |
碰撞結果詳情 |
get_override_status |
隱藏/凍結狀態概覽 |
get_hidden_items |
隱藏項目清單 |
get_frozen_items |
凍結項目清單 |
batch_get_properties |
批量屬性抽取 |
操作工具(會改變模型狀態)— 10 個
| 工具 | 改變什麼 |
|---|---|
search_items |
不改變選擇,僅回傳結果 |
select_items_by_search |
改變 CurrentSelection |
select_items_by_set |
改變 CurrentSelection |
execute_search_set |
可選擇是否改變 CurrentSelection |
clear_selection |
清空 CurrentSelection |
set_active_viewpoint |
切換視點 |
set_item_override_color |
覆蓋顏色 |
clear_override_colors |
重設材質 |
hide_items |
隱藏項目 |
unhide_all |
取消隱藏 |
工具組合範例
範例 1:模型初始分析
1. get_document_info → 了解基本資訊
2. get_model_statistics(groupBy: "sourceFile") → 看各來源檔案佔比
3. get_model_statistics(groupBy: "classDisplayName") → 看分類分佈
4. get_selection_sets → 看有哪些預設篩選
5. get_override_status(scope: "all") → 看是否有已套用的篩選
範例 2:管線資料匯出
1. get_selection_sets → 找到 "MEP-Piping" 集
2. get_selection_set_items(name: "MEP-Piping") → 預覽內容
3. batch_get_properties( → 批量抽取指定欄位
setName: "MEP-Piping",
fields: ["Element.Id", "Element.Diameter", "Element.Material"]
)
範例 3:碰撞項目視覺化
1. get_selection_sets → 找碰撞相關 Set
2. select_items_by_set(name: "Clash-Group-A") → 選擇碰撞群組
3. set_item_override_color(r:255, g:0, b:0) → 標紅色
4. zoom_to_selection → 對準畫面
5. get_item_properties → 看碰撞項目屬性
範例 4:隱藏非相關學科
1. get_model_statistics(groupBy: "sourceFile") → 確認有哪些來源
2. search_items(category: "Item", property: "Source File", value: "Structure.nwc")
3. select_items_by_search(同上參數) → 選擇結構模型
4. hide_items → 隱藏結構
5. unhide_all → 完成後恢復
專案結構
NV_mcp/
├── NavisworksMCP.sln # Visual Studio 解決方案
├── CLAUDE.md # AI 開發規範
├── README.md # 本文件
├── .gitignore
│
├── MCP/ # C# Navisworks Add-in
│ ├── NavisworksMCP.csproj # .NET Framework 4.8
│ ├── Application.cs # Plugin 入口 (Toggle + Log + EventWatcher)
│ ├── Core/
│ │ ├── SocketService.cs # WebSocket 服務 (port 2233)
│ │ ├── CommandExecutor.cs # 27 個命令的執行器
│ │ ├── IdleEventManager.cs # 主執行緒安全排程
│ │ └── Logger.cs # 日誌系統
│ └── Models/
│ ├── NavisCommandRequest.cs
│ └── NavisCommandResponse.cs
│
├── MCP-Server/ # Node.js MCP Server
│ ├── package.json # @modelcontextprotocol/sdk + ws
│ ├── tsconfig.json
│ └── src/
│ ├── index.ts # MCP Server 入口 (stdio transport)
│ ├── socket.ts # WebSocket 客戶端
│ └── tools/
│ └── navis-tools.ts # 27 個工具定義
│
├── scripts/
│ ├── setup.bat # 一鍵安裝
│ └── install-addon.ps1 # Plugin 部署
│
└── .vscode/
└── mcp.json # VS Code MCP 配置
注意事項
- WebSocket 端口固定為 2233,可透過環境變數
NAVIS_MCP_PORT調整 - 所有命令在 Navisworks 主執行緒中序列化執行,不會有並發衝突
- Plugin DLL 部署到
C:\Program Files\Autodesk\Navisworks Manage 2025\Plugins\NavisworksMCP\ - 日誌存放在
%APPDATA%\NavisworksMCP\Logs\
授權
MIT License