This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
Affected surfaces
Summary
AI summaryTurboMCP adds multi‑version MCP protocol support with a new ProtocolVersion enum and version adapter system.
Full changelog
[3.0.8] - 2026-03-24
Added
-
Multi-version MCP protocol support — TurboMCP can now negotiate and serve multiple MCP specification versions from a single server. The version adapter system transparently filters outgoing responses to match the client's negotiated protocol version.
-
ProtocolVersionenum — Replacedtype ProtocolVersion = Stringalias with a proper enum (V2025_06_18,V2025_11_25,Draft,Unknown(String)). ProvidesSerialize/Deserialize(round-trips to canonical version strings),Ord(by release date),Display,From<&str>,From<String>,PartialEq<&str>,is_stable(),is_known(), andis_draft(). Constants:ProtocolVersion::LATESTandProtocolVersion::STABLE. -
Version adapter layer (
turbomcp_protocol::versioning::adapter) —VersionAdaptertrait withfilter_capabilities(),filter_result(),validate_method(), andsupported_methods(). Factory functionadapter_for_version()returns the appropriate adapter. Three implementations:V2025_06_18Adapter— strips icons, execution, outputSchema from tools; icons from prompts/resources; description/icons/websiteUrl from serverInfo; tasks capability; elicitation.url sub-capability; sampling.tools sub-capability. Rejects tasks/* methods.V2025_11_25Adapter— pass-through (current stable).DraftAdapter— pass-through (superset of 2025-11-25).
-
route_request_versioned()— New server router entry point for post-initialize requests. Validates incoming methods against the negotiated version and filters outgoing responses through the version adapter. Transport layers store the negotiated version from init and call this for subsequent requests. -
ProtocolConfig::multi_version()— Opt-in constructor that accepts all stable MCP versions. The default remains strict latest-only (matching prior behavior). -
ElicitationCapabilitiesspec compliance — Addedformandurlsub-capability structs per MCP 2025-11-25 specification. Empty capabilities object ({}) defaults to form-only support viasupports_form()/supports_url()helpers. Builder defaults to full (form + URL).schema_validationretained as TurboMCP extension. -
39 new version adapter tests — Comprehensive coverage: serde round-trips, ordering consistency, adapter filtering for every response type, method validation, elicitation backward compat, end-to-end initialize response filtering.
Fixed
-
Ord/PartialEqinconsistency onProtocolVersion::Unknown— Two distinctUnknownvariants wereOrd::EqualbutPartialEqnot-equal, violating Rust's trait contract and causing undefined behavior inBTreeMap/BTreeSet/sort.Unknownvariants now compare lexicographically by inner string. -
ElicitationCapabilitiesmissingform/urlsub-fields — The 2025-11-25 spec requires{ "form": {}, "url": {} }structure in elicitation capabilities. Previously only hadschema_validation.
Changed
-
SUPPORTED_VERSIONSexpanded — Now includes both"2025-06-18"and"2025-11-25"(previously only"2025-11-25"). The defaultProtocolConfigstill only accepts the latest version; useProtocolConfig::multi_version()to accept older clients. -
ProtocolConfigusesProtocolVersionenum —preferred_versionandsupported_versionsfields are now typedProtocolVersioninstead ofString.negotiate()returnsOption<ProtocolVersion>.
Full Changelog: https://github.com/Epistates/turbomcp/compare/v3.0.7...v3.0.8
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
Related context
Beta — feedback welcome: [email protected]