Skip to content

Commit 38aa78a

Browse files
committed
chore: run full conformance CI suite
the expected failures may need to be updated based on when this merges
1 parent 7d811c4 commit 38aa78a

3 files changed

Lines changed: 56 additions & 44 deletions

File tree

.github/workflows/conformance.yml

Lines changed: 12 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ jobs:
8181
echo "draft conformance server did not become ready" >&2
8282
exit 1
8383
84-
# Run discovery separately until #985 enables the full draft suite.
8584
- name: Run SEP-2575 discovery contract
8685
run: |
8786
endpoint=http://127.0.0.1:8002/mcp
@@ -152,35 +151,14 @@ jobs:
152151
(.error.data.supported | index("2026-07-28") != null)
153152
' /tmp/unsupported-version.json
154153
155-
# Keep this explicit list until the full draft suite is enabled by #985.
156-
- name: Run supported draft server scenarios
154+
- name: Run 2026-07-28 server suite
157155
run: |
158-
for scenario in \
159-
sep-2164-resource-not-found \
160-
caching \
161-
http-header-validation \
162-
http-custom-header-server-validation \
163-
input-required-result-basic-elicitation \
164-
input-required-result-basic-sampling \
165-
input-required-result-basic-list-roots \
166-
input-required-result-request-state \
167-
input-required-result-multiple-input-requests \
168-
input-required-result-multi-round \
169-
input-required-result-missing-input-response \
170-
input-required-result-non-tool-request \
171-
input-required-result-result-type \
172-
input-required-result-unsupported-methods \
173-
input-required-result-tampered-state \
174-
input-required-result-capability-check \
175-
input-required-result-ignore-extra-params \
176-
input-required-result-validate-input \
177-
; do
178-
npx -y "@modelcontextprotocol/conformance@${DRAFT_CONFORMANCE_VERSION}" server \
179-
--url http://127.0.0.1:8002/mcp \
180-
--scenario "$scenario" \
181-
--spec-version draft \
182-
-o conformance-results
183-
done
156+
npx -y "@modelcontextprotocol/conformance@${DRAFT_CONFORMANCE_VERSION}" server \
157+
--url http://127.0.0.1:8002/mcp \
158+
--suite all \
159+
--spec-version 2026-07-28 \
160+
--expected-failures conformance/expected-failures-2026-07-28.yaml \
161+
-o conformance-results
184162
185163
- name: Stop conformance servers
186164
if: always()
@@ -218,21 +196,14 @@ jobs:
218196
--spec-version 2025-11-25 \
219197
-o conformance-client-results/full
220198
221-
# SEP-2322 MRTR client scenario (spec 2026-07-28).
222-
- name: Run draft SEP-2322 client scenario
199+
- name: Run 2026-07-28 client suite
223200
run: |
224201
npx -y "@modelcontextprotocol/conformance@${DRAFT_CONFORMANCE_VERSION}" client \
225202
--command "$(pwd)/target/debug/conformance-client" \
226-
--scenario sep-2322-client-request-state \
227-
-o conformance-client-results/mrtr
228-
229-
- name: Run draft SEP-2575 client scenario
230-
run: |
231-
npx -y "@modelcontextprotocol/conformance@${DRAFT_CONFORMANCE_VERSION}" client \
232-
--command "$(pwd)/target/debug/conformance-client" \
233-
--scenario request-metadata \
234-
--spec-version draft \
235-
-o conformance-client-results/sep-2575
203+
--suite all \
204+
--spec-version 2026-07-28 \
205+
--expected-failures conformance/expected-failures-2026-07-28.yaml \
206+
-o conformance-client-results/draft
236207
237208
- name: Upload results
238209
if: always()
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Known failures for the pinned 2026-07-28 draft conformance suite
2+
# (@modelcontextprotocol/conformance DRAFT_CONFORMANCE_VERSION).
3+
#
4+
# The full suites run in CI with `--expected-failures` pointing at this file:
5+
# - a scenario failing that is NOT listed here fails the build
6+
# - a scenario listed here that starts passing also fails the build (stale entry),
7+
# so remove it from this list when the underlying issue is fixed.
8+
#
9+
# When bumping DRAFT_CONFORMANCE_VERSION, diff
10+
# `conformance list --spec-version 2026-07-28` and update #977.
11+
12+
server:
13+
# SEP-2575 stateless lifecycle gaps: discover capability declaration,
14+
# missing-capability rejection, HTTP 404 for removed methods, and
15+
# diagnostic tools (test_missing_capability, test_streaming_elicitation,
16+
# test_logging_tool) not yet implemented.
17+
- server-stateless
18+
# SEP-2106: composition/conditional/$anchor keywords are stripped from
19+
# published tool input schemas.
20+
- json-schema-2020-12
21+
22+
client:
23+
# Client does not yet send MCP-Protocol-Version header pre-initialize as
24+
# required by the 2026-07-28 stateless lifecycle.
25+
- tools_call
26+
# Auth feature gaps in the 2026-07-28 auth scenarios.
27+
- auth/scope-step-up
28+
- auth/offline-access-scope
29+
- auth/offline-access-not-supported
30+
- auth/authorization-server-migration
31+
- auth/iss-supported
32+
- auth/iss-not-advertised
33+
- auth/iss-supported-missing
34+
- auth/iss-wrong-issuer
35+
- auth/iss-unexpected
36+
- auth/iss-normalized
37+
- auth/metadata-issuer-mismatch
38+
# SEP-2243 client-side header handling gaps.
39+
- http-standard-headers
40+
- http-custom-headers
41+
- http-invalid-tool-headers
42+
# SEP-2106 client-side: $ref must not be dereferenced.
43+
- json-schema-ref-no-deref

conformance/src/bin/server.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1228,9 +1228,7 @@ async fn main() -> anyhow::Result<()> {
12281228

12291229
let server = ConformanceServer::new();
12301230
let stateless = std::env::var_os("STATELESS").is_some();
1231-
let config = StreamableHttpServerConfig::default()
1232-
.with_stateful_mode(!stateless)
1233-
.with_json_response(stateless);
1231+
let config = StreamableHttpServerConfig::default().with_stateful_mode(!stateless);
12341232
let service = StreamableHttpService::new(
12351233
move || Ok(server.clone()),
12361234
LocalSessionManager::default().into(),

0 commit comments

Comments
 (0)