Release v0.51.1 - #6704
Release v0.51.1#6704
Conversation
Release-Triggered-By: rdimitrov
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #6704 +/- ##
==========================================
- Coverage 79.30% 79.30% -0.01%
==========================================
Files 800 800
Lines 80936 80936
==========================================
- Hits 64189 64185 -4
- Misses 16742 16746 +4
Partials 5 5 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
📝 Generated release notes for
|
| Behavior | Before | After |
|---|---|---|
| Backend response delivery | Broadcast to every live SSE stream | Delivered only to the session that issued the request, with the client's original id and id type restored |
notifications/progress, notifications/message, notifications/resources/updated |
Broadcast to every client | Dropped — the shared backend cannot attribute them to a session |
*/list_changed notifications |
Forwarded as-is | Broadcast to all live sessions, rebuilt from the method with params stripped |
sampling/createMessage, elicitation/create from the backend |
Forwarded to a connected client | Answered with JSON-RPC -32601 back to the backend |
Backend ping |
Response broadcast to clients as an unsolicited result | Answered by the proxy itself |
| Client POSTs a JSON-RPC response, or a call with a fractional id | 202 Accepted |
400 Bad Request |
| Messages received while no client was connected | Replayed to the next client to connect | Dropped |
The first drop or rejection per method is logged at WARN naming the method, so proxy logs are the fastest way to confirm a behavior change traces to this release.
Before
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
metadata:
name: my-server
spec:
transport: stdio
proxyMode: sse # legacy proxy — affected by this changeAfter
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
metadata:
name: my-server
spec:
transport: stdio
proxyMode: streamable-http # or omit the field entirely to take the CRD defaultMigration steps
- Move off the deprecated mode. CLI: drop
--proxy-mode sse(or pass--proxy-mode streamable-http). Operator: setspec.proxyMode: streamable-http, or delete the field to take the CRD default, and let the reconcile roll the pod. API: omitproxy_modeon workload create. - For an existing local workload, re-create it —
thv restartreplays the persistedproxy_modefrom its RunConfig and will stay onsse:thv rm <name> thv run --proxy-mode streamable-http <image>
- Update client endpoints:
GET /sseplusPOST /messages?session_id=…becomes a singlePOST /mcpusing theMcp-Session-Idheader. - Know what switching does and does not restore. Streamable mode restores per-session
notifications/progressand subscription-scopednotifications/resources/updated. It does not restorenotifications/message(logging) or server-initiatedsampling/elicitation— those are fail-closed on both proxies for a shared stdio backend and need a per-session backend deployment. - If you must stay on
--proxy-mode sse, verify your client does not POST JSON-RPC responses, uses integer or string request ids (no fractional numbers), does not depend on progress or logging notifications, and tolerates reconnecting without replay. There is no flag to restore the previous behavior — that behavior is the vulnerability.
PR: #6702 — fixes advisory GHSA-wm2j-ch74-276r
🐛 Bug Fixes
- Closed a cross-session response leak in the legacy HTTP+SSE proxy where every backend JSON-RPC response was broadcast to all connected SSE streams, letting an authenticated user receive another user's tool results — and, because independent MCP clients reuse ordinary request-id sequences, accept another session's response as the answer to their own pending call (GHSA-wm2j-ch74-276r) (#6702).
- Health checks on the legacy SSE proxy no longer surface the internal pinger's responses to clients as unsolicited results with unknown ids (#6702).
📦 Dependencies
| Module | Version |
|---|---|
github.com/stacklok/toolhive-catalog |
v0.20260922.0 |
Full commit log
What's Changed
- Route SSE proxy responses to originating session by @rdimitrov in Route SSE proxy responses to originating session #6702
- Update module github.com/stacklok/toolhive-catalog to v0.20260922.0 by @renovate[bot] in Update module github.com/stacklok/toolhive-catalog to v0.20260922.0 #6703
- Release v0.51.1 by @toolhive-release-app[bot] in Release v0.51.1 #6704
Full Changelog: v0.51.0...v0.51.1
🔗 Full changelog: v0.51.0...v0.51.1
Release v0.51.1
Version Bump
patch release
Files Updated
VERSIONdeploy/charts/operator-crds/Chart.yaml(path:version)deploy/charts/operator-crds/Chart.yaml(path:appVersion)deploy/charts/operator/Chart.yaml(path:version)deploy/charts/operator/Chart.yaml(path:appVersion)deploy/charts/operator/values.yaml(path:operator.image)deploy/charts/operator/values.yaml(path:operator.toolhiveRunnerImage)deploy/charts/operator/values.yaml(path:operator.vmcpImage)Next Steps
Checklist