Skip to content

feat(sdk-runner): add rust-sdk + per-spec-version config overlays - #419

Merged
pcarleton merged 5 commits into
mainfrom
paulc/sdk-runner-rust
Jul 28, 2026
Merged

feat(sdk-runner): add rust-sdk + per-spec-version config overlays#419
pcarleton merged 5 commits into
mainfrom
paulc/sdk-runner-rust

Conversation

@pcarleton

@pcarleton pcarleton commented Jul 27, 2026

Copy link
Copy Markdown
Member

Two related additions to the sdk-runner:

1. rust-sdk in KNOWN_SDKS. The mcp-conformance package's conformance-client / conformance-server bins follow the harness contract directly (server URL argv + MCP_CONFORMANCE_SCENARIO env), so no command bridging is needed. The server reads PORT and STATELESS from the environment. Verified end-to-end at --spec-version 2026-07-28: client 333/336 checks (30/32 scenarios), server 112/113 (39/40) — the remaining failures are the pre-spec-#3002 discover shape plus SEP-2350 scope-step-up.

2. Per-spec-version config overlays (specOverrides). Several entries needed a different invocation when targeting 2026-07-28 — go-sdk's -stateless flag, csharp-sdk's /stateless URL, rust-sdk's STATELESS=1 env, python-sdk's per-revision expected-failures baseline — and each carried a comment telling the caller which flag to paste. Those variants now live in the entry itself:

specOverrides: {
  '2026-07-28': {
    server: { command: './.conformance-server -http=localhost:3000' }
  }
}

The matching overlay is merged over the base entry when a run targets that version (--spec-version, after draft alias resolution, or the entry's own specVersion default), so sdk go-sdk --mode server --spec-version 2026-07-28 is the whole command. Precedence: explicit CLI flag > overlay > base entry. Keys are validated against the known spec versions at schema level, so a draft key or a typo'd date fails loudly instead of silently never matching.

Verified live for all four entries: go starts stateless with no flags at 2026-07-28, rust picks up STATELESS=1 via the draft alias, python auto-selects expected-failures.2026-07-28.yml, and the no-flag control still starts go with -stateless=false.

The mcp-conformance package's fixture bins follow the harness contract
directly (URL argv + MCP_CONFORMANCE_SCENARIO env), and the server
selects the SEP-2575 stateless lifecycle via STATELESS=1. Requires the
repo's pinned Rust toolchain (rustup installs it on demand).
@pkg-pr-new

pkg-pr-new Bot commented Jul 27, 2026

Copy link
Copy Markdown

Open in StackBlitz

npx https://pkg.pr.new/@modelcontextprotocol/conformance@419

commit: 8bbb86f

Several KNOWN_SDKS entries needed a different invocation when targeting
2026-07-28 — go-sdk's -stateless flag, csharp-sdk's /stateless URL,
rust-sdk's STATELESS=1 env, python-sdk's per-revision baseline — and each
carried a comment telling the caller which flag to paste. Encode those
variants in the entry instead: specOverrides maps a canonical spec
version to a partial config that is merged over the base entry when a
run targets that version (--spec-version, after 'draft' alias
resolution, or the entry's own specVersion default). Explicit CLI flags
still win.

Keys are validated against the known spec versions at schema level so a
'draft' key or a typo'd date fails loudly instead of silently never
matching.
@pcarleton pcarleton changed the title feat(sdk-runner): add rust-sdk to KNOWN_SDKS feat(sdk-runner): add rust-sdk + per-spec-version config overlays Jul 27, 2026
…ation

Reuses the canonical spec-version list from #421 instead of keeping a
separate copy; SPEC_VERSION_TIMELINE is now exported so the validation
message can enumerate the valid keys.
@pcarleton
pcarleton merged commit 49103de into main Jul 28, 2026
8 checks passed
@pcarleton
pcarleton deleted the paulc/sdk-runner-rust branch July 28, 2026 09:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant