Skip to main content
Glama
shuotao

NavisworksMCP

by shuotao

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 操作


Related MCP server: revit-mcp

快速開始

環境需求

項目

版本

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

啟動服務

  1. 開啟 Navisworks Manage 2025

  2. 載入你的 NWF/NWD 模型

  3. Add-ins 面板找到 "MCP 服務 (開/關)" 按鈕,點擊啟動

  4. 看到提示 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

Related MCP Connectors

Related MCP Servers