Skip to content

Tracking: 2026-07-28 spec conformance #977

Description

@DaleSeo

Epic tracking issue for reaching 100% conformance on the 2026-07-28 spec suite before the spec release on 2026-07-28.

Per-item status lives in the sub-issues below. The epic now links 31 work items: 28 dated-protocol implementation and conformance issues in the 2026-07-28 spec milestone, plus three extension work items tracked separately from the tier-scored core suite. All carry the 2026-07-28 label. The milestone adds the due date, while this epic provides context and discussion. Conformance-gap issues carry failing check IDs and a repro command. The public roadmap is ROADMAP.md.

Current snapshot

Measured by release CI on 2026-07-23 at main e660b80 (tagged rmcp-v3.0.0-beta.1) with @modelcontextprotocol/conformance@0.2.0-alpha.9:

  • Server: 40/40 scenarios passing (114/114 checks)
  • Client: 32/32 scenarios passing (380/380 checks)

Movement since the 2026-07-22 snapshot:

For reference, the 2025-11-25 suite (0.1.16, npm latest) passes 100% on both server (30/30 + pending scenarios) and client (18/18 + legacy auth/2025-03-26-*).

Note that the 2026-07-28 suite is a per-version scenario set, not additive: 36 scenarios are shared with 2025-11-25, 36 are new, and 14 scenarios are dropped (initialize, ping, logging-set-level, resources-(un)subscribe, sse-retry, … — removals driven by SEP-2575/SEP-2577).

Extension coverage (informational)

Extension conformance is reported separately from the dated core 40-server / 32-client scenario suites. #1019 keeps these gaps visible in CI:

Full scenario matrix (snapshot, 2026-07-23)

Snapshot of the release CI run at main e660b80 with 0.2.0-alpha.9 — regenerate with the commands below rather than hand-editing. Live per-item status is in the sub-issues.

Server — 40/40 passing
ScenarioNew in 2026-07-28ChecksStatusTracking
completion-complete1/1
tools-list2/2
tools-call-simple-text1/1
tools-call-image1/1
tools-call-audio1/1
tools-call-embedded-resource1/1
tools-call-mixed-content1/1
tools-call-error1/1
tools-call-with-progress1/1#980#1005
server-sse-multiple-streams1/1
resources-list1/1
resources-read-text1/1
resources-read-binary1/1
resources-templates-read1/1
prompts-list1/1
prompts-get-simple1/1
prompts-get-with-args1/1
prompts-get-embedded-resource1/1
prompts-get-with-image1/1
dns-rebinding-protection2/2
json-schema-2020-127/7#1003#1018
sep-2164-resource-not-found🆕3/3
caching🆕7/7
http-header-validation🆕13/13
http-custom-header-server-validation🆕9/9✅ (was 0/5)#979#997
server-stateless🆕30/30#869#973/#995/#1000; #1004 closed
input-required-result-basic-elicitation🆕2/2
input-required-result-basic-sampling🆕2/2
input-required-result-basic-list-roots🆕2/2
input-required-result-request-state🆕2/2
input-required-result-multiple-input-requests🆕2/2
input-required-result-multi-round🆕3/3
input-required-result-missing-input-response🆕1/1
input-required-result-non-tool-request🆕2/2
input-required-result-result-type🆕1/1
input-required-result-unsupported-methods🆕1/1
input-required-result-tampered-state🆕1/1
input-required-result-capability-check🆕1/1
input-required-result-ignore-extra-params🆕1/1
input-required-result-validate-input🆕2/2
Client — 32/32 passing

Check counts vary slightly between runs (the mock emits some checks conditionally); statuses are stable.

ScenarioNew in 2026-07-28ChecksStatusTracking
tools_call1/1#1002#1022
request-metadata🆕5/5#981#995
auth/metadata-default13/13
auth/metadata-var114/14
auth/metadata-var214/14
auth/metadata-var313/13
auth/basic-cimd12/12
auth/scope-from-www-authenticate14/14
auth/scope-from-scopes-supported14/14
auth/scope-omitted-when-undefined14/14
auth/scope-step-up30/30#877#888/#1022
auth/scope-retry-limit12/12
auth/token-endpoint-auth-basic18/18
auth/token-endpoint-auth-post18/18
auth/token-endpoint-auth-none18/18
auth/pre-registration10/10✅ (was 5/6)#984#994
auth/resource-mismatch🆕2/2
auth/offline-access-scope🆕12/12#1001#1008
auth/offline-access-not-supported🆕14/14#1001#1008
auth/authorization-server-migration🆕31/31#879#998/#1011
auth/iss-supported🆕14/14#1001#1008
auth/iss-not-advertised🆕14/14#1001#1008
auth/iss-supported-missing🆕8/8#1001#1008
auth/iss-wrong-issuer🆕8/8#1001#1008
auth/iss-unexpected🆕8/8#1001#1008
auth/iss-normalized🆕8/8#1001#1008
auth/metadata-issuer-mismatch🆕3/3✅ — #996 verified#983#996/#1008
sep-2322-client-request-state🆕5/5
http-standard-headers🆕3/3#978#1012
http-custom-headers🆕18/18#978#1012
http-invalid-tool-headers🆕11/11#978#1012
json-schema-ref-no-deref🆕1/1✅ (was timeout)#1001#1008

Running the suites

The 2026-07-28 suite uses the stateless discovery lifecycle for its server scenarios. Since #999, requests negotiating that version are served statelessly even when legacy session mode is enabled; STATELESS=1 remains useful to make the conformance harness intent explicit. Pass --suite all on the server run too — the default "active" suite skips scenarios including server-stateless and caching.

cargo build -p mcp-conformance
STATELESS=1 PORT=8002 ./target/debug/conformance-server &
npx -y @modelcontextprotocol/conformance@0.2.0-alpha.9 server \
--url http://127.0.0.1:8002/mcp --suite all --spec-version 2026-07-28 -o results
npx -y @modelcontextprotocol/conformance@0.2.0-alpha.9 client \
--command ./target/debug/conformance-client --suite all --spec-version 2026-07-28 -o results-client

The suite is still alpha; re-baseline (and diff conformance list --spec-version 2026-07-28) on each version bump.

History

Out of scope here, tracked elsewhere

  • Non-conformance Tier 1 requirements: VERSIONING.md, dependency update policy, documentation coverage (26/48 → 48/48) — see ROADMAP.md
  • v3.0.0-beta.1 shipped via chore: release v3.0.0-beta.1 #964 on 2026-07-23. Stable v3.0.0 and the remaining non-conformance Tier 1 requirements are tracked separately. Migration guide: discussion Migrating to 3.0.0 #969.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions