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:requestedSchema, collects the answer, and responds:
One of
accept (user provided answers), decline (user said no), cancel (user closed the prompt).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
propertiesof typestring,number,boolean, orstringwithenum requiredarraydescriptionstrings (rendered as form labels and help text)
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:
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?”
- 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.
