JSON-RPC 2.0 协议介绍
MCP 的 tools/list 和 tools/call 看起来像函数名,实际是在 JSON-RPC 2.0 消息的 method 字段中传递的方法名。JSON-RPC 定义消息外壳,MCP 定义这些方法及参数的业务含义。JSON-RPC 2.0 规范
请求与响应
请求必须包含 jsonrpc: "2.0"、方法名和 id;params 可选。响应使用相同的 id 对应请求,并在 result 与 error 中二选一。id 用来关联并发请求,不代表调用顺序或会话身份。
下面是一条 MCP 工具请求:
json
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "add",
"arguments": { "a": 19, "b": 23 }
}
}其成功响应沿用 id。content 属于 MCP 的工具结果结构,不是 JSON-RPC 的通用字段:
json
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"content": [{ "type": "text", "text": "42" }]
}
}通知不等待响应
通知与请求一样有 method,但没有 id。接收方不得返回 JSON-RPC 响应。MCP 初始化完成后,Client 发送的 notifications/initialized 就是通知;它不需要一个匹配的结果报文。MCP 生命周期规范
json
{
"jsonrpc": "2.0",
"method": "notifications/initialized"
}错误的两个层次
JSON-RPC 的 error 包含数字 code 和文字 message,表示请求解析、方法分派等协议层失败。例如不存在的方法可以返回 -32601:
json
{
"jsonrpc": "2.0",
"id": 3,
"error": { "code": -32601, "message": "Method not found" }
}工具已被正确调用,但工具自身执行失败时,MCP 通常在成功的 JSON-RPC 响应 result 中设置 isError: true,使模型能够看到失败内容并决定下一步。这与协议层 error 不同。MCP 工具错误处理
json
{
"jsonrpc": "2.0",
"id": 4,
"result": {
"content": [{ "type": "text", "text": "库存服务暂不可用" }],
"isError": true
}
}JSON-RPC 不规定传输
JSON-RPC 定义消息形态,不规定必须用 HTTP、进程管道或 SSE。MCP 在它之上规定方法、生命周期和能力,再用具体传输送达消息。下一篇 MCP 传输标准化解释这层关系;工具提供与调用流程把报文放入完整调用链。
