載入中

MCP(Model Context Protocol)使用 JSON 訊息來處理客戶端與伺服器之間的通訊。了解這些訊息類型對於使用 MCP 至關重要,尤其是在處理不同的傳輸方法(例如可串流的 HTTP 傳輸)時。

訊息格式

所有 MCP 通訊都透過 JSON 訊息進行。每種訊息類型都有其特定用途——無論是呼叫工具、列出可用資源,還是發送有關系統事件的通知。

以下是一個典型的範例:當 Claude 需要呼叫 MCP 伺服器提供的工具時,客戶端會發送一則「Call Tool Request」(呼叫工具請求)訊息。伺服器處理此請求、執行工具,並以包含輸出內容的「Call Tool Result」(呼叫工具結果)訊息作為回應。

MCP 規範

完整的訊息類型清單定義在 GitHub 上官方的 MCP 規範儲存庫中。此規範與各種 SDK 儲存庫(例如 Python 或 TypeScript SDK)是分開的,並作為 MCP 應如何運作的權威來源。

這些訊息類型是以 TypeScript 撰寫的,這是為了方便起見——並非因為它們會被當作 TypeScript 程式碼執行,而是因為 TypeScript 提供了一種清晰的方式來描述資料結構與類型。

訊息類別

MCP 訊息主要分為兩大類別:

請求-結果訊息

這些訊息總是成對出現。您發送一個請求,並預期會收到一個結果:

  • Call Tool Request → Call Tool Result
  • List Prompts Request → List Prompts Result
  • Read Resource Request → Read Resource Result
  • Initialize Request → Initialize Result

通知訊息

這些是單向訊息,用於告知事件發生,但不需要回應:

  • Progress Notification(進度通知)- 關於長時間執行操作的更新
  • Logging Message Notification(日誌訊息通知)- 系統日誌訊息
  • Tool List Changed Notification(工具清單變更通知)- 當可用工具發生變化時
  • Resource Updated Notification(資源更新通知)- 當資源被修改時

客戶端與伺服器訊息

MCP 規範依據訊息的發送者來組織訊息:

客戶端訊息包括客戶端發送給伺服器的請求(例如工具呼叫)以及客戶端可能發送的通知。

伺服器訊息包括伺服器發送給客戶端的請求,以及伺服器廣播的通知。

為何這很重要

了解伺服器可以向客戶端發送訊息,在處理不同的傳輸方法時尤其重要。某些傳輸方式,例如可串流的 HTTP 傳輸,對於哪些類型的訊息可以在哪些方向上流動有所限制。

關鍵的洞見在於,MCP 被設計為一種雙向協定——客戶端和伺服器都可以發起通訊。當您需要為特定使用情境選擇正確的傳輸方法時,這一點變得至關重要。