mcp: support elicitation defaults (#644)

Fixes #617

---------

Co-authored-by: Markus Kusano <kusano@google.com>
This commit is contained in:
Markus Kusano 2025-11-21 16:15:21 -05:00 • committed by GitHub
commit d9263f7e47
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1018,7 +1018,37 @@ func (ss *ServerSession) Elicit(ctx context.Context, params *ElicitParams) (*Eli
if err := ss.checkInitialized(methodElicit); err != nil {
return nil, err
}
return handleSend[*ElicitResult](ctx, methodElicit, newServerRequest(ss, orZero[Params](params)))
res, err := handleSend[*ElicitResult](ctx, methodElicit, newServerRequest(ss, orZero[Params](params)))
if err != nil {
return nil, err
}
if params.RequestedSchema == nil {
return res, nil
}
schema, err := validateElicitSchema(params.RequestedSchema)
if err != nil {
return nil, err
}
if schema == nil {
return res, nil
}
resolved, err := schema.Resolve(nil)
if err != nil {
fmt.Printf(" resolve err: %s", err)
return nil, err
}
if err := resolved.Validate(res.Content); err != nil {
return nil, fmt.Errorf("elicitation result content does not match requested schema: %v", err)
}
err = resolved.ApplyDefaults(&res.Content)
if err != nil {
return nil, fmt.Errorf("failed to apply schema defalts to elicitation result: %v", err)
}
return res, nil
}
// Log sends a log message to the client.