> For the complete documentation index, see [llms.txt](https://chaincontext.gitbook.io/help-center/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://chaincontext.gitbook.io/help-center/building/mcp-elicitation.md).

# MCP Elicitation

The `elicit_input` block pauses tool execution to request structured input from the end-user's MCP client. The client renders a native modal (supported by Claude Desktop 2.1.76+, Cursor, Windsurf, VS Code Copilot). The user's response flows into downstream blocks.

## When to use

* **Confirmation gates** before write tools: "Swap 100 USDC for 0.5 ETH? (min receive 0.49)"
* **Slippage / tolerance picker** as a dropdown
* **Recipient selector** from a curated list
* **Disclaimer acceptance** before risky operations

## Block schema

```ts
{
  type:            'elicit_input',
  id:              'confirm_1',
  title:           'Confirm swap',
  message:         'Swap {{quote.fromAmount}} USDC for {{quote.toAmount}} ETH?',
  requestedSchema: { type: 'object', properties: { confirm: { type: 'boolean' } }, required: ['confirm'] },
  outputField:     'decision',
}
```

## Features

* **Template interpolation**: `{{blockId.field}}` and `{{tool_input.key}}` work inside `message`.
* **Decline/cancel**: if the user declines, the block throws `elicitation declined/cancelled` — the calling task fails cleanly.
* **Timeout**: 60s on SSE sessions.
* **Auto-injection**: pre-sim middleware auto-injects an `elicit_input` when Blockaid risk crosses `warnThreshold` but stays below `blockThreshold`.

## Requirements

* An SSE or Streamable HTTP transport with bidirectional messaging (standard MCP).
* A client that declares the `elicitation` capability in `initialize`.

## References

* [MCP elicitation spec](https://modelcontextprotocol.io/specification/draft/client/elicitation)
* [Claude Code elicitation support](https://claudelab.net/en/articles/claude-code/mcp-elicitation-support)
