ARCHITECTURE V2 3 層

Skill / CLAUDE.md / Domain
三層模組架構

REVIT_MCP 的核心架構:把 9 個系統、72 個 Domain、166 個工具按職責分到三層。Skill 管「何時觸發」、CLAUDE.md 管「跨 AI Client 橋接」、Domain 管「不可協商的知識」。本頁同時澄清「MCP ≠ Skill」的常見誤解。

CLARIFICATION · 廚房與食譜

MCP ≠ Skill:官方定義與比喻

社群常爭論「Skill 會不會取代 MCP」。答案是不會——MCP 是廚房(給 AI 能力),Skill 是食譜(給 AI 知識)。兩者缺一不可。

MCP Tools 是什麼

"Tools are designed to be model-controlled, meaning that the language model can discover and invoke tools automatically."

(工具被設計為模型控制的,意即語言模型可以自動發現並調用工具。)

MCP Specification: Tools

Agent Skill 是什麼

"Skills load on-demand and eliminate the need to repeatedly provide the same guidance across multiple conversations."

(技能按需載入,消除了在多次對話中重複提供相同指引的需要。)

Anthropic: Agent Skills Overview

關鍵區別

維度MCP ToolAgent Skill
角色能力層(DO)— 廚房知識層(KNOW)— 食譜
控制者LLM 自動選擇關鍵字觸發 → 按需載入
粒度單一原子操作多步驟工作流編排
需要基礎設施是(Server process)否(純檔案)

Anthropic 官方:互補,不是取代

"We'll also explore how Skills can complement Model Context Protocol (MCP) servers by teaching agents more complex workflows that involve external tools and software."

(我們也將探討 Skill 如何補充 MCP 伺服器,透過教導 Agent 涉及外部工具的更複雜工作流程。)

Anthropic Engineering Blog

"Skills describe the workflow. MCP provides the runner... Saying Skills killed MCP is like saying GitHub Actions killed Bash."

(Skill 描述工作流程。MCP 提供執行器……說 Skill 殺死了 MCP,就像說 GitHub Actions 殺死了 Bash。)

Block/Goose Team

以本專案為例

🍳 MCP(廚房)

override_element_graphics 真的去改 Revit model 顏色,query_elements_with_filter 真的查 Revit 資料庫。

這些操作需要 WebSocket、Revit API、Transaction。Skill 做不了這些。

📖 Skill(食譜)

/fire-safety-check 告訴 AI「先查參數名 → 再列時效等級 → 再篩選 → 最後上色」。

這是知識和順序,不是能力。MCP 不管這些。

WHY
社群常爭論「Skill 殺死 MCP」——這是把抽象層級搞混的結果。MCP 解決「AI 怎麼動 Revit」(基礎能力),Skill 解決「AI 該照什麼順序動 Revit」(編排知識)。兩件根本不同層級的事,沒有取代關係。
HOW
本專案明確分層——MCP server 提供 166 個原子工具(純能力),Skill 編排工具呼叫順序(純知識)。一個 MCP 工具被多個 Skill 引用,一個 Skill 引用多個 MCP 工具——多對多關係,互不替代。
TECHNIQUE
Layered Capability Architecture · MCP as Runtime Bridge · Skill as Workflow Choreographer · M:N Tool-Skill Composition
為什麼這個區別很重要
把 Skill 當成「更聰明的 MCP」是業界最常見的誤解。
正確理解是:Skill 是「給 AI 看的 SOP 文件」,MCP 是「給 AI 用的螺絲起子」。
SOP 寫得再好也無法替代螺絲起子
這也是為什麼 Block/Goose 那句「說 Skill 殺死 MCP 就像說 GitHub Actions 殺死 Bash」會在開發者圈廣傳——它一語道破「編排層」與「執行層」是不同抽象級別。BIM 場域更是如此:再強的 Skill workflow 也無法不通過 MCP 改變 Revit 一條牆。
深度閱讀 · MCP vs Skill 區辨
CORE ARCHITECTURE · 3 層

三層模組架構詳解

每一層各自管獨立職責,互不重複。理解這三層 = 理解專案結構的全部。

層 1

Skill(觸發層)

放在 .claude/skills/{name}/SKILL.md關鍵字觸發後按需載入,告訴 AI「該做什麼步驟、引用哪個 Domain、呼叫哪些 MCP Tool」。

本專案目前 50 個 Skill

層 2

CLAUDE.md(橋接層)

專案根目錄的單一 source of truth。多 AI Client(Claude / Gemini / Copilot / Claude Code)都讀同一份,避免重複維護。含 AI Guard Rails、Domain 觸發表、Build Commands。

GEMINI.md 是 1 行指向 CLAUDE.md 的薄殼。

層 3

Domain(知識層)

放在 domain/*.md不可協商的限制——法規、SOP、計算公式、邊界案例。被多個 Skill 引用(複用),是專案的「資產投資」。

本專案目前 72 個 Domain

Domain 為什麼獨立於 Skill 存在

BIM 的知識是共用的——防火法規同時被消防檢查、走廊分析、建築合規引用。Domain 獨立於 Skill 存在,是因為知識不應該重複在每個 Skill 裡

實例:防火 Domain 被三個 Skill 引用

domain/fire-rating-check.md 同時被以下 3 個 Skill 引用:

如果防火法規條文更新,只動 domain/fire-rating-check.md 一處,三個 Skill 自動拿到新內容。這就是「Domain 是本體」(P5)的具體含義。

WHY
三層分離不是「為了好看」,是為了「換新」容易——Skill 改了不影響 Domain,Domain 改了不影響 MCP,AI Client 換了不影響 Skill。每層獨立演化,整體就能跑得很久。架構生命週期 > 程式碼生命週期
HOW
遵守單一職責:
• Skill = 何時觸發 + 工作流順序
• CLAUDE.md = 行為指引 + 觸發映射表
• Domain = 法規 + 公式 + 邊界案例
禁止跨層污染——Domain 不寫工作流、Skill 不寫法規條文、CLAUDE.md 不寫具體算法。
TECHNIQUE
Three-Layer Separation of Concerns · Single Source of Truth (CLAUDE.md) · Multi-Client Bridge Pattern · M:N Skill-Domain Composition
為什麼分層比堆功能重要
很多 BIM 工具死於「所有邏輯擠在一個 plug-in 裡」——
升級規範要重編譯、換 AI 要重寫工具、改流程要動 C# code。
本專案的三層分離讓「換新」成本接近零
這也是為什麼「Skill / Domain 都用 markdown」是刻意設計——任何老師都能用記事本寫,不需要 IDE、不需要編譯、不需要 Git 進階知識。降低貢獻門檻 = 知識複利的起點
深度閱讀 · 三層架構
COMMUNICATION · 4+1 模式

技術通訊架構

Skill / CLAUDE.md / Domain 是「邏輯三層」,下面這個是「技術四層」——AI Client → MCP Server → Revit Add-in → Revit API。

AI Client (Claude Desktop / Gemini CLI / VS Code Copilot / Claude Code)
  ↓ stdio
MCP Server (Node.js/TypeScript) — MCP-Server/src/index.ts
  ↓ WebSocket (ws://localhost:8964)
Revit Add-in (C# .NET 4.8) — MCP/Application.cs
  ↓ ExternalEventManager (UI thread)
CommandExecutor → Revit API

第 5 種「embedded」選項——WPF chat window 內嵌在 Revit Add-in,直接 call Gemini API,bypass MCP Server。

WHY
為什麼不直接 AI Client ↔ Revit API?因為Revit API 太底層——LLM 要傳 ElementId、Transaction、ViewSet 這些原生型別,每次都得編 boilerplate。MCP Server 中間層把這些封裝成 166 個語意化工具(check_smoke_exhaust_windowsFilteredElementCollector.OfCategory(...) 友善 100 倍)。
HOW
AI Client(stdio)→ MCP Server(Node.js TypeScript)→ WebSocket(port 8964)→ Revit Add-in(C# .NET)→ Revit API。每層做協議翻譯 + UI 執行緒守門。port 8964 由 Add-in 啟動(HttpListener),MCP Server 連入。
TECHNIQUE
4+1 Communication Architecture · WebSocket Bridge · ExternalEvent UI-Thread Guard · stdio MCP Transport · Optional Embedded WPF Path
為什麼選 WebSocket 不是 REST
REST API 適合「一問一答 + 無狀態」,但 Revit 操作是「連續對話 + 有 transaction state」。
WebSocket 保持連線、減少 handshake 開銷、UI thread 同步更穩。
port 8964 是 0425 開始就固定的——記得這個數字,因為「Port 被占用」是 3 個最常見的部署問題之一(其他兩個:DLL 沒部署、路徑寫錯)。詳見 故障排除
MULTI-CLIENT · 不同入口同一目的地

多 AI Client 統一架構

本專案支援多個 AI Client,採用「不同入口、同一目的地」規範。

項目 Claude Code Gemini CLI VS Code Copilot
行為指引 CLAUDE.md GEMINI.md → CLAUDE.md .github/copilot-instructions.md
Skills .claude/skills/SKILL.md .gemini/skills/SKILL.md instructions 引導
Domain 文件 共用 domain/ 共用 domain/ 共用 domain/
MCP Tools 共用 166 個工具 共用 166 個工具 共用 166 個工具
Event Log 共用 log/ 共用 log/ 共用 log/

SKILL.md 格式遵循 Agent Skills 開放標準(YAML frontmatter + Markdown body),Claude Code 與 Gemini CLI 皆原生支援。

WHY
設計師不該被綁定特定 AI 廠商——今天用 Claude,明天可能要換 Gemini 或 Copilot。如果每個 AI 都要重寫一套 Skill / Domain,知識資產就死在工具升級時。「不同入口、同一目的地」確保你今天投入的 domain,明天還能用。
HOW
行為指引層用 symlink / 薄殼指向(GEMINI.md 內容就是 CLAUDE.md)。Skill 層遵守 Anthropic 制定的 Agent Skills 開放標準(YAML frontmatter + Markdown),任何支援標準的 AI Client 都能用。Domain / MCP / Log 全跨 client 共用。
TECHNIQUE
Multi-Client Convergence Pattern · Anthropic Agent Skills Standard Compliance · Symlink Pattern for Behavior Guidance · Shared Domain Knowledge Base
為什麼不綁定單一 AI
教設計師「只能用 Claude」,第二年 OpenAI 出新版設計師會跑光。
教設計師「用任何 AI 都能跑這套 SOP」,他們會帶著 SOP 跟你走 10 年。
知識的長壽 > 工具的時髦
這也是為什麼採用 Anthropic Agent Skills 開放標準而不是自製格式——標準化會讓「貢獻你的 Skill」變成可移植資產,不是被某家公司鎖住的奴隸契約。Domain 用 Markdown 也是同理——人類可讀、AI 可讀、任何工具可讀。
深度閱讀 · 多 AI Client 策略
QUICK LINKS · 深入了解

下一步閱讀

📖 50 個 Skill 完整索引

每個 Skill 的觸發關鍵字、引用 Domain、呼叫工具一覽。

📚 72 Domain 完整索引

每個 Domain 的觸發詞、被引用 Skill、檔案位置。

🛠 Level 1 貢獻範本

停車場檢討範例——2 個檔案完成 Skill + Domain 貢獻,不需寫程式碼。

💡 P5 — Domain 是本體

為什麼 Domain 是 MCP 的核心資產(哲學層論述)。