> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getmcp.com/llms.txt
> Use this file to discover all available pages before exploring further.

# elicitation/create

> Server asks the client to gather typed input from the user mid-tool-execution.

`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:

```json theme={null}
{
  "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:

```json theme={null}
{
  "jsonrpc": "2.0",
  "id":      "srv-elicit-1",
  "result": {
    "action":  "accept",
    "content": { "customer_id": "cus_8f21" }
  }
}
```

<ResponseField name="result.action" type="string">
  One of `accept` (user provided answers), `decline` (user said no), `cancel` (user closed the prompt).
</ResponseField>

<ResponseField name="result.content" type="object">
  Present only when `action === "accept"`. Matches the `requestedSchema`.
</ResponseField>

***

## 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`:

```json theme={null}
"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.

***

<Note>
  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.
</Note>
