MCP client(工具客户端) 协议

别名: 工具客户端

工具的使用者:发现 server 的工具表,把远程工具当作本地工具调用。连接建模成状态机,先握手(initialize → notifications/initialized)后干活。见[第 21 章](/chapters/21-mcp-v08/)。

它是什么

MCP client(工具客户端)是工具的使用者:发现 server 的工具表(tools/list),把远程工具当作本地工具调用(tools/call)。我们的 Agent 就是 client。连接被建模成状态机——先握手、后干活

new → initialized → ready → closed
状态 到达条件 合法操作
new 创建连接 只能 initialize()(一次)
initialized initialize 成功响应到达 只能 notifyInitialized()
ready 已发 notifications/initialized tools/listtools/callclose()
closed close() 或进程退出 无(一切调用拒绝)

握手时序与实现骨架

完整握手是四步:initialize(request, id:1)→ 成功响应 → notifications/initialized(notification,无 id)→ 进入 ready。两条时序纪律:notifications/initialized 必须在任何工具调用之前发出(server 端以它为「可以干活」的信号);initialize 只发一次(失败的握手可重试,但一个在途的握手不允许再来一个)。实现是「子进程 + pending 表 + 状态机」三件套:pending Map 用 id 记住每个在途请求(json-rpc 的 id 配对),响应乱序到达也能对上号。

在本教程的位置

第 21 章手写了最小 client,并通过 registerMcpTools 把远程工具并入本地注册表listTools() 的结果变成普通注册表项(schemaToParams + 转发 executor),命名空间前缀(如 mcp__echo)防重名,risk 选项让远程工具自动继承 ch18 的风险分级与审批门——并入之后,远程工具和 get_time 没有任何区别。到第 22 章,MCP client 成为 subagent 获取外部能力的标准通道。

相关词条

出现在这些章节