MCPcopy Create free account
hub / github.com/modelcontextprotocol/go-sdk / Elicit

Method Elicit

mcp/server.go:1239–1307  ·  view source on GitHub ↗

Elicit sends an elicitation request to the client asking for user input.

(ctx context.Context, params *ElicitParams)

Source from the content-addressed store, hash-verified

1237
1238// Elicit sends an elicitation request to the client asking for user input.
1239func (ss *ServerSession) Elicit(ctx context.Context, params *ElicitParams) (*ElicitResult, error) {
1240 if err := ss.checkInitialized(methodElicit); err != nil {
1241 return nil, err
1242 }
1243 if params == nil {
1244 return nil, fmt.Errorf("%w: params cannot be nil", jsonrpc2.ErrInvalidParams)
1245 }
1246
1247 if params.Mode == "" {
1248 params2 := *params
1249 if params.URL != "" || params.ElicitationID != "" {
1250 params2.Mode = "url"
1251 } else {
1252 params2.Mode = "form"
1253 }
1254 params = &params2
1255 }
1256
1257 if iparams := ss.InitializeParams(); iparams == nil || iparams.Capabilities == nil || iparams.Capabilities.Elicitation == nil {
1258 return nil, fmt.Errorf("client does not support elicitation")
1259 }
1260 caps := ss.InitializeParams().Capabilities.Elicitation
1261 switch params.Mode {
1262 case "form":
1263 if caps.Form == nil && caps.URL != nil {
1264 // Note: if both 'Form' and 'URL' are nil, we assume the client supports
1265 // form elicitation for backward compatibility.
1266 return nil, errors.New(`client does not support "form" elicitation`)
1267 }
1268 case "url":
1269 if caps.URL == nil {
1270 return nil, errors.New(`client does not support "url" elicitation`)
1271 }
1272 }
1273
1274 res, err := handleSend[*ElicitResult](ctx, methodElicit, newServerRequest(ss, orZero[Params](params)))
1275 if err != nil {
1276 return nil, err
1277 }
1278
1279 if res.Action != "accept" {
1280 return res, nil
1281 }
1282
1283 if params.RequestedSchema == nil {
1284 return res, nil
1285 }
1286 schema, err := validateElicitSchema(params.RequestedSchema)
1287 if err != nil {
1288 return nil, err
1289 }
1290 if schema == nil {
1291 return res, nil
1292 }
1293
1294 resolved, err := schema.Resolve(nil)
1295 if err != nil {
1296 return nil, err

Calls 5

checkInitializedMethod · 0.95
InitializeParamsMethod · 0.95
newServerRequestFunction · 0.85
validateElicitSchemaFunction · 0.85
ValidateMethod · 0.80