mcp: support elicitation defaults (#644)
Fixes #617 --------- Co-authored-by: Markus Kusano <kusano@google.com>
This commit is contained in:
parent
1943780255
commit
d9263f7e47
1 changed files with 177 additions and 9 deletions
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Reference in a new issue