-
Notifications
You must be signed in to change notification settings - Fork 1.3k
SEP-1802 file-based sep workflow #1802
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
f8285c0
e4fed2c
1b06f10
ca57f72
04605fe
337f4ab
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| { | ||
| "workbench.colorCustomizations": { | ||
| "activityBar.background": "#312E14", | ||
| "titleBar.activeBackground": "#45411C", | ||
| "titleBar.activeForeground": "#FBFAF4" | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -5,11 +5,13 @@ description: Specification Enhancement Proposal (SEP) guidelines for proposing c | |
|
|
||
| ## What is a SEP? | ||
|
|
||
| The canonical SEP workflow keeps every proposal as a Markdown file in the `seps/` directory of this repository; the process below mirrors `seps/README.md` and the corresponding SEP that established this workflow. | ||
|
|
||
| SEP stands for Specification Enhancement Proposal. A SEP is a design document providing information to the MCP community, or describing a new feature for the Model Context Protocol or its processes or environment. The SEP should provide a concise technical specification of the feature and a rationale for the feature. | ||
|
|
||
| We intend SEPs to be the primary mechanisms for proposing major new features, for collecting community input on an issue, and for documenting the design decisions that have gone into MCP. The SEP author is responsible for building consensus within the community and documenting dissenting opinions. | ||
|
|
||
| Because the SEPs are maintained as text files in a versioned repository (GitHub Issues), their revision history is the historical record of the feature proposal. | ||
| Because SEPs are Markdown files stored in the `seps/` directory of the specification repository, Git provides the authoritative revision history for every proposal. | ||
|
|
||
| ## What qualifies a SEP? | ||
|
|
||
|
|
@@ -42,14 +44,17 @@ Each SEP must have an **SEP author** -- someone who writes the SEP using the sty | |
|
|
||
| ### SEP Workflow | ||
|
|
||
| SEPs should be submitted as a GitHub Issue in the [specification repository](https://github.com/modelcontextprotocol/modelcontextprotocol). The standard SEP workflow is: | ||
| SEPs are submitted as pull requests that add a Markdown file to the `seps/` directory in the [specification repository](https://github.com/modelcontextprotocol/modelcontextprotocol). The standard workflow is: | ||
|
|
||
| 1. Draft the proposal as `seps/DRAFT-your-feature.md`, following the [SEP format](#sep-format) including header metadata (status, type, created date, author, sponsor placeholder, and PR reference). | ||
| 2. Open a pull request containing the draft SEP (and any supporting material). The pull request discussion replaces the historical GitHub Issue thread, and the SEP should start with status `Draft`. | ||
| 3. Find a Core Maintainer or Maintainer to sponsor your proposal. Tag potential sponsors from [MAINTAINERS.md](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/MAINTAINERS.md). Once someone agrees, record their handle in the `Sponsor` field. | ||
| 4. After the pull request number is known, rename the file to `seps/{PR-number}-{slug}.md` and update the title/header to `SEP-{PR-number}` along with `PR: #{PR-number}`. | ||
| 5. Work with your sponsor to iterate on the proposal. Sponsors move the SEP through `Draft → In-Review → Accepted → Final` by updating the `Status` field in the file and using matching pull request labels. | ||
| 6. Provide or link to a reference implementation before requesting `Final` status. The pull request containing the SEP should include links to any tracking issues or additional PRs needed to implement the change. | ||
|
|
||
|
|
||
| 1. You, the SEP author, create a [well-formatted](#sep-format) GitHub Issue with the `SEP` and `proposal` tags. The SEP number is the same as the GitHub Issue number, the two can be used interchangeably. | ||
| 2. Find a Core Maintainer or Maintainer to sponsor your proposal. Core Maintainers and Maintainers will regularly go over the list of open proposals to determine which proposals to sponsor. You can tag relevant maintainers from [the maintainer list](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/MAINTAINERS.md) in your proposal. | ||
| 3. Once a sponsor is found, the GitHub Issue is assigned to the sponsor. The sponsor will add the `draft` tag, ensure the SEP number is in the title, and assign a milestone. | ||
| 4. The sponsor will informally review the proposal and may request changes based on community feedback. When ready for formal review, the sponsor will add the `in-review` tag. | ||
| 5. After the `in-review` tag is added, the SEP enters formal review by the Core Maintainers team. The SEP may be accepted, rejected, or returned for revision. | ||
| 6. If the SEP has not found a sponsor within three months, Core Maintainers may close the SEP as `dormant`. | ||
| You can still open a GitHub Issue or discussion for early feedback, but the Markdown file in `seps/` is the single source of truth for every SEP once the pull request exists. | ||
|
|
||
| ### SEP Format | ||
|
|
||
|
|
@@ -66,17 +71,15 @@ Each SEP should have the following parts: | |
|
|
||
| ### SEP States | ||
|
|
||
| SEPs can be one one of the following states | ||
| SEPs move through the following states, which are recorded in the SEP header: | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. did we mean to change the states?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not this much, took them from the README in the seps folder, will treat this one as canonical and update the latter.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Actually, I'm not sure these make as much sense for granularity given the changelog of the SEP md file Namely Proposal isn't relevant [the sponsor block records that], and Dormant I think is implied by the PR state? |
||
|
|
||
| - `proposal`: SEP proposal without a sponsor. | ||
| - `draft`: SEP proposal with a sponsor. | ||
| - `in-review`: SEP proposal ready for review. | ||
| - `review`: SEP proposal ready for review. | ||
| - `accepted`: SEP accepted by Core Maintainers, but still requires final wording and reference implementation. | ||
| - `rejected`: SEP rejected by Core Maintainers. | ||
| - `withdrawn`: SEP withdrawn. | ||
| - `final`: SEP finalized. | ||
| - `superseded`: SEP has been replaced by a newer SEP. | ||
| - `dormant`: SEP that has not found sponsors and was subsequently closed. | ||
|
|
||
| ### SEP Review & Resolution | ||
|
|
||
|
|
@@ -94,7 +97,7 @@ A SEP can also be "Rejected" or "Withdrawn". A SEP that is "Withdrawn" may be re | |
|
|
||
| ## Reporting SEP Bugs, or Submitting SEP Updates | ||
|
|
||
| How you report a bug, or submit a SEP update depends on several factors, such as the maturity of the SEP, the preferences of the SEP author, and the nature of your comments. For SEPs not yet reaching `final` state, it's probably best to send your comments and changes directly to the SEP author. Once SEP is finalized, you may want to submit corrections as a GitHub comment on the issue or pull request to the reference implementation. | ||
| How you report a bug, or submit a SEP update depends on several factors, such as the maturity of the SEP, the preferences of the SEP author, and the nature of your comments. For SEPs that have not yet reached `Final`, comment on the active pull request or open a follow-up pull request editing the SEP file directly. Once a SEP is finalized, submit corrections through a new pull request against the SEP file or the relevant reference implementation. | ||
|
|
||
| ## Transferring SEP Ownership | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,64 @@ | ||
| # SEP-1802: File-Based SEP Workflow | ||
|
|
||
| - **Status**: Draft | ||
| - **Type**: Process | ||
| - **Created**: 2025-11-12 | ||
| - **Author(s)**: Nick C. (@nickcoai) | ||
| - **Sponsor**: @nickcoai | ||
| - **PR**: #1802 | ||
|
|
||
| ## Abstract | ||
|
|
||
| This SEP formalizes the Markdown-file-based SEP workflow that stores proposals in the `seps/` directory of the Model Context Protocol repository. The workflow assigns SEP numbers from pull requests, keeps each proposal's history in Git, and removes the need to manage GitHub Issues as the primary source of truth for SEPs. This document makes the file-based process the canonical way to author, review, and accept SEPs while still allowing GitHub Issues for early idea discussion when helpful. | ||
|
|
||
| ## Motivation | ||
|
|
||
| The issue-based SEP process introduced friction: | ||
|
|
||
| - Proposal content was dispersed between issues, linked documents, and pull requests, which complicated review and archival. | ||
| - SEP numbers had to be coordinated manually when proposals moved between issues and pull requests. | ||
| - Maintaining long-form specifications inside issue bodies made iterative edits harder, especially when multiple contributors collaborated. | ||
|
|
||
| A file-based workflow keeps every SEP in version control alongside the specification itself. Git provides built-in review tooling, history, and searchability. Linking SEP numbers to pull requests removes manual bookkeeping while still surfacing discussion in the pull request thread. | ||
|
|
||
| ## Specification | ||
|
|
||
| 1. **Canonical Location** | ||
| - Every SEP lives in `seps/{NUMBER}-{slug}.md`. | ||
| - The SEP number is always the pull request number that introduces the SEP file. | ||
|
|
||
| 2. **Author Workflow** | ||
| - Draft the proposal in `seps/DRAFT-{slug}.md`. | ||
| - Open a pull request containing the draft SEP and any supporting materials. | ||
| - Request a sponsor from the Maintainers list; record the sponsor in the SEP header once confirmed. | ||
| - After the pull request number is known, rename the file to `{PR}-{slug}.md` and update the header (`SEP-{PR}` and `PR: #{PR}`). | ||
|
|
||
| 3. **Review Flow** | ||
| - Status progression is `Draft → In-Review → Accepted → Final`, with optional `Rejected`, `Withdrawn`, or `Superseded`. | ||
| - Sponsors manage status updates directly in the SEP file and in the pull request labels. | ||
| - Reference implementations are tracked via linked pull requests or issues and must be complete before marking a SEP as `Final`. | ||
|
|
||
| 4. **Documentation Updates** | ||
| - `docs/community/sep-guidelines.mdx` serves as the contributor-facing instructions and must reflect this workflow. | ||
| - `seps/README.md` remains the concise reference for formatting, naming, sponsor responsibilities, and acceptance criteria. | ||
|
|
||
| 5. **Legacy Issue-Based Flow** | ||
| - Contributors may optionally open a GitHub Issue for early discussion, but the authoritative SEP text lives in `seps/`. | ||
| - Issues should link to the relevant file once a pull request exists; numbers are no longer derived from issues. | ||
|
|
||
| ## Rationale | ||
|
|
||
| Storing SEPs as files keeps authoritative specs versioned with the code, which mirrors successful processes used by PEPs and other standards bodies. Using pull request numbers eliminates race conditions around manual numbering while keeping a single discussion thread for review. Maintaining two overlapping canonical processes risked divergence; naming the file-based approach as primary reduces confusion for contributors and maintainers. | ||
|
|
||
| ## Backward Compatibility | ||
|
|
||
| - Existing issue-based SEPs remain valid and require no migration, though maintainers may optionally backfill them into `seps/` for archival. | ||
| - Links to historical GitHub Issues continue to work; future SEPs should link to the new file locations. | ||
|
|
||
| ## Security Implications | ||
|
|
||
| No new security considerations beyond the standard code-review process. | ||
|
|
||
| ## Reference Implementation | ||
|
|
||
| - This pull request adds the canonical instructions in both `seps/README.md` and `docs/community/sep-guidelines.mdx`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the SEP PR meant to be eventually merged into
main? i.e., Will we keep theseps/directory in git history?If so, can the SEP PR also contain the necessary changes to the spec and documentation?
(I presume so, since that is what this SEP appears to be doing, but this item makes it sound like the SEP PR should link to an additional PR for the spec.)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Isn't the
PR: #{PR-number}redundant?