导航菜单

  • 1.什么是MCP
  • 2.架构概览
  • 3.理解MCP服务器
  • 4.理解MCP客户端
  • 5.版本控制
  • 6.连接本地MCP服务器
  • 7.连接远程MCP服务器
  • 8.构建MCP服务器
  • 9.构建MCP客户端
  • 10.SDKs
  • 11.理解MCP中的授权
  • 12.安全最佳实践
  • 13.MCP Inspector
  • 14.规范
  • 15.关键变更
  • 16.架构
  • 17.基础协议概述
  • 18.生命周期
  • 19.传输
  • 20.授权
  • 21.取消
  • 22.Ping
  • 23.进度
  • 24.任务
  • 25.根
  • 26.采样
  • 27.引导
  • 29.提示
  • 30.资源
  • 31.工具
  • 32.补全
  • 33.日志
  • 34.分页
  • 35.模式参考
  • Keycloak
  • 28.服务器功能
  • 1. 什么是基础协议?
  • 2. 本章你将学到
  • 3. 协议组件一览
  • 4. 消息类型
    • 4.1 请求 (Request)
    • 4.2 响应 (Response)
      • 结果响应(成功)
      • 错误响应(失败)
    • 4.3 通知 (Notification)
  • 5. 授权
  • 6. JSON Schema 用法
    • 6.1 方言规则
    • 6.2 示例
    • 6.3 实现要求
  • 7. 通用字段
    • 7.1 _meta
    • 7.2 icons
  • 8. 模式与规范来源

1. 什么是基础协议? #

基础协议是 MCP 的核心层,定义客户端与服务器之间消息的格式和类型。所有 MCP 实现都必须支持基础协议和生命周期管理。

协议修订版:2025-11-25

通俗理解 说明
像 HTTP 之于 Web 基础协议规定「怎么说」,传输层规定「怎么传」
基于 JSON-RPC 所有消息遵循 JSON-RPC 2.0 规范
模块化 基础协议 + 生命周期为必选;授权、工具、采样等可按需实现

2. 本章你将学到 #

  • MCP 协议由哪些组件组成
  • 请求、响应、通知三种消息类型
  • JSON Schema 的用法与 _meta、icons 等通用字段
  • 授权与模式的简要说明

3. 协议组件一览 #

组件 说明 是否必须
基础协议 核心 JSON-RPC 消息类型 必须
生命周期管理 连接初始化、能力协商、会话控制 必须
授权 基于 HTTP 传输的身份验证与授权 可选(HTTP 传输建议支持)
服务器功能 资源、提示、工具 可选
客户端功能 采样、根目录列表 可选
工具 日志、参数补全等跨领域关注点 可选

详见 生命周期、授权、服务器功能概述。

4. 消息类型 #

MCP 客户端与服务器之间的所有消息必须遵循 JSON-RPC 2.0。协议定义三种消息类型:

类型 方向 是否需要响应 通俗理解
请求 双向 是 发起操作,等待结果
响应 双向 — 回复请求(成功或失败)
通知 双向 否 单向发送,不期待回复

4.1 请求 (Request) #

请求用于发起操作,由客户端发往服务器或反之。

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_forecast",
    "arguments": { "latitude": 37.5, "longitude": -122 }
  }
}
字段 要求
jsonrpc 必须为 "2.0"
id 必须为字符串或整数,不得为 null;同一会话内不得重复使用
method 方法名(如 tools/call、resources/read)
params 可选,方法参数

4.2 响应 (Response) #

响应用于回复请求,分为结果响应和错误响应。

结果响应(成功) #

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [{"type": "text", "text": "Sunny, 22°C"}]
  }
}
字段 要求
id 必须与对应请求的 id 相同
result 必须包含,可为任意 JSON 对象

错误响应(失败) #

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32602,
    "message": "Invalid params",
    "data": { "details": "latitude must be between -90 and 90" }
  }
}
字段 要求
id 通常与请求相同;若请求畸形无法读取 ID,可省略
error 必须包含 code(整数)和 message(字符串);data 可选

4.3 通知 (Notification) #

通知为单向消息,接收方不得发送响应。

{
  "jsonrpc": "2.0",
  "method": "notifications/resources/updated",
  "params": {
    "uri": "file:///path/to/file.txt"
  }
}
字段 要求
method 方法名
params 可选
id 不得包含(通知无响应)

5. 授权 #

MCP 为 HTTP 传输提供 授权 框架:

传输方式 授权建议
HTTP 应当符合 MCP 授权规范(OAuth 2.1 等)
STDIO 不应使用 HTTP 授权,应从环境变量等获取凭据
其他 遵循其协议既定的安全最佳实践

详见 理解 MCP 中的授权。

6. JSON Schema 用法 #

MCP 使用 JSON Schema 进行参数和结构的验证。

6.1 方言规则 #

规则 说明
默认方言 未指定 $schema 时,默认为 JSON Schema 2020-12
显式方言 可通过 $schema 指定其他方言
实现要求 必须至少支持 2020-12;应记录支持的其他方言

6.2 示例 #

默认方言(2020-12):

{
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer", "minimum": 0 }
  },
  "required": ["name"]
}

显式方言(draft-07):

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer", "minimum": 0 }
  },
  "required": ["name"]
}

6.3 实现要求 #

  • 客户端和服务器必须对无 $schema 的模式支持 JSON Schema 2020-12
  • 必须按声明或默认方言验证;对不支持的方言返回适当错误
  • 应当记录支持的 schema 方言

7. 通用字段 #

7.1 _meta #

_meta 用于在消息中附加额外元数据,由 MCP 保留。

规则 说明
键名格式 可选前缀 + 名称;前缀如 com.example/,建议用反向 DNS
保留前缀 第二段为 modelcontextprotocol 或 mcp 的前缀保留给 MCP(如 io.modelcontextprotocol/、dev.mcp/)
名称 非空时须以字母数字开头和结尾;中间可含 -、_、.

7.2 icons #

icons 为服务器暴露视觉标识(图标)提供标准化方式,可附加到 Implementation、Tool、Prompt、Resource。

字段 说明
src 必需,图标 URI(HTTP/HTTPS URL 或 data URI)
mimeType 可选,MIME 类型
sizes 可选,如 ["48x48"]、["any"](SVG)
theme 可选,light 或 dark

客户端必须支持的 MIME 类型:image/png、image/jpeg(及 image/jpg)

安全要点:

  • 将图标视为不可信输入,防范解析与资源耗尽
  • 仅接受 HTTPS 或 data: URI,拒绝 javascript:、file: 等
  • 获取图标时不携带凭据(cookie、Authorization)
  • 验证 URI 与服务器同源;渲染前验证 MIME 与内容

8. 模式与规范来源 #

协议的权威定义见 TypeScript 模式,另有自动生成的 JSON Schema 供工具使用。

← 上一节 16.架构 下一节 18.生命周期 →

访问验证

请输入访问令牌

Token不正确,请重新输入