簡介
MCP(全稱為Model Context Protocol,模型上下文協議)是一種面向大模型交互過程的通用上下文協議標準。其核心目標在於為模型構建一個結構化、可控、可擴展的語義執行環境,使語言模型能夠在統一的上下文管理體系下進行任務調度、工具調用、資源協作與狀態保持,從而突破傳統Prompt Engineering在多輪交互、指令組合與行為穩定性方面的瓶頸。
在傳統的大模型應用中,模型本身只能被動地接收輸入、產生輸出,要讓它調用外部工具或訪問自定義的上下文,就需要在代碼裏逐條寫好 API 調用、認證、錯誤處理的邏輯,既繁瑣又難以維護。MCP的初衷,就是將這些"上下文管理"和"工具調用"能力抽象成一個標準化的通信協議,讓大模型應用只需關注"我想用什麼資源",由專門的 MCP 服務端來真正執行調用、管理狀態、返回結果。
MCP 官方GitHub
有一種説法是,傳統的大模型應用叫做Prompt Engineering,而MCP出現後,大模型應用開發應該叫做Context Engineering。傳統的提示工程常常依賴於簡單的字符串拼接,這種方式有幾個問題:
- 歧義性:模型可能難以區分哪些是指令,哪些是用户輸入,哪些是檢索到的數據。
- 提示注入風險:如果提示中包含惡意指令,例如
ignore all previous instructions,模型可能被欺騙。 - 脆弱性:格式的微小變化(比如多一個換行符)都可能導致模型性能下降。
- 難以維護:當上下文變得更復雜時(例如,多個數據源、工具定義、歷史消息),這種拼接方式會變得一團糟(親身體驗,塞了一堆歷史消息後,模型的回答越拐越遠)
核心概念
Tools(工具)
工具是AI模型可以調用以執行特定操作的函數。它們允許模型與外部系統交互,執行有副作用的操作,如:
- 調用API獲取實時數據
- 查詢或修改數據庫
- 執行代碼或腳本
- 發送郵件或消息
- 文件操作
工具由模型控制,這意味着AI決定是否以及何時使用它們。工具調用可能會產生副作用,其結果可以反饋到對話中。
Resources(資源)
資源是提供給模型的只讀上下文單元(數據源)。它們可以是:
- 文件內容
- 數據庫記錄
- API響應
- 知識庫內容
資源由應用程序控制,託管方或開發人員決定公開哪些數據以及如何公開。讀取資源沒有副作用,類似於僅獲取數據的GET請求。資源提供可在需要時注入模型上下文的內容(例如,在問答場景中檢索到的文檔)。
Prompts(提示模板)
提示模板是可重複使用的提示模板或指令,可以根據需要調用。它們由用户控制或由開發人員預定義。提示可能包含常見任務或指導性工作流程的模板(例如,代碼審查模板或問答格式)。
提示模板的關鍵特性包括:
- 參數化:支持動態參數輸入
- 資源整合:可嵌入資源上下文供模型參考
- 多輪交互:支持構建多輪對話流程
- 統一發現:通過標準接口註冊和調用
Sampling(採樣)
採樣是工具與LLM交互以生成文本的機制。通過採樣,工具可以請求LLM生成文本內容,例如生成詩歌、文章或其他文本內容。採樣允許工具利用LLM的能力來創建內容,而不僅限於執行預定義的操作。
Elicitation(徵詢)
徵詢是一種允許工具向用户請求額外信息或確認的機制。當工具執行過程中需要更多信息才能繼續執行時,可以使用徵詢功能與用户交互。這在處理需要用户確認或提供額外參數的操作時特別有用。
例如,在預訂系統中,如果用户請求的日期已滿,工具可以徵詢用户是否願意選擇其他日期。徵詢機制確保了工具可以在必要時暫停執行,等待用户輸入,從而提供更好的用户體驗。
徵詢的關鍵特性包括:
- 交互性:允許工具與用户進行雙向溝通
- 驗證:可以對用户輸入進行驗證,確保數據的正確性
- 可選性:用户可以選擇接受、拒絕或取消徵詢請求
- 結構化:支持結構化數據輸入,便於處理複雜信息
Roots(根)
Root表示一次語義執行的起點,攜帶資源引用、執行目標、響應格式等信息,支持多併發執行流。它作為語義執行的基礎輸入結構,可以包含多個Prompt和工具,為模型提供完整的上下文環境。
Logging(日誌記錄)
日誌記錄是MCP中的一個重要功能,允許服務器和工具向客户端發送日誌信息。通過日誌記錄,開發者可以跟蹤工具執行過程、調試問題以及監控系統狀態。MCP支持多種日誌級別,包括調試(debug)、信息(info)、警告(warning)和錯誤(error)等。
Notifications(通知)
通知機制允許服務器向客户端發送實時更新信息,例如資源變更、工具列表更新等。通過通知,客户端可以及時瞭解服務器狀態的變化,並相應地更新用户界面或執行其他操作。常見的通知類型包括資源更新通知、工具列表變更通知、提示列表變更通知等。
組件
MCP Server
Server 是一個獨立的程序或服務,它通過 MCP 協議向 MCP 客户端暴露特定的功能、工具或數據資源。
角色職責:
- 提供工具/資源:MCP Server 是外部能力(如數據庫、API、文件系統、計算服務等)的封裝器或適配器。它將這些外部能力以標準化、可供大模型調用的形式暴露出來。
- 執行操作:當接收到 MCP Client 的請求時,MCP Server 負責執行底層操作(例如,查詢數據庫、調用第三方 API、執行代碼等)。
- 返回結果:將執行結果返回給請求它的 MCP Client。
- 獨立部署:MCP Server 可以運行在本地機器上,也可以部署在遠程服務器上。
MCP Host
Host 是用户直接交互的應用程序或環境。它通常是AI應用程序的入口點,比如:
- 一個聊天機器人界面
- 一個IDE
- 一個自定義的AI代理應用程序
角色職責:
- 用户交互:接收用户的請求和輸入,並向用户顯示大模型生成的響應。
- 協調與編排:負責整個工作流的協調和編排。它決定何時調用大模型,何時需要外部工具或數據,以及如何將它們的結果整合起來。
- 管理客户端:Host 創建並管理一個或多個 MCP 客户端實例。
- 維護核心上下文:通常由 Host 來維護整個對話歷史和應用程序的全局上下文,而不是將所有信息都暴露給單個服務器。
- 安全邊界:強制執行客户端和服務器之間的安全邊界和權限控制。
MCP Client
Client 是內置在 Host 應用程序中的一個組件,它作為 Host 和 MCP Server 之間的橋樑。一個Host內可以有多個Client。
角色職責:
- 協議轉換:將 Host 的請求轉換成MCP協議定義的標準格式,以便MCP Server能夠理解。同時,它也將MCP Server的響應轉換成Host可用的格式。
- 會話管理:與一個特定的MCP Server建立並維護一對一的連接和會話生命週期。
- 能力協商:在建立連接時,與MCP Server協商雙方支持的能力和協議版本。
- 消息路由:負責在Host和其Server之間雙向路由消息。
- 安全與認證:可以處理與MCP Server之間的認證和授權,確保只有授權的請求才能到達服務器。
References
- https://zhuanlan.zhihu.com/p/29001189476