加载中

MCP 客户端充当您的服务器与 MCP 服务器之间的通信桥梁。可以将其视为您访问 MCP 服务器提供的所有工具的接入点。当您需要使用外部工具或服务时,客户端会为您处理所有的消息传递和协议细节。

传输无关的通信

MCP 的一个关键优势是传输无关性——这是一种花哨的说法,意思是客户端和服务器可以使用不同的通信方法相互通信。最常见的设置是在同一台机器上运行 MCP 客户端和服务器,它们通过标准输入/输出进行通信。

但您不限于这种方式。MCP 客户端和服务器也可以通过以下方式连接:

  • HTTP
  • WebSockets
  • 各种其他网络协议

消息类型

一旦连接建立,客户端和服务器就会交换 MCP 规范中定义的特定消息类型。您将使用的主要消息类型包括:

ListToolsRequest/ListToolsResult: 客户端向服务器询问"您提供哪些工具?"并获得可用工具的列表。

CallToolRequest/CallToolResult: 客户端要求服务器使用特定参数运行某个工具,然后接收结果。

完整流程示例

以下是在实际场景中所有部分如何协同工作的示例。假设用户询问"我有哪些仓库?"——以下是完整的通信流程:

当用户向您的服务器提交查询时,流程开始。您的服务器意识到在发出请求之前,需要向 Claude 提供可用工具的列表。

您的服务器向 MCP 客户端请求工具,客户端向 MCP 服务器发送 ListToolsRequest,并接收返回的 ListToolsResult。

现在您的服务器已经拥有向 Claude 发出初始请求所需的一切——包括用户的问题和可用的工具。

Claude 检查这些工具,并决定需要调用其中一个来回答问题。它会以工具使用请求作为响应。

您的服务器要求 MCP 客户端执行 Claude 请求的工具。MCP 客户端向 MCP 服务器发送 CallToolRequest,然后 MCP 服务器向 GitHub 发出实际请求。

GitHub 返回仓库数据,该数据以 CallToolResult 的形式通过 MCP 服务器流回,然后传递给 MCP 客户端,最终传递给您的服务器。

您的服务器在后续消息中将工具结果发送回 Claude。Claude 现在拥有了制定完整响应所需的所有信息。

最后,Claude 以格式化的答案作出响应,您的服务器将其传递回用户。

是的,这个流程涉及许多步骤,但每个组件都有明确的职责。MCP 客户端抽象掉了服务器通信的复杂性,让您可以专注于构建应用程序逻辑。当我们实现自己的 MCP 客户端和服务器时,您将看到每个部分在实践中如何协同工作。