When you need a SEP
Write a SEP for:- A new, changed or removed protocol feature or method (a new RPC method such as
tools/execute, a new capability negotiation field, a change to a transport) - Any change that is not backward compatible
- A change to message formats or schema structure
- An interoperability convention supported outside the core specification
- A governance or process change
- Anything controversial or with several plausible designs, such as a change to how authorization works
SEP types
- Standards Track: a new protocol feature or implementation, or an interoperability standard supported outside the core specification.
- Informational: a design issue or guidance for the community, with no new feature.
- Process: a process surrounding MCP, or a change to one.
- Extensions Track: a protocol extension. It receives the same review and acceptance as Standards Track. An accepted Extensions Track SEP moves the extension to Beta, and a second one moves it to Stable (see Extension Lifecycle for the stages).
Before you write
Bring the idea to the working or interest group that covers the area first (see Joining a group). If no group fits, start a thread in GitHub Discussions or in#general on Discord, and if interest is sustained consider forming a group. Check which roadmap priority area the idea serves, read the design principles, and try the idea as an extension first where its shape allows. Build a prototype that meets the Prototype Requirements, then write the SEP.
Prior discussion is required, and the pull request description must link to it: a Discord thread, meeting notes or a GitHub Discussion. A SEP without a linked prior discussion is not accepted. Specification changes are slow by design (see Stability over velocity).
Workflow
- Copy
seps/TEMPLATE.mdtoseps/0000-<slug>.mdand fill it in. - Open a pull request against the specification repository, titled
sep: <description>as insep: propose task cancellation, following the pull request title guidelines. The repository accepts pull requests from collaborators only; if you are not one, find a sponsor first and ask them to open it and name you as the author. - The SEP number is the PR number. Rename the file (PR #1850 becomes
seps/1850-<slug>.md), update the header, and runnpm run generate:seps, or thecheck:sepsCI job fails. Rename the pull request tosep(SEP-1850): <description>; a follow-up commit is enough, with no amend or force-push. Later pull requests about this SEP keepSEP-1850as their scope and link to it in the description. - The PR is labeled
proposal, meaning awaiting sponsor.proposalis a PR label only; theStatusheader in the SEP stays unset. - A sponsor assigns themselves to the PR and sets
draft. Review takes place in PR comments. - When the SEP is ready, the sponsor confirms that the prior discussion happened and is linked in the pull request description, sets
in-review, and puts it on the Core Maintainer meeting agenda. The author and sponsor may present it. - Core Maintainers decide under Review and acceptance. The sponsor records the outcome,
acceptedorrejected, on the PR and in the SEP header. - For an accepted SEP, the author adds to the same PR: the specification prose, the
schema.tschanges with regenerated output (see CONTRIBUTING.md), a changelog entry, and any required documentation edits (for a deprecation, the four edits under Deprecating a Feature). The reference implementation is completed where it lives: an SDK branch, a fork or a standalone repository (see Prototype Requirements). For a Standards Track SEP with observable protocol behavior, the conformance scenario andsep-NNNN.yamlare merged (see Conformance Test Requirement). SDK implementations are not required for Final. - The sponsor verifies these artifacts and sets
final. The PR is then merged.
Status values, also defined on the SEP index:
A SEP that has no sponsor after 180 days is marked
dormant and its PR is closed. Dormant is not rejected: a dormant SEP is revived by finding a sponsor and reopening the PR, which returns it to draft.
Sponsors
A sponsor is a Core Maintainer, a Maintainer, or a WG Lead for a SEP within that working group’s scope. To find one, look up the Maintainers for your area in MAINTAINERS.md, then ask in the group’s Discord channel. If you can open pull requests on the repository, post the pull request with its prototype in that channel and tag at most two Maintainers on it. If you cannot, post the draft SEP and its prototype instead, and ask a Maintainer to sponsor it and open the pull request naming you as the author; the SEP is numbered from that pull request as usual. Either way, after two weeks with no response, ask in#general.
The sponsor reviews the proposal and requests changes, presents it with the author, verifies the Final artifacts, and makes every status change in the Workflow. That covers the Status field in the SEP file, which is canonical, and the matching PR label, which is for filtering. A sponsor without write access to the branch sets the field through the author. Authors do not edit Status or labels themselves; they ask their sponsor.
A WG Lead may also triage and close in-scope SEPs under Leadership, subject to appeal to Core Maintainers.
Prototype Requirements
A SEP needs a working prototype before it can be accepted: an implementation in an official SDK as a branch or fork, a standalone proof of concept of the key mechanics, integration tests that exercise the proposed behavior, or a reference server or client. The prototype should show that the core functionality works as described and that the API design is practical and ergonomic, surface edge cases and implementation problems, and be runnable by reviewers from included setup instructions. Pseudocode alone, or a design document without code, is not sufficient. Production quality is not required.Review and acceptance
Core Maintainers reviewin-review SEPs at their meeting every two weeks under the decision process. The criteria are a working prototype, clear benefit to the MCP ecosystem, community support and consensus, and fit with the roadmap and the design principles. The outcome is accepted, rejected, or a return to draft with specific feedback recorded on the PR.
Conformance Test Requirement
A Standards Track SEP that introduces or modifies observable protocol behavior cannot reachfinal until the conformance repository has:
- A scenario tagged with the SEP number, targeting the repository’s draft spec-version tag.
- A traceability file,
sep-NNNN.yaml, mapping every MUST, MUST NOT, SHOULD and SHOULD NOT in the SEP’s Specification section to a check ID or to a documented exclusion, with a tracking issue where the exclusion is a framework gap. - The scenario passing against the SEP’s reference implementation.
sep-NNNN.yaml covers every normative statement, and the conformance repository’s maintainers review the scenario PR for technical correctness. Writing the scenario before Core Maintainer review is encouraged, not required. SEP-2484 defines the traceability format and the dispute process.
After the decision
A rejected SEP may be revised against the recorded feedback and resubmitted, or answered with a competing SEP. Before Final, raise problems on the SEP’s PR. A Final SEP is a frozen record of the design as accepted. Where the specification has since diverged, the specification governs: report problems as issues against it, not as edits to the SEP. A SEP is withdrawn at the author’s request. The author or the sponsor setswithdrawn. A SEP that replaces an earlier one carries a Supersedes: line in its header, and the earlier SEP is set superseded.
Ownership of a SEP may pass to a new author when the original author no longer has time for it or cannot be reached. The original author stays on as co-author if they wish. Disagreement with the author’s direction is not grounds for transfer. Write a competing SEP instead.
Template and tooling
SEP files live inseps/, and each file’s git history is the record of the proposal. seps/TEMPLATE.md gives the structure: a preamble, then Abstract, Motivation, Specification, Rationale, Backward Compatibility, Security Implications and Reference Implementation. The Abstract is about 200 words. Insufficient Motivation is by itself grounds for rejection. The Specification must be detailed enough for independent, interoperable implementations. In the Rationale, record the alternatives considered, the objections raised and the evidence of consensus. Backward Compatibility is mandatory whenever the SEP introduces an incompatibility, and states its severity and the migration path. Security Implications are stated explicitly, including when there are none.
npm run generate:seps renders the files into docs/seps/, and npm run check:seps verifies that the rendered pages are current. For a worked example, see SEP-2567, a recent Final Standards Track SEP.