Skip to content

客户端-服务器架构

Host-Client-Server 三角、能力协商、协议流程。

Updated View as Markdown
For humans

客户端-服务器架构

MCP 的架构是三段式:Host(应用本体)、Client(协议连接)、Server(能力提供)。面试主线:三角关系、连接流程、协议消息。

三角架构

Host 嵌入 Client, Client 连 Server

角色 职责
Host 用户界面 + LLM 集成,决定暴露什么给模型
Client 协议实现:与服务器建连、发请求(一个服务器一个客户端)
Server 暴露工具/资源/提示,执行操作

要点:Host 和 Client 是进程内关系(Client 是 Host 的库),Client 和 Server 可以跨进程/跨机器(通过传输层)。

连接流程

  1. 初始化:Client 发 initialize(协议版本 + 能力声明),Server 回版本 + 能力
  2. 协商:双方确认支持的特性(initialized 通知)
  3. 能力发现:Client 请求工具列表(tools/list)、资源列表
  4. 运行时调用tools/callresources/readprompts/get
Client → Server: initialize {protocolVersion, capabilities}
Server → Client: initialize result {capabilities, serverInfo}
Client → Server: initialized
Client → Server: tools/list → 拿到工具清单
Client → Server: tools/call {name, arguments}
Server → Client: 执行结果

协议消息:JSON-RPC

  • 传输层消息是 JSON-RPC 2.0:request / response / notification(无响应)
  • 请求带 id,响应对应 id;notification 是单向通知
  • 协议能力通过 capabilities 声明:双方只使用都支持的能力(向前兼容)

会话与生命周期

  • 会话:连接建立到关闭,双方维护状态
  • 服务器可以主动通知变化(工具列表变化、资源更新),走 notifications
  • 优雅关闭:Client 断连,Server 清理状态
  • 长会话中模型上下文变化时,Client 可更新服务器侧上下文(contexts/update 等扩展)

面试追问

  1. Host 和 Client 的区别? Host 是应用本体(UI + LLM),Client 是协议实现(进程内库)。一个 Host 可有多个 Client
  2. 连接流程? initialize 协商版本能力 → 能力发现(tools/list)→ 运行时调用(tools/call)
  3. 协议消息格式? JSON-RPC 2.0:请求/响应/通知。capabilities 声明保证兼容
  4. Server 能主动发消息吗? 能:notification(工具列表变化、资源更新)
  5. 一个服务器一个客户端? 是:每个服务器连接对应一个 Client 实例,Host 管理多个
Navigation

Type to search…

↑↓ navigate↵ selectEsc close