MCP 課程文件

通訊協議

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

通訊協議

MCP 定義了一個標準化的通訊協議,使客戶端和伺服器能夠以一致、可預測的方式交換訊息。這種標準化對於整個社群的互操作性至關重要。在本節中,我們將探討 MCP 中使用的協議結構和傳輸機制。

我們將深入探討 MCP 協議的細節。您不需要了解所有這些才能使用 MCP 進行構建,但瞭解它的存在以及工作原理會很有幫助。

JSON-RPC:基礎

MCP 的核心是使用 JSON-RPC 2.0 作為客戶端和伺服器之間所有通訊的訊息格式。JSON-RPC 是一種輕量級的遠端過程呼叫協議,採用 JSON 編碼,這使得它:

  • 可讀性強,易於除錯
  • 語言無關,支援在任何程式設計環境中實現
  • 成熟穩定,規範清晰,應用廣泛

message types

該協議定義了三種類型的訊息

1. 請求

從客戶端傳送到伺服器以發起操作。請求訊息包括:

  • 唯一識別符號(id
  • 要呼叫的方法名稱(例如,tools/call
  • 方法的引數(如果有)

請求示例

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "weather",
    "arguments": {
      "location": "San Francisco"
    }
  }
}

2. 響應

伺服器響應請求傳送到客戶端。響應訊息包括:

  • 與相應請求相同的 id
  • result(成功)或 error(失敗)

成功響應示例

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "temperature": 62,
    "conditions": "Partly cloudy"
  }
}

錯誤響應示例

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32602,
    "message": "Invalid location parameter"
  }
}

3. 通知

不需要響應的單向訊息。通常從伺服器傳送到客戶端,以提供有關事件的更新或通知。

通知示例

{
  "jsonrpc": "2.0",
  "method": "progress",
  "params": {
    "message": "Processing data...",
    "percent": 50
  }
}

傳輸機制

JSON-RPC 定義了訊息格式,但 MCP 還規定了這些訊息如何在客戶端和伺服器之間傳輸。支援兩種主要的傳輸機制:

stdio(標準輸入/輸出)

stdio 傳輸用於本地通訊,其中客戶端和伺服器在同一臺機器上執行

宿主應用程式將伺服器作為子程序啟動,並透過向其標準輸入 (stdin) 寫入和從其標準輸出 (stdout) 讀取來與其通訊。

此傳輸的用例是本地工具,如檔案系統訪問或執行本地指令碼。

此傳輸的主要優點是它簡單,無需網路配置,並透過作業系統安全沙盒。

HTTP + SSE(伺服器傳送事件)/可流式 HTTP

HTTP+SSE 傳輸用於遠端通訊,其中客戶端和伺服器可能位於不同的機器上

通訊透過 HTTP 進行,伺服器使用伺服器傳送事件 (SSE) 透過持久連線將更新推送到客戶端。

此傳輸的用例是連線到遠端 API、雲服務或共享資源。

此傳輸的主要優點是它可以在網路上工作,實現與 Web 服務的整合,並與無伺服器環境相容。

MCP 標準的最新更新引入或完善了“可流式 HTTP”,它透過允許伺服器在需要時動態升級到 SSE 進行流式傳輸,同時保持與無伺服器環境的相容性,從而提供了更大的靈活性。

互動生命週期

在上一節中,我們討論了客戶端 (💻) 和伺服器 (🌐) 之間單個互動的生命週期。現在我們來看看 MCP 協議上下文中客戶端和伺服器之間完整互動的生命週期。

MCP 協議定義了客戶端和伺服器之間結構化的互動生命週期

初始化

客戶端連線到伺服器,它們交換協議版本和功能,伺服器響應其支援的協議版本和功能。

💻
初始化
🌐
💻
響應
🌐
💻
已初始化
🌐

客戶端透過通知訊息確認初始化完成。

發現

客戶端請求有關可用功能的資訊,伺服器響應可用工具列表。

💻
tools/list
🌐
💻
響應
🌐

此過程可以針對每個工具、資源或提示型別重複。

執行

客戶端根據宿主的需求呼叫功能。

💻
tools/call
🌐
💻
通知(可選進度)
🌐
💻
響應
🌐

終止

不再需要時,連線會正常關閉,伺服器確認關閉請求。

💻
關閉
🌐
💻
響應
🌐
💻
退出
🌐

客戶端傳送最終退出訊息以完成終止。

協議演進

MCP 協議旨在可擴充套件和適應。初始化階段包括版本協商,允許協議演進時向後相容。此外,功能發現使客戶端能夠適應每個伺服器提供的特定功能,從而在同一生態系統中實現基本和高階伺服器的混合。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.