Skip to main content
Glama

Ask a human to choose options

elicit_selection

Ask a human to choose one or more options from a caller-supplied list (disambiguation, record matching, picking work items). Async like elicit_approval: returns a pending request decided on the hosted review page; the chosen option ids come back via elicit_result as selectedIds. Options render as rows of a table the Liquid templates and css can customize. Defaults to single-select — raise maxSelections for multi-select.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cssNoCustom CSS injected on the review page to style the option table.
labelsNoRelabel or localize the action buttons (submit, decline). Each label is trimmed, 1-40 characters; unknown keys are rejected. Button placement and styling stay fixed.
messageYesThe instruction shown above the option list — say what the reviewer is choosing and why.
optionsYesThe choices (1-500). Each option is an object with a required unique `id` (returned in `selectedIds`) plus any extra keys, which `rowTemplate` / `hoverTemplate` can reference (e.g. {{ option.name }}).
rowTemplateNoLiquidJS template producing the <td> cells of one option row; the option is exposed as `option` (e.g. <td>{{ option.name }}</td><td>{{ option.score }}</td>). Any link must carry target="_blank" — without it the click replaces the option table with the linked page and the reviewer loses the form. Default: a single cell of `option.label`, falling back to `option.id`.
hoverTemplateNoLiquidJS template for a per-option hover/details card; the option is exposed as `option`. Omit for no hover card.
maxSelectionsNoMost options the reviewer may pick (default 1 = single-select; clamped to the option count).
minSelectionsNoFewest options the reviewer must pick to submit (default 1; 0 allows none).
footerTemplateNoLiquidJS template producing the table footer rows (no variables). Omit for no footer.
headingTemplateNoLiquidJS template producing the <th> cells of the table header (no variables). Omit for no header row.
expiresInSecondsNoHow long the request stays decidable, in seconds (default 3600, clamped 60-604800 — 1 minute to 7 days).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
statusYesAlways `pending` at creation.
expiresAtYesWhen the request stops being decidable (timestamp).
reviewUrlYesURL of the hosted review page where a human decides this request.
elicitationIdYesUnique id of the created request — pass it to elicit_await / elicit_status / elicit_result / elicit_cancel.
elicitationDeliveredYesTrue when the request was also pushed to the connected client as a url-mode elicitation; when false, surface `reviewUrl` to the human yourself.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / additionalProperties
      Previous value: -falseNew value: +{}
  2. Changed5 schema fields changed
    • changedInput schema / properties / css / maxLength
      Previous value: -20000New value: +32768
    • changedInput schema / properties / footerTemplate / maxLength
      Previous value: -20000New value: +32768
    • changedInput schema / properties / headingTemplate / maxLength
      Previous value: -20000New value: +32768
    • changedInput schema / properties / hoverTemplate / maxLength
      Previous value: -20000New value: +32768
    • changedInput schema / properties / rowTemplate / maxLength
      Previous value: -20000New value: +32768
  3. Changed1 schema field changed
    • changedInput schema / properties / rowTemplate / description
      Previous value: -"LiquidJS template producing the <td> cells of one option row; the option is exposed as `option` (e.g. <td>{{ option.name }}</td><td>{{ option.score }}</td>). Default: a single cell of `option.label`, falling back to `option.id`."New value: +"LiquidJS template producing the <td> cells of one option row; the option is exposed as `option` (e.g. <td>{{ option.name }}</td><td>{{ option.score }}</td>). Any link must carry target=\"_blank\" — without it the click replaces the option table with the linked page and the reviewer loses the form. Default: a single cell of `option.label`, falling back to `option.id`."
  4. Changed14 schema fields changed
    • addedInput schema / properties / css / description
      Added value: +"Custom CSS injected on the review page to style the option table."
    • addedInput schema / properties / expiresInSeconds / description
      Added value: +"How long the request stays decidable, in seconds (default 3600, clamped 60-604800 — 1 minute to 7 days)."
    • addedInput schema / properties / footerTemplate / description
      Added value: +"LiquidJS template producing the table footer rows (no variables). Omit for no footer."
    • addedInput schema / properties / headingTemplate / description
      Added value: +"LiquidJS template producing the <th> cells of the table header (no variables). Omit for no header row."
    • addedInput schema / properties / hoverTemplate / description
      Added value: +"LiquidJS template for a per-option hover/details card; the option is exposed as `option`. Omit for no hover card."
    • addedInput schema / properties / labels / description
      Added value: +"Relabel or localize the action buttons (submit, decline). Each label is trimmed, 1-40 characters; unknown keys are rejected. Button placement and styling stay fixed."
    • addedInput schema / properties / labels / properties / decline / description
      Added value: +"Replacement label for the decline button."
    • addedInput schema / properties / labels / properties / submit / description
      Added value: +"Replacement label for the submit button."
    • addedInput schema / properties / maxSelections / description
      Added value: +"Most options the reviewer may pick (default 1 = single-select; clamped to the option count)."
    • addedInput schema / properties / message / description
      Added value: +"The instruction shown above the option list — say what the reviewer is choosing and why."
    • addedInput schema / properties / minSelections / description
      Added value: +"Fewest options the reviewer must pick to submit (default 1; 0 allows none)."
    • addedInput schema / properties / options / description
      Added value: +"The choices (1-500). Each option is an object with a required unique `id` (returned in `selectedIds`) plus any extra keys, which `rowTemplate` / `hoverTemplate` can reference (e.g. {{ option.name }})."
    • addedInput schema / properties / rowTemplate / description
      Added value: +"LiquidJS template producing the <td> cells of one option row; the option is exposed as `option` (e.g. <td>{{ option.name }}</td><td>{{ option.score }}</td>). Default: a single cell of `option.label`, falling back to `option.id`."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "elicitationDelivered": {
      +      "description": "True when the request was also pushed to the connected client as a url-mode elicitation; when false, surface `reviewUrl` to the human yourself.",
      +      "type": "boolean"
      +    },
      +    "elicitationId": {
      +      "description": "Unique id of the created request — pass it to elicit_await / elicit_status / elicit_result / elicit_cancel.",
      +      "type": "string"
      +    },
      +    "expiresAt": {
      +      "description": "When the request stops being decidable (timestamp).",
      +      "type": "string"
      +    },
      +    "reviewUrl": {
      +      "description": "URL of the hosted review page where a human decides this request.",
      +      "type": "string"
      +    },
      +    "status": {
      +      "const": "pending",
      +      "description": "Always `pending` at creation.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "elicitationId",
      +    "status",
      +    "reviewUrl",
      +    "expiresAt",
      +    "elicitationDelivered"
      +  ],
      +  "type": "object"
      +}
  5. First observed

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources