Upstream Conformance Audit

Scenario-level grading of mcpkit against modelcontextprotocol/conformance@main.

Upstream Conformance Audit

Snapshot of mcpkit graded against modelcontextprotocol/conformance@49103defeat(sdk-runner): add rust-sdk + per-spec-version config overlays (#419).

mcpkit HEAD: 49103de
Driver: cmd/testserver (server scenarios) + cmd/testclient (client scenarios). SEP-2663 tasks-* server scenarios are graded against examples/tasks-v2 instead, which wires ext/tasks in its own module (keeping the root module free of that dependency) — mirroring how testconf-stateless uses examples/stateless.

Informational report — not a CI gate. Regenerate via just testconf-upstream-audit.

Status legend: pass = no FAILURE checks · partial = at least one SUCCESS and one FAILURE · fail = all checks FAILURE · harness-gap = no checks.json produced (driver missing) · fork-covered = same surface graded by an existing testconf-* SEP fork target.

Summary

Surface Scenarios Graded checks Pass Fail Warn Skipped Log rows (info) Harness-gap
Server 61 225 197 19 8 1 6 0
Client 43 546 536 8 0 2 990 0
Total 104 771 733 27 8 3 996 0

Log rows are the harness’s own request/response trace (incoming-request / outgoing-response entries in each scenario’s checks.json) — diagnostic context, not graded assertions.

Harness gaps

None — every scenario produced results.

By SEP

Core / Unattributed (53 scenarios)

Scenario Surface Status Checks Note
auth/2025-03-26-oauth-endpoint-fallback client pass 11 pass / 36 info
auth/2025-03-26-oauth-metadata-backcompat client pass 16 pass / 36 info
auth/authorization-server-migration client pass 31 pass / 48 info
auth/basic-cimd client pass 17 pass / 32 info
auth/iss-normalized client pass 8 pass / 14 info
auth/iss-not-advertised client pass 12 pass / 18 info
auth/iss-supported client pass 12 pass / 18 info
auth/iss-supported-missing client pass 8 pass / 14 info
auth/iss-unexpected client pass 8 pass / 14 info
auth/iss-wrong-issuer client pass 8 pass / 14 info
auth/metadata-default client pass 17 pass / 34 info
auth/metadata-issuer-mismatch client pass 3 pass / 10 info
auth/metadata-var1 client pass 17 pass / 36 info
auth/metadata-var2 client pass 17 pass / 36 info
auth/metadata-var3 client pass 17 pass / 36 info
auth/pre-registration client pass 19 pass / 38 info
auth/resource-mismatch client pass 2 pass / 8 info
auth/scope-from-scopes-supported client pass 18 pass / 34 info
auth/scope-from-www-authenticate client pass 18 pass / 34 info
auth/scope-omitted-when-undefined client pass 18 pass / 34 info
auth/scope-retry-limit client pass 16 pass / 38 info
auth/scope-step-up client pass 24 pass / 46 info
auth/token-endpoint-auth-basic client pass 22 pass / 34 info
auth/token-endpoint-auth-none client pass 22 pass / 34 info
auth/token-endpoint-auth-post client pass 22 pass / 34 info
completion-complete server pass 2 pass
dns-rebinding-protection server pass 2 pass
initialize client pass 1 pass / 1 info
logging-set-level server pass 2 pass
ping server pass 2 pass
prompts-get-embedded-resource server pass 2 pass
prompts-get-simple server pass 2 pass
prompts-get-with-args server pass 2 pass
prompts-get-with-image server pass 2 pass
prompts-list server pass 2 pass
resources-list server pass 2 pass
resources-read-binary server pass 2 pass
resources-read-text server pass 2 pass
resources-subscribe server pass 2 pass
resources-templates-read server pass 2 pass
resources-unsubscribe server pass 2 pass
server-initialize server pass 3 pass
tools_call client pass 2 pass
tools-call-audio server pass 2 pass
tools-call-elicitation server pass 2 pass
tools-call-embedded-resource server pass 2 pass
tools-call-error server pass 2 pass
tools-call-image server pass 2 pass
tools-call-mixed-content server pass 2 pass
tools-call-sampling server pass 2 pass
tools-call-simple-text server pass 2 pass
tools-call-with-logging server pass 2 pass
tools-call-with-progress server pass 2 pass

SEP-986 (1 scenarios)

Scenario Surface Status Checks Note
tools-list server pass 3 pass

SEP-990-ENTERPRISE-MANAGED-OAUTH (1 scenarios)

Scenario Surface Status Checks Note
auth/enterprise-managed-authorization client pass 13 pass / 28 info

SEP-1034 (2 scenarios)

Scenario Surface Status Checks Note
elicitation-sep1034-client-defaults client pass 5 pass / 20 info
elicitation-sep1034-defaults server pass 6 pass

SEP-1046-CLIENT-CREDENTIALS (2 scenarios)

Scenario Surface Status Checks Note
auth/client-credentials-basic client pass 14 pass / 34 info
auth/client-credentials-jwt client pass 12 pass / 28 info

SEP-1330 (1 scenarios)

Scenario Surface Status Checks Note
elicitation-sep1330-enums server pass 6 pass

SEP-1613 (1 scenarios)

Scenario Surface Status Checks Note
json-schema-2020-12 server pass 8 pass

SEP-1699 (3 scenarios)

Scenario Surface Status Checks Note
server-sse-multiple-streams server pass 2 pass
server-sse-polling server pass 3 warn / 6 info
sse-retry client pass 3 pass / 17 info

SEP-1932-DPOP (2 scenarios)

Scenario Surface Status Checks Note
auth/dpop client partial 9 pass / 3 fail / 34 info tracked — Extension category, not tier-scored. SEP-1932 DPoP deferred until the spec exits draft.
auth/dpop-nonce client partial 9 pass / 5 fail / 34 info tracked — Extension category, not tier-scored. SEP-1932 DPoP server-required-nonce variant.

SEP-1933-WORKLOAD-IDENTITY-FEDERATION (1 scenarios)

Scenario Surface Status Checks Note
auth/wif-jwt-bearer client pass 12 pass / 28 info

SEP-2106 (1 scenarios)

Scenario Surface Status Checks Note
json-schema-ref-no-deref client pass 1 pass

SEP-2164 (1 scenarios)

Scenario Surface Status Checks Note
sep-2164-resource-not-found server pass 3 pass / 1 warn

SEP-2207-REFRESH-TOKEN-GUIDANCE (2 scenarios)

Scenario Surface Status Checks Note
auth/offline-access-not-supported client pass 12 pass / 18 info
auth/offline-access-scope client pass 9 pass / 18 info

SEP-2243-CUSTOM-HEADERS (2 scenarios)

Scenario Surface Status Checks Note
http-custom-header-server-validation server partial 1 pass / 5 fail tracked — Server-side x-mcp-header param validation not implemented and cmd/testserver has no annotated tool; scoped in issue 1111, activates when ups…
http-custom-headers client pass 18 pass

SEP-2243-SERVER-VALIDATION (1 scenarios)

Scenario Surface Status Checks Note
http-header-validation server partial 12 pass / 1 fail / 1 warn tracked — The single remaining fail is fail-open on a missing Mcp-Method header, disputed upstream (mcpkit matches the TypeScript SDK). Deliberately n…

SEP-2243 (1 scenarios)

Scenario Surface Status Checks Note
tasks-request-headers server partial 4 pass / 1 fail tracked — Upstream wire-schema validator gap: SEP-2663 task envelopes (resultType task, an extension result absent from the core schema) are validated…

SEP-2243-X-MCP-HEADER (1 scenarios)

Scenario Surface Status Checks Note
http-invalid-tool-headers client pass 11 pass

SEP-2243-STANDARD-HEADERS (1 scenarios)

Scenario Surface Status Checks Note
http-standard-headers client pass 11 pass

SEP-2322 (16 scenarios)

Scenario Surface Status Checks Note
tasks-mrtr-composition server partial 1 pass / 1 fail tracked — Upstream wire-schema validator gap: SEP-2663 task envelopes (resultType task, an extension result absent from the core schema) are validated…
tasks-mrtr-input server partial 3 pass / 1 fail tracked — Upstream wire-schema validator gap: SEP-2663 task envelopes (resultType task, an extension result absent from the core schema) are validated…
input-required-result-basic-elicitation server pass 3 pass
input-required-result-basic-list-roots server pass 3 pass
input-required-result-basic-sampling server pass 3 pass
input-required-result-capability-check server pass 2 pass
input-required-result-ignore-extra-params server pass 2 pass
input-required-result-missing-input-response server pass 2 pass
input-required-result-multi-round server pass 4 pass
input-required-result-multiple-input-requests server pass 3 pass
input-required-result-non-tool-request server pass 3 pass
input-required-result-request-state server pass 3 pass
input-required-result-result-type server pass 2 pass
input-required-result-tampered-state server pass 2 pass
input-required-result-unsupported-methods server pass 2 pass
input-required-result-validate-input server pass 2 pass / 1 warn

SEP-2322-MRTR (1 scenarios)

Scenario Surface Status Checks Note
sep-2322-client-request-state client pass 5 pass

SEP-2549 (1 scenarios)

Scenario Surface Status Checks Note
caching server pass 8 pass

SEP-2575 (3 scenarios)

Scenario Surface Status Checks Note
server-stateless server fork-covered 23 pass / 5 fail / 2 warn Also graded by testconf-stateless · upstream conformance test bug — ServerRejectsUndeclaredCapability checks requiredCapabilities as string-array but SEP-2575 schema says object — mcpkit follows schema. Track…
request-metadata client pass 6 pass / 2 skip
tasks-required-task-error server pass 3 pass

SEP-2663 (6 scenarios)

Scenario Surface Status Checks Note
tasks-capability-negotiation server partial 4 pass / 1 fail tracked — Upstream wire-schema validator gap: SEP-2663 task envelopes (resultType task, an extension result absent from the core schema) are validated…
tasks-dispatch-and-envelope server partial 8 pass / 1 fail tracked — Upstream wire-schema validator gap: SEP-2663 task envelopes (resultType task, an extension result absent from the core schema) are validated…
tasks-lifecycle server partial 8 pass / 1 fail tracked — Upstream wire-schema validator gap: SEP-2663 task envelopes (resultType task, an extension result absent from the core schema) are validated…
tasks-request-state-removal server partial 2 pass / 1 fail tracked — Upstream wire-schema validator gap: SEP-2663 task envelopes (resultType task, an extension result absent from the core schema) are validated…
tasks-wire-fields server partial 3 pass / 1 fail tracked — Upstream wire-schema validator gap: SEP-2663 task envelopes (resultType task, an extension result absent from the core schema) are validated…
tasks-status-notifications server pass 1 skip tracked — Deliberately skipped: the upstream scenario predates subscriptions/listen and awaits its rewrite. mcpkit implements subscriptions/listen (se…

Methodology

  • just testconf-upstream-audit spawns cmd/testserver (Streamable HTTP on port 18099), builds cmd/testclient, then drives upstream’s CLI: node dist/index.js server --url ... --suite all once, and ... client --command ... --scenario <name> per scenario in a loop (sequentially — upstream’s parallel --suite all mode is flaky on the client side). The tasks-* server scenarios are then re-graded against examples/tasks-v2 on a second port (port 18101), replacing the bulk-sweep results.
  • Upstream’s CLI writes one <scenario>/checks.json per scenario; this report aggregates by specReferences[] (first matching SEP-NNNN wins as primary group).
  • Scenarios with no checks.json are tagged harness-gap — they require driver work in cmd/testclient (or a dedicated client harness) before the upstream runner can invoke them.
  • also-covered-by-fork is hand-maintained in scripts/conformance-audit-report.ts (FORK_OVERLAP map). Update there as SEP-fork targets land coverage.
  • Raw per-check JSON lives in ${AUDIT_OUT:-/tmp/conf-audit}/ — inspect there for failure details beyond the first 100 chars shown above.