mirror of
https://github.com/getpaseo/paseo.git
synced 2026-07-29 12:01:31 +00:00
The agent-facing MCP server (/mcp/agents) ran in stateful session mode, keeping a StreamableHTTPServerTransport plus its full Server and Zod tool schemas alive per agent connection, keyed by session id. The map was only pruned on the SDK's onclose/onsessionclosed callbacks, which fire only on a clean DELETE. Agents that are killed or exit without one never get reaped, so dead sessions accumulate for the life of the daemon (observed ~77MB across 132 stale transports in a heap snapshot). Listing and calling tools needs no cross-request state, so each request now builds a fresh server + transport and tears both down when the response closes. Per-request cost is ~0.6-0.9ms and ~760KB of short-lived allocation; nothing is retained between requests. GET and DELETE return 405, which the MCP client tolerates (it never receives a session id).