Skip to content

Commit cb295ad

Browse files
committed
Adapt the story suite to the merged 2026 client surface
Rebased onto main: mode='auto' is now the Client default, so the harness drops the workaround prose; the mrtr/subscriptions stubs note their lowlevel surface is in this base.
1 parent e751695 commit cb295ad

4 files changed

Lines changed: 15 additions & 14 deletions

File tree

examples/stories/_harness.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,13 @@ def run_client(main: Callable[..., Awaitable[None]]) -> None:
9292
targets = target_from_args(file)
9393
build_auth: AuthBuilder | None = globals_.get("build_auth")
9494
transport = "http" if "--http" in sys.argv else "stdio"
95-
# Never rely on the SDK's mode= default — be explicit. stdio is legacy-only until
96-
# the SDK's stdio entry can negotiate the era, so only --http gets a modern arm.
95+
# The era is an axis of the story matrix, so ``mode=`` is always passed explicitly
96+
# even though it often matches the ``Client`` default of "auto". stdio is legacy-only
97+
# until the SDK's stdio entry can negotiate the era, so only --http gets a modern arm.
9798
era = "modern" if transport == "http" and "--legacy" not in sys.argv else "legacy"
9899
if cfg["era"] == "dual-in-body":
99-
# The story pins its connection modes inside ``main`` itself, so hand it the
100-
# real-user "auto" default and let those in-body pins decide. A hard version pin
100+
# The story pins its connection modes inside ``main`` itself, so hand it "auto"
101+
# (the ``Client`` default) and let those in-body pins decide. A hard version pin
101102
# here would skip the discover probe and leave ``server_info`` blank.
102103
era = "in-body"
103104
mode = {"modern": LATEST_MODERN_VERSION, "legacy": "legacy", "in-body": "auto"}[era]

examples/stories/mrtr/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ the server resumes from the carried state. The story will show both the
77
auto-fulfil helper and a manual resubmit loop.
88

99
**Status: not yet implemented** ([#2898](https://github.com/modelcontextprotocol/python-sdk/issues/2898)).
10-
The lowlevel registration surface exists on `main` as of
10+
The lowlevel registration surface is in this base —
1111
[#2967](https://github.com/modelcontextprotocol/python-sdk/pull/2967)
12-
(`ae13ede`), which widened the tool/prompt/resource handler return types to
13-
include `InputRequiredResult`. This story graduates from a README stub to a
14-
runnable example once this branch's base includes that commit.
12+
(`ae13ede`) widened the tool/prompt/resource handler return types to include
13+
`InputRequiredResult`. The runnable story is deliberately a follow-up PR to
14+
keep this one reviewable.
1515

1616
## Spec
1717

examples/stories/subscriptions/README.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@ them. Replaces the handshake-era `resources/subscribe` + standalone-GET
66
notification path.
77

88
**Status: not yet implemented** ([#2901](https://github.com/modelcontextprotocol/python-sdk/issues/2901)).
9-
The lowlevel registration surface exists on `main` as of
9+
The lowlevel registration surface is in this base —
1010
[#2967](https://github.com/modelcontextprotocol/python-sdk/pull/2967)
11-
(`ae13ede`), which added the lowlevel `on_subscriptions_listen` handler slot.
12-
There is no `Client.listen()` or `ServerEventBus` yet; this story graduates
13-
from a README stub to a runnable example once this branch's base includes that
14-
commit.
11+
(`ae13ede`) added the lowlevel `on_subscriptions_listen` handler slot — but
12+
there is no `Client.listen()` or `ServerEventBus` yet. The runnable story is
13+
deliberately a follow-up PR to keep this one reviewable.
1514

1615
## Spec
1716

tests/examples/conftest.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@
4545
_ERA_TO_MODE = {"modern": LATEST_MODERN_VERSION, "legacy": "legacy", "in-body": "auto"}
4646
"""``Client`` rejects handshake-era version strings, so ``legacy`` resolves to
4747
``mode='legacy'`` rather than ``LATEST_HANDSHAKE_VERSION``. ``in-body`` legs pin
48-
their connection modes inside ``main`` themselves, so they get the real-user default."""
48+
their connection modes inside ``main`` themselves, so they get ``"auto"`` — the
49+
``Client`` default; the era axis still passes every ``mode=`` explicitly."""
4950

5051

5152
def story_cfg(name: str) -> dict[str, Any]:

0 commit comments

Comments
 (0)