ai
  • index
  • 1.首页
  • 2.介绍
  • 3.架构概览
  • 4.服务器概念
  • 5.客户端概念
  • 6.版本控制
  • 7.连接到远程MCP服务器
  • 8.连接到本地MCP服务器
  • json_rpc
  • 9.构建一个MCP服务器
  • 10.检查员
  • 11.构建一个MCP客户端
  • 14.架构
  • 15.基础协议概述
  • 16.生命周期
  • 17.传输
  • 18.授权
  • 19.安全最佳实践
  • 20.取消
  • 21.Ping
  • 22.进展
  • 23.Roots
  • 24.采样
  • 25.启发
  • 26.服务器特性
  • 27.提示词
  • 28.资源
  • 29.工具
  • 30.完成
  • 31.日志记录
  • 32.分页
  • 33.架构参考
  • URI模板
  • 12.实现
  • http.server
  • 动态客户端注册协议
  • 受保护资源元数据
  • 授权服务器元数据
  • JWKS
  • PKCE
  • PyJWT
  • secrets
  • watchfiles
  • 实现authorization
  • 实现cancel
  • 实现completion
  • 实现logging
  • 实现pagination
  • 实现process
  • 实现transport
  • psutil
  • pytz
  • zoneinfo
  • contextlib
  • Starlette
  • mcp.1.starter
  • mcp.2.Resource
  • mcp.3.structured_output
  • mcp.4.prompts
  • mcp.5.context
  • mcp.6.streamable
  • mcp.7.lowlevel
  • mcp.8.Completion
  • mcp.9.Elicitation
  • mcp.10.oauth
  • mcp.11.integration
  • mcp.12.best
  • mysql-mcp
  • databases
  • uvicorn
  • asynccontextmanager
  • AsyncExitStack
  • streamable
  • aiohttp
  • publish
  • email
  • schedule
  • twine
  • 1.教学文档总览
  • 2.教师使用指南
  • 3.教学系统快速参考
  • 4.新生入门指南
  • 5.学生使用指南
  • 1. 协议修订信息
  • 2. 概述
  • 3. 消息类型
    • 3.1 请求 (Requests)
    • 3.2 响应 (Responses)
    • 3.3 通知 (Notifications)
  • 4. 认证与授权
    • 4.1 认证策略
    • 4.2 参与讨论
  • 5. 架构定义
    • 5.1 通用字段
      • 5.1.1 _meta 字段
        • 5.1.1.1 前缀规则
        • 5.1.1.2 名称规则
  • 6. 总结

1. 协议修订信息 #

协议修订: 2025-06-18

2. 概述 #

Model Context Protocol由几个关键组件共同协作构成:

  • 基础协议 - 核心JSON-RPC消息类型
  • 生命周期管理 - 连接初始化、能力协商和会话控制
  • 授权 - 基于HTTP传输的认证与授权框架
  • 服务器特性 - 服务器暴露的资源、提示和工具
  • 客户端特性 - 客户端提供的采样和根目录列表
  • 实用工具 - 诸如日志记录和参数补全等横切关注点

重要说明:所有实现必须支持基础协议和生命周期管理组件。其他组件可以根据应用程序的具体需求来实现。

这些协议层确立了清晰的关注点分离,同时支持客户端与服务器之间的丰富交互。模块化设计让实现能够精准支持所需功能。

3. 消息类型 #

MCP客户端与服务器之间的所有消息必须遵循JSON-RPC 2.0规范。该协议定义了以下类型的消息:

3.1 请求 (Requests) #

请求从客户端发送到服务器或反之,以启动一项操作。

{
  jsonrpc: "2.0";
  id: string | number;
  method: string;
  params?: {
    [key: string]: unknown;
  };
}

请求规则:

  • 请求必须包含一个字符串或整数ID
  • 与基础的JSON-RPC不同,ID不得是null
  • 请求ID不得是请求者在同一会话中先前已使用过的

3.2 响应 (Responses) #

响应作为对请求的回复发送,包含操作的结果或错误信息。

{
  jsonrpc: "2.0";
  id: string | number;
  result?: {
    [key: string]: unknown;
  }
  error?: {
    code: number;
    message: string;
    data?: unknown;
  }
}

响应规则:

  • 响应必须包含与对应请求相同的ID
  • 响应进一步细分为成功的结果或错误,要么是result或者一个error必须已设置。回复不得两者都设置
  • 结果可以遵循任何JSON对象结构,同时处理错误必须至少包含一个错误代码和消息
  • 错误代码必须为整数

3.3 通知 (Notifications) #

通知从客户端发送到服务器或反之,作为单向消息。接收方不得发送响应。

{
  jsonrpc: "2.0";
  method: string;
  params?: {
    [key: string]: unknown;
  };
}

通知规则:

  • 通知不得包含一个ID

4. 认证与授权 #

MCP提供了一种授权基于HTTP使用的框架。

4.1 认证策略 #

  • 基于HTTP传输的实现:应该符合此规范
  • 使用STDIO传输的实现:不应遵循此规范,并从环境中获取凭证
  • 自定义认证:客户端与服务器可以协商他们自己的自定义认证与授权策略

4.2 参与讨论 #

如需进一步探讨并为MCP认证机制的演进贡献力量,欢迎加入我们的GitHub 讨论区帮助塑造该协议的未来!

5. 架构定义 #

该协议的完整规范被定义为一个TypeScript 架构,这是所有协议消息和结构的唯一真实来源。

还有一个JSON 模式,这是自动从TypeScript的单一可信源生成的,用于与各种自动化工具配合使用。

5.1 通用字段 #

5.1.1 _meta 字段 #

_meta属性/参数由MCP保留,以便客户端和服务器能在交互时附加额外的元数据。

MCP协议层元数据保留以下特定关键名称,具体如下;各实现方案不得对这些键值做出任何假设。

此外,架构中的定义可能会为特定目的保留特定名称,用于声明这些定义中的专用元数据。

键名格式:有效_meta键名有两个前缀,以及一个名称。

5.1.1.1 前缀规则 #
  • 如指定,必须为由点号分隔的一系列标签(.),后接一个斜杠(/)
    • 标签必须以字母开头并以字母或数字结尾;内部字符可以是字母、数字或连字符(-)
  • 任何以零个或多个有效标签开头的前缀,后接modelcontextprotocol或mcp,后接任何有效标签,是保留供MCP使用
    • 例如:modelcontextprotocol.io/、mcp.dev/、api.modelcontextprotocol.org/和tools.mcp.com/全部保留
5.1.1.2 名称规则 #
  • 除非为空,否则必须以字母数字字符开头和结尾([a-z0-9A-Z])
  • 可能包含连字符(-)、下划线(_)、圆点(.)以及中间包含的字母数字字符

6. 总结 #

MCP基础协议提供了:

  1. 标准化消息格式 - 基于JSON-RPC 2.0的可靠通信
  2. 灵活的消息类型 - 支持请求、响应和通知
  3. 可扩展的元数据 - 通过_meta字段支持扩展
  4. 模块化设计 - 清晰的组件分离和职责划分
  5. 向后兼容性 - 支持渐进式功能添加

这种设计使得MCP能够适应各种应用场景,同时保持协议的简洁性和可维护性。

访问验证

请输入访问令牌

Token不正确,请重新输入