載入中

MCP 客戶端是您的伺服器與 MCP 伺服器之間的通訊橋樑。可以將其視為您存取 MCP 伺服器所提供所有工具的入口。當您需要使用外部功能時,客戶端會為您處理所有訊息傳遞和協定細節。

傳輸無關的通訊

MCP 的一個關鍵優勢是傳輸無關性——這是一種花俏的說法,意思是客戶端和伺服器可以使用不同的通訊方法互相溝通。最常見的設定是在同一台機器上執行 MCP 客戶端和伺服器,它們透過標準輸入/輸出進行通訊。

但您並不限於這種方式。MCP 客戶端和伺服器也可以透過以下方式連接:

  • HTTP
  • WebSockets
  • 各種其他網路協定

訊息類型

連接建立後,客戶端和伺服器會交換 MCP 規範中定義的特定訊息類型。您會用到的主要類型有:

ListToolsRequest/ListToolsResult: 客戶端向伺服器詢問「您提供哪些工具?」,並取得可用功能的完整清單。

CallToolRequest/CallToolResult: 客戶端告訴伺服器「用這些參數執行這個特定工具」,並接收執行結果。

真實世界範例流程

讓我們透過一個完整的範例,看看這些部分如何協同運作。假設使用者詢問「我有哪些儲存庫?」——以下是整個通訊鏈:

流程從使用者向您的伺服器提交問題開始。您的伺服器意識到在向 Claude 發出請求之前,需要先提供可用的工具。

您的伺服器向 MCP 客戶端請求工具清單,這會觸發向 MCP 伺服器發出的 ListToolsRequest。伺服器會以包含所有可用工具的 ListToolsResult 回應。

現在您的伺服器已擁有發出初始 Claude 請求所需的一切:使用者的問題以及可用的工具。Claude 分析這些工具,並判斷需要呼叫其中一個工具才能正確回答問題。

Claude 回應一個工具使用請求。您的伺服器識別出這一點,並要求 MCP 客戶端使用 Claude 指定的參數執行該工具。

MCP 客戶端向 MCP 伺服器發送 CallToolRequest,然後伺服器會向 GitHub 發出實際的 API 呼叫,以取得使用者的儲存庫。

GitHub 回傳儲存庫資料,MCP 伺服器將其包裝在 CallToolResult 中,並透過整個鏈路傳回。您的伺服器接收到這些資料後,現在可以向 Claude 發出後續請求。

最後一步是將工具結果作為使用者訊息的一部分傳送給 Claude。Claude 現在擁有制定關於使用者儲存庫完整回應所需的所有資訊。

是的,這個流程涉及許多步驟,但理解它能讓您為實作自己的 MCP 客戶端和伺服器做好準備。每個元件都有特定的角色,而標準化的訊息類型確保無論底層傳輸機制為何,一切都能順暢地協同運作。