mcp/server: expose InitializeParams to ServerSession (#336)

This CL enables the server session to see what capabilities the client
has by introducing the InitializeParams() function.

This CL also adds a test to ensure ClientCapabilities is accurate.

Fixes #141
This commit is contained in:
Sam Thanawalla 2025-08-20 14:39:17 -04:00 • committed by GitHub
commit 48abccbf6b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -190,3 +190,48 @@ func TestClientPaginateVariousPageSizes(t *testing.T) {
})
}
}
func TestClientCapabilities(t *testing.T) {
testCases := []struct {
name string
configureClient func(s *Client)
clientOpts ClientOptions
wantCapabilities *ClientCapabilities
}{
{
name: "With initial capabilities",
configureClient: func(s *Client) {},
wantCapabilities: &ClientCapabilities{
Roots: struct {
ListChanged bool "json:\"listChanged,omitempty\""
}{ListChanged: true},
},
},
{
name: "With sampling",
configureClient: func(s *Client) {},
clientOpts: ClientOptions{
CreateMessageHandler: func(context.Context, *ClientRequest[*CreateMessageParams]) (*CreateMessageResult, error) {
return nil, nil
},
},
wantCapabilities: &ClientCapabilities{
Roots: struct {
ListChanged bool "json:\"listChanged,omitempty\""
}{ListChanged: true},
Sampling: &SamplingCapabilities{},
},
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
client := NewClient(testImpl, &tc.clientOpts)
tc.configureClient(client)
gotCapabilities := client.capabilities()
if diff := cmp.Diff(tc.wantCapabilities, gotCapabilities); diff != "" {
t.Errorf("capabilities() mismatch (-want +got):\n%s", diff)
}
})
}
}