文章目錄
- MCP 原理介紹
- 架構
- 核心組件
- 協議層
- 傳輸層
- 連接生命周期
- MCP與function calling: 互補關系
- MCP python SDK
- MCP的優點
- 怎么用MCP:天氣服務
- 參考應用項目:
- REF
24年11月份,claude推出了模型上下文協議( MCP),作為一種潛在的解決方案,解決大模型和其他工具交互。
走紅的Manus驗證了自動打工agent的潛在市場需求后,作為大模型與其他工具交互的協議,MCP這幾個月也在在開發人員和 AI 社區中獲得了巨大的關注.。
claude的AI產品思維做的確實好,交互式對話的artifact、AI編程的coding能力、還有大模型與外界數據傳輸的USE接口MCP,都是它家最早做的;這幾天qwen的界面也上新了還在開發中的MCP按鈕,估計是做tool calling類似的功能。

MCP 原理介紹
- 提出背景:隨著基座大模型變得更加智能,agent與外部工具、數據和 API 交互的能力變得越來越分散:開發人員需要為代理運行和集成的每個系統實現具有特殊業務邏輯的代理,需要有一個用于執行、數據獲取和工具調用的標準接口。
- 與API的比較:API 是互聯網上第一個偉大的統一器,為軟件創建一種共享語言進行通信,但 AI 模型缺乏等效項。MCP補足了大模型連接數據、工具標準接口的生態位。
- 什么是MCP:MCP(model context protool) 是一種開放協議,允許系統以可集成、通用化的方式為 AI 模型提供上下文。 該協議定義了 AI 模型如何調用外部工具、獲取數據以及與服務交互。這種開放標準也使得開發人員能夠在其數據源和 AI 驅動的工具之間構建安全的雙向連接。
架構
MCP的架構遵循客戶端-服務器架構:開發人員可以通過 MCP 服務器開放數據,也可以構建連接到這些服務器的 AI 應用程序(MCP 客戶端)。
MCP架構主要包括主機、客戶端和服務器。
- 主機(Host):AI應用程序,例如claude desktop或IDE,發起連接;
- 客戶端(Client): 在主機應用程序內與服務器保持一對一的連接;
- 服務器(Server): 客戶端提供context、tool和prompt;
目前MCP的生態系統正在快速發展,a16z的圖給出了有代表性的MCP 服務器、客戶端:
各大企業MCP服務器的參考實現地址:https://github.com/modelcontextprotocol/servers,包括git、PostgreSQL 、redis等構建MCP服務器的實現代碼。
核心組件
協議層
處理消息幀、請求/響應鏈接和高級通信模式,基于MCP協議的通信會話包括request、notification兩類。
class Session(BaseSession[RequestT, NotificationT, ResultT]):"""會話類,用于管理基于MCP協議的通信會話。"""async def send_request(self,request: RequestT,result_type: type[Result]) -> Result:"""發送請求并等待響應。如果響應中包含錯誤,則拋出McpError異常。參數:- request (RequestT): 要發送的請求對象。- result_type (type[Result]): 期望的響應結果類型。返回值:- Result: 響應結果對象。"""# Request handling implementation# (請求處理的具體實現代碼)async def send_notification(self,notification: NotificationT) -> None:"""發送單向通知,不期望對方發送響應。參數:- notification (NotificationT): 要發送的通知對象。"""# Notification handling implementation# (通知處理的具體實現代碼)async def _received_request(self,responder: RequestResponder[ReceiveRequestT, ResultT]) -> None:"""處理從對端接收到的請求。參數:- responder (RequestResponder[ReceiveRequestT, ResultT]): 請求響應器,用于處理請求并生成響應。"""# Request handling implementation# (請求處理的具體實現代碼)async def _received_notification(self,notification: ReceiveNotificationT) -> None:"""處理從對端接收到的通知。參數:- notification (ReceiveNotificationT): 接收到的通知對象。"""# Notification handling implementation# (通知處理的具體實現代碼)
傳輸層
傳輸層處理客戶端和服務器之間的實際通信。MCP 支持多種傳輸機制:1.標準傳輸。2.使用服務器發送事件(Server-Sent Events)來實現服務器到客戶端的消息傳輸,使用HTTP POST方法來實現客戶端到服務器的消息傳輸。
連接生命周期
MCP的連接生命周期分為初始化、消息交換和終止三個階段:
- 初始化階段
客戶端發送初始化請求 :客戶端向服務器發送一個初始化請求,該請求中包含協議版本和客戶端的能力信息。這是建立連接的第一步,用于告知服務器客戶端支持的協議版本以及自身具備的功能和特性。
服務器響應初始化請求 :服務器接收到客戶端的初始化請求后,會回復自己的協議版本和能力信息。通過這種方式,雙方能夠確認彼此支持的協議版本是否兼容,并了解對方的功能特性,為后續的通信做好準備。
客戶端發送初始化完成通知 :客戶端收到服務器的響應后,會發送一個初始化完成通知作為確認。這標志著初始化過程結束,雙方已經準備好開始正常的通信。 - 消息交換階段
a. 請求 - 響應模式 :客戶端或服務器可以發送請求,另一方則需要對請求進行響應。這種模式適用于需要交互的場景,例如客戶端請求服務器執行某個操作或獲取某些數據,服務器處理完成后返回結果。
b. 通知模式 :客戶端或服務器可以發送單向通知,這種通知不需要對方回復。通知通常用于告知對方一些狀態信息或事件,例如服務器通知客戶端某個資源的狀態發生了變化,或者客戶端通知服務器用戶的一些操作行為等。 - 終止階段
正常關閉 :雙方中的任意一方都可以通過調用 close() 方法來正常關閉連接。這種情況下,雙方會按照協議規定的流程,完成一些必要的清理工作,然后斷開連接。
傳輸層斷開連接 :如果傳輸層(例如網絡連接)出現問題,導致連接中斷,那么連接也會終止。這種情況可能是由于網絡故障、服務器或客戶端的意外關閉等原因引起的。
錯誤條件 :如果在通信過程中出現錯誤,例如請求格式錯誤、服務器內部錯誤等,也可能會導致連接終止。根據錯誤的嚴重程度和協議的規定,可能會嘗試重新建立連接,或者直接斷開連接并記錄錯誤信息。
MCP與function calling: 互補關系
函數調用和 MCP 都是將 LLM 橋接到企業系統不可或缺的一部分,但它們解決了不同的挑戰:
? 函數調用側重于將prompt轉換為可執行的指令。它是 LLM 驅動的,并且因供應商而異,目前還沒有通用標準。
? MCP 標準化了這些指令的執行,從而實現了數千種工具的可擴展性和互作性。
MCP python SDK
Claude開源了MCP的python-SDK:https://github.com/modelcontextprotocol/python-sdk/tree/main
MCP Python SDK 實現了完整的 MCP specification規范,使得以下操作變得簡單:
- 構建能夠連接到任何 MCP 服務器的 MCP 客戶端。
- 創建提取資源、提示和工具的 MCP 服務器。
- 使用標準傳輸方式,如標準輸入輸出(stdio)和服務器發送事件(SSE)。
- 處理所有 MCP 協議消息和生命周期事件
安裝:
pip install mcp
MCP的優點
MCP讓開發者以安全、標準化的方式構造向大型語言模型(LLM)應用程序暴露數據和功能的服務器:
- 通過**資源(Resources)**暴露數據(類似于GET端點;它們用于將信息加載到LLM的上下文中)。
- 通過**工具(Tools)**提供功能(類似于POST端點;它們用于執行代碼或產生其他副作用)。
- 通過**提示(Prompts)**定義交互模式(LLM交互的可重用模板)。
怎么用MCP:天氣服務
https://github.com/modelcontextprotocol/quickstart-resources/blob/main/weather-server-python/weather.py
初始化FastMCP
服務器、API和agent:
from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP# Initialize FastMCP server
mcp = FastMCP("weather")# Constants
NWS_API_BASE = "https://api.weather.gov"
USER_AGENT = "weather-app/1.0"
參考應用項目:
- MCP-figma:交互出UI設計稿
https://github.com/JayZeeDesign/figma-mcp - MCP-blender: 動嘴實現3D建模
https://github.com/ahujasid/blender-mcp
REF
https://www.anthropic.com/news/model-context-protocol
MCP代碼地址:https://github.com/modelcontextprotocol
MCP文檔地址:https://modelcontextprotocol.io/docs/concepts/architecture
https://a16z.com/a-deep-dive-into-mcp-and-the-future-of-ai-tooling/
https://x.com/sidahuj/status/1901632110395265452
https://www.gentoro.com/blog/function-calling-vs-model-context-protocol-mcp
https://x.com/akshay_pachaar/status/1900170408038642058