FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

SEP-3392: Extension Lifecycle by pja-ant · Pull Request #3392 · modelcontextprotocol/modelcontextprotocol · GitHub

Repository navigation

SEP-3392: Extension Lifecycle - #3392

Open
pja-ant wants to merge 4 commits into
modelcontextprotocol:mainfrom
pja-ant:pja/sep-extension-lifecycle
Open

pja-ant wants to merge 4 commits into
modelcontextprotocol:mainfrom
pja-ant:pja/sep-extension-lifecycle

Conversation

pja-ant commented Sep 25, 2026 •
edited
Loading

Copy link
Copy Markdown
Contributor

Proposes a maturity lifecycle for MCP extensions: Experimental, then Beta, then either Stable (as an extension) or promotion to the core specification.
The stage is shown in the repository name (experimental-ext-<name>, beta-ext-<name>, ext-<name>) and decides which protocol changes are allowed, who approves them, and what stability implementers can expect.

  • Experimental and Beta extensions iterate with Extension Maintainer approval only, and may make breaking changes.
  • Entering Beta and entering Stable each need an Extensions Track SEP. A Stable extension changes only with a new core protocol revision.
  • Promotion to core is a Standards Track SEP, with a defined migration from the extension identifier (clients keep advertising it while they support earlier revisions; requests declaring the core revision or later need no negotiation).

This updates the extension lifecycle in SEP-2133, replaces its "every breaking change needs a new identifier" rule, and answers the "feature maturity tiers" open question in SEP-2596.
It also extends the SEP-2484 conformance requirement to the SEPs that move an extension to Stable.

For reviewers: the Transition section classifies the existing extension repositories (ext-apps and ext-auth Stable; ext-skills and ext-tasks Beta; ext-server-card Beta once SEP-2127 is accepted).
That classification is a proposal for the Core Maintainers.

AI assistance: drafted with Claude Code (research of existing SEPs and extension repositories, and writing the text). Design decisions and review are by @pja-ant.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0194GteaD7THWZEzQxB22P1k
pja-ant added SEP draft SEP proposal with a sponsor. extension labels Sep 25, 2026
pja-ant self-assigned this Sep 25, 2026
pja-ant changed the title SEP-0000: Extension Lifecycle SEP-3392: Extension Lifecycle Sep 25, 2026
pja-ant marked this pull request as ready for review September 25, 2026 17:12
Comment thread seps/0000-extension-lifecycle.md Outdated

### Repositories

- An Experimental or Beta repository MUST contain exactly one extension. A Stable repository MAY group related extensions in one area, as SEP-2133 allows, but an extension joins a grouped repository only when it becomes Stable.

LucaButBoring Sep 25, 2026 •
edited
Loading

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Possible minor challenge for Tasks (once again) with this: modelcontextprotocol/agents-wg#29

I'm proposing basically splitting Tasks into a stabilized portion (to be merged into the core spec) and experimental portion, which will probably coexist in the same repo for a while - it's unclear if that's allowed under this. Should we temporarily have both an ext-tasks and an experimental-ext-tasks(-v2?) repo simultaneously for a period of time if we went with this?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Yeah, I thought this might come up. We could instead have ext-tasks contain multiple extensions, and we e.g. have ext-tasks/tasksv2/experimental/spec.md alongside ext-tasks/tasks/beta/spec.md

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

This is a good point. @pcarleton mentioned ext-auth might have similar things.

What about just subfolders within the repo and the repo is just ext-tasks?

ext-tasks/spec/stable/tasks.md
ext-tasks/spec/experimental/partial-results.md
ext-tasks/spec/beta/steering.md

(names made up...)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

updated to use directories

Comment thread seps/0000-extension-lifecycle.md Outdated
| Stage | Repository | Protocol changes | Changes approved by | Entry | What implementers can expect |
| ---------------- | ------------------------------------------------------- | ----------------------------------------------------- | -------------------- | ------------------------------------- | ------------------------------------------------------- |
| **Experimental** | `experimental-ext-<name>` | Any change, at any time, without notice | Extension Maintainer | Any Maintainer creates the repository | Nothing. The design may change or disappear. |
| **Beta** | `beta-ext-<name>` | Any change, with breaking changes expected to be rare | Extension Maintainer | Extensions Track SEP | Real usage is welcome. Breaking changes are documented. |

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

@nbarbettini mentioned in a meeting that the 'Release Candidate' framing is useful for setting expectations around a protocol release. If we're still planning to use that approach for the core protocol releases, should we also use that term here for extensions?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Hmm, open to it, but I feel that RC sets an expectation that it is very close and just in a staging area for final release with only minor bugfixes, whereas beta evokes more of a "we're trying this out, might change significantly as we get production experience".

RC to me would be, e.g. the extension is accepted into the core protocol or stable release and we're just weeks before setting it in stone and it's unlikely to change (but still possible).

An **Extension Maintainer** is a maintainer of the extension's repository who is listed in that repository's `MAINTAINERS.md`, as `ext-tasks` already does. As SEP-2133 provides for repository maintainers, the Core Maintainers appoint Extension Maintainers, who are normally the
leads of the associated Working Group or Interest Group. Every extension MUST have at least one Extension Maintainer.

"Extension Maintainer approval" means a pull request approved by at least one Extension Maintainer who is not its author. Extension Maintainers SHOULD coordinate changes through the associated Working Group or Interest Group.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

We already have guidelines around decision making in the groups, can we link to this for 'how to coordinate changes?' https://modelcontextprotocol.io/community/working-interest-groups#decision-making-process


**Iteration.** After entry, Extension Maintainers approve changes without further Core Maintainer review.

- Extensions SHOULD prefer additive changes, such as new optional fields or capability flags, over breaking changes.

felixweinberger Oct 1, 2026 •
edited
Loading

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Wonder if we want to cross reference #3371 here if it gets shipped, something like "prefer the extension points provided by #3371" as that would likely simplify longer term compatibility.

One area can hold extensions at different stages at once, for example a
stable Tasks extension beside experimental additions. Putting the stage in
the repository name allowed only one stage per repository and renamed the
repository at every stage change.

The stage is now the directory specification/<stage>/<name> inside an
ext-<area> repository. A stage change is a directory move that a Core
Maintainer approves, and no repository is renamed. Extensions that are
promoted to core or ended move to specification/archived/.
beta/
steering.md
stable/
tasks/

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

maybe a nit, but should it be "ext-tasks/tasks/specification"? It seems like this would be easier to navigate if there are multiple extensions


Core Maintainers retain the ability to archive an Experimental extension, or an experimental repository, at any time.

### Beta

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Is it worth signaling in beta if something is intended to be stable track or core track?

This branch has not been deployed

No deployments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

draft SEP proposal with a sponsor. extension SEP

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

5 participants


Back | FazBrowse Home | New Git URL