跳到主要内容

什么是 SEP?

SEP 代表“规范增强提案”(Specification Enhancement Proposal)。SEP 是一份设计文档,旨在为 MCP 社区提供信息,或描述模型上下文协议及其流程的新功能。SEP 应提供该功能的简明技术规范及其背后的基本原理。 SEP 是提议重大新功能、收集社区对某议题的意见,以及记录 MCP 设计决策的主要机制。SEP 作者负责在社区内建立共识并记录不同意见。 在撰写 SEP 时,作者应查阅 MCP 设计原则,该原则概述了引导协议发展的核心价值观和权衡取舍。 SEP 以 Markdown 文件形式维护在规范仓库的 seps/ 目录中。其修订历史记录了功能提案的演变过程。

何时编写 SEP

SEP 流程仅适用于那些重大到需要广泛的社区讨论、正式设计文档和历史记录的变更。对于较小的改动,普通的 GitHub 拉取请求 (Pull Request) 通常更为合适。 如果您的改动涉及以下内容,请编写 SEP:
  • 新功能或协议变更 - 添加、修改或删除协议中的功能(新的 API 方法、消息格式变更、互操作性标准)
  • 破坏性变更 - 任何不向后兼容的更改
  • 治理或流程变更 - 更改决策制定或贡献指南
  • 复杂或有争议的话题 - 可能有多种有效解决方案或会引发重大辩论的变更
以下情况请跳过 SEP 流程:
  • 错误修复和错别字更正
  • 文档澄清
  • 为现有功能添加示例
  • 不改变行为的微小架构修复
不确定吗?在开始重大工作之前,请先在 Discord 中咨询。

SEP 类型

SEP 有四种类型
  1. 标准轨道 (Standards Track) - 描述模型上下文协议的新功能或实现,或者核心规范之外支持的互操作性标准。
  2. 信息类 (Informational) - 描述设计问题或为社区提供指南/信息,而不提议新功能。
  3. 流程类 (Process) - 描述围绕 MCP 的流程或提议流程变更(如本文档)。
  4. 扩展轨道 (Extensions Track) - 描述协议扩展。遵循与标准轨道 SEP 相同的审查和验收流程,但表明该提案针对的是扩展而非协议本身。有关扩展的生命周期,请参阅 创建扩展

SEP 工作流程

分步流程

提高 SEP 被接受概率的方法
  • 首先在 Discord 中与相关的工作组或兴趣小组讨论您的想法。 这是完善提案并建立早期支持的最有效方法。
  • 如果没有相关小组,请在 GitHub DiscussionsDiscord#general 频道中发起对话。 如果有足够的兴趣,也许值得 创建一个新的 IG 或 WG —— 寻找发起人和推动者所付出的努力,是判断该想法是否有足够吸引力的一个良好信号,这也远比冷不丁地提交一份草案要好。
  • 检查是否符合核心维护者的优先级和设计原则 优先级通常反映在 项目路线图中。超出当前优先级或与设计原则冲突的提案,在审查过程中更有可能面临延误或额外的阻力。
  1. 撰写您的 SEP,将其命名为 0000-your-feature-title.md(以 0000 作为占位符)。请遵循下方的 SEP 格式
  2. 创建拉取请求,将您的 SEP 文件添加到规范仓库seps/ 目录中。
  3. 更新 SEP 编号:创建 PR 后,根据 PR 编号重命名文件(例如,PR #1850 变为 1850-your-feature-title.md)并更新 SEP 标题。
  4. 寻找发起人 (Sponsor):在维护者列表中标记一名核心维护者或维护者。选择领域与您的提案相关的人。小贴士:
    • 标记 1-2 位相关维护者,不要标记所有人
    • 在相关 Discord 频道分享您的 PR
    • 如果 2 周后没有回应,请在 #general 中询问
  5. 发起人自行指派:当发起人同意后,他们会自行指派到该 PR,并将 SEP 状态更新为 draft(草案)。
  6. 非正式审查:发起人审查提案并可能请求更改。讨论在 PR 评论中进行。
  7. 正式审查:准备就绪后,发起人将状态更新为 in-review(审查中)。SEP 进入核心维护者的正式审查阶段(每两周开会一次)。
  8. 决议:SEP 可能被 accepted(接受)、rejected(拒绝)或退回修改。发起人会更新状态。
  9. 定稿:一旦被接受,必须完成参考实现。对于具有可观察协议行为的标准轨道 SEP,还必须合并一个一致性测试。完成后并整合到规范中,发起人将状态更新为 final(最终)。

SEP 状态

状态含义
draft (草案)已有发起人,正在进行非正式审查
in-review (审查中)准备进行核心维护者的正式审查
accepted (已接受)已批准,等待实现 + 一致性测试
rejected (已拒绝)被核心维护者拒绝
withdrawn (已撤回)作者撤回了提案
final (最终)已完成实现和一致性测试
superseded (已取代)已被更新的 SEP 取代
dormant (休眠)6 个月内未找到发起人;可以重新激活
重要区别dormant(休眠)与 rejected(拒绝)不同。休眠的 SEP 只是没有找到发起人 —— 该想法可能仍然有效。如果情况发生变化(新的社区兴趣、新的用例),休眠的 SEP 可以通过寻找发起人并重新开启 PR 来重新激活。

SEP 格式

每个 SEP 应包含以下部分

1. 序言

简短的描述性标题、作者姓名/联系方式、当前状态、SEP 类型和 PR 编号。

2. 摘要

简短(约 200 字)的描述,说明所处理的技术问题。

3. 动机

为什么现有的协议规范是不够的。这一点至关重要 —— 缺乏充分动机的 SEP 可能会被直接拒绝。

4. 规范

描述新功能语法和语义的技术规范。必须详细到足以让竞争性、可互操作的实现者参考。

5. 基本原理

为什么做出特定的设计决策、考虑过的替代方案以及相关工作。应提供社区共识的证据,并解决讨论中提出的异议。

6. 向后兼容性

所有引入向后不兼容性的 SEP 必须描述这些不兼容性、其严重程度以及处理方法。

7. 参考实现

必须在 SEP 达到“最终”状态前完成,但在接受前无需完全完成。

8. 安全影响

任何与 SEP 相关的安全问题应予以明确记录。 有关完整文件结构,请参阅 SEP 模板

原型要求

在 SEP 被接受之前,您需要“一个证明该提案的原型实现”。以下是符合要求的原型: 可接受的原型:
  • 在官方 SDK 之一中的工作实现(作为分支/分叉)
  • 证明关键机制的独立概念验证 (PoC)
  • 展示所提议行为的集成测试
  • 实现该功能的参考服务器或客户端
原型应该:
  • 证明核心功能如描述般运作
  • 展示 API 设计是实用且符合人体工程学的
  • 揭示任何边缘情况或实现挑战
  • 可供审查者运行(包含设置说明)
不充足的:
  • 仅有伪代码
  • 没有代码的设计文档
  • “相信我,它能用” —— 审查者需要亲眼看到
原型不需要达到生产级别。其存在是为了证明可行性并及早发现问题。

发起人(Sponsor)角色

发起人是指导 SEP 完成审查过程的核心维护者或维护者。发起人的职责包括:
  • 审查提案并提供建设性反馈
  • 根据社区反馈请求更改
  • 随着提案进展更新 SEP 状态
  • 在 SEP 准备就绪时启动正式审查
  • 在核心维护者会议上介绍并讨论提案
  • 确保提案符合质量标准
作者应通过其发起人请求状态更改,而不是自己修改状态字段。

状态管理

发起人负责更新 SEP 状态。 这确保了状态转换由具有相应权限和背景的人员适当地进行。 发起人:
  1. 直接在 SEP Markdown 文件中更新 Status 字段(或者,如果他们没有权限,则与作者协作设置正确的状态)
  2. 将匹配的标签应用到拉取请求(例如,draft, in-review, accepted
Markdown 状态字段和 PR 标签都应保持同步。Markdown 文件是规范记录(随提案版本控制),而 PR 标签便于过滤和搜索。

SEP 审查与决议

SEP 由 MCP 核心维护者团队每两周审查一次。 SEP 若要被接受,必须满足以下标准:
  • 有证明该提案的原型实现
  • 对 MCP 生态系统有明确的益处
  • 有社区支持和共识
一旦 SEP 被接受,必须完成参考实现。完成后并整合到主仓库中,状态变为“最终”。

一致性测试要求

对于引入或修改可观察协议行为的标准轨道 SEP,必须在 SEP 达到 Final 状态前,将一致性场景合并到 一致性仓库中。 要求:
  • 一个标记有 SEP 编号的一致性场景,指向一致性仓库的草稿规范版本标签
  • 一个结构化的可追溯性文件 (sep-NNNN.yaml),将 SEP 规范部分中的每个 MUST/MUST NOT 和 SHOULD/SHOULD NOT 映射到检查 ID 或记录的排除项(如果是框架缺失,则需要跟踪工单)
  • 该场景能够通过 SEP 的参考实现测试
豁免情况
  • 流程类和信息类 SEP
  • 没有可观察协议行为的标准轨道 SEP(文档澄清、非校验性的架构注释、实现加固建议)
各方职责
  • 发起人确保编写一致性场景,并核实可追溯性文件涵盖了 SEP 中的每一个 MUST/MUST NOT 和 SHOULD/SHOULD NOT
  • 一致性仓库维护者审查场景 PR 的技术正确性
  • 测试作者可以是任何人:SEP 作者、SDK 维护者、社区贡献者
鼓励在 SEP 起草过程中(核心维护者审查前)编写一致性场景,尽管不是强制要求的,因为这通常能及早发现规范用语中的歧义,这比事后修复成本更低。 有关包括可追溯性文件格式和争议流程的完整规范,请参阅 SEP-2484

拒绝后的处理

被拒绝并非永久。您可以:
  1. 解决反馈 - 如果提出了具体担忧,解决它们并重新提交
  2. 讨论拒绝原因 - 在 Discord 中询问以了解原因
  3. 提交竞争性 SEP - 有时不同的方法效果更好
  4. 等待时机 - 社区需求在演变;今天被拒绝的可能稍后会被欢迎

报告 SEP 错误或更新

对于尚未达到 final 状态的 SEP,直接在 SEP 的拉取请求上发表评论。一旦 SEP 定稿并合并,通过创建新的拉取请求修改 SEP 文件来提交更新。

转移 SEP 所有权

偶尔需要将 SEP 的所有权转让给新作者。通常,我们希望保留原作者作为共同作者,但这取决于原作者的意愿。 转让所有权的合理理由:
  • 原作者不再有时间或兴趣
  • 原作者失联
不合理的理由:
  • 您不同意其方向(请改为提交竞争性 SEP)
本文档属于公共领域或遵循 CC0-1.0-Universal 许可,以更宽松者为准。