什么是轻量级远程过程调用协议JSON-RPC 2.0?
摘要:0 序 在开发 MCP(SSE模式)、客户端请求mcp server时,发现使用了 json-rpc 2.0 协议,故此研究并总结一二。 MCP ServerTool 开发指南 - 博客园数据知音 【request】 curl -X P
0 序
在开发 MCP(SSE模式)、客户端请求mcp server时,发现使用了 json-rpc 2.0 协议,故此研究并总结一二。
MCP Server/Tool 开发指南 - 博客园/数据知音
【request】
curl -X POST "http://127.0.0.1:18001/messages/?session_id=$SESSION_ID" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "calculate",
"arguments": { "expression" : "1+3+6" }
},
"id": 1
}'
【response】success
event: message
data: {"jsonrpc":"2.0","id":1,"result":{"content":[{"type":"text","text":"10"}],"structuredContent":{"result":"10"},"isError":false}}
【response】error
event: message
data: {"jsonrpc":"2.0","id":1,"result":{"content":[{"type":"text","text":"Error executing tool get_date: module 'darabonba.date' has no attribute 'today'"}],"isError":true}}
第一部分 概述
JSON-RPC 2.0是一种基于JSON(JavaScript Object Notation)的远程过程调用(RPC)协议。它是一种轻量级的、无状态的、跨语言的通信协议,常用于客户端与服务端之间的交互。
官方定义: JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议。 本规范主要定义了一些数据结构及其相关的处理规则。它允许运行在基于socket,http等诸多不同消息传输环境的同一进程中。其使用JSON(RFC 4627)作为数据格式。
https://www.jsonrpc.org/specification
协议作者: JSON-RPC工作组< json-rpc@googlegroups.com >
协议诞生日期/Origin Date: 2010-03-26 (based on the 2009-05-24 version)
协议诞生日期/Updated Date:2013-01-04
第二部分 基本特点
简单直观:消息结构清晰,仅由JSON对象组成。
双向通信:支持客户端调用服务端方法,服务端也可通知客户端。
无状态:协议本身不维护会话状态。
支持批量请求:允许在一个JSON数组中发送多个请求,提升效率。
错误处理:定义了标准的错误对象,便于排查和处理异常。
第三部分 消息格式
在JSON-RPC 2.0中,有以下三种主要的消息类型:
请求对象(Request Object)
响应对象(Response Object)
通知对象(Notification Object)
3.1 请求对象
用于客户端调用服务端的方法,结构如下:
{
"jsonrpc": "2.0",
"method": "methodName",
"params": ["param1", "param2"],
"id": 1
}
jsonrpc:协议版本,固定为2.0。
method:调用的远程方法名。
params:方法参数,可以是数组或对象。
id:唯一标识请求的ID,用于匹配响应。可为数字、字符串或null。
示例:
{
"jsonrpc": "2.0",
"method": "add",
"params": [4, 5],
"id": 123
}
3.2 响应对象
用于服务端返回结果或错误信息,结构如下:
成功响应:
{
"jsonrpc": "2.0",
"result": 9,
"id": 123
}
jsonrpc:协议版本。
result:调用方法的返回结果。
id:与请求对象中的id一致,用于匹配响应。
