Skip to main content
elicitation/create is a server → client request introduced in MCP spec 2025-11-25. It lets a tool pause mid-execution to ask the user a structured question — “which Stripe customer did you mean?”, “confirm before deleting?” — and receive a typed response back. GetMCP implements the handler shape; wiring an actual tool to elicit user input is something you author against the API.

Wire-level Shape

The server emits:
{
  "jsonrpc": "2.0",
  "id":      "srv-elicit-1",
  "method":  "elicitation/create",
  "params": {
    "message": "Which Stripe customer did you mean?",
    "requestedSchema": {
      "type": "object",
      "properties": {
        "customer_id": {
          "type":        "string",
          "description": "The Stripe customer ID",
          "enum":        ["cus_8f21", "cus_9c44", "cus_2b91"]
        }
      },
      "required": ["customer_id"]
    }
  }
}
The client renders a UI from requestedSchema, collects the answer, and responds:
{
  "jsonrpc": "2.0",
  "id":      "srv-elicit-1",
  "result": {
    "action":  "accept",
    "content": { "customer_id": "cus_8f21" }
  }
}
result.action
string
One of accept (user provided answers), decline (user said no), cancel (user closed the prompt).
result.content
object
Present only when action === "accept". Matches the requestedSchema.

Schema Constraints

requestedSchema is a simplified JSON Schema — clients are required to handle:
  • type: "object" at the root
  • Primitive properties of type string, number, boolean, or string with enum
  • required array
  • description strings (rendered as form labels and help text)
Avoid nested objects, arrays, oneOf / allOf — clients are not required to render them and may decline the request.

Capability Negotiation

elicitation/create only works when the client declared the elicitation capability during initialize:
"capabilities": {
  "elicitation": {}
}
If the capability is absent, the call returns immediately with action: "decline". Always handle the decline case — fall back to a sensible default or fail the tool gracefully.

When to Use It

Good fits:
  • Disambiguation — multiple matches; ask the user which one
  • Confirmation — destructive operations should always confirm
  • Missing required context — “what date range did you mean?”
Bad fits:
  • Authentication credentials — never elicit passwords or API keys; use the server’s auth config
  • Data the model could provide — if the AI can answer, let it; don’t bounce to the user for things it should figure out

Caveats

  • Elicitation blocks the tool call until the user responds. Time out gracefully — most clients give the user 60 seconds.
  • The user can decline at any point. Always have a fallback path.
  • GetMCP’s built-in tools don’t elicit — this is wiring for tools you author yourself.

Elicitation is one of the newer MCP additions — older clients (pre-2025-11-25 spec) won’t advertise the capability. Always negotiate via initialize first; never assume.