Commit Graph

1052 Commits

Author SHA1 Message Date
Max Isbey 3a9127d69e Close the four log-delivery divergences the per-request log-level gate resolved
Log message notifications on a 2026-07-28 connection are now gated on the
request's io.modelcontextprotocol/logLevel opt-in, so the pins that recorded
un-gated delivery (all-levels, message fields, mid-tool-call logging, and the
Context logging helpers) no longer diverge from the spec. Drop their
Divergence blocks; the tests were already re-pinned with an explicit log level.
2026-08-16 12:57:05 +00:00
Max Isbey 52392f26cd Close the register-echo divergence and reconcile the cancellation suite with main
Reconcile the branch with main's landed behaviour on top of the rebase:

- Adopt main's hosting:auth:as:register-echo entry over the branch's
  register-echo-application-type entry and its now-closed divergence, drop
  the stale pinning test that superseded it, and remove its unused imports.
- Rewrite the no-further-notifications cancellation test onto the
  doomed-call pattern: a cancelled request is no longer answered, so the
  call is parked and abandoned instead of expecting an error, tolerating
  only the legacy streamable HTTP terminator.
- Reword the no-further-notifications note to match the narrowed
  in-flight divergence.
- Assert the persisted application_type echo in the DCR pass-through
  test now that the registration echo carries it.

No-Verification-Needed: test-only diff, no runtime surface to drive
2026-08-16 12:57:05 +00:00
Max Isbey c8e4382c32 Reconcile the interaction suite manifest with main
Reword the unsupported-dialect deferral to describe the validator-class
selection the client now performs, and name the public
ClientSession.validate_tool_result in the null-structured-content note.

No-Verification-Needed: prose-only edit to the test manifest
2026-08-16 12:57:05 +00:00
Max Isbey f2a19186f0 Re-ground every stale interaction-manifest premise against the current main
A per-item sweep of all 166 deferral premises and 54 untracked divergences
found 42 no longer true at this pin (21 false, 21 narrowed), several of them
false since before the branch was cut. Rewrite each to what actually holds:
the subscriptions/listen client driver, client-side cancellation over the
2026 transports, stdio serving 2026 with the era chosen from the opening
request, the widened resolver capability gate, and the response-cache
list_changed eviction all landed, so their "missing" premises become
flip-candidates with true reasons; the stdio dual-era text is rewritten a
fourth time against the settled loop. Reconcile the entries main now covers
itself: delete the two split cancel deferrals superseded by main's bound
stream-frame and cancel-closes-stream pins, drop client:listen:signal-only
in favour of main's tested iteration entry, drop the sdk-sourced
list-changed capability-gated position the client does not hold, and let
the branch's spec-anchored graceful-close entry win its true duplicate on
main by re-binding main's existing test to it. Drop the two divergences
whose gap does not exist (Annotations last_modified round-trips; the read
timeout is an enforced maximum) and the four false arm-exclusion notes on
the cancel family. Fix the six test docstrings that repeated the retired
claims. 617 entries, 60 divergences, 160 deferrals.

No-Verification-Needed: test-only change
2026-08-16 12:57:05 +00:00
Max Isbey faebd47525 Adopt the serverInfo _meta stamp fixture across the interaction suite
Main now stamps io.modelcontextprotocol/serverInfo into the _meta of
every 2026-era result and ships an era-aware strip helper. Route the
branch's own result comparisons through it: era-parametrized tests thread
the unstamped fixture; tests pinned to a single modern connection call
the strict module helper directly, aliased strip_stamp wherever a file
also uses the fixture so the name never carries two meanings; raw-wire
snapshots pin the stamp on the wire, with ad-hoc test servers given an
explicit version so no snapshot pins an empty one. Drop the
DiscoverResult(server_info=...) kwargs the reshaped model silently
ignored, and correct the tests/_stamp.py docstring to match the new
direct usage.

No-Verification-Needed: test-only change
2026-08-16 12:57:05 +00:00
Max Isbey e0c184f37f Reconcile the interaction suite with main's httpx2 rename and re-drive the era-gate test through the public request seam
Port the branch-authored httpx/httpx_sse lines main's rename never saw to
httpx2, including the four aconnect_sse readers in the modern hosting
tests, and delete the dead httpx_sse import. Drive the 2026
resources/subscribe era-gate test through ClientSession.send_request
instead of the deprecated typed subscribe wrapper.
2026-08-16 12:57:05 +00:00
Max Isbey 12169d88ef Reconcile with the hardened dual-era stream loop
The push-API prohibition is now enforced locally on every modern dispatch
path: the request-scoped in-memory leg no longer transmits the forbidden
frame, so its test flips from pinning the transmitted-and-refused shape to
asserting the typed local NoBackChannelError, and the divergence record is
removed — every constructible 2026 arm now refuses locally. The stdio
serving entry's era-lock description is updated to the landed semantics:
the era settles on the first era-distinctive frame to reach a
client-visible success, no failure locks, and a cancelled-away success
does not lock.
2026-08-16 12:57:05 +00:00
Max Isbey 461e34e07b Rewrite the unrecognized-resultType pin onto the extension seam; simplify four tests
The server extension API can now author an arbitrary resultType through
public surface, so the scripted memory-stream peer is replaced with an
MCPServer extension driven through the connect fixture (one node becomes
the entry's two cells). The parallel-MRTR isolation test drops its wire
recording for handler capture (the rendezvous still forces interleaving),
the GET-stream step-up shim moves into the auth harness beside its POST
twin, a redundant metadata shim argument goes away, and the claimed-shape
extension test pins its ValidationError by structured fields instead of
accepting any validation failure.
2026-08-16 12:57:05 +00:00
Max Isbey 0875dbb926 Re-ground deferral premises and stale notes against the current main
The merge window landed the listen server runtime, the client response
cache, requestState integrity, stream-pair 2026 serving, and the client
extension API — invalidating the premises of ~45 deferral texts and notes
written against the older base. Each text now states what is true at this
pin: entries whose blocking surface landed flip to 'Not yet covered here'
naming what a test will drive; entries still blocked name the precise
missing surface. Also fixes the README era-lock line (stateless is locked
too), documents the default-on client cache in the transport-matrix
section, and renames one resource test whose name predated its retarget.
2026-08-16 12:57:05 +00:00
Max Isbey 536a75db43 Re-pin the negative-ttl and Mcp-Param mismatch tests to the landed behaviour
The client now clamps a negative inbound ttlMs to 0 before validation, and
the modern HTTP entry validates Mcp-Param-* headers against the tool's
advertised schema. Both tests flip from pinning the old gap to asserting
the spec-mandated outcome, and their divergence records are removed.
2026-08-16 12:57:05 +00:00
Max Isbey 762cf8ff16 Trim comments and docstrings to the essentials
Cut the comment and docstring volume of the new tests by half: docstring
first lines are single short sentences, narration and restating-the-code
comments are gone, and surviving comments carry only what the code cannot
say - provenance labels, the divergence re-pin instructions, and the
non-obvious traps (coverage branch quirks, opaque-state shape). No code or
assertion changes: every file parses identically with docstrings stripped.
2026-08-16 12:57:05 +00:00
Max Isbey e640e0e7c4 Re-ground the MRTR origin notes after the MCPServer pass-through landed
MCPServer now passes InputRequiredResult through its prompt and resource
pipelines, so the two origin entries' notes and the matching test
docstrings no longer claim it cannot; the mcpserver mirrors are recorded
as possible and not yet covered. No behaviour or assertion changes - the
full suite is green unchanged against current main.
2026-08-16 12:57:05 +00:00
Max Isbey 7d5bbcb630 Link the last two pinned divergences to their tracking entries
The unrecognized-resultType and scope-aggregation divergences gained
tracking entries after their pins landed; wire the issue fields so the
fixer trail is complete for every pinned divergence in the manifest.
2026-08-16 12:57:04 +00:00
Max Isbey 69d8854843 Complete the planned 2026-07-28 coverage: the final 27 tests
JSON Schema handling: prefixItems vocabulary enforcement, the 2020-12
default dialect (with a declared-dialect violation arm proving validation
follows the tag), falsy structured content reaching the validator, and
non-object outputs - plus the null structured-content divergence: a tool
legitimately returning JSON null is indistinguishable from one returning
nothing (the model collapses both to None and the dump drops them), so a
spec-legal value raises; pinned with the fix direction recorded
(absent-vs-null at the model layer, not a looser client check).

MRTR edges: a retry missing a requested key is re-prompted rather than
errored, unknown response keys are ignored, the resultType seam (absent
means complete, input_required is never masked, unrecognized values
rejected - flipping the deferred entry to a pinned divergence), and the
max-tokens pass-through. Auth: refresh tokens are not reused across an AS
change, CIMD documents are portable, the all-scopes single challenge, and
the bundled AS registration echo dropping application_type (pinned against
its ledger row). The scatter: list results are connection-independent and
deterministically ordered, an empty-string cursor is a valid cursor (a
2026 rule the changelog never mentioned), cancellation stops notification
delivery, SSE comment lines are ignored, legacy error codes pass through
opaquely, sampling messages are not retained across rounds, multi-content
reads, path-traversal rejection, and resource links in prompt content.

26 entries minted, one flipped, four divergences recorded. 946 -> 1009
cells, every node accounted; suite green three consecutive runs.
2026-08-16 12:57:04 +00:00
Max Isbey c7a1d47cc2 Track the full deferred surface: 64 entries registered ahead of their capability
Every behaviour the analysis identified that the SDK cannot yet express now
has a manifest entry with a deferral stating exactly what is missing at this
commit: the subscriptions/listen runtime family (types vendored, runtime
absent, all carrying the greppable re-open token), the requestState
integrity obligations (application-owned, the SDK passes opaque state
through), the extension declaration surface, the legacy 2025 jsonschema wrap
family (era-bound to the cells where it applies), the hosting-side auth
surfaces, stdio-2026 service, and the cross-AS credential obligations
(m2m credentials re-spelled into the as-binding family, targeting the spec
obligation rather than another SDK's knob).

Deferral reasons are re-grounded at this commit - no stale premises, no PR
numbers, no internal references; two stale source attributions upgraded to
the spec URLs that carry the requirement verbatim. Cells unchanged (946):
deferred entries register coverage debt without running anything.
2026-08-16 12:57:04 +00:00
Max Isbey 9156a55a68 Pin the pre-registered-credentials divergence and the DCR application_type pass-through
Pre-registered credentials bound to a different issuer are silently
discarded and re-registered - the path the spec blesses only for
DCR-persisted credentials; for manually provisioned ones it says an error
should surface. The new test pins the silent replacement (flow completes,
no error, the seeded credential never presented, storage rebound to the
current AS) under a recorded divergence scoped to the issuer-stamped arm;
the unbound arm is a documented limitation in the entry note, since a
mismatch cannot be detected for credentials that never recorded a binding.

A consumer-set application_type of web on a loopback redirect - a value
the derivation heuristic would never produce - reaches the /register body
verbatim, distinguishing pass-through from any future heuristic.

Also: the last caching deferral gains its greppable re-open token, the
omit_iss precedence is documented in the harness, and the app-type
heuristic note cross-references its tested override sibling. 944 -> 946
cells; suite green three runs.
2026-08-16 12:57:04 +00:00
Max Isbey f77910e56d Cover the auth families: the RFC 9207 iss table, step-up bounds, DCR and refresh
The full iss validation table from the 2026 authorization-response rules:
match accepted, trailing-slash difference rejected without normalization
(both comparison strings pinned as harness literals so server-side issuer
serialization changes cannot invert the test), missing-iss rejected when
advertised and tolerated when not, an unadvertised-but-present iss still
validated, and an error redirect with a mismatched iss rejected on iss
before the missing-code error - the ordering that proves validation applies
equally to error responses.

Step-up bounds: a second insufficient-scope 403 after one step-up surfaces
as an error without another authorize round trip, and a 403 on the GET
stream open steps up and reopens with the upgraded token (era-bound: the
GET stream is removed at 2026-07-28). DCR defaults (grant_types omitted and
passed through verbatim), refresh-token rotation handling at the
single-refresh seam (replacement stored, preservation honoured when the
server does not rotate), and a non-2xx token response surfacing typed.

The as-binding entry splits into its two spec obligations (re-register and
no-credential-reuse), both decorating the existing test unchanged. Harness:
three small review-approved knobs (iss visibility, code override, persistent
step-up shim, non-rotating provider). 16 entries minted (13 tested, 3
deferred), 931 -> 944 cells exact; suite green three runs.
2026-08-16 12:57:04 +00:00
Max Isbey 7d65d6e6dd Cover the caching and discover-versioning families: 17 tests
SEP-2549 server-side caching: cache hints pass through unmodified on
prompts, resource-template, and discover results (the discover hints were
previously pinned nowhere); ttlMs zero means immediately stale; absent
hints default per the 2025 rules on the legacy cells; the interim
input_required frame carries no hints while the same exchange's complete
result does. Two recorded divergences: cross-page cacheScope consistency
is delegated to handler authors (the spec MUST binds the server), and a
negative ttlMs raises a validation error where the spec says clients
should ignore-as-zero - the divergence note records that emission-side
strictness is correct and only the inbound parse should clamp.

Discover and versioning: instructions and derived capabilities ride
DiscoverResult (with vacuity guards against silent legacy fallback), auto
mode probes before negotiating, era-cached results are reused identically,
the -32022 supported-list retry, dual-era precedence, and the era method
gate - a 2025 method on a 2026 connection is method-not-found before any
handler lookup, proven by a registered handler that never runs.

27 entries minted (13 tested, 14 deferred with greppable re-open tokens),
3 flips. 910 -> 931 cells, all accounted; suite green three runs.
2026-08-16 12:57:04 +00:00
Max Isbey d20645e285 Backlog hardening: complete the push-API divergence matrix and sharpen three tests
Add the HTTP request-scoped loud-fail test, completing all four legs of the
push-API divergence record (both transports x both legs). Add the missing
templates/list decorator on the static-and-templated listing test. Redesign
the post-connect registration fixture to mutate the tool set between
requests rather than from inside a handler, so the fixture itself no longer
violates the 2026 list-stability requirement on live cells. Assert that an
iss-mismatch rejection never exchanges the authorization code (with a
liveness guard on the recorded /token calls). 909 -> 910 cells.
2026-08-16 12:57:04 +00:00
Max Isbey 24f2d967fc Cover the x-mcp-header and modern HTTP entry families: 19 tests
The SEP-2243 header derivation pipeline gets full coverage: static
definition validation with per-tool eviction and the logged warning (RFC
9110 token rule, control characters, case-insensitive duplicates, the
number type the spec now forbids, items/nested-properties reachability),
the base64 sentinel encoding both ways including the collision-escape row
from the spec's own table, null/absent argument omission, and the
Mcp-Method/Mcp-Name mismatch rejections (400, -32020). The known
server-side gap - Mcp-Param-* values are not validated against the body -
is pinned as a divergence carrying issue=L110 with the recognized-header
judgement call recorded so the fix re-pins under either shape.

The modern entry itself: response modes, lazy SSE upgrade, cacheable
stamping, disconnect cancellation, header validation arms, and the
initialize-removed rejections.

28 entries minted (23 tested, 5 deferred), one flip, and the ledger riders:
issue=L109 on the three embed-gate divergences, issue=L107 on the push-API
pin. 876 -> 909 collected cells, all accounted; suite green three runs.
2026-08-16 12:57:04 +00:00
Max Isbey 88dedc5cb7 Complete the MRTR core coverage: multi-round, bounds, and the 2026 directionality pins
Ten more tests: the multi-round completion loop, the rounds cap, the
at-least-one-of construction-site rejection, the inputResponses structural
validation and key correspondence, the -32042 emission-ban wire scan, and
the 2026 directionality edges - the push-API loud-fail split (the standalone
leg pins NoBackChannelError green on both 2026 cells; a dedicated in-memory
test pins the request-scoped leg still transmitting the forbidden frame,
recorded as a per-transport, per-leg divergence so the eventual era-gate fix
re-pins mechanically), a wire-trace proof that a 2026 exchange contains no
server-initiated requests and no client-sent responses, and the sampling and
roots embed capability gates (both pinned un-gated with recorded
divergences, completing the embed-gate family).

Five entries flip from deferred, five origin-new entries are minted with
their tests. 859 -> 876 collected cells, every node accounted; suite green
three consecutive runs.
2026-08-16 12:57:04 +00:00
Max Isbey 2456c279f5 Add the first MRTR interaction tests: 16 tests across six files
The multi-round-trip request pattern (SEP-2322, the 2026-07-28 replacement
for server-initiated requests) gets its first end-to-end coverage:

- lowlevel/test_mrtr.py (new): the write-once roundtrip (byte-exact
  requestState echo, opacity via a non-parseable state, fresh JSON-RPC id on
  retry), state-only retry, omit-when-absent, and parallel-call isolation
  via a symmetric rendezvous that provably holds both loops mid-flight.
- test_elicitation.py: form-mode elicitation over MRTR (basic, decline,
  cancel, schema primitives) and the capability gate, which pins the
  current un-gated embed behaviour with a recorded divergence.
- test_resources.py / test_prompts.py: the resources/read and prompts/get
  MRTR origins (lowlevel-only; MCPServer admits InputRequiredResult on the
  tools path only).
- test_sampling.py / test_roots.py: sampling/createMessage and roots/list
  embedded as MRTR input requests, with model preferences, system prompt,
  and context-inclusion pass-through.

Seventeen requirement entries flip from deferred to tested; five entries
are minted (the request-state client obligations and the two non-tools
origins). 830 -> 859 collected cells, every new cell accounted; suite green
three consecutive runs; 100% line and branch on the new file with no
coverage pragmas.
2026-08-16 12:57:04 +00:00
Max Isbey 2ac6e90afa Model the 2025-11-25 to 2026-07-28 transition as first-class manifest data
Execute the era/supersession pass: 37 new successor entries (the MRTR family
that replaces server-initiated requests, the per-request log-level pair, the
subscriptions/listen family, discover-side successors), all registered
deferred ahead of their tests; 82 existing entries edited - version-wide
2026 arm exclusions on era-retired behaviours become removed_in with a
superseded_by link and an explanatory note (transport-shaped exclusions
stay), no-heir removals get tombstone notes, and the per-request logLevel
divergence is recorded on the three logging entries whose tests pin un-gated
delivery on live 2026 cells. 62 supersession pairs, all bidirectional and
versioned, enforced by the coverage gate at import. The twelve surviving
version-wide exclusions are exactly the documented re-admission checklist.
Cells unchanged (830 before and after).
2026-08-16 12:57:04 +00:00
Max Isbey d5caf2dd71 Make interaction-manifest behaviour strings match what their tests prove
Sixteen fixes on sixteen entries, each evidenced against the bound test body
or the spec text: narrow over-claiming strings to the assertions that exist
(403-scope-upgrade's unproven no-loop clause, iss mismatch-only coverage,
tools-only registration, arrival-only HTTP notification delivery, the
custom-client auth clause), correct two entries that attributed the modern
classifier's version rejection to the legacy transport, record the 2026
per-request logLevel gate divergence on the Context logging helper and the
list-vs-object structured-content gap on text-mirror, re-ground the null-id
deferral on the now-existing fault channel, and fix the discover result
field name (supportedVersions) plus the 404 status the spec mandates for
initialize at the modern entry. Cells unchanged (830 before and after).
2026-08-16 12:57:04 +00:00
Max Isbey 1379c379e7 Retire three redundant interaction-manifest entries; era-bound a fourth
client-transport:http:protocol-version-stored and
transport:streamable-http:origin-validation were second labels on assertions
their tests already pin under client-transport:http:protocol-version-header
and hosting:http:dns-rebinding respectively (decorators removed, tests kept).
lifecycle:stateless:no-initialize described a pin API that no longer exists,
deferred against coverage that does not exist, and bound no tests.

transport:streamable-http:server-to-client is NOT deleted: the underlying
behaviour is real 2025-era wire truth that 2026 forbids (SEP-2322), so it
gets removed_in="2026-07-28" with the supersession note; the MRTR successor
link lands with the era pass. Cells unchanged (830 before and after).
2026-08-16 12:56:34 +00:00
Max Isbey 437da68234 Align interaction-manifest ids with the cross-SDK vocabulary
Rename 14 requirement ids to the names shared with the typescript-sdk e2e
suite (sampling:create:*, elicitation:url:action:*, protocol:meta:*, the
client-auth stepup/iss/scope/dcr family, the mcpserver context helpers),
updating every @requirement decorator to match.

The resources:read:unknown-uri name previously sat on an entry whose test
proves lowlevel handler-error passthrough, not the unknown-resource rule;
that entry is re-described honestly as protocol:error:handler-error-
passthrough (source 'sdk'), and the real unknown-resource entry (-32602 with
the URI in error.data, SEP-2164) takes the vacated name with its source
repointed to the 2026 page that mandates it.

The protocol:meta:request-to-handler 2026 arm exclusion now carries the
accurate reason (legacy-only-vocabulary) and a note explaining the envelope-
key merge that breaks the equality assertion, so the re-admission checklist
finds it. Three test docstrings quoting pre-rename spec anchors updated.
Cell generation unchanged (830 before and after).
2026-08-16 12:56:34 +00:00
Max Isbey cbb6e3b546 Fix dead 2026 spec source URLs in the interaction manifest
Eight entries cited pages or anchors that do not exist in the 2026-07-28
specification tree (the basic/lifecycle page was split into basic/versioning
and server/discover; two anchors were renamed). Repoint each to the verified
live section. Also add the missing added_in="2026-07-28" on
client-auth:authorization-response:iss-verify: RFC 9207 iss validation is
SEP-2468, new at 2026-07-28, and the prior 2025 source page carries no such
requirement. Cell generation is unchanged (830 before and after).
2026-08-16 12:56:34 +00:00
Max 5285e936a9 Pin text I/O to UTF-8 and fail CI on locale-dependent reads/writes (#3296)
Co-authored-by: ShuQingDollarVoyager <57471784+ShuQingDollarVoyager@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-16 12:41:53 +01:00
Max 52ad0a8876 docs: publish translated docs in twelve languages and the tool that maintains them (#3280) 2026-08-14 17:07:34 +01:00
Max 14aa889992 Pin each conformance leg to a spec-revision wire (#3304) 2026-08-14 13:39:06 +01:00
ShuQingDollarVoyager 2378e560fb Read UTF-8 test fixtures with explicit encoding (#3245)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 11:08:55 +01:00
Max 6e304527a5 Bump conformance harness to 0.2.0-alpha.11 (#3282) 2026-08-11 15:40:21 +01:00
Max a4f4ccd091 Link the released 2026-07-28 spec and point migrators at /v1/ (#3214) 2026-07-29 15:01:27 +01:00
Max fe47969fb9 Ask which release line a bug report is on (#3213) 2026-07-29 14:55:15 +01:00
Max d82ed88eb5 Describe the maintenance line without hardcoding 1.28 (#3212) 2026-07-29 14:54:45 +01:00
Max b31ddf37ed Retire wording tied to pre-2.0 milestones (#3211) 2026-07-29 14:54:23 +01:00
Max 6f69a3758e Present v2 as the stable release across the README, docs, and policies (#3178)
Conformance Tests / server-conformance (push) Has been cancelled
Conformance Tests / client-conformance (push) Has been cancelled
Deploy Docs / deploy-docs (push) Has been cancelled
GitHub Actions Security Analysis / zizmor (push) Has been cancelled
CI / checks (push) Failing after 1s
CI / all-green (push) Has been cancelled
v2.0.0
2026-07-28 14:31:36 +01:00
Max 78e6fbb7e4 Serve v2 docs at the site root, with permanent per-major paths (#3176) 2026-07-28 13:57:21 +01:00
Max af06330a31 Remove unused StreamableHTTPTransport.get_session_id() (#3205) 2026-07-28 13:55:02 +01:00
Max 68ca87e20b Document the two-line release process for stable v2 (#3179) 2026-07-28 13:51:31 +01:00
Max c9c431b71a Expose the middleware chain on MCPServer and stop sending unrequested change notifications (#3201) 2026-07-28 12:24:23 +01:00
Max 528e366558 Fail fast on server-to-client requests in JSON-response mode instead of hanging (#3195) 2026-07-28 11:04:51 +01:00
Max 27f5cc7a46 Remove unused mcpserver.exceptions.ValidationError (#3199) 2026-07-28 10:25:51 +01:00
Max 89c5e700f2 Gate log notifications on the per-request log-level opt-in at 2026-07-28 (#3198) 2026-07-28 02:20:33 +01:00
Max b61ce388dd docs: fix off-by-one hl_lines in apps.md (#3196) 2026-07-28 00:04:57 +01:00
Max b7c9a916d6 Add mcp.types as a permanent alias for mcp_types (#3190) 2026-07-27 23:47:04 +01:00
Max 923341c98a Stop answering cancelled requests (#3188) 2026-07-27 23:26:00 +01:00
Max e8ef138153 docs: fill migration-guide gaps found by automated v1-to-v2 migration runs (#3187) 2026-07-27 23:17:17 +01:00
Max d3ffe87960 Split the registration request model from the registered-client record (#3181) 2026-07-27 23:11:01 +01:00
Max b9422f1c9b Make the per-version wire packages private (mcp_types._v*) (#3191) 2026-07-27 22:16:48 +01:00