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

@ -105,6 +105,15 @@ func (e unsupportedProtocolVersionError) Error() string {
// ClientSessionOptions is reserved for future use.
type ClientSessionOptions struct{}
func (c *Client) capabilities() *ClientCapabilities {
caps := &ClientCapabilities{}
caps.Roots.ListChanged = true
if c.opts.CreateMessageHandler != nil {
caps.Sampling = &SamplingCapabilities{}
}
return caps
}
// Connect begins an MCP session by connecting to a server over the given
// transport, and initializing the session.
//
@ -118,16 +127,10 @@ func (c *Client) Connect(ctx context.Context, t Transport, _ *ClientSessionOptio
return nil, err
}
caps := &ClientCapabilities{}
caps.Roots.ListChanged = true
if c.opts.CreateMessageHandler != nil {
caps.Sampling = &SamplingCapabilities{}
}
params := &InitializeParams{
ProtocolVersion: latestProtocolVersion,
ClientInfo: c.impl,
Capabilities: caps,
Capabilities: c.capabilities(),
}
req := &ClientRequest[*InitializeParams]{Session: cs, Params: params}
res, err := handleSend[*InitializeResult](ctx, methodInitialize, req)