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.
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 version | Wheel (scholialang-mcp serve) | Plugin (vendored, all hosts) |
|---|---|---|
2026-07-28 | modern stateless | modern stateless |
2025-11-25 | legacy handshake | legacy handshake |
2025-06-18 | legacy handshake | legacy handshake |
2025-03-26 | legacy handshake | legacy handshake |
2024-11-05 | legacy handshake | rejected (-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.