Ask the user to pick one option
ask_choicePresents a small set of mutually exclusive options and waits for the user to select one, returning the chosen label. Use when a decision has enumerable alternatives that affect what you build.
Instructions
Ask the user to choose exactly one of 2-25 options and wait for the answer. Use this when a decision has a small set of genuinely viable alternatives and the choice changes what you build — for example an architecture, a library, a naming scheme, or a file layout. Prefer this over ask_confirm whenever the real answer is a choice rather than yes/no, and over ask_text whenever the reasonable answers can be enumerated. The user may additionally leave free-text notes when allow_free_text is true. Returns the selected option label in answer/selected.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| default | No | Optional label of the recommended option. Must exactly match one of the provided labels. | |
| options | Yes | Two to five mutually exclusive options is ideal. Every option must be genuinely viable; do not pad the list. Use ask_confirm for yes/no instead of a two-item choice. | |
| question | Yes | The single decision you need the user to make. State it as a direct question and include the context needed to answer it without re-reading the whole task. | |
| timeout_ms | No | Optional override, in milliseconds, for how long to wait for the user. Defaults to the server setting (HIM_TIMEOUT_MS, 300000). | |
| allow_free_text | No | Set true to also show an optional free-text field alongside the options, letting the user add nuance or an answer you did not list. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| via | Yes | Channel that produced the outcome. | |
| tool | Yes | Name of the tool that produced this result. | |
| answer | Yes | The answer as a string: chosen label, "yes"/"no", or the typed text. | |
| status | Yes | Outcome. Only `answered` carries a usable answer. `needs_user_input` means you must ask the user yourself, in chat, using the question and options in `message`. | |
| message | Yes | Human-readable summary, including options when the question is still unanswered. | |
| fallback | Yes | Configured fallback mode (HIM_FALLBACK). | |
| form_url | Yes | Loopback form URL, when the http fallback served this question. | |
| question | Yes | The question as it was asked. | |
| selected | Yes | Selected labels; exactly one for ask_choice, N for ask_multi_select. | |
| confirmed | Yes | ask_confirm only: true for yes, false for no. | |
| free_text | Yes | Optional free-text note supplied alongside a choice. | |
| next_step | Yes | What you should do next. Follow it. | |
| elapsed_ms | Yes | Wall-clock time spent waiting for the user, in milliseconds. | |
| client_elicitation | Yes | Whether the connected client declared MCP form-elicitation support during initialize. | |
| auto_reject_suspected | Yes | True when a decline came back so fast that the client probably auto-rejected rather than asking the user. |