Skip to main content
Glama

Ask the user to confirm (OK/Cancel)

elicit_confirm

Ask the user an OK/Cancel confirmation via elicitation (convenience wrapper over elicit_form), modeled on JavaScript's confirm(). Use this for a single yes/no question; use elicit_form to collect arbitrary fields. Returns three-state {confirmed}: true = proceed, false = a human explicitly said no, null = no answer was obtained (reason: "dismissed" | "error") — ask again later.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
labelsNoRelabel or localize the OK/Cancel buttons. Each label is trimmed, 1-40 characters; unknown keys are rejected. Button placement and styling stay fixed.
messageYesThe yes/no question shown to the user in the host's elicitation dialog.
timeoutSecondsNoHow long to wait for the answer, in seconds (default 300, clamped 60-3600).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
reasonNoPresent only when confirmed is null: "dismissed" = the elicitation was closed unanswered (including timeout), "error" = it failed.
confirmedYestrue = the user chose OK; false = an explicit no (Cancel choice or declined elicitation); null = no answer was obtained.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed6 schema fields changed
    • addedInput schema / properties / labels / description
      Added value: +"Relabel or localize the OK/Cancel buttons. Each label is trimmed, 1-40 characters; unknown keys are rejected. Button placement and styling stay fixed."
    • addedInput schema / properties / labels / properties / cancel / description
      Added value: +"Replacement label for the Cancel button (e.g. \"Cancelar\")."
    • addedInput schema / properties / labels / properties / ok / description
      Added value: +"Replacement label for the OK button (e.g. \"Aceptar\")."
    • addedInput schema / properties / message / description
      Added value: +"The yes/no question shown to the user in the host's elicitation dialog."
    • addedInput schema / properties / timeoutSeconds / description
      Added value: +"How long to wait for the answer, in seconds (default 300, clamped 60-3600)."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "confirmed": {
      +      "description": "true = the user chose OK; false = an explicit no (Cancel choice or declined elicitation); null = no answer was obtained.",
      +      "type": [
      +        "boolean",
      +        "null"
      +      ]
      +    },
      +    "reason": {
      +      "description": "Present only when confirmed is null: \"dismissed\" = the elicitation was closed unanswered (including timeout), \"error\" = it failed.",
      +      "enum": [
      +        "dismissed",
      +        "error"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "confirmed"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description discloses the three-state return contract, including what true, false, and null mean, plus the possible reasons for null ('dismissed' | 'error'). It also notes the tool is a convenience wrapper, giving the agent a clear mental model of behavior.

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 well-structured: purpose first, usage guidance second, return semantics third. Every sentence contributes meaningful information with no padding.

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?

With an output schema present and full parameter documentation in the input schema, the description covers the remaining contextual needs: what the tool is for, when to choose it, and how to interpret ambiguous results. Nothing essential 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 fully documents message, labels, and timeoutSeconds. The description does not add parameter-level detail beyond that, but the baseline of 3 is appropriate because the schema carries the load.

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 action ('Ask the user an OK/Cancel confirmation'), names the protocol it models (JavaScript confirm), and identifies itself as a convenience wrapper over elicit_form. It clearly distinguishes itself from siblings by scoping to a single yes/no question rather than arbitrary field collection.

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 explicitly states when to use this tool: 'Use this for a single yes/no question; use elicit_form to collect arbitrary fields.' It also provides guidance for handling the null result: 'ask again later.' This is direct, actionable routing guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.1/5.0
Disambiguation3/5

Most tools have distinct roles in the elicitation lifecycle, but elicit_approval's form mode heavily overlaps with elicit_form, and elicit_confirm is explicitly a wrapper over elicit_form, creating real selection ambiguity. Status, await, result, cancel, and history are clearly separated, so the confusion is limited to a couple of closely related tools.

Naming Consistency4/5

All tools share the elicit_ prefix and use snake_case, which makes the namespace predictable and easy to scan. However, the second token mixes nouns (approval, form, proposal, status) with verbs (await, cancel, confirm, ping), and elicit_doctor is a non-obvious metaphor, so the pattern is not perfectly uniform.

Tool Count5/5

Twelve tools is within the ideal scope for a specialized elicitation server: creation variants, status polling, blocking wait, result retrieval, cancellation, history, and diagnostic helpers all have a place. The count feels purposeful rather than padded, and it fits the domain without becoming unwieldy.

Completeness4/5

The lifecycle is well covered: agents can create varied elicitations, check status, block on decisions, fetch results, cancel pending requests, and review history, plus diagnostic and connectivity tools. The main gap is the inability to update or extend a pending elicitation after creation, but agents can work around this by canceling and recreating.

Resources