Skip to content

Commit e8bee4d

Browse files
committed
Address review: pre-release opt-in, era-scoped deprecations, lock recipe
- versioning.md: name all three PEP 440 pre-release opt-in routes, matching RELEASE.md's wording. - versioning.md: say what a retired protocol feature does on each kind of connection instead of implying it keeps working everywhere. - roadmap.md: conformance runs on pull requests and pushes to main, not "every push". - RELEASE.md: the bump recipe said `uv lock --resolution lowest-direct`, which would floor the entire committed lock; the lock is a normal resolution and lowest-direct belongs only to the CI leg. No-Verification-Needed: doc-only change
1 parent e90d907 commit e8bee4d

3 files changed

Lines changed: 8 additions & 4 deletions

File tree

RELEASE.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ move; this is the mechanics.
88
1. Change the dependency version in `pyproject.toml`. The root `mcp` project's
99
runtime dependencies are dynamic and live under
1010
`[tool.hatch.metadata.hooks.uv-dynamic-versioning].dependencies`.
11-
2. Upgrade lock with `uv lock --resolution lowest-direct`
11+
2. Regenerate the lock with `uv lock` (or `uv lock --upgrade-package <package>`
12+
to move just that package's locked version). The committed `uv.lock` is a
13+
normal, newest-allowed resolution; the `lowest-direct` resolution that
14+
proves the floors still work is applied only by its CI matrix leg at test
15+
time and never written to the lock.
1216

1317
## Release lines
1418

docs/roadmap.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ None of these gates conformance today — extension scenarios are informational
2525

2626
## Continuous work
2727

28-
* **Conformance** — every push runs the [conformance suite](https://github.com/modelcontextprotocol/conformance) as both server and client, against the released revisions and against the 2026-07-28 wire specifically; adopting each new harness release and reconciling its baseline is routine.
28+
* **Conformance** — every pull request and every push to `main` runs the [conformance suite](https://github.com/modelcontextprotocol/conformance) as both server and client, against the released revisions and against the 2026-07-28 wire specifically; adopting each new harness release and reconciling its baseline is routine.
2929
* **The next specification revision** — draft-only wire changes are tried behind the draft protocol version before they are final, and land in a release once the revision ships; the SDK targets releasing support alongside each new specification version.
3030
* **Everything else** — the [issue tracker](https://github.com/modelcontextprotocol/python-sdk/issues) is the source of truth for bugs and smaller features; `P0``P3` labels carry priority.
3131

docs/versioning.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Releases follow [Semantic Versioning](https://semver.org/) semantics, written in
1010
* **`X` (minor)** — new functionality and every non-breaking change.
1111
* **`Y` (patch)** — bug fixes only.
1212
* **The leading `2` (major)** — the only place a breaking change to the public API can land.
13-
* **Pre-releases** are cut from `main` as `2.X.YaN` (alpha), `2.X.YbN` (beta), and `2.X.YrcN` (release candidate). Installers never select a pre-release unless you ask for one, by exact pin or `--pre`.
13+
* **Pre-releases** are cut from `main` as `2.X.YaN` (alpha), `2.X.YbN` (beta), and `2.X.YrcN` (release candidate). Installers select a pre-release only when a requirement asks for one explicitly — an exact pin, a specifier that itself names a pre-release version (such as `mcp>=2.1.0b1`), or `--pre` — so an unpinned `pip install mcp` always lands on a stable release.
1414

1515
`mcp` and its wire-types package [`mcp-types`](https://pypi.org/project/mcp-types/) release in lockstep at the same version: each `mcp` release requires exactly the matching `mcp-types` (`mcp-types==2.X.Y`).
1616

@@ -54,7 +54,7 @@ There are two kinds, warned differently on purpose.
5454

5555
**SDK API deprecations** — a name or parameter this SDK is retiring. The API keeps working, marked with [`typing_extensions.deprecated`](https://typing-extensions.readthedocs.io/en/latest/#typing_extensions.deprecated), so static type checkers flag every call site and Python emits a `DeprecationWarning` at runtime. A deprecated API survives at least one minor release with its warning in place, and is removed only in a major version: something deprecated during 2.x is not removed before 3.0.
5656

57-
**Protocol deprecations** — a feature the MCP specification has retired (for example the SEP-2577 set in the 2026-07-28 revision). These keep working through the specification's deprecation window and warn with `MCPDeprecationWarning`, a `UserWarning` subclass, so the warning is visible by default rather than hidden the way `DeprecationWarning` is outside `__main__`. **[Deprecated features](deprecated.md)** lists every one, its replacement, and how to silence the warning when you genuinely serve older clients.
57+
**Protocol deprecations** — a feature the MCP specification has retired (for example the SEP-2577 set in the 2026-07-28 revision). The SDK keeps implementing these through the specification's deprecation window, but what still works depends on the revision a connection negotiated: on a connection speaking an older revision they behave as before; on a 2026-07-28 connection a retired feature may have no wire support left at all (server-initiated sampling and roots have no back-channel to travel over, and `ping` no longer exists), so the call warns and then fails. Either way the call site warns with `MCPDeprecationWarning`, a `UserWarning` subclass, so the warning is visible by default rather than hidden the way `DeprecationWarning` is outside `__main__`. **[Deprecated features](deprecated.md)** lists every one, exactly what happens on each kind of connection, its replacement, and how to silence the warning when you genuinely serve older clients.
5858

5959
## Supported release lines
6060

0 commit comments

Comments
 (0)