JSON-RPC 2.0 协议

别名: JSON-RPC

一种无状态、轻量的远程过程调用协议,MCP 的每一种消息都建立在它之上。三种消息形态:request(有 id)、notification(无 id 无响应)、response(id + result 或 error 二选一),id 是响应与在途请求的唯一配对键。见[第 21 章](/chapters/21-mcp-v08/)。

它是什么

JSON-RPC 2.0 是一种无状态、轻量的远程过程调用协议:用 JSON 表达「调用对方的方法」,不绑定传输层(HTTP、WebSocket、stdio 都行)。MCP 的每一种消息都建立在它之上,所以「手写 MCP」的第一步就是手写 JSON-RPC。三种消息形态:

形态 形状 语义
request { jsonrpc: '2.0', id, method, params? } 请求对方做事,期望响应
notification { jsonrpc: '2.0', method, params? } 单向通知,没有 id、没有响应
response { jsonrpc: '2.0', id, result }{ jsonrpc: '2.0', id, error } 回应请求;resulterror 二选一

三条规则

  1. id 是配对键。客户端发出多个请求(握手、列工具、调工具),响应可以乱序到达——id 是唯一能把响应与「在途请求」重新配对的钥匙。实现上的标准形态是一个 pending Map:key 是 id,value 是等响应的 promise;未知 id 的响应按协议违规处理(记日志,别崩溃);
  2. notification 永远没有响应。MCP 的 notifications/initialized 是典型例子——服务端绝不能回(回了就是一条没人等、没人认领的孤儿响应);
  3. 错误是响应的一种。失败时响应带 error: { code, message, data? };标准错误码是整数:-32700 解析错误、-32600 非法请求、-32601 方法不存在、-32602 参数非法、-32603 内部错误,-32000-32099 留给实现自定义。

在本教程的位置

第 21 章把编解码写成纯函数(encode 四种、decode 一个、分类三个、responseTo 配对),校验规则是形状约束:jsonrpc 必须是 "2.0"、必须「有 id 或有 method」、id 不能是 null、response 必须带 resulterror 之一。纯函数不进 I/O,浏览器里也能测——这是配套练习第一关的内容。

相关词条

出现在这些章节