圖解|MCP 與你上班每天用的API有啥不一樣?
“模型上下文協(xié)議”(MCP)出來應(yīng)該有一年了,今天我們來簡單看看它到底是個什么"東西”。
以下內(nèi)容都翻譯自:https://blog.dailydoseofds.com/p/visual-guide-to-model-context-protocol 為了閱讀順暢略有修改。
MCP它不是個"東西",呃,好像也不能這么說,簡單來說,MCP 就像是你的 AI 應(yīng)用的 USB-C 接口。USB-C 為各種設(shè)備和配件提供了標(biāo)準(zhǔn)的連接方式,讓配件能連上電腦等設(shè)備,而 MCP 也一樣,它為你的 AI 應(yīng)用連接不同的數(shù)據(jù)源和工具(比如數(shù)據(jù)庫、API、本地文件等)提供了一套標(biāo)準(zhǔn)化的方法。
img
從技術(shù)層面深入一點看,MCP 的核心是一種客戶端-服務(wù)器(client-server)架構(gòu),在這種架構(gòu)下,一個主應(yīng)用程序可以連接到多個不同的服務(wù)器。
核心組件
它主要由三個關(guān)鍵部分組成:
- 主機 (Host)
- 客戶端 (Client)
- 服務(wù)器 (Server)
在我們深入之前,先看一張總覽圖:
img
主機 (Host):代表任何一個 AI 應(yīng)用(比如 Claude 客戶端、Cursor 等)。它為 AI 的交互提供了運行環(huán)境,能夠訪問工具和數(shù)據(jù),并且運行著 MCP 客戶端。
MCP 客戶端 (Client):在主機內(nèi)部運行,主要負責(zé)和 MCP 服務(wù)器進行溝通。
img
最后,MCP 服務(wù)器 (Server)暴露特定的能力,并提供對如下數(shù)據(jù)的訪問:
img
- 工具 (Tools):讓大語言模型(LLM)能通過你的服務(wù)器來執(zhí)行某些動作。
- 資源 (Resources):把你服務(wù)器上的數(shù)據(jù)和內(nèi)容開放給大語言模型使用。
- 提示詞 (Prompts):創(chuàng)建可以重復(fù)使用的提示詞模板和工作流。
MCP的客戶端與服務(wù)器如何溝通?
要自己搭建 MCP 服務(wù),理解MCP客戶端和服務(wù)器之間的溝通方式至關(guān)重要。
我們先來看一張示意圖,然后再一步步拆解:
img
首先,我們進行**能力交換 (capability exchange)**,過程如下:
- 客戶端發(fā)送一個初始請求,以了解服務(wù)器的能力。
- 服務(wù)器隨后會用其能力詳情進行響應(yīng)。
- 例如,一個天氣 API 服務(wù)器在被調(diào)用時,可以回復(fù)其擁有的可用“工具”、“提示模板”以及任何其他可供客戶端使用的資源。
一旦這個交換完成,客戶端會確認連接成功,然后進一步的消息交換將繼續(xù)進行。
這就是這種設(shè)置如此強大的原因之一。
在傳統(tǒng)的 API 設(shè)置中:
如果你的 API 最初需要兩個參數(shù)(例如,提供天氣信息的服務(wù)端API需要 location 和 date兩個參數(shù)),用戶會在集成API的應(yīng)用程序中用這兩個確切的參數(shù)來發(fā)送請求來獲取天氣信息。
后來,如果你決定增加第三個必填的參數(shù)(例如,unit 用于表示溫度單位,如攝氏度或華氏度),此時API 的定義就發(fā)生了改變。
這意味著所有使用你 API 的用戶都必須更新他們的代碼以包含這個新參數(shù)。如果他們不更新,他們的請求可能會失敗、返回錯誤或提供不完整的結(jié)果。
MCP 的設(shè)計通過以下方式解決了這個問題:
- MCP 引入了一種動態(tài)且靈活的方法,這與傳統(tǒng) API 的方式形成鮮明對比。
- 例如,當(dāng)一個客戶端(例如像 Claude 桌面版這樣的 AI 應(yīng)用)連接到一個 MCP 服務(wù)器(例如你的天氣服務(wù))時,它會發(fā)送一個初始請求來了解服務(wù)器的能力。
- 服務(wù)器會響應(yīng)其可用工具、資源、提示和參數(shù)的詳細信息。例如,如果你的天氣 API 最初支持 location 和 date,服務(wù)器會在其能力中傳達這些信息。
圖片
如果你之后添加了一個 unit 參數(shù),MCP 服務(wù)器可以在下一次交換中動態(tài)地更新其能力描述。客戶端不需要硬編碼或預(yù)定義這些參數(shù)——它只需查詢服務(wù)器當(dāng)前的能力并相應(yīng)地進行調(diào)整。
圖片
通過這種方式,客戶端可以動態(tài)地調(diào)整其行為,使用更新后的能力(例如,在請求中包含 unit),而無需重寫或重新部署代碼。
這就是MCP與傳統(tǒng)API的差異,后面有時間了再跟大家分享MCP的使用場景,還有如何創(chuàng)建自定義的 MCP 服務(wù)器。























