繁體中文(台灣)
  • MCP
  • Model Context Protocol
  • AI

什麼是 MCP (Model Context Protocol) 及其工作原理

一份易於理解的 Model Context Protocol (MCP) 指南,解釋其如何幫助大型語言模型 (LLM) 訪問外部資源,以克服知識限制並構建更強大的 AI 應用。

Yijun
Yijun
Developer

不要在使用者認證上浪費數週時間
使用 Logto 更快地發布安全應用程式。幾分鐘內整合使用者認證,專注於您的核心產品。
立即開始
Product screenshot

什麼是 MCP?

MCP (Model Context Protocol) 是一個開放的、通用的協議,標準化應用如何向大型語言模型 (LLM) 提供上下文信息。

簡單來說,就像 HTTP 協議允許不同網站和瀏覽器根據相同的規則交換信息一樣,MCP 就像 AI 世界的 HTTP 協議。MCP 使不同的 AI 模型能夠以標準化的方式連接到各種數據來源和工具。這種標準化使開發者能夠更容易地構建 AI 應用,而不必為每個模型或數據來源創建專門的接口。

為什麼我們需要 MCP?

大型語言模型 (LLM) 功能強大,但它們面臨幾個關鍵限制:

  • 知識限制和更新挑戰:LLM 只知道其訓練數據中包含的信息。例如,GPT-4 的知識截止於 2023 年 4 月。訓練大型語言模型需要龐大的計算資源和時間,通常需要六個月或更長時間才能完成一個新版本。這就產生了一個困難的問題:模型的知識總是「過時的」,而更新極為昂貴且耗時。到一個新模型完成訓練時,其知識已經開始落後。

  • 缺乏專業領域知識:LLM 是使用公開可用的一般數據訓練的。它們無法深入理解特定業務場景中的專業數據和信息。例如,一個醫療機構的內部流程、一家公司的產品目錄或一個組織的專有知識不在模型的訓練範圍內。

  • 沒有統一的訪問外部數據的標準:目前,有許多方法可以為 LLM 提供附加信息,如 RAG(檢索增強生成)、本地知識庫、互聯網搜索等。不同的開發團隊提供不同的集成解決方案,這導致系統之間的集成成本很高。具有專業域數據的系統(如 CRM、ERP、醫療記錄系統等)難以與 LLM 無縫集成。每次集成都需要自定義開發,缺乏一個通用的、標準化的方法。

這就是為什麼我們需要 MCP。MCP 提供了一個標準化的協議,允許 LLM 以一致的方式訪問外部信息和工具,解決了上述所有問題。通過 MCP,我們可以得到以下關鍵優勢:

  • 豐富的預構建集成:MCP 提供了許多現成的服務器集成,包括文件系統、數據庫 (PostgreSQL, SQLite)、開發工具 (Git, GitHub, GitLab)、網絡工具 (Brave 搜索, Fetch)、生產力工具 (Slack, Google Maps) 等。這意味著你不需要從頭開始構建這些集成。你可以簡單地使用這些預構建的連接器,讓 LLM 訪問這些系統中的數據。

  • 靈活地切換 LLM 供應商:今天你可能使用 GPT-4,明天你可能想嘗試 Claude 或 Gemini,或者為不同場景使用不同的 LLM。有了 MCP,你不需要重寫整個應用的集成邏輯。你只需更換底層模型,所有數據和工具集成都保持不變。

  • 構建複雜的 AI 工作流:想像一個法律文件分析系統,需要查詢多個數據庫,使用特定工具進行文件對比,並生成報告。MCP 允許你在 LLM 之上構建這樣的複雜代理和工作流。

MCP 如何工作

在 MCP 中,有三個核心角色:MCP 服務器(提供工具和數據訪問)、MCP 客戶端(嵌入在 LLM 中並與 MCP 服務器通信)和 MCP 主機(集成 LLM 和客戶端的應用,如 Claude 桌面、Cursor 等)。讓我們仔細看看這三個角色如何協同工作。

MCP 服務器

MCP 服務器是一個程序,提供工具和數據訪問能力供 LLM 使用。與傳統的遠程 API 服務器不同,MCP 服務器可以作為本地應用運行在用戶設備上,也可以部署到遠程服務器。

每個 MCP 服務器都提供一組特定的工具,負責從本地數據或遠程服務中檢索信息。當一個 LLM 確定在處理任務時需要使用某個工具時,它會使用 MCP 服務器提供的工具來獲取所需數據並返回給 LLM。

MCP 客户端

MCP 客戶端是連接 LLM 和 MCP 服務器的橋樑。嵌入在 LLM 中,負責:

  • 接收來自 LLM 的請求
  • 轉發請求至相應的 MCP 服務器
  • 將 MCP 服務返回的結果返回給 LLM

你可以查看 開發 MCP 客户端 了解更多關於將 MCP 客戶端與 LLM 集成的內容。

MCP 主機

像 Claude Desktop、IDEs (Cursor, 等) 或想通過 MCP 訪問數據的 AI 工具之類的程序。這些應用為用戶提供與 LLM 交互的接口,同時集成 MCP 客戶端以連接 MCP 服務器,使用 MCP 服務器提供的工具來擴展 LLM 功能。

MCP 工作流

以上三個角色最終形成了一個基於 MCP 的 AI 應用。

此系統的工作流範例如下:

如何構建 MCP 服務器

MCP 服務器是 MCP 系統中最關鍵的環節。它決定了 LLM 可以使用哪些工具訪問何種數據,直接影響 AI 應用的功能邊界和能力。

要開始構建你自己的 MCP 服務器,建議先閱讀官方 MCP 快速入門指南,其中詳細介紹了從環境設置到 MCP 服務器實現和使用的完整過程。本文僅會解釋核心實現細節。

定義 MCP 服務器提供的工具

MCP 服務器的核心功能是通過 server.tool() 方法定義工具。這些工具是 LLM 可以調用以獲取外部數據或執行特定操作的功能。讓我們來看看一個使用 Node.js 的簡化示例:

在這個例子中,我們定義了一個名為 search-documents 的工具,該工具接受查詢字符串和最大結果數作為參數。工具的實現將連接到知識庫系統並返回查詢結果。

LLM 將根據工具的定義和用戶的問題來決定是否使用此工具。如有需要,LLM 會調用此工具,獲得結果,並將結果與用戶的問題結合起來生成答案。

定義工具的最佳實踐

在構建此類工具時,可以遵循以下最佳實踐:

  • 清晰的描述:為每個工具提供詳細、準確的描述,明確其功能、適用場景和限制。這不僅有助於 LLM 選擇正確的工具,還便於開發者理解和維護代碼。
  • 參數驗證:使用 Zod 或類似庫嚴格驗證輸入參數,確保類型正確、值範圍合理,拒絕不合規輸入。這可以防止錯誤傳播到後端系統,並提高系統的整體穩定性。
  • 錯誤處理:實施全面的錯誤處理策略,捕獲可能的異常,並返回用戶友好的錯誤消息。這可以提高用戶體驗,讓 LLM 能夠根據錯誤狀況提供有意義的響應,而不是簡單地失敗。
  • 數據訪問控制:確保後端資源的 API 具有完善的身份驗證和授權機制,仔細設計權限範圍,以限制 MCP 服務器僅能訪問和返回用戶授權的數據。這可以防止敏感信息洩露,確保數據安全。

如何確保 MCP (AI 模型) 與外部系統之間數據交換的安全性

實現連接 AI 模型和外部系統的 MCP 服務器時,MCP 實現中存在兩個關鍵的安全挑戰:

  • 身份驗證:與傳統應用不同,在 MCP 環境中,用戶不能使用傳統的登錄流程(如用戶名/密碼、電子郵件/驗證碼等)登錄以訪問外部系統。
  • MCP 服務器請求的訪問控制:通過 AI 工具訪問系統的用戶與直接使用你系統的用戶是同一人。當他們通過 AI 工具交互時,MCP 服務器就是他們的代表。單純為了適應 MCP 服務器而重新設計整個訪問控制機制將需要大量的精力和成本。

解決這些挑戰的關鍵是實施 個人訪問令牌 (PATs)。PATs 為用戶提供了一種安全的方式來授權訪問,而無需分享他們的憑證或要求交互式登錄。

以下是其工作流程:

此方法允許你的現有服務維持其身份驗證機制,同時安全地實現 MCP 集成。

你可以參考這篇博客文章:為你的業務賦能:使用訪問控制連接 AI 工具和你的現有服務 以及一個完整的 源代碼示例 來學習如何使用 Logto 的 個人訪問令牌 (PAT) 結合 角色基於的訪問控制 (RBAC) 限制 MCP 從後端服務可訪問的資源。

總結

MCP (Model Context Protocol) 為大型語言模型與特定業務的結合帶來了革命性的改變。它解決了大型語言模型的知識限制、缺乏專業領域知識、以及外部數據訪問標準不統一的問題。

使用 MCP 連接你自己的服務將為你的業務帶來新的可能性。MCP 是將 AI 與業務價值連接的橋樑。你可以創造真正理解你公司內部知識的 AI 助手,開發能訪問最新數據的智能工具,並構建滿足特定行業需求的專業應用。