Skip to main content
Glama

Ask the user to pick one option

ask_choice
Read-only

Presents 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

TableJSON Schema
NameRequiredDescriptionDefault
defaultNoOptional label of the recommended option. Must exactly match one of the provided labels.
optionsYesTwo 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.
questionYesThe 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_msNoOptional override, in milliseconds, for how long to wait for the user. Defaults to the server setting (HIM_TIMEOUT_MS, 300000).
allow_free_textNoSet 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

TableJSON Schema
NameRequiredDescriptionDefault
viaYesChannel that produced the outcome.
toolYesName of the tool that produced this result.
answerYesThe answer as a string: chosen label, "yes"/"no", or the typed text.
statusYesOutcome. 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`.
messageYesHuman-readable summary, including options when the question is still unanswered.
fallbackYesConfigured fallback mode (HIM_FALLBACK).
form_urlYesLoopback form URL, when the http fallback served this question.
questionYesThe question as it was asked.
selectedYesSelected labels; exactly one for ask_choice, N for ask_multi_select.
confirmedYesask_confirm only: true for yes, false for no.
free_textYesOptional free-text note supplied alongside a choice.
next_stepYesWhat you should do next. Follow it.
elapsed_msYesWall-clock time spent waiting for the user, in milliseconds.
client_elicitationYesWhether the connected client declared MCP form-elicitation support during initialize.
auto_reject_suspectedYesTrue when a decline came back so fast that the client probably auto-rejected rather than asking the user.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.2.0

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: it waits for the answer, supports optional free-text notes when allow_free_text is true, and returns the selected option label in answer/selected. It doesn't describe timeout behavior in prose, but the schema covers timeout_ms, so the description adds solid value without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core behavior is in the first sentence, followed by usage guidance and alternatives. Every sentence earns its place, and there is no redundant restating of schema fields. It is appropriately sized for a tool with this complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for an interactive choice tool. It covers what the tool does, when to use it, how it differs from siblings, the free-text extension, and the return value. The output schema exists, so return values need not be explained in prose. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters thoroughly. The description adds a little extra meaning by noting the free-text behavior tied to allow_free_text and the return value mapping, but it doesn't need to compensate for any schema gaps. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Ask the user to choose exactly one of 2-25 options and wait for the answer') and clearly distinguishes this from siblings by naming ask_confirm and ask_text as alternatives. It also specifies the return value, so an agent knows exactly what this tool does and how it differs from other ask tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: use when a decision has a small set of genuinely viable alternatives and the choice changes what you build. It also names alternatives and the conditions that select them ('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'). This is exemplary routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.