This release includes 3 security fixes for security teams reviewing exposed deployments.
Published 2mo
MCP Developer Tools
✓ No known CVEs patched
This release patches 3 known CVEs
Topics
mcp
mcp-client
mcp-sdk
mcp-server
mcp-servers
rust
Affected surfaces
auth
rce_ssrf
Summary
AI summaryTurboMCP v3 targets MCP 2025‑11‑25 only, removes several APIs, and adds security hardening for API keys.
Full changelog
[3.0.3] - 2026-03-15
Breaking Changes
- Strict single-version protocol policy — TurboMCP v3 now targets MCP
2025-11-25only.SUPPORTED_VERSIONSnarrowed to a single entry;ProtocolConfig::default()setsallow_fallback: false;Version::stable()andVersionCompatibility::CompatibleWithWarningsremoved. Uri,MimeType,Base64Stringpromoted to newtypes — These weretype Alias = String; they are now#[serde(transparent)]newtype structs withDeref<Target = str>,From<String>,From<&str>,AsRef<str>,Display, andPartialEq<&str>impls. Wire format is unchanged.Contenttype alias removed — UseContentBlockdirectly. Thepub type Content = ContentBlockalias is deleted.ClientBuilderconsolidated — The separateclient/builder.rsis removed; builder logic is inlined intoturbomcp-client/src/lib.rs. Public API is unchanged.- API key auth now validates against configured value —
AuthConfig::api_key(header)withoutapi_key_valuereturns HTTP 500 (fail-closed). Usewith_api_key_auth_value(header, value)or setTURBOMCP_API_KEY_VALUEenv var.
Security
- Constant-time API key comparison — API key validation now uses
subtle::ConstantTimeEqto prevent timing side-channel attacks. - JWT scope enforcement — Auth middleware validates
required_scopesagainst tokenscope/scpclaims. - JWT audience validation — Validates
audclaim againstserver_uriper RFC 8707 to prevent cross-service token reuse. - SSRF hardening with DNS resolution — Proxy URL validation now resolves hostnames via
tokio::net::lookup_hostand validates all resolved IPs against private/loopback/metadata ranges. - JWKS URI construction fixed — Uses
Url::join()instead of string concatenation to avoid double-slash bugs with trailing-slash issuers. - Bearer token log truncation — Revocation log now emits only an 8-character token prefix instead of the full token.
Fixed
- Response waiter memory leak —
ProtocolClientnow cleans up response waiters on send failure and timeout, preventingDashMapentry leaks. - Spurious shutdown warnings —
Client::Dropno longer warns whenshutdown()was already called. - Resilience settings silently ignored —
ClientBuilder::build()now returns an error (andbuild_sync()panics) if resilience settings are configured butbuild_resilient()is not used. --all-featurescompilation — Fixed missingdpop_configfield in auth tests andUritype mismatch in WASM crate.
Changed
- Dead code removal — Deleted
axum_integration.rs, etc. - WebSocket long-running tests implemented — Three previously-stub
#[ignore]tests now use a realWebSocketTestServerharness. - Token lifecycle tests implemented — Refresh token rotation and revocation tests now use
OAuth2Clientinstead of raw HTTP.
Full Changelog: https://github.com/Epistates/turbomcp/compare/v3.0.2...v3.0.3
Breaking Changes
- Strict single-version protocol policy: TARGETS MCP `2025-11-25` only; `SUPPORTED_VERSIONS` narrowed to one entry; `allow_fallback` defaults to false.
- `Uri`, `MimeType`, and `Base64String` promoted from string aliases to transparent newtype structs.
- `Content` type alias removed – use `ContentBlock` directly.
- `ClientBuilder` module removed; builder logic inlined into `turbomcp-client/src/lib.rs`.
- API key authentication now validates against configured value, returning HTTP 500 if unset.
Security Fixes
- API key comparison now constant‑time to prevent timing side‑channel attacks (subtle::ConstantTimeEq).
- JWT scope enforcement validates `required_scopes` against token claims.
- JWT audience validation checks `aud` claim against `server_uri` per RFC 8707.
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]