MCP 协议遵循客户端-主机-服务器架构,MCP 协议其实就是规定的组件之间的通信协议,而 MCP 中的所有消息必须遵循 JSON-RPC 2.0
规范。
消息类型
MCP 协议定义了三种类型的消息:
request
:请求消息,用于客户端向服务器发送请求,也可以从服务器发送到客户端。response
:响应消息,用于对请求的响应。notification
:通知消息,用于服务器向客户端发送通知。
请求消息
双向消息,可以从客户端发送到服务器,也可以反向发送。如下所示就是一个请求消息的示例:
{ "jsonrpc": "2.0", "id": "string | number", "method": "string", "param?": { "key": "value" } }
在请求消息中,有一些需要注意的点:
- 必须包含字符串或整数类型的 ID
- ID 不能为 null
- 在同一会话中,请求方不能重复使用相同的 ID
- 可以包含可选的参数对象
响应消息
响应消息是对请求的回复,响应消息的结构如下所示:
{ "jsonrpc": "2.0", "id": "string | number", "result?": { "[key: string]": "unknown" }, "error?": { "code": "number", "message": "string", "data?": "unknown" } }
同样,在响应消息中,也有一些需要注意的点:
- 必须包含与对应请求相同的 ID
- 必须设置
result
或error
其中之一,不能同时设置 - 错误码必须是整数
- 可以包含可选的结果数据
通知消息
通知是一种单向消息,不需要响应:
{ "jsonrpc": "2.0", "method": "string", "params?": { "[key: string]": "unknown" } }
在通知消息中,有一些需要注意的点:
- 不能包含 ID 字段
- 用于状态更新和事件通知
- 可以包含可选的参数对象
- 减少通信开销,支持异步操作