elicitation capability duringinitialization:{ "capabilities": { "elicitation": { "form": {}, "url": {} } }}form mode only:{ "capabilities": { "elicitation": {},// Equivalent to { "form": {} } },}elicitation capabilityMUST support at least one mode (form orurl).ServersMUST NOT send elicitation requests with modes that are not supported by the client.elicitation/create request.All elicitation requestsMUST include the following parameters:| Name | Type | Options | Description |
|---|---|---|---|
mode | string | form,url | The mode of the elicitation. Optional for form mode (defaults to"form" if omitted). |
message | string | A human-readable message explaining why the interaction is needed. |
mode parameter specifies the type of elicitation:"form": In-band structured data collection with optional schema validation. Data is exposed to the client."url": Out-of-band interaction via URL navigation. Data (other than the URL itself) isnot exposed to the client.mode field for form mode elicitation requests. ClientsMUST treat requests without amode field as form mode.mode: "form" or omit themode field, and include these additional parameters:| Name | Type | Description |
|---|---|---|
requestedSchema | object | A JSON Schema defining the structure of the expected response. |
requestedSchema parameter allows servers to define the structure of the expectedresponse using a restricted subset of JSON Schema.To simplify client user experience, form mode elicitation schemas are limited to flat objectswith primitive properties only.The schema is restricted to these primitive types:{ "type":"string", "title":"Display Name", "description":"Description text", "minLength":3, "maxLength":50, "pattern":"^[A-Za-z]+$", "format":"email", "default":"[email protected]"}email,uri,date,date-time{ "type":"number",// or "integer" "title":"Display Name", "description":"Description text", "minimum":0, "maximum":100, "default":50}{ "type":"boolean", "title":"Display Name", "description":"Description text", "default":false}{ "type":"string", "title":"Color Selection", "description":"Choose your favorite color", "enum": ["Red","Green","Blue"], "default":"Red"}{ "type":"string", "title":"Color Selection", "description":"Choose your favorite color", "oneOf": [ {"const":"#FF0000","title":"Red" }, {"const":"#00FF00","title":"Green" }, {"const":"#0000FF","title":"Blue" } ], "default":"#FF0000"}{ "type":"array", "title":"Color Selection", "description":"Choose your favorite colors", "minItems":1, "maxItems":2, "items": { "type":"string", "enum": ["Red","Green","Blue"] }, "default": ["Red","Green"]}{ "type":"array", "title":"Color Selection", "description":"Choose your favorite colors", "minItems":1, "maxItems":2, "items": { "anyOf": [ {"const":"#FF0000","title":"Red" }, {"const":"#00FF00","title":"Green" }, {"const":"#0000FF","title":"Blue" } ] }, "default": ["#FF0000","#00FF00"]}{ "jsonrpc":"2.0", "id":1, "method":"elicitation/create", "params": { "mode":"form", "message":"Please provide your GitHub username", "requestedSchema": { "type":"object", "properties": { "name": { "type":"string" } }, "required": ["name"] } }}{ "jsonrpc":"2.0", "id":1, "result": { "action":"accept", "content": { "name":"octocat" } }}{ "jsonrpc":"2.0", "id":2, "method":"elicitation/create", "params": { "mode":"form", "message":"Please provide your contact information", "requestedSchema": { "type":"object", "properties": { "name": { "type":"string", "description":"Your full name" }, "email": { "type":"string", "format":"email", "description":"Your email address" }, "age": { "type":"number", "minimum":18, "description":"Your age" } }, "required": ["name","email"] } }}{ "jsonrpc":"2.0", "id":2, "result": { "action":"accept", "content": { "name":"Monalisa Octocat", "email":"[email protected]", "age":30 } }}2025-11-25 version of the MCP specification. Its design and implementation may change in future protocol revisions.mode: "url", amessage, and include these additional parameters:| Name | Type | Description |
|---|---|---|
url | string | The URL that the user should navigate to. |
elicitationId | string | A unique identifier for the elicitation. |
url parameterMUST contain a valid URL.{ "jsonrpc":"2.0", "id":3, "method":"elicitation/create", "params": { "mode":"url", "elicitationId":"550e8400-e29b-41d4-a716-446655440000", "url":"https://mcp.example.com/ui/set_api_key", "message":"Please provide your API key to continue." }}{ "jsonrpc":"2.0", "id":3, "result": { "action":"accept" }}action: "accept" indicates that the user has consented to theinteraction. It does not mean that the interaction is complete. The interaction occurs outof band and the client is not aware of the outcome until and unless the server sends a notification indicating completion.notifications/elicitation/complete notification when anout-of-band interaction started by URL mode elicitation is completed. This allows clients to react programmatically if appropriate.Servers sending notifications:elicitationId established in the originalelicitation/create request.{ "jsonrpc":"2.0", "method":"notifications/elicitation/complete", "params": { "elicitationId":"550e8400-e29b-41d4-a716-446655440000" }}URLElicitationRequiredError (code-32042) to indicate to the client that a URL mode elicitation is required. The serverMUST NOT return this error except when URL mode elicitation is required.The errorMUST include a list of elicitations that are required to complete before the original can be retried.Any elicitations returned in the errorMUST be URL mode elicitations and have anelicitationId property.Error Response:{ "jsonrpc":"2.0", "id":2, "error": { "code":-32042,// URL_ELICITATION_REQUIRED "message":"This request requires more information.", "data": { "elicitations": [ { "mode":"url", "elicitationId":"550e8400-e29b-41d4-a716-446655440000", "url":"https://mcp.example.com/connect?elicitationId=550e8400-e29b-41d4-a716-446655440000", "message":"Authorization is required to access your Example Co files." } ] } }}{ "jsonrpc":"2.0", "id":1, "result": { "action":"accept",// or "decline" or "cancel" "content": { "propertyName":"value", "anotherProperty":42 } }}action: "accept"): User explicitly approved and submitted with datacontent field contains the submitted data matching the requested schemacontent field is omittedaction: "decline"): User explicitly declined the requestcontent field is typically omittedaction: "cancel"): User dismissed without making an explicit choicecontent field is typically omittedsub claim)-32042 (URLElicitationRequiredError)elicitation/create request with a mode not declared in client capabilities:-32602 (Invalid params)url field in a URL elicitation request (with the restrictions detailed above).https://mcp.example.com/connect?elicitationId=... rather than the third-party authorization endpoint.This “connect URL” must ensure the user who opened the page is the same user who the elicitation was generated for.It would, for example, check that the user has a valid session cookie and that the session cookie is for the same user who was using the MCP client to generate the URL mode elicitation.This could be done by comparing the authoritative subject (sub claim) from the MCP server’s authorization server to the subject from the session cookie.Once that page ensures the same user, it can send the user to the third-party authorization server athttps://example.com/authorize?... where a normal OAuth flow can be completed.In other cases, the server may not be accessible via the web and may not be able to use a session cookie to identify the user.In this case, the server must use a different mechanism to identify the user who opens the elicitation URL is the same user who the elicitation was generated for.In all implementations, the serverMUST ensure that the mechanism to determine the user’s identity is resilient to attacks where an attacker can modify the elicitation URL.Was this page helpful?