数据层协议
2.1 JSON-RPC 2.0基础
MCP的数据层基于 JSON-RPC 2.0 规范。所有消息都是JSON格式,分三类:请求 (Request)
jsonrpc: 固定为"2.0"id: 请求唯一标识(字符串或数字),用于匹配响应method: 调用的方法名params: 方法参数(可选,Object类型)
响应 (Response)
成功响应:result 和 error 互斥,一个响应只会包含其中之一。
通知 (Notification)
没有id 字段,不期望响应:
2.2 Server端 Primitive
MCP Server可以暴露三种核心能力:Tools(工具)— 模型控制
可执行的函数。AI模型自主决定何时调用。| 方法 | 方向 | 用途 |
|---|---|---|
tools/list | Client → Server | 列出所有可用工具(支持分页) |
tools/call | Client → Server | 执行指定工具 |
notifications/tools/list_changed | Server → Client | 工具列表变更通知 |
2025-11-25):
name: 工具的唯一标识符title: 人类可读的显示名称description: 描述工具用途,直接影响AI模型的选择决策inputSchema: JSON Schema格式的输入参数定义(必需)outputSchema: JSON Schema格式的输出结构定义(可选,2025-11-25新增)
content: 内容数组,支持多种类型(text、image、audio、resource_link、embedded_resource)structuredContent: 与outputSchema对应的结构化数据(可选,与content同时返回,优先用于程序化处理)isError: 标识是否为工具级错误(true表示工具执行失败但协议层正常)
- 协议层错误: JSON-RPC error响应,表示请求本身有问题(方法不存在、参数无效等)
- 工具层错误:
isError: true,表示工具执行了但遇到业务错误(商品不存在、权限不足等)
Resources(资源)— 应用控制
数据源,提供上下文信息。和Tools的区别:Tools是”做事”,Resources是”提供信息”。| 方法 | 方向 | 用途 |
|---|---|---|
resources/list | Client → Server | 列出所有可用资源(支持分页) |
resources/read | Client → Server | 读取指定资源 |
resources/subscribe | Client → Server | 订阅资源变化 |
resources/unsubscribe | Client → Server | 取消订阅 |
notifications/resources/list_changed | Server → Client | 资源列表变更通知 |
notifications/resources/updated | Server → Client | 已订阅资源内容变更通知 |
audience: 目标受众,可选值包括"user"和"assistant"priority: 优先级,0到1之间的浮点数(1为最高优先级)lastModified: 最后修改时间(ISO 8601格式)
Prompts(提示词模板)— 用户控制
可复用的交互模板。Server可以提供预定义的提示词,用户在Host应用中主动选择使用。| 方法 | 方向 | 用途 |
|---|---|---|
prompts/list | Client → Server | 列出所有可用提示词(支持分页) |
prompts/get | Client → Server | 获取指定提示词(支持arguments参数化) |
notifications/prompts/list_changed | Server → Client | 提示词列表变更通知 |
2.3 Client端 Primitive
MCP Client也可以暴露能力给Server(需在初始化时声明):Sampling — Server请求LLM推理
Server无需内置AI SDK,可以请求Host的LLM完成推理。hints: 模型提示列表,Server建议使用的模型(Host可以忽略)costPriority: 成本优先级(0-1,越高越倾向低成本模型)speedPriority: 速度优先级(0-1,越高越倾向快速模型)intelligencePriority: 智能优先级(0-1,越高越倾向高能力模型)
Elicitation — Server请求用户输入
Server需要用户确认或补充信息时使用。Roots — 文件系统边界
Server查询可访问的文件系统范围。Logging — 日志消息
Server向Client发送日志消息,用于调试和监控。debug、info、notice、warning、error、critical、alert、emergency。
2.4 能力协商
初始化时,双方声明支持的能力。只有声明的能力才能使用。 Server能力:listChanged: Server会在列表变化时发送通知subscribe: 支持资源订阅(内容变化时通知Client)
sampling: Client支持Server请求LLM推理elicitation: Client支持Server请求用户输入roots.listChanged: Client会在文件系统边界变化时通知Server
2.5 错误处理
MCP使用JSON-RPC 2.0标准错误码加上MCP自定义扩展:标准JSON-RPC错误码
| 错误码 | 含义 |
|---|---|
| -32700 | JSON解析错误(Parse error) |
| -32600 | 无效的请求(Invalid Request) |
| -32601 | 方法不存在(Method not found) |
| -32602 | 无效的参数(Invalid params) |
| -32603 | 内部错误(Internal error) |
MCP自定义错误码
| 错误码 | 含义 | 说明 |
|---|---|---|
| -32001 | 请求超时 | Server处理时间过长 |
| -32002 | 资源不存在 | 请求的资源URI无效 |
工具层错误
工具执行中的业务错误不使用JSON-RPC error,而是通过正常响应中的isError 标志传递:
下一章: 传输层 — stdio和Streamable HTTP两种传输方式详解