02 MCP结构全解析

MCP架构全解析:Host、Client与Server的协同机制

01. MCP 请求&响应消息格式

上节课我们了解了 MCP 的架构:Host、Client、Server,并且通过一份时序图,了解了 LLM+MCP 是如何工作的,如果作为使用者,了解到这个程度就足够了,但是作为开发者,我们还要熟悉它们之间是怎么通信的,传递的消息格式是什么样的,响应消息是什么样的(高频面试题)。

首先是消息的编码,MCP 客户端和服务器之间的所有消息必须遵循 JSON-RPC 2.0 规范,并且在协议中定义了四类消息类型:

① 请求 (Requests)

请求从 Client 发送到 Server,或者从服务器发送到客户端,用于启动操作,数据格式如下:

{
   
   
  jsonrpc: "2.0";
  id: string | number;
  method: string;
  params?: {
   
   
    [key: string]: unknown;
  };
}
  • 请求必须包含字符串或整数 ID。
  • 与基本 JSON-RPC 不同,ID 不得null
  • 请求 ID 不得在同一会话中被请求者先前使用过(不过现实服务中,大部分没这类要求)。

② 响应 (Responses)

响应是对请求的回复,包含操作的结果或错误,数据格式如下:

{
   
   
  jsonrpc: "2.0";
  id: string | number;
  result?: {
   
   
    [key: string]: unknown;
  }
  error?: {
   
   
    code: number;
    message: string;
    data?: unknown;
  }
}
  • 响应必须包含与对应请求相同的 ID。
  • 响应进一步分为成功结果或错误。必须设置 resulterror 中的一个。响应不得同时设置两者。
  • 结果可以遵循任何 JSON 对象结构,而错误必须至少包含错误代码和消息。
  • 错误代码必须是整数。

③ 通知 (Notifications)

通知从客户端发送到服务器,或者从服务器发送到客户端,作为单向消息。接收方不得发送响应,数据格式如下:

{
   
   
  jsonrpc: "2.0";
  method: string;
  params?: {
   
   
    [key: string]: unknown;
  };
}
  • 通知不得包含 ID。

④ 批处理 (Batching)

JSON-RPC 还定义了[批量处理多个请求和通知]的方法,将它们放在一个数组中发送。MCP 实现可以支持发送 JSON-RPC 批处理,但必须支持接收 JSON-RPC 批处理(具体是否支持看对应的 MCP 服务商),数据格式如下:

TypeScript

Array<{
   
   
  jsonrpc: "2.0";
  id: string | number;
  method: string;
  params?: {
   
   
    [key: string]: unknown;
  };
}>

除了 JSON-RPC 外,在 MCP 协议草案中,目前还提供了一个用于 HTTP 的授权认证,不过该方案目前仍然是草案阶段,目前的接入 MCP 服务都是客户端和服务端自行定义认证和授权策略(例如使用 ENV 环境变量 + api key 的方式)。

感兴趣的同学可以在该链接了解:https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization

02. MCP 的生命周期

了解了 MCP Client 和 Server 之间通信的消息格式,在正式使用 MCP 服务之前,我们还有必要了解下 MCP 的生命周期,在 2025-06-18 版本中,MCP 为 Client-Server 定义了严格的生命周期(实际上不严格),确保适当的能力协商和状态管理,总共可以划分成 3 个阶段:

  1. 初始化: 能力协商和协议版本约定,亦或者初始化会话 id(类似双方自我介绍);
  2. 操作: 正常协议通信,例如 获取工具列表调用指定工具批处理 等(类似我说你做)。
  3. 关闭: 连接的优雅终止(类似友好分手)。

使用时序图来表示 MCP 的完整生命周期,如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值