go-sdk/internal/jsonrpc2
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Robert Findley 272e0cd4f5
mcp: better handling for streamable context cancellation (#677)
After walking through our handling of streamable client context
cancellation (due to encountering a shutdown deadlock), I think I've
settled on a more coherent strategy for handling call cancellation:

- In our call handler, retire the request if the call exits due to
cancellation: the caller will never see the actual result anyway.
- In connectSSE, use the actual request context (the same context used
in Write) for the client request, so that it terminates when the context
is cancelled. Thread through the initialization context for the
standalone SSE request.

Also, a couple minor improvements:
- Use a detached context for the background context of the client
connection. We want to preserve context values (see #513), but it is not
right to cancel the connection after Connect has already returned, if
the context times out.
- Don't use Last-Event-ID != "" as the signal for whether the connectSSE
call is initial: if the standalone SSE stream disconnects without an
event ID, we'll still reconnect it, and don't want to do so without a
delay.

+ tests, updating the streamable client connection test harness to
accomodate the new aspects being exercised.

Fixes #662
2025-12-03 12:26:50 -05:00
..
conn.go mcp: better handling for streamable context cancellation (#677) 2025-12-03 12:26:50 -05:00
frame.go internal/jsonrpc2: allow asynchronous writes 2025-08-08 12:38:43 -04:00
jsonrpc2.go mcp: implement a concurrency model for calls 2025-08-19 11:21:02 -04:00
jsonrpc2_test.go mcp: implement a concurrency model for calls 2025-08-19 11:21:02 -04:00
messages.go many: minor cosmetic changes (#529) 2025-09-25 16:06:24 -04:00
net.go internal/jsonrpc2_v2: update for go1.16+ 2025-05-27 10:50:54 -07:00
serve.go internal/mcp: implement HTTP SSE transport 2025-04-23 19:15:20 -07:00
serve_test.go internal/jsonrpc2_v2,mcp: remove unneeded dependencies 2025-06-18 22:11:26 -07:00
wire.go mcp: improvements for 'stateless' streamable servers; 'distributed' mode 2025-08-20 09:59:52 -04:00
wire_test.go x/tools: modernize interface{} -> any 2025-02-19 15:14:27 -08:00