Skip to content

fix: align MCP 2026 transport interoperability - #40

Merged
MaazAhmed47 merged 2 commits into
mainfrom
agent/mcp-2026-sdk-interoperability
Jul 29, 2026
Merged

fix: align MCP 2026 transport interoperability#40
MaazAhmed47 merged 2 commits into
mainfrom
agent/mcp-2026-sdk-interoperability

Conversation

@MaazAhmed47

@MaazAhmed47 MaazAhmed47 commented Jul 29, 2026

Copy link
Copy Markdown
Owner

Scope

This draft repairs and verifies Interlock's deliberately scoped MCP 2026-07-28 transport profile. It does not claim full MCP 2026 support or protection for direct MCP connections that bypass the gateway.

Pinned authoritative inputs:

  • MCP specification release 2026-07-28, commit 5f5440bb26a62e2cf3440b92da5a667efa03b267
  • Python SDK mcp==2.0.0, commit 6f69a3758ebf2ee55ce050f58b470ce11af71133, wheel SHA-256 1cb4c75d2d2c7b8c1d756355e5d82a39f2822cc7f13e22a2051d7ca3592349d6
  • TypeScript client/server 2.0.0, commit cc4b41617ce3601b1290d67216ea0b194a3cd9ac, with npm integrity values recorded in the compatibility matrix
  • Conformance 0.2.0-alpha.10, commit a9896553900a2ef61787b57adfcbbe936a8ab1f9, as supplemental evidence only

Findings and fixes

  • The official specification now has a separate non-prerelease 2026-07-28 release. The old RC status and Python b2 incompatibility are historical, not the current SDK result.
  • The outbound modern adapter accepted malformed JSON-RPC envelopes and missing or invalid required cache metadata. It now rejects those responses, invalid optional identity metadata, and unsupported response media types without downgrade.
  • Header/body protocol-version conflicts returned the unsupported-version error. They now return the specified header-mismatch error while matching unsupported versions remain rejected separately.
  • Unknown or unavailable tools were represented as tool execution failures. They now produce a generic protocol error before upstream execution without exposing eligibility state.
  • SDK wire probes retain an allowlisted structural view only; arguments, request IDs, client-info values, capability contents, credentials, unknown metadata, and response bodies are not retained.
  • No duplicate serverInfo, SDK fingerprint, User-Agent branch, legacy fallback, required-capability tool, or production SDK dependency was added.

Interoperability evidence

  • Python mcp==2.0.0, automatic discovery: server/discover, tools/list, and tools/call passed against Interlock.
  • Python mcp==2.0.0, explicit 2026-07-28: tools/list, tools/call, and no-fallback rejection passed. This SDK mode adopts the pinned version without discovery.
  • TypeScript client 2.0.0, explicit pin: discovery, list, call, identity parsing, and no-fallback rejection passed.
  • Interlock explicit modern profile against TypeScript server 2.0.0 with legacy rejection and JSON responses: discovery, list, call, exact headers, and per-request metadata passed.
  • Legacy upstream byte-shape regression, malformed response rejection, pagination containment, unsupported parameter-header containment, and gateway identity stamping passed.
  • Alpha conformance result: 21 successes, 4 failures for absent scenario diagnostic tools, and 5 subscription skips. One absent diagnostic tool is the required-client-capability probe. Interlock currently declares no capability-gated tool, so -32021 remains unimplemented and unexercised. This is not a conformance-suite pass.

Unsupported behavior remains unadvertised and fail-closed: SSE response parsing, pagination, MRTR/input-required, subscriptions, tasks, and x-mcp-header forwarding. Required-client-capability behavior and -32021 are unsupported/unimplemented rather than claimed supported.

Verification

  • Focused SDK/profile/eligibility suite: 42 passed
  • Full pytest with both official SDK probes and alpha conformance probe enabled: 1,789 passed, 126 skipped, 6 xfailed, 4 warnings
  • PostgreSQL-gated suite on disposable PostgreSQL 16.14: 131 passed, 0 skipped, 3 warnings
  • Changed-Python Black: PASS, 5 files
  • Changed-Python Ruff: PASS, 5 files
  • Targeted mypy: PASS, 3 Python files
  • compileall: PASS
  • Node syntax checks: PASS, 2 fixtures
  • Prettier: PASS, 2 fixtures
  • git diff --check: PASS
  • Secret and artifact sanitization scan: PASS

With INTERLOCK_TEST_DATABASE_URL set to a disposable PostgreSQL 16 database, the exact 131-test selection is:

python -m pytest -q tests/test_policy_postgres_boolean.py tests/test_audit_chain_concurrency.py::test_concurrent_replica_appends_cannot_fork_the_chain tests/test_postgres_api_key_revocation.py tests/test_postgres_audit_v3.py tests/test_postgres_ci_boundary_review_gate.py tests/test_postgres_obsolete_api_key_credential_compatibility.py tests/test_postgres_rebaseline_cas.py tests/test_postgres_registry_migration.py tests/test_postgres_usage_boolean.py

This selection comprises five Postgres-adapter boolean regressions, both parametrized real-Postgres concurrent-replica cases, and the seven environment-gated Postgres files. It does not include unrelated schema-conversion unit tests to inflate the database count.

No production dependency or configuration changed. No production deployment occurred. An automatic Vercel preview exists for the branch; production remains unchanged.

@vercel

vercel Bot commented Jul 29, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
interlock-web Ready Ready Preview, Comment Jul 29, 2026 4:09pm

@MaazAhmed47
MaazAhmed47 marked this pull request as ready for review July 29, 2026 16:34
@MaazAhmed47
MaazAhmed47 merged commit d937314 into main Jul 29, 2026
8 checks passed
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