• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

stacklok / toolhive / 30026855331
69%

Build:
DEFAULT BRANCH: main
Ran 23 Jul 2026 04:57PM UTC
Jobs 1
Files 822
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

23 Jul 2026 04:50PM UTC coverage: 69.205% (+0.07%) from 69.138%
30026855331

push

github

web-flow
Route server-to-client MCP messages per session (#5934)

The streamable HTTP proxy returned 405 on GET and dropped every
container->client message, so server-initiated MCP flows (progress,
resources/updated, */list_changed) never reached clients over the modern
transport. This adds a standalone GET SSE stream and routes each
server->client message to the correct session, or securely refuses it —
no cross-session leakage over the shared-backend multiplexing proxy.

- Per-session GET SSE stream registry (keyed by Mcp-Session-Id, one
  stream per session, evict-and-replace; data channel never closed, per
  stream stop signal — no send-on-closed panic).
- Routing: */list_changed -> every session once; progress -> the
  originating request's POST SSE stream (progressToken rewritten to a
  proxy-minted unique token); resources/updated -> only subscribed
  sessions (ref-counted upstream subscribe/unsubscribe, recorded only on
  upstream success); logging + server-initiated requests
  (sampling/elicitation) securely dropped (unattributable over a shared
  backend; requests get -32601 so the backend unblocks).
- Per-URI keyed mutex orders concurrent same-URI subscribe/unsubscribe;
  GET streams torn down on DELETE and by the reaper.

Reviewed-by: amirejaz. Conformant with MCP 2025-11-25 and forward-compatible
with 2026-07-28 (progress already matches the Modern model; server-initiated
requests become moot under MRTR). Sampling/elicitation + per-session logging
require per-session backends (vMCP) — tracked as follow-ups.

Closes #5744

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WG3mSjVGWNc8nfgbkdd79

649 of 832 new or added lines in 6 files covered. (78.0%)

27 existing lines in 8 files now uncovered.

77753 of 112351 relevant lines covered (69.21%)

79.69 hits per line

Uncovered Changes

Lines Coverage ∆ File
130
70.73
0.05% pkg/transport/proxy/streamable/streamable_proxy.go
31
71.03
5.51% pkg/transport/proxy/streamable/dispatcher.go
18
71.13
-3.87% pkg/transport/proxy/streamable/utils.go
4
95.65
pkg/transport/proxy/streamable/dispatcher_streams.go

Coverage Regressions

Lines Coverage ∆ File
7
61.69
-0.35% pkg/workloads/manager.go
6
20.11
-3.45% pkg/client/manager.go
3
73.79
-2.91% pkg/state/local.go
3
67.14
-4.29% pkg/state/runconfig.go
3
70.73
0.05% pkg/transport/proxy/streamable/streamable_proxy.go
2
93.94
-6.06% pkg/foreach/foreach.go
2
82.29
-0.21% pkg/vmcp/composer/workflow_engine.go
1
71.13
-3.87% pkg/transport/proxy/streamable/utils.go
Jobs
ID Job ID Ran Files Coverage
1 30026855331.1 23 Jul 2026 04:57PM UTC 822
69.21
GitHub Action Run
Source Files on build 30026855331
  • Tree
  • List 822
  • Changed 12
  • Source Changed 3
  • Coverage Changed 12
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #30026855331
  • c007e6a9 on github
  • Prev Build on main (#30025327509)
  • Next Build on main (#30075086266)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc