Skip to main content

数据层协议

2.1 JSON-RPC 2.0基础

MCP的数据层基于 JSON-RPC 2.0 规范。所有消息都是JSON格式,分三类:

请求 (Request)

  • jsonrpc: 固定为 "2.0"
  • id: 请求唯一标识(字符串或数字),用于匹配响应
  • method: 调用的方法名
  • params: 方法参数(可选,Object类型)

响应 (Response)

成功响应:
错误响应:
resulterror 互斥,一个响应只会包含其中之一。

通知 (Notification)

没有 id 字段,不期望响应:
通知是单向的,发送方不需要等待任何回复。

2.2 Server端 Primitive

MCP Server可以暴露三种核心能力:

Tools(工具)— 模型控制

可执行的函数。AI模型自主决定何时调用。 工具定义(协议版本 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 表示工具执行失败但协议层正常)
两种错误类型:
  1. 协议层错误: JSON-RPC error响应,表示请求本身有问题(方法不存在、参数无效等)
  2. 工具层错误: isError: true,表示工具执行了但遇到业务错误(商品不存在、权限不足等)

Resources(资源)— 应用控制

数据源,提供上下文信息。和Tools的区别:Tools是”做事”,Resources是”提供信息”。 资源定义:
Annotations字段说明:
  • audience: 目标受众,可选值包括 "user""assistant"
  • priority: 优先级,0到1之间的浮点数(1为最高优先级)
  • lastModified: 最后修改时间(ISO 8601格式)
URI模板: 资源URI支持RFC 6570 URI模板语法,用于定义动态资源:

Prompts(提示词模板)— 用户控制

可复用的交互模板。Server可以提供预定义的提示词,用户在Host应用中主动选择使用。 提示词定义:
获取提示词:

2.3 Client端 Primitive

MCP Client也可以暴露能力给Server(需在初始化时声明):

Sampling — Server请求LLM推理

Server无需内置AI SDK,可以请求Host的LLM完成推理。
modelPreferences字段:
  • hints: 模型提示列表,Server建议使用的模型(Host可以忽略)
  • costPriority: 成本优先级(0-1,越高越倾向低成本模型)
  • speedPriority: 速度优先级(0-1,越高越倾向快速模型)
  • intelligencePriority: 智能优先级(0-1,越高越倾向高能力模型)

Elicitation — Server请求用户输入

Server需要用户确认或补充信息时使用。

Roots — 文件系统边界

Server查询可访问的文件系统范围。

Logging — 日志消息

Server向Client发送日志消息,用于调试和监控。
日志级别: debuginfonoticewarningerrorcriticalalertemergency

2.4 能力协商

初始化时,双方声明支持的能力。只有声明的能力才能使用。 Server能力:
  • listChanged: Server会在列表变化时发送通知
  • subscribe: 支持资源订阅(内容变化时通知Client)
Client能力:
  • sampling: Client支持Server请求LLM推理
  • elicitation: Client支持Server请求用户输入
  • roots.listChanged: Client会在文件系统边界变化时通知Server

2.5 错误处理

MCP使用JSON-RPC 2.0标准错误码加上MCP自定义扩展:

标准JSON-RPC错误码

MCP自定义错误码

工具层错误

工具执行中的业务错误不使用JSON-RPC error,而是通过正常响应中的 isError 标志传递:
这种设计让AI模型能看到错误信息并据此调整行为(比如换一个订单号重试)。
下一章: 传输层 — stdio和Streamable HTTP两种传输方式详解