go-sdk/mcp
Repository files (latest commit first)
Filename Latest commit message Latest commit date
dev_Hakaze 958dfcc532
mcp: limit SSE discover supportedVersions to SSE-defined revisions (#1121)
## Summary

`NewSSEHandler` sessions were advertising `2026-07-28` in
`server/discover` `supportedVersions`. That revision only defines stdio
and Streamable HTTP, not the deprecated HTTP+SSE binding, so
Modern-first clients could negotiate a revision the transport cannot
honour.

## Changes

- Implement `ProtocolVersionSupporter` on `SSEServerTransport` so
`filterSupportedVersions` excludes `>= 2026-07-28` (matching the
streamable transport's version gate pattern).
- In `Server.discover`, only set session `InitializeParams` when the
requested version is actually supported by the transport. Without this,
a discover probe that returns only legacy versions still marked the
session initialized, and the client's fallback `initialize` failed with
`duplicate "initialize" received`.
- Tests: unit coverage for filtered SSE versions, plus an end-to-end
Modern client → SSE fallback-to-initialize path.

Fixes #1112

## Test plan

- [x] `go test ./...`
- [x] `go test ./mcp/ -run
'TestSSE|TestInMemory_E2E_Discover|TestStreamableStateful_AcceptsDiscover|TestStreamableHTTP_E2E_Discover|TestClientConnectDiscover'`

Assistance: human-reviewed AI assistance used for implementation.

---------

Co-authored-by: arimu1 <19286898+arimu1@users.noreply.github.com>
2026-08-05 15:36:22 +02:00
..
testdata mcp: update return meta in DiscoverResult (SEP-2575) (#1097) 2026-07-16 16:10:12 +02:00
cache.go mcp: do not enforce TTL on cached tool (#1053) 2026-07-07 13:43:10 +02:00
capabilities_test.go mcp: add 2026-07-28 to the supported protocol versions (#1020) 2026-06-24 12:02:56 +02:00
client.go mcp: export ClientSessionOptions.ProtocolVersion (#1127) 2026-08-03 15:29:52 +02:00
client_example_test.go mcp: block server initiated requests (SEP-2322) (#1057) 2026-07-08 15:17:41 +02:00
client_list_test.go mcp: allow any value for schemas (#517) 2025-09-26 11:55:54 -04:00
client_test.go mcp: export ClientSessionOptions.ProtocolVersion (#1127) 2026-08-03 15:29:52 +02: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 all: modernize code (#868) 2026-03-31 10:58:02 +02:00
conformance_test.go mcp: add 2026-07-28 to the supported protocol versions (#1020) 2026-06-24 12:02:56 +02:00
content.go mcp: Deprecate roots, sampling and logging (SEP-2577) (#1017) 2026-06-23 11:11:08 +02:00
content_nil_test.go mcp: update return meta in DiscoverResult (SEP-2575) (#1097) 2026-07-16 16:10:12 +02:00
content_test.go mcp: switch icon theme to named string type (#733) 2025-12-19 16:44:10 -05:00
elicitation_test.go mcp: export ClientSessionOptions.ProtocolVersion (#1127) 2026-08-03 15:29:52 +02:00
error_test.go mcp: align resource not found error code with sep-2164 (#931) 2026-05-05 16:20:02 +02:00
event.go mcp: avoid double-copy of payload in writeEvent (#1106) 2026-07-24 10:07:06 +02:00
event_test.go mcp: handle empty chunks in MemoryEventStore (#862) 2026-03-27 16:58:03 +01: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: Deprecate roots, sampling and logging (SEP-2577) (#1017) 2026-06-23 11:11:08 +02:00
mcp.go mcp: fix inaccurate package doc (#534) 2025-09-26 14:16:10 -04:00
mcp_example_test.go mcp: add 2026-07-28 to the supported protocol versions (#1020) 2026-06-24 12:02:56 +02:00
mcp_test.go mcp: export ClientSessionOptions.ProtocolVersion (#1127) 2026-08-03 15:29:52 +02:00
mrtr.go mcp: bump protocol version from 2026-06-30 to 2026-07-28 (#1015) 2026-06-22 09:53:04 +02:00
mrtr_test.go mcp: export ClientSessionOptions.ProtocolVersion (#1127) 2026-08-03 15:29:52 +02:00
prompt.go mcp: align PromptHandler args with other handlers (#348) 2025-08-22 10:44:05 -04:00
protocol.go mcp: update return meta in DiscoverResult (SEP-2575) (#1097) 2026-07-16 16:10:12 +02:00
protocol_test.go mcp: include resultType on new-protocol responses (#1060) 2026-07-13 11:51:19 +00:00
requests.go mcp: Implement subscriptions/listen rpc (SEP-2575) (#1007) 2026-06-22 18:57:36 +02:00
resource.go mcp: align resource not found error code with sep-2164 (#931) 2026-05-05 16:20:02 +02:00
resource_test.go mcp/Resource: Refactor URI Template Matching with uritemplate Library (#100) 2025-07-08 15:52:54 -04:00
sampling_test.go mcp: export ClientSessionOptions.ProtocolVersion (#1127) 2026-08-03 15:29:52 +02:00
schema_cache.go perf: add schema caching to avoid repeated reflection (#685) 2026-01-20 20:16:46 -05:00
schema_cache_test.go all: modernize code (#868) 2026-03-31 10:58:02 +02:00
server.go mcp: prevent leaks of ServerSession on StatefulServer (#1137) 2026-08-03 13:54:24 +02:00
server_example_test.go mcp: add 2026-07-28 to the supported protocol versions (#1020) 2026-06-24 12:02:56 +02:00
server_test.go mcp: export ClientSessionOptions.ProtocolVersion (#1127) 2026-08-03 15:29:52 +02:00
session.go mcp: support stateless streamable sessions (#277) 2025-08-11 16:43:46 -04:00
shared.go mcp: update return meta in DiscoverResult (SEP-2575) (#1097) 2026-07-16 16:10:12 +02:00
shared_test.go mcp: update return meta in DiscoverResult (SEP-2575) (#1097) 2026-07-16 16:10:12 +02:00
sse.go mcp: limit SSE discover supportedVersions to SSE-defined revisions (#1121) 2026-08-05 15:36:22 +02:00
sse_example_test.go SSE: Add support for SSE handler options (#508) 2025-09-19 13:01:57 -04:00
sse_test.go mcp: limit SSE discover supportedVersions to SSE-defined revisions (#1121) 2026-08-05 15:36:22 +02:00
streamable.go mcp: return json-rpc error on stateful server serving protocolVersion20260728 requests (#1143) 2026-08-05 12:16:39 +02:00
streamable_bench_test.go all: modernize code (#868) 2026-03-31 10:58:02 +02:00
streamable_client.go mcp: do not call DELETE for sessionless & doc adjustments (#960) 2026-05-15 21:47:34 +02:00
streamable_client_test.go mcp: fix error propagation to prevent session closing (#1118) 2026-08-04 11:02:36 +02:00
streamable_example_test.go mcp: add 2026-07-28 to the supported protocol versions (#1020) 2026-06-24 12:02:56 +02:00
streamable_headers.go mcp: fix ListTools panic and null normalization on malformed tools (#1120) 2026-07-30 10:06:14 +02:00
streamable_headers_test.go mcp: fix ListTools panic and null normalization on malformed tools (#1120) 2026-07-30 10:06:14 +02:00
streamable_server.go mcp: simplify stream state management in streamable transport 2025-12-10 13:28:25 -05:00
streamable_test.go mcp: return json-rpc error on stateful server serving protocolVersion20260728 requests (#1143) 2026-08-05 12:16:39 +02:00
tool.go mcp: tool.InputSchema and tool.OutputSchema validation (SEP-2106) (#1009) 2026-06-16 13:55:47 +02:00
tool_example_test.go mcp: allow any value for schemas (#517) 2025-09-26 11:55:54 -04:00
tool_test.go mcp: tool.InputSchema and tool.OutputSchema validation (SEP-2106) (#1009) 2026-06-16 13:55:47 +02:00
transport.go mcp: Implement subscriptions/listen rpc (SEP-2575) (#1007) 2026-06-22 18:57:36 +02:00
transport_example_test.go mcp: update return meta in DiscoverResult (SEP-2575) (#1097) 2026-07-16 16:10:12 +02:00
transport_test.go fix(jsonrpc2): decode requests when method key is present (#1000) 2026-06-16 09:57:18 +02:00
util.go all: use case-sensitive JSON unmarshaling (#807) 2026-02-18 16:38:36 +01:00