go-sdk/mcp
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
..
testdata Implement SEP-973 (#570) 2025-11-12 16:52:44 -05:00
client.go all: expose JSON-RPC error codes, and support URLElicitationRequired errors (#655) 2025-12-01 11:29:17 -05:00
client_example_test.go mcp: fix goroutine leaks in unit tests (#496) 2025-10-16 11:13:30 -04:00
client_list_test.go mcp: allow any value for schemas (#517) 2025-09-26 11:55:54 -04:00
client_test.go all: expose JSON-RPC error codes, and support URLElicitationRequired errors (#655) 2025-12-01 11:29:17 -05:00
cmd.go mcp: speed up TestCommandTransportDuration 2025-09-12 12:00:29 -04:00
cmd_export_test.go mcp: speed up TestCommandTransportDuration 2025-09-12 12:00:29 -04:00
cmd_test.go mcp: fix goroutine leaks in unit tests (#496) 2025-10-16 11:13:30 -04:00
conformance_go124_test.go internal/mcp: update protocol versions 2025-06-18 08:11:16 -07:00
conformance_go125_test.go internal/mcp: update protocol versions 2025-06-18 08:11:16 -07:00
conformance_test.go Implement SEP-973 (#570) 2025-11-12 16:52:44 -05:00
content.go Implement SEP-973 (#570) 2025-11-12 16:52:44 -05:00
content_nil_test.go mcp: add CallToolResult.getError (#481) 2025-09-18 08:08:23 -04:00
content_test.go Implement SEP-973 (#570) 2025-11-12 16:52:44 -05:00
elicitation_test.go all: expose JSON-RPC error codes, and support URLElicitationRequired errors (#655) 2025-12-01 11:29:17 -05:00
error_test.go all: expose JSON-RPC error codes, and support URLElicitationRequired errors (#655) 2025-12-01 11:29:17 -05:00
event.go mcp: support SSE polling and server disconnects (SEP-1699) (#663) 2025-12-01 16:21:37 -05:00
event_test.go mcp: remove the StreamID type (#490) 2025-09-18 12:01:07 -04:00
features.go mcp: minor cleanup of some TODOs (#332) 2025-08-20 12:55:19 -04:00
features_test.go mcp: change tool handler design (#325) 2025-08-20 19:36:34 -04:00
logging.go mcp/server: enable server logging (#501) 2025-10-02 14:44:32 -04:00
mcp.go mcp: fix inaccurate package doc (#534) 2025-09-26 14:16:10 -04:00
mcp_example_test.go docs: add feature and troubleshooting documentation (#463) 2025-09-16 11:13:40 -04:00
mcp_test.go mcp/mcp_test: tests for elicit content validation (#676) 2025-12-03 10:12:07 -05:00
prompt.go mcp: align PromptHandler args with other handlers (#348) 2025-08-22 10:44:05 -04:00
protocol.go mcp: support url mode elicitation (#646) 2025-11-23 12:58:28 -05:00
protocol_test.go mcp: add CallToolResult.getError (#481) 2025-09-18 08:08:23 -04:00
requests.go mcp: support url mode elicitation (#646) 2025-11-23 12:58:28 -05:00
resource.go all: expose JSON-RPC error codes, and support URLElicitationRequired errors (#655) 2025-12-01 11:29:17 -05:00
resource_go124.go internal/mcp: add the FileResourceHandler method 2025-05-19 11:15:23 -07:00
resource_pre_go124.go internal/mcp: add the FileResourceHandler method 2025-05-19 11:15:23 -07:00
resource_test.go mcp/Resource: Refactor URI Template Matching with uritemplate Library (#100) 2025-07-08 15:52:54 -04:00
server.go all: expose JSON-RPC error codes, and support URLElicitationRequired errors (#655) 2025-12-01 11:29:17 -05:00
server_example_test.go doc: document logging (#497) 2025-09-19 11:58:58 -04:00
server_test.go mcp: validate tool names (#640) 2025-11-19 17:01:50 -05:00
session.go mcp: support stateless streamable sessions (#277) 2025-08-11 16:43:46 -04:00
shared.go mcp: support SSE polling and server disconnects (SEP-1699) (#663) 2025-12-01 16:21:37 -05:00
shared_test.go all: remove ServerRequest[T] for concrete T (#342) 2025-08-21 12:10:53 -04:00
sse.go SSE: Add support for SSE handler options (#508) 2025-09-19 13:01:57 -04:00
sse_example_test.go SSE: Add support for SSE handler options (#508) 2025-09-19 13:01:57 -04:00
sse_test.go SSE: Add support for SSE handler options (#508) 2025-09-19 13:01:57 -04:00
streamable.go mcp: better handling for streamable context cancellation (#677) 2025-12-03 12:26:50 -05:00
streamable_bench_test.go mcp: don't persist failed streamable sessions (#605) 2025-10-27 16:29:16 -04:00
streamable_client_test.go mcp: better handling for streamable context cancellation (#677) 2025-12-03 12:26:50 -05:00
streamable_example_test.go mcp: fix goroutine leaks in unit tests (#496) 2025-10-16 11:13:30 -04:00
streamable_test.go mcp: better handling for streamable context cancellation (#677) 2025-12-03 12:26:50 -05:00
tool.go mcp: validate tool names (#640) 2025-11-19 17:01:50 -05:00
tool_example_test.go mcp: allow any value for schemas (#517) 2025-09-26 11:55:54 -04:00
tool_test.go all: expose JSON-RPC error codes, and support URLElicitationRequired errors (#655) 2025-12-01 11:29:17 -05:00
transport.go mcp: better handling for streamable context cancellation (#677) 2025-12-03 12:26:50 -05:00
transport_example_test.go mcp: fix goroutine leaks in unit tests (#496) 2025-10-16 11:13:30 -04:00
transport_test.go fix: handle Windows CRLF in MCP client(#664) (#665) 2025-12-01 12:16:39 -05:00
util.go mcp: allow any value for schemas (#517) 2025-09-26 11:55:54 -04:00