Early benchmarks: 135/135 trace-seeded replay cells matched across three model families

Release note · 2026-07-31

scholialang-mcp 0.7.0 speaks the MCP 2026-07-28 revision.

The scholialang-mcp integration package now ships a final-stable adapter for the Model Context Protocol's 2026-07-28 spec revision — the stateless, per-request protocol era — while keeping the legacy handshake lifecycle working for every host that still speaks it. One server, both protocol generations, version selection per request, and explicit failures instead of silent fallbacks.

v0.7.0 on GitHub Changelog


What shipped

A final-stable adapter for the stateless protocol era.

The 2026-07-28 revision of the Model Context Protocol retires the session handshake in favor of stateless, per-request semantics: each request declares its protocol version and client capabilities in _meta, discovery happens through a server/discover probe that returns supportedVersions, cache metadata, and server identity, and the legacy lifecycle methods are removed from the modern surface.

v0.7.0 adds that stateless, per-request protocol path alongside the existing legacy handshake path — on both server surfaces: the PyPI wheel (scholialang-mcp serve) and the vendored single-file server bundled in the Claude Code, Codex, and Ollama plugins. Package, MCP/LSP server identities, plugin manifests, and marketplace metadata all move to 0.7.0 together, and the Python test matrix covers 3.11, 3.12, and 3.13.


The design

Strict dual-era lifecycle, fail-closed by policy.

The adapter treats the two protocol generations as distinct eras with a hard boundary. A request carrying the modern _meta-declared protocol version gets modern semantics; requests that declare MCP 2026-07-28 and then call the removed initialize, ping, logging/setLevel, or resource-subscription methods are rejected with -32601 MethodNotFound. Pre-2026 clients keep their supported initialize and ping behavior throughout the 0.7.x line.

Version failures are auditable rather than silent. Any declared version outside the support table fails closed with the final-stable -32022 UnsupportedProtocolVersion error shape, which includes the requested version and the server's supported-version list. This deliberately drops the spec-legal legacy counter-offer negotiation: an unsupported protocol version fails explicitly instead of silently falling back, and hosts requesting any version the server actually supports are unaffected.

One canonical Scholia tool implementation per surface, exposed through a thin protocol layer that speaks both generations — version selection is per-request and fail-closed.

Under the hood the adapter stays a small audited in-repo wire layer — roughly 150 lines of protocol code per surface — rather than adopting the official MCP Python SDK. The host plugins must run as single stdlib-only files with no pip-installable dependencies, so the wire layer is frozen with the spec revisions it claims and the protocol semantics stay isolated from Scholia domain logic. The full rationale is in ADR 0001.


Compatibility

The support matrix, generated from live probes.

The published matrix is not hand-maintained: it is generated by integration tests that probe both server surfaces over real stdio. The 2026-07-28 cell passes a stateless _meta-carried request and confirms removed lifecycle methods return -32601; pre-2026 cells pass the legacy initialize lifecycle at that version.

Protocol versionWheel (scholialang-mcp serve)Plugin (vendored, all hosts)
2026-07-28modern statelessmodern stateless
2025-11-25legacy handshakelegacy handshake
2025-06-18legacy handshakelegacy handshake
2025-03-26legacy handshakelegacy handshake
2024-11-05legacy handshakerejected (-32022)

Deprecation policy. The legacy handshake lifecycle is supported for the entire 0.7.x line. The earliest it can be removed is 0.8.0, and only with a deprecation notice shipped one minor line in advance. The current matrix lives at docs/mcp-support-matrix.md.


What stays put

The wire moved. The language did not.

0.7.0 is a wire-layer release. The Scholia language, validator, conformance corpus, and the scholialang Python dependency remain intentionally pinned to the separately versioned 0.6.2 release. Traces you emitted yesterday validate identically today; no on-disk state, DAG, or artifact format changed in either direction.


Install & upgrade

Get 0.7.0.

If you only need the MCP/LSP server as a Python package, install or upgrade straight from PyPI:

pip install --upgrade scholialang-mcp

For the host plugins, dougfirlabs/scholialang-mcp is the marketplace root — both hosts add it straight from GitHub:

# Claude Code
claude plugin marketplace add dougfirlabs/scholialang-mcp
claude plugin install scholialang@scholialang-mcp

# Codex
codex plugin marketplace add dougfirlabs/scholialang-mcp
codex plugin add scholialang@scholialang-mcp

Full host-by-host setup — including the Ollama recipes and the local live view — is on the plugins page.

Open the repo Plugin setup