|
| 1 | +--- |
| 2 | +title: Feature Lifecycle and Deprecation Policy |
| 3 | +description: How individual MCP specification features move through Active, Deprecated, and Removed states, and the timeline implementers can plan against. |
| 4 | +--- |
| 5 | + |
| 6 | +This policy defines a lifecycle for individual features within the Model |
| 7 | +Context Protocol specification. It defines three feature states (Active, |
| 8 | +Deprecated, Removed), the criteria and procedure for moving between them, a |
| 9 | +minimum window between deprecation and removal, and the documentation required |
| 10 | +at each transition. |
| 11 | + |
| 12 | +This policy was adopted via |
| 13 | +[SEP-2596](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2596). |
| 14 | + |
| 15 | +## Scope |
| 16 | + |
| 17 | +This policy governs **features** of the MCP core specification: protocol |
| 18 | +messages, capabilities, transports, schema types, and normative behavioral |
| 19 | +requirements. Tthe revision lifecycle of the specification document itself |
| 20 | +(Draft, Current, Final), is defined in the [versioning guide](/docs/learn/versioning). |
| 21 | + |
| 22 | +## Feature States |
| 23 | + |
| 24 | +A specification feature is in exactly one of three states: |
| 25 | + |
| 26 | +| State | Meaning | Implementer expectation | |
| 27 | +| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | |
| 28 | +| **Active** | The feature is part of the Current specification revision. | Implement per the feature's normative requirements. | |
| 29 | +| **Deprecated** | The feature remains in the specification but is scheduled for removal. A migration path is documented (see below). | New implementations should not adopt the feature. Existing implementations should migrate before the earliest removal date. | |
| 30 | +| **Removed** | The feature has been deleted from `draft` and will be absent from the next Current revision. It remains documented in the Final revision it last appeared in. | Implementations targeting that next Current revision must not depend on the feature. | |
| 31 | + |
| 32 | +A Deprecated feature MAY be restored to Active by a SEP that supersedes the |
| 33 | +deprecation SEP and documents the changed circumstances. Restoration follows |
| 34 | +the same approval path as deprecation. If the feature is later deprecated |
| 35 | +again, the minimum deprecation window in |
| 36 | +[Deprecating a feature](#deprecating-a-feature) is measured afresh from the |
| 37 | +revision in which the new deprecation takes effect. |
| 38 | + |
| 39 | +### SDKs |
| 40 | + |
| 41 | +Removal from the specification does not oblige an SDK to drop the feature from |
| 42 | +releases. That timeline is governed by the SDK's own revision-support policy. |
| 43 | + |
| 44 | +## Deprecating a Feature |
| 45 | + |
| 46 | +A feature may be proposed for deprecation due to |
| 47 | + |
| 48 | +- it has been superseded by another feature that covers the same use cases, |
| 49 | +- it presents a security, privacy, or interoperability risk that cannot be |
| 50 | + mitigated in place, |
| 51 | +- ecosystem telemetry or SDK maintainer consensus indicates negligible adoption |
| 52 | + relative to its maintenance cost, |
| 53 | +- or any other reasons the Core Maintainers seem to deem appropriate. |
| 54 | + |
| 55 | +Deprecation is a specification change and therefore requires a SEP per the |
| 56 | +[SEP guidelines](/community/sep-guidelines). The deprecation SEP must: |
| 57 | + |
| 58 | +1. Identify the feature by name and link to its definition in `schema.ts` |
| 59 | + (where applicable) and the specification prose. |
| 60 | +2. State the rationale against the criteria above. |
| 61 | +3. Document the migration path, or state explicitly that none is required. If |
| 62 | + the migration path names a replacement feature, that feature must be Active |
| 63 | + in the revision in which the deprecation takes effect; the replacement and |
| 64 | + the deprecation may land in the same revision. |
| 65 | +4. Specify the **minimum deprecation window**: the number of months, at least |
| 66 | + twelve, that the feature must remain Deprecated before it is eligible for |
| 67 | + removal. The window is measured from the release of the specification |
| 68 | + revision in which the feature is first marked Deprecated, not from the date |
| 69 | + the SEP reaches Final. The feature becomes eligible for removal in the first |
| 70 | + specification revision released as Current on or after the window elapses; |
| 71 | + that point is the feature's **earliest removal**. |
| 72 | + |
| 73 | +When the deprecation SEP is accepted and reaches Final, the deprecation is scheduled. |
| 74 | + |
| 75 | +- The feature's entry in `schema.ts` gains a `@deprecated` JSDoc tag |
| 76 | + referencing the deprecation SEP and the revision in which the deprecation |
| 77 | + takes effect. |
| 78 | +- The specification prose for the feature gains a deprecation notice with the |
| 79 | + same information. |
| 80 | +- The `changelog.mdx` for that revision gains an entry under a "Deprecated" |
| 81 | + heading. "Deprecated" and "Removed" are standing changelog headings alongside |
| 82 | + the existing Major/Minor/Other groupings. |
| 83 | +- The feature is added to the |
| 84 | + [deprecated registry](#the-deprecated-registry) with its deprecation SEP, the |
| 85 | + revision in which it became Deprecated, its migration path, and its earliest |
| 86 | + removal. |
| 87 | + |
| 88 | +The feature becomes Deprecated when the revision carrying these changes is released |
| 89 | +and becomes the new Current revision (see [versioning guide](/docs/learn/versioning)). |
| 90 | +The minimum deprecation window is counted from that release. |
| 91 | + |
| 92 | +## The Deprecated Registry |
| 93 | + |
| 94 | +[`docs/specification/draft/deprecated.mdx`](/specification/draft/deprecated) is |
| 95 | +a single page listing every feature Deprecated or Removed state. It is |
| 96 | +the canonical answer to "what is on its way out, and by when," so that an |
| 97 | +implementer does not have to reconstruct that picture from deprecation entries |
| 98 | +spread across revision changelogs. |
| 99 | + |
| 100 | +## Tier 1 SDK Obligations |
| 101 | + |
| 102 | +Once the revision in which a feature becomes Deprecated is |
| 103 | +released as Current, Tier 1 SDKs: |
| 104 | + |
| 105 | +- Must mark the corresponding API surface deprecated using the language's |
| 106 | + native mechanism (for example `@Deprecated` in Java, `[Obsolete]` in .NET, |
| 107 | + `@deprecated` JSDoc in TypeScript, the `Deprecated:` doc convention in Go) in |
| 108 | + their next release, referencing the deprecation SEP and the earliest removal |
| 109 | + date where the mechanism permits. |
| 110 | +- Should emit a runtime warning when a deprecated feature is exercised, using |
| 111 | + the language's idiomatic mechanism (for example Python's |
| 112 | + `DeprecationWarning`, Node.js's `process.emitWarning`, or a configurable |
| 113 | + logger). |
| 114 | + |
| 115 | +## Removing a Feature |
| 116 | + |
| 117 | +1. Once a feature is set for removal, the removal is executed at the discretion |
| 118 | + of the Core Maintainers after the minimum deprecation window has elapsed. |
| 119 | +2. The removal needs to be documented in the `changelog.mdx` and [registry](#the-deprecated-regsitry) |
| 120 | +3. A SEP is required for any change to the original deprecation or removal SEP, for |
| 121 | + example extending or shortening the timeline |
| 122 | + ([Expedited removal](#expedited-removal)) or restoring the feature to Active |
| 123 | + ([Feature states](#feature-states)). |
| 124 | + |
| 125 | +## Expedited Removal |
| 126 | + |
| 127 | +The twelve-month floor may be shortened when the feature presents an active |
| 128 | +security risk, meaning a vulnerability with a published security advisory or |
| 129 | +documented in-the-wild exploitation for which no in-place mitigation exists. |
| 130 | +Shortening the window requires Core Maintainer approval under the |
| 131 | +[governance decision process](/community/governance#decision-process), recorded |
| 132 | +in the deprecation SEP or, where the risk surfaces after that SEP is already |
| 133 | +Final, in a short expedited-removal SEP that references it. The shortened |
| 134 | +window must still provide at least ninety days between the feature becoming |
| 135 | +Deprecated and its earliest removal. |
0 commit comments