# Model Context Protocol (MCP) ## 什麼是MCP? * **定義**: 一種由 Anthropic 開發並於 2024 年底推出的開放標準。 * **目的**: 提供標準化、安全、有效的方式,讓大型語言模型 (LLMs) 如 Claude、ChatGPT 等 AI 應用程式,連接和使用外部資料來源、工具和服務。 * **比喻**: AI 應用的「萬用轉接頭」或電腦的 USB 介面。 * **核心價值**: 統一軟體介面,讓不同 AI 模型能與多種外部功能互動,避免為每個服務/模型客製化整合。 ## 為什麼需要MCP? * **LLM 限制**: 依賴訓練資料,無法存取即時資訊、私有資料或執行特定操作(如發郵件)。 * **整合痛點**: 整合外部工具/API 複雜且重複,不同應用/服務商介面標準不一。 * **"M×N 問題"**: M 個 AI 應用和 N 個外部工具,可能需要 M×N 個整合方案。 * **MCP 的解決方案**: 提供通用協定,簡化為 **"M+N 問題"** (開發 N 個 MCP 伺服器 + M 個 MCP 客戶端),減少重複開發,提高互操作性。 ## MCP的主要架構 採用客戶端-伺服器架構: 1. **MCP 主機 (MCP Host)**: * 需要存取外部工具/資料的 AI 應用程式本身。 * 範例:Claude Desktop、整合 AI 的 IDE (如 Cursor)、客製化 AI 代理。 2. **MCP 客戶端 (MCP Client)**: * 存在於主機應用中的程式碼。 * 負責管理與一個或多個 MCP 伺服器的連接 (通常一對一)。 * 轉發主機請求給伺服器,傳回伺服器回應給主機。 3. **MCP 伺服器 (MCP Server)**: * 獨立運行的程式。 * 向 AI 系統提供特定外部服務/資料來源的功能。 * 可連接本地/遠端資料庫、API、檔案系統等。 * 根據 MCP 協定處理客戶端請求,回傳資訊/結果。 **互動流程簡述**: Host (AI 模型) -> Client -> Server (執行操作) -> Client -> Host (模型利用結果生成回應)。 ![image](https://hackmd.io/_uploads/S12PXurA1e.png) ## 基本運作流程 1. **Input**: 使用者輸入查詢(Query),這是整個流程的起點。 2. **Select MCP tool**: LLM 根據使用者的查詢判斷需要使用哪個 MCP 工具。 3. **Return MCP tool**: LLM 將所選定的 MCP 工具資訊返回給 MCP Client。 4. **MCP Tool approval**: 系統請求使用者確認是否允許使用該工具(為了避免濫用或敏感操作)。 5. **Request tool call**: MCP Client 轉發請求給 MCP Server,準備進行工具調用。 6. **Invoke MCP tool**: MCP Server 調用實際的 MCP Tool(通常是一個 API 或功能模組)。 7. **Return output**: 工具執行完畢後將結果返回給 MCP Client。 8. **Send output and query to LLM**: MCP Client 將 MCP tool 的輸出結果連同原始查詢一起傳給 LLM,以利生成最終回應。 9. **Generate**: LLM 根據查詢與工具的輸出產生最終回應,提供給使用者。 ![mcp](https://hackmd.io/_uploads/BJvtuLMkee.gif) ## 主要優勢 * **即時資料存取**: 連接即時數據源,超越訓練資料限制。 * **個人化與隱私**: 僅在需要時存取特定用戶資訊,最小化資料揭露。 * **降低幻覺**: 將回應建立在事實性外部資料上,減少不準確資訊。 * **簡化開發**: 提供標準化互動方式,降低整合複雜度,一次編寫,多處使用。 * **功能大幅擴展**: 利用外部工具執行更複雜任務 (程式碼分析、財務分析等)。 **與傳統API的主要區別** | 特性 | MCP | 傳統 API | | :---------- | :------------------------------------ | :-------------------------------- | | **整合方式** | 一次整合多個工具 | 通常需為每個服務單獨整合 | | **互動性** | 更即時、有狀態的互動 | 通常是無狀態的請求-回應模式 | | **發現能力** | 支援動態探索可用工具/資源 | 通常需手動查閱文件 | | **擴充性** | "即插即用" 特性,易於新增功能 | 擴充可能需更多整合工作 | | **安全控制** | 旨在提供跨工具一致的安全控制 | 安全機制可能因 API 而異 | | **AI 相容性** | 為 AI 設計,支援更動態的互動模式 | 可能更偏向靜態的資料交換 | | **工具描述** | 協定內可包含工具自我描述,方便 AI 理解 | 通常需要額外的文件說明 | ## 實際應用場景 * **增強 AI 桌面應用程式功能**: * 透過本地 MCP 伺服器,讓 AI 能直接存取使用者電腦上的資源(e.g. Claude 桌面應用程式)。 * 連接檔案系統伺服器,讓 AI 能回答關於本地檔案的問題 (如:檔案數量)。 * 整合網路搜尋伺服器 (如 Brave 搜尋),讓 AI 能查詢最新資訊。 * **整合到開發工具和 IDE 中**: * 增強開發工具中 AI 助理的功能,讓開發者在 IDE 內使用 AI。 * 存取專案相關資料來源 (如:Google Drive)。 * 執行程式碼相關操作 (如:在 GitHub 創建分支、查詢程式碼),提供更好的程式碼相關資訊存取。 * **連接 AI 模型與各種外部服務/資料**: * 標準化 AI 模型與外部世界的互動,讓 Claude、ChatGPT 等 AI 模型能透過統一協定請求使用這些服務和數據。例如: GitHub, Slack, Google Drive, Gmail, Google 日曆等正在開發 MCP 伺服器。 * **作為構建 AI 代理的基礎架構**: * MCP 可作為 AI 代理的基礎,提供檢索、記憶和工具調用能力,使 AI 能夠更智慧、更彈性地處理複雜任務。 * 支援框架: Firebase Genkit, LangGraph, OpenAI agents sdk 等開始支援 MCP。 * **實現更複雜和實用的任務**: * 程式碼分析: 連接版本控制系統。 * 財務分析: 使用即時市場數據。 * 圖像/文件分析: 透過專門服務處理。 * 3D 模型自動化: 整合 Claude AI 與 Blender 等工具。 ## 如何開始使用和開發 * **使用官方 SDK**: Anthropic 和社群提供多語言 SDK (TypeScript, Python, Java, Kotlin, C#, Rust)。 * **探索現有伺服器**: 尋找符合需求的現成伺服器 (檔案系統, Git, Slack, Brave Search 等)。 * **開發自訂伺服器**: 使用 SDK 為私有資料/特定工具開發自己的 MCP 伺服器。 * **使用支援 MCP 的應用**: 嘗試已支援 MCP 的平台 (Claude Desktop, Cursor, Microsoft Copilot Studio)。 * **參考官方文件/社群**: * 官方 GitHub: `modelcontextprotocol` (規範、文件、範例)。 * 社群資源: `awesome-mcp-servers` 列表等。 ## 未來發展與潛在機會 * **更多產業專用伺服器**: 如醫療、金融、教育等。 * **MCP-as-a-Service**: 提供託管 MCP 連接的商業服務。 * **多公司聯盟與標準化**: 共同推動協定治理,可能成為通用 AI 整合標準。 * **雲端平台廣泛採用**: 主要 AI/雲端服務商增加整合。 * **更強大的工具與基礎設施**: 開發測試、部署、監控 MCP 伺服器的工具。 * **新創事業機會**: * 開發/銷售熱門服務的 MCP 伺服器。 * 提供 MCP 相關諮詢/整合服務。 * 構建基於 MCP 的創新 AI 應用。 * 可能出現 "MCP 應用商店"。 --- Reference: https://www.philschmid.de/mcp-introduction [Model Context Protocol (MCP), clearly explained (why it matters)](https://youtu.be/7j_NE6Pjv-E?si=hSAWOcHcRtE8O2E3) https://www.bnext.com.tw/article/82706/what-is-mcp