Skip to content

Commit 3747e9f

Browse files
committed
refactor: delay initialization state updates and enforce protocol version for testing
1 parent 2618874 commit 3747e9f

3 files changed

Lines changed: 12 additions & 9 deletions

File tree

mcp/client_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -814,7 +814,7 @@ func TestClientConnectDiscover_RequestContents(t *testing.T) {
814814
return nil, nil
815815
},
816816
})
817-
cs, err := c.Connect(ctx, ct, nil)
817+
cs, err := c.Connect(ctx, ct, &ClientSessionOptions{protocolVersion: protocolVersion20260630})
818818
if err != nil {
819819
t.Fatalf("Connect: %v", err)
820820
}

mcp/server.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1475,12 +1475,6 @@ func (ss *ServerSession) handle(ctx context.Context, req *jsonrpc.Request) (any,
14751475
return nil, perRequestErr
14761476
}
14771477

1478-
if !initialized && validatedMeta.usesNewProtocol && validatedMeta.initializeParams != nil {
1479-
ss.updateState(func(state *ServerSessionState) {
1480-
state.InitializeParams = validatedMeta.initializeParams
1481-
})
1482-
}
1483-
14841478
switch req.Method {
14851479
case methodInitialize, methodPing, notificationInitialized:
14861480
if validatedMeta.usesNewProtocol {
@@ -1490,11 +1484,20 @@ func (ss *ServerSession) handle(ctx context.Context, req *jsonrpc.Request) (any,
14901484
Message: fmt.Sprintf("%q is not supported in the new protocol", req.Method),
14911485
}
14921486
}
1487+
case methodDiscover:
1488+
// In case of methodDiscover call the state.initializeParams is populated
1489+
// within the discover handle function to make sure the method is supported
1490+
// when the user is probing a pre-2026-06-30 server.
14931491
default:
14941492
if !initialized && !validatedMeta.usesNewProtocol {
14951493
ss.server.opts.Logger.Error("method invalid during initialization", "method", req.Method)
14961494
return nil, fmt.Errorf("method %q is invalid during session initialization", req.Method)
14971495
}
1496+
if !initialized && validatedMeta.usesNewProtocol && validatedMeta.initializeParams != nil {
1497+
ss.updateState(func(state *ServerSessionState) {
1498+
state.InitializeParams = validatedMeta.initializeParams
1499+
})
1500+
}
14981501
}
14991502

15001503
// modelcontextprotocol/go-sdk#26: handle calls asynchronously, and

mcp/streamable_client_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1290,7 +1290,7 @@ func TestStreamableClientConnect_DiscoverSuccess(t *testing.T) {
12901290

12911291
transport := &StreamableClientTransport{Endpoint: httpServer.URL}
12921292
client := NewClient(testImpl, nil)
1293-
session, err := client.Connect(ctx, transport, nil)
1293+
session, err := client.Connect(ctx, transport, &ClientSessionOptions{protocolVersion: protocolVersion20260630})
12941294
if err != nil {
12951295
t.Fatalf("Connect: %v", err)
12961296
}
@@ -1513,7 +1513,7 @@ func TestStreamableClientConnect_DiscoverPropagatesOtherErrors(t *testing.T) {
15131513

15141514
transport := &StreamableClientTransport{Endpoint: httpServer.URL}
15151515
client := NewClient(testImpl, nil)
1516-
session, err := client.Connect(ctx, transport, nil)
1516+
session, err := client.Connect(ctx, transport, &ClientSessionOptions{protocolVersion: protocolVersion20260630})
15171517
if err == nil {
15181518
_ = session.Close()
15191519
t.Fatal("Connect succeeded; want propagated error")

0 commit comments

Comments
 (0)