Skip to content

Commit a8308dc

Browse files
authored
ci: expose extension conformance gaps (#1019)
1 parent 9bf4599 commit a8308dc

4 files changed

Lines changed: 95 additions & 11 deletions

File tree

.github/workflows/conformance.yml

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ jobs:
8585
echo "draft conformance server did not become ready" >&2
8686
exit 1
8787
88-
- name: Run 2026-07-28 server suite
88+
- name: Run 2026-07-28 versioned-spec server suite
8989
run: |
9090
npx -y "@modelcontextprotocol/conformance@${DRAFT_CONFORMANCE_VERSION}" server \
9191
--url http://127.0.0.1:8002/mcp \
@@ -94,6 +94,32 @@ jobs:
9494
--expected-failures conformance/expected-failures-2026-07-28.yaml \
9595
-o conformance-results
9696
97+
# Extension scenarios are excluded by the --spec-version filter and
98+
# are informational for tiering. Run them explicitly so their gaps remain
99+
# visible and newly passing scenarios make the strict baseline fail stale.
100+
- name: Run Tasks extension server suite (informational)
101+
run: |
102+
scenarios=(
103+
tasks-lifecycle
104+
tasks-capability-negotiation
105+
tasks-wire-fields
106+
tasks-request-state-removal
107+
tasks-mrtr-input
108+
tasks-request-headers
109+
tasks-dispatch-and-envelope
110+
tasks-status-notifications
111+
tasks-required-task-error
112+
tasks-mrtr-composition
113+
)
114+
115+
for scenario in "${scenarios[@]}"; do
116+
npx -y "@modelcontextprotocol/conformance@${DRAFT_CONFORMANCE_VERSION}" server \
117+
--url http://127.0.0.1:8002/mcp \
118+
--scenario "$scenario" \
119+
--expected-failures conformance/expected-failures-extensions.yaml \
120+
-o conformance-extension-results
121+
done
122+
97123
- name: Stop conformance servers
98124
if: always()
99125
run: |
@@ -105,7 +131,9 @@ jobs:
105131
uses: actions/upload-artifact@v7
106132
with:
107133
name: conformance-server-results
108-
path: conformance-results
134+
path: |
135+
conformance-results
136+
conformance-extension-results
109137
110138
client:
111139
runs-on: ubuntu-latest
@@ -131,7 +159,7 @@ jobs:
131159
--spec-version 2025-11-25 \
132160
-o conformance-client-results/full
133161
134-
- name: Run 2026-07-28 client suite
162+
- name: Run 2026-07-28 versioned-spec client suite
135163
run: |
136164
npx -y "@modelcontextprotocol/conformance@${DRAFT_CONFORMANCE_VERSION}" client \
137165
--command "$(pwd)/target/debug/conformance-client" \
@@ -140,6 +168,14 @@ jobs:
140168
--expected-failures conformance/expected-failures-2026-07-28.yaml \
141169
-o conformance-client-results/draft
142170
171+
- name: Run extension client suite (informational)
172+
run: |
173+
npx -y "@modelcontextprotocol/conformance@${DRAFT_CONFORMANCE_VERSION}" client \
174+
--command "$(pwd)/target/debug/conformance-client" \
175+
--suite extensions \
176+
--expected-failures conformance/expected-failures-extensions.yaml \
177+
-o conformance-client-results/extensions
178+
143179
- name: Upload results
144180
if: always()
145181
uses: actions/upload-artifact@v7

ROADMAP.md

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
This roadmap tracks the path to SEP-1730 Tier 1 for the Rust MCP SDK.
44

55
Spec 2025-11-25 (suite 0.1.16): Server 100% (30/30) · Client 100% (18/18)
6-
Spec 2026-07-28 (suite 0.2.0-alpha.9): Server 92.5% (37/40) · Client 75.0% (24/32)
6+
Spec 2026-07-28 (suite 0.2.0-alpha.9): Server 97.5% (39/40) · Client 90.6% (29/32)
7+
8+
Extension scenarios are reported separately below because they are
9+
informational and do not count toward SDK tiering.
710

811
---
912

@@ -14,11 +17,20 @@ All 2026-07-28 work carries the `2026-07-28` label and the
1417
Per-scenario conformance status is tracked in the epic issue:
1518
[#977 — Tracking: 2026-07-28 spec conformance](https://github.com/modelcontextprotocol/rust-sdk/issues/977).
1619

17-
### Conformance (baseline 2026-07-13, suite `0.2.0-alpha.9`)
20+
### Versioned-spec conformance (baseline 2026-07-21, suite `0.2.0-alpha.9`)
21+
22+
- Server: 1 expected failure: `json-schema-2020-12`
23+
- Client: 3 expected failures: `tools_call`, `auth/scope-step-up`, and `auth/authorization-server-migration`
24+
- CI: runs the complete `2026-07-28` versioned-spec suites with a strict baseline; an unlisted failure or a listed scenario that starts passing fails the build
25+
26+
### Extension conformance (informational)
27+
28+
Extension-tagged scenarios are excluded by `--spec-version` filters, so CI
29+
runs them in separate server and client steps with
30+
`conformance/expected-failures-extensions.yaml`.
1831

19-
- Server: 3 scenarios (`tools-call-with-progress` stateless behavior, SEP-2243 server-side custom headers, and `server-stateless` — the SEP-2575 discovery/negotiation suite at 2/28 checks)
20-
- Client: 8 scenarios (SEP-2243 headers ×3, `request-metadata`, and 4 single-check auth failures: SEP-2350 step-up, pre-registration, SEP-2352 AS migration, SEP-2468 issuer validation); fixes for SEP-2350 (#888) and SEP-2352 (#965) are already in review
21-
- CI: run the full `--spec-version 2026-07-28` suites (stateless server) instead of hand-picked scenario lists; re-baseline on each draft-suite bump
32+
- SEP-2663 Tasks server: 9 expected failures; `tasks-status-notifications` is currently skipped by the upstream harness; tracked in #868
33+
- Client extensions: `auth/client-credentials-basic` passes; `auth/client-credentials-jwt` and `auth/enterprise-managed-authorization` are expected failures
2234

2335
### Spec features without conformance scenarios
2436

@@ -100,5 +112,5 @@ These extension scenarios are tracked but do not count toward tier advancement:
100112
|---|---|---|
101113
| `auth/client-credentials-jwt` | extension | ❌ Failed — JWT `aud` claim verification error |
102114
| `auth/client-credentials-basic` | extension | ✅ Passed |
103-
| `auth/cross-app-access-complete-flow` | extension | ❌ Failed — sends `authorization_code` grant instead of `jwt-bearer` |
104-
| `tasks-*` | extension | Not yet attempted |
115+
| `auth/enterprise-managed-authorization` | extension | ❌ Failed — scenario is not implemented by the conformance client |
116+
| `tasks-*` | extension | ❌ 9 expected failures · ⏭️ 1 upstream-skipped scenario |

conformance/expected-failures-2026-07-28.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
# Known failures for the pinned 2026-07-28 draft conformance suite
22
# (@modelcontextprotocol/conformance DRAFT_CONFORMANCE_VERSION).
33
#
4-
# The full suites run in CI with `--expected-failures` pointing at this file:
4+
# The full versioned-spec suites run in CI with `--expected-failures` pointing
5+
# at this file. Extension scenarios are filtered out by `--spec-version` and
6+
# tracked separately in `expected-failures-extensions.yaml`.
7+
#
8+
# Within the versioned-spec suites:
59
# - a scenario failing that is NOT listed here fails the build
610
# - a scenario listed here that starts passing also fails the build (stale entry),
711
# so remove it from this list when the underlying issue is fixed.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Known failures for informational extension scenarios in
2+
# @modelcontextprotocol/conformance DRAFT_CONFORMANCE_VERSION.
3+
#
4+
# Extensions are not selected by a `--spec-version` run and do not count toward
5+
# SDK tiering. CI runs them separately so a green versioned-spec suite does not
6+
# hide extension gaps.
7+
#
8+
# This is a strict baseline:
9+
# - an unlisted failure fails the build
10+
# - a listed scenario that starts passing fails the build as a stale entry
11+
#
12+
# When bumping DRAFT_CONFORMANCE_VERSION, review the available extension and
13+
# pending scenarios and update this file deliberately.
14+
15+
server:
16+
# SEP-2663 Tasks Extension, tracked in #868.
17+
# `tasks-status-notifications` is intentionally absent: the upstream check is
18+
# currently skipped, and CI should fail if it becomes active but does not pass.
19+
- tasks-lifecycle
20+
- tasks-capability-negotiation
21+
- tasks-wire-fields
22+
- tasks-request-state-removal
23+
- tasks-mrtr-input
24+
- tasks-request-headers
25+
- tasks-dispatch-and-envelope
26+
- tasks-required-task-error
27+
- tasks-mrtr-composition
28+
29+
client:
30+
# Informational OAuth extension scenarios.
31+
- auth/client-credentials-jwt
32+
- auth/enterprise-managed-authorization

0 commit comments

Comments
 (0)