Skip to content

12.2 SEP 协议改进流程

🎯 学习目标:看懂 MCP 的治理机制,知道一条协议变更从想法到落地要经过什么 ⏱️ 预计时间:30 分钟 📊 难度等级:⭐⭐⭐(偏流程,代码很少)

📌 一句话结论:MCP 的每一次重要变更背后都有一份 SEP(Specification Enhancement Proposal,规范改进提案)。你在 11.1 协议版本演进 里看到的 SEP-2575SEP-2243 这类编号,指的就是它们。理解 SEP,你才能判断一项变更"是定了还是还在讨论"。

🤔 SEP 是什么

SEP 是 MCP 社区用来提出协议变更、收集意见、并记录设计决策的主要机制。

  • 它是一份 markdown 设计文档,托管在规范仓库的 seps/ 目录
  • 它要给出简洁的技术规范(这个特性到底怎么定义)和动机(为什么现有规范不够)
  • SEP 作者负责在社区里建立共识,并记录反对意见——不是压掉,而是写下来

撰写前建议先读 MCP 设计原则,它说明了指导协议演进的核心价值与取舍。

✅ 什么时候该写 SEP

SEP 流程是给"足够重大、需要社区广泛讨论 + 正式设计文档 + 历史记录"的变更准备的。小改动直接提 GitHub PR 更合适。

该写 SEP:

情形例子
新特性或协议变更新增/修改/移除 API 方法、消息格式变化、互操作标准
破坏性变更任何不向后兼容的改动
治理或流程变更修改决策方式、贡献指南
复杂或有争议的话题存在多个合理方案、容易引发争论

不该写 SEP(走普通 PR):

  • Bug 修复与错别字订正
  • 文档澄清
  • 给既有特性补示例
  • 不改变行为的次要 schema 修正

💡 拿不准?先到 Discord 问问,别一上来就闷头写大文档。

📚 SEP 的四种类型

类型含义
Standards Track描述 MCP 的新特性或实现,或核心规范之外支持的互操作标准
Informational描述设计问题、或提供指南/信息,不提出新特性
Process描述 MCP 的某个流程,或提出流程变更(本文档本身就是 Process SEP)
Extensions Track描述一个扩展。评审与通过流程和 Standards Track 相同,但标明它是扩展而非核心协议新增,见 12.3 官方扩展体系

🔄 SEP 生命周期

状态含义

状态含义
draft已有赞助人,正在非正式评审
in-review准备进入核心维护者正式评审
accepted已批准,等待实现与一致性测试
rejected被核心维护者否决
withdrawn作者主动撤回
final实现与一致性测试均已完成
superseded被更新的 SEP 取代
dormant6 个月内未找到赞助人;可复活

⚠️ dormantrejected。休眠只是"没找到赞助人",想法本身可能依然成立。如果情况变化(社区有了新兴趣、出现新用例),可以找到赞助人并重开 PR 复活它。

🪜 提案的九个步骤

  1. 起草:以 markdown 文件形式写,命名为 0000-your-feature-title.md0000 是占位符)
  2. 提 PR:把 SEP 文件加到规范仓库的 seps/ 目录
  3. 更新编号:PR 建好后,用 PR 编号重命名文件(PR #1850 → 1850-your-feature-title.md),并同步更新头部
  4. 找赞助人:从维护者名单里 @ 一位与你提案领域相关的核心维护者/维护者(只 @ 1–2 位,别群发)
  5. 赞助人认领:赞助人同意后把自己指派到 PR,并把状态改成 draft
  6. 非正式评审:赞助人审阅、可能要求修改,讨论在 PR 评论里进行
  7. 正式评审:就绪后赞助人把状态改为 in-review,进入核心维护者正式评审(每两周一次会议
  8. 裁决:可能 acceptedrejected,或退回修改,由赞助人更新状态
  9. 定稿:通过后需完成参考实现,且对可观测协议行为的 Standards Track SEP 还须合并一致性测试;作者把规范变更(schema、规范文本、changelog 条目)加入 PR。SDK 实现不是必需项。完成赞助人把状态改为 final,PR 可合并

提高通过率的三个诀窍

  1. 先在相关工作组/兴趣组(WG/IG)的 Discord 频道讨论——这是打磨提案、建立早期支持最有效的一招
  2. 没有对口组,就去 GitHub Discussions 或 #general 起个话题;如果反响热烈,值得先建一个新的 IG/WG
  3. 对齐核心维护者的优先级与设计原则——优先级一般体现在项目路线图里;不在当前优先级、或与设计原则冲突的提案,大概率会拖很久

🧑💼 赞助人(Sponsor)的角色

赞助人是一位为核心维护者或维护者,负责推动 SEP 走完评审:

  • 审阅提案、给出建设性反馈
  • 依据社区意见要求修改
  • 更新 SEP 状态(作者应通过赞助人请求状态变更,而不是自己改状态字段)
  • 在就绪时启动正式评审
  • 在核心维护者会议上介绍并讨论提案

💡 状态以 markdown 文件的 Status 字段为规范记录,PR 标签便于筛选检索,两者要同步。

📏 通过标准与原型要求

SEP 通过需满足:有原型实现 + 对生态有明确收益 + 社区支持与共识

合格的原型:

  • 官方 SDK 里的可运行实现(分支/fork 即可)
  • 演示关键机制的独立 PoC
  • 展示目标行为的集成测试
  • 实现了该特性的参考服务器或客户端

不合格:

  • ❌ 只有伪代码
  • ❌ 没有代码的设计文档
  • ❌ "相信我,能跑"——评审者要看得到

原型不必生产可用,它的作用是证明可行、提前暴露边界问题。

🧪 一致性测试要求(Conformance)

引入或修改可观测协议行为的 Standards Track SEP,必须先在 一致性测试仓库 合并一个一致性场景,SEP 才能到达 final

需要提交:

  • 一个带 SEP 编号标签的一致性场景,针对一致性仓库的 draft spec 版本标签
  • 一个结构化的可追溯文件 sep-NNNN.yaml,把 SEP 规范章节里每一条 MUST/MUST NOT 和 SHOULD/SHOULD NOT 映射到某个检查 ID,或记录为"有据可依的排除项"(若属框架缺口则附跟踪 issue)
  • 该场景能针对 SEP 的参考实现通过

豁免: Process 与 Informational SEP;无可观测协议行为的 Standards Track SEP(文档澄清、不参与校验的 schema 注解、实现加固建议)。

💡 在 SEP 起草阶段(正式评审前)就写一致性场景是受鼓励但非强制的——它常能提前暴露规范措辞里的歧义,此时改最便宜。

📄 SEP 文档的八个部分

部分作用
1. Preamble标题、作者与联系方式、状态、类型、PR 编号
2. Abstract约 200 词,说明要解决的技术问题
3. Motivation为什么现有规范不够——动机不足可能被直接否决
4. Specification语法与语义的技术规范,细到足以支撑多方互操作实现
5. Rationale为什么这样设计、考虑过哪些替代方案、相关工作总结
6. Backward Compatibility所有引入不兼容的 SEP 必须描述不兼容点、严重程度与应对
7. Reference Implementation到达 Final 前必须完成,但不必在通过前完成
8. Security Implications必须显式记录相关安全问题

❌ 被否决之后

否决不等于永久出局。你可以:

  1. 正面回应反馈——针对具体顾虑修改后重提
  2. 讨论否决理由——去 Discord 问清楚
  3. 提交竞争性 SEP——有时换个方案更好
  4. 等时机成熟——社区需求会变,今天被拒的可能明天被欢迎

另外:已到达 final 的 SEP 是历史记录,不再更新。若规范其后又变了,以当前规范为准

💡 怎么用 SEP 读懂 changelog

回到 11.1 协议版本演进,你会看到很多带编号的变更。对照思路是:

你看到的它告诉你
出现在某版本 changelog 里该 SEP 已 accepted 并随版本发布,可以按此实现
只在 seps/ 目录里、状态 draft/in-review还在讨论,别急着按它写生产代码
出现在 draft 版规范里下一版的候选,随时可能变
状态 dormant想法搁置,尚未成定论

举几个 2026-07-28 相关的例子:SEP-2575(无状态 MCP)、SEP-2243(HTTP 标准化,引入 Mcp-* 头)、SEP-2549(结果缓存 ttlMs/cacheScope)、SEP-2577(Roots/Sampling/Logging 废弃)、SEP-2663(Tasks 转为扩展)。

📖 官方资料


👉 下一小节:12.3 官方扩展体系

内容依据 MCP 官方规范整理 · 规范以 官方文档 为准