MCP 扩展
MCP 扩展是规范的可选补充,用来定义核心协议之外的能力。扩展可以启用模块化功能(例如认证这类独立能力)、专门能力(例如行业特定逻辑),或实验性能力(例如正在孵化、未来可能进入核心协议的功能)。 扩展使用唯一的_扩展标识符_识别,格式为{vendor-prefix}/{extension-name},例如 io.modelcontextprotocol/oauth-client-credentials。标识符遵循与 _meta keys 相同的规则,但必须包含前缀。官方扩展使用 io.modelcontextprotocol vendor prefix。
官方扩展仓库
官方扩展位于 Model Context Protocol GitHub organization 下,仓库名以ext- 为前缀。
MCP Authorization Extensions
modelcontextprotocol/ext-auth
核心规范之外的补充授权机制扩展。
| 扩展 | 说明 |
|---|---|
| OAuth Client Credentials | 用于机器到机器认证的 OAuth 2.0 client credentials flow。 |
| Enterprise-Managed Authorization | 面向需要集中访问控制的企业环境的框架。 |
MCP Apps
modelcontextprotocol/ext-apps
面向会话式 MCP client 中交互式 UI 元素的扩展。
| 扩展 | 说明 |
|---|---|
| MCP Apps | 允许 MCP servers 在对话内联显示交互式 UI 元素(图表、表单、视频播放器等)。 |
MCP Tasks
| 扩展 | 说明 |
|---|---|
| MCP Tasks | 面向长时间运行操作的异步任务执行,支持轮询、执行中输入和持久句柄。 |
实验性扩展
实验性扩展为工作组与兴趣组提供孵化路径,让它们在正式提交 SEP 前可以原型化想法,并围绕扩展概念协作。 实验性扩展仓库位于 MCP GitHub organization 下,仓库名以experimental-ext- 为前缀(例如 experimental-ext-interceptors)。
基本规则
- 每个实验性扩展都需要关联到一个工作组或兴趣组。
- 仓库和已发布包需要清楚标明其实验状态(例如在 README 和包名中)。
- Core Maintainers 保留对实验性扩展仓库的监督权,包括归档或移除它们的能力。
晋升为官方状态
要将实验性扩展提升为官方扩展,需要走标准 SEP 流程(Extensions Track)。你可以引用实验仓库以及孵化期间构建的任何参考实现,以证明扩展的实用性。创建扩展
官方扩展的生命周期遵循基于 SEP 的流程。完整细节请参阅 SEP-2133: Extensions。- 提出:在 MCP 主仓库中使用标准 SEP 指南创建 SEP,并将类型设为 Extensions Track。
- 实现:在官方 SDK 中构建至少一个参考实现,这是 SEP 进入评审前的必需条件。
- 评审:Core Maintainers 评审 SEP,并对是否纳入拥有最终权威。
- 发布:批准后,打开 PR 将扩展添加到扩展仓库。
- 采用:之后,其他 clients、servers 和 SDKs 也可以实现该扩展。
Requirements
- 扩展规范需要使用 RFC 2119 语言(MUST、SHOULD、MAY)。
- 扩展必须关联一个工作组或兴趣组。
SDK 实现
SDK 可以选择实现扩展,但这不是协议一致性的必需条件。SDK 维护者可以完全自主决定支持哪些扩展。如果某个 SDK 支持扩展,其 SDK 文档应列出支持的扩展。扩展默认始终禁用,需要开发者显式选择启用。
演进
扩展独立于核心协议演进。更新由扩展仓库维护者管理,不需要核心维护者评审。 不过,向后兼容仍然重要。当你需要修改扩展时,优先在扩展设置对象中使用 capability flags 或版本管理,而不是创建新的扩展标识符。如果不可避免地要引入 breaking change,请使用新标识符(例如io.modelcontextprotocol/my-extension-v2)。
Breaking change 是任何会导致现有实现失败或行为不正确的修改,包括:
- 删除或重命名字段
- 修改字段类型
- 改变现有行为语义
- 添加新的必填字段
协商
Clients 和 servers 会在初始化握手期间,在各自 capabilities 的extensions 字段中声明对扩展的支持。
客户端能力
Client 在initialize 请求中声明扩展支持:
服务器能力
Server 在initialize 响应中声明扩展支持: