Skip to main content
Glama

Server Details

Human-in-the-loop for AI agents over MCP: durable approvals with a hosted review page & audit trail

Ownership verified
Status
Healthy
Uptime
84.4% over 81 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A4.4/5.0

Scored across 13 tools

Disambiguation4/5

Each tool targets a distinct phase of the elicitation lifecycle (create, await, status, result, cancel, history), and descriptions explicitly cross-reference when to prefer one over another (e.g. elicit_confirm vs elicit_form). The main residual overlap is among the input-collecting tools — elicit_approval's form mode, elicit_form, elicit_proposal, and elicit_selection all gather human input — though the async/sync and payload-shape distinctions are documented.

Naming Consistency4/5

All 13 tools share the elicit_ prefix with readable suffixes, which is highly predictable. Minor inconsistency: some suffixes are nouns (elicit_approval, elicit_form, elicit_selection) while others are verbs (elicit_await, elicit_cancel, elicit_display), so action types aren't uniformly signaled.

Tool Count5/5

13 tools is well within a reasonable range and each maps to a real lifecycle step or diagnostic need. No tool appears redundant padding; the async (approval/proposal/selection) and sync (form/confirm) families plus helpers each earn their place.

Completeness5/5

The surface covers the full elicitation lifecycle: initiation (form, confirm, approval, proposal, selection), blocking/non-blocking observation (await, status), outcome retrieval (result), withdrawal (cancel), history, display, host capability probing, and connectivity. No obvious dead ends for the stated purpose.

Available Tools

13 tools
elicit_approvalRequest human approvalAInspect

Request human approval before proceeding. Async: returns immediately with a pending request that a human decides later on the hosted review page (block with elicit_await, fetch the outcome with elicit_result); for a synchronous in-session form answered by the connected host, use elicit_form instead. Two modes, at least one of context / requestedSchema is required: (1) json mode — pass context, a read-only payload the reviewer approves or declines as-is; optionally also pass displayTemplate, a LiquidJS template that customizes how context is rendered on the review page (instead of the default raw JSON view); (2) form mode — pass requestedSchema, a JSON Schema restricted to the MCP elicitation requestedSchema subset (MCP 2025-11-25): a flat object whose properties are strings, numbers/integers, booleans, or single/multi-select enums (no nested objects, arrays of objects, $ref, or allOf) — the reviewer fills in these fields on the review page and submits them back as the submitted data. Both may be passed together: context (optionally rendered via displayTemplate) is then displayed as read-only context above the form (it is NOT merged into or used to pre-fill the form fields, which are seeded only from requestedSchema defaults). Per the MCP elicitation spec, form mode MUST NOT be used to request secrets, credentials, or other sensitive information from the reviewer.

NameRequiredDescriptionDefault
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.
contextNojson mode: a read-only JSON payload the reviewer approves or declines as-is. Echoed back verbatim in elicit_result. Rendered as raw JSON unless `displayTemplate` is given.
messageYesThe prompt shown to the reviewer at the top of the review page — say what needs approving and why.
displayTemplateNoOptional LiquidJS template that customizes how `context` is rendered on the review page. `context` is exposed to the template under the `context` key (e.g. {{ context.recordId }}).
requestedSchemaNoform mode: JSON Schema in the MCP elicitation requestedSchema subset (flat object of string / number / integer / boolean / enum properties — no nested objects, arrays of objects, $ref, or allOf). The reviewer fills these fields on the review page; property `default`s seed the form.
expiresInSecondsNoHow long the request stays decidable, in seconds (default 3600, clamped 60-604800 — 1 minute to 7 days).

Output Schema

NameRequiredDescription
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.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover only openWorld/idempotent/destructive hints, and the description adds substantially more: returns immediately with a pending request decided later, the hosted review page flow, the MCP spec prohibition on requesting secrets/credentials in form mode, and the fact that `context` is not merged into or used to pre-fill form fields. That last point is exactly the kind of behavioral trap an agent would otherwise get wrong.

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

Conciseness4/5

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

It is long, but front-loaded with the async-vs-sync decision and organized into clearly marked modes, so no sentence is filler. It could be tightened slightly (the MCP-version parenthetical and repeated subset restatements), but the density is justified by the behavioral traps it prevents.

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, return values need not be explained, and the description still covers the async lifecycle, both modes, the schema subset restriction, the sensitive-data prohibition, and the alternative tools. Nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description materially enriches several params: `context` is echoed verbatim and rendered as raw JSON unless `displayTemplate` is given, `displayTemplate` is a LiquidJS template with `context` exposed under the `context` key, and `requestedSchema` is constrained to the flat MCP subset with defaults seeding the form. `labels` and `expiresInSeconds` are left entirely to the schema, which is the only small gap.

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?

Opens with a specific verb+resource ('Request human approval') and immediately scopes it against siblings by naming elicit_await, elicit_result, and elicit_form with the condition that selects each. An agent can tell this apart from the other twelve elicit_* tools without opening a schema.

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?

Explicit routing: async mode blocks via elicit_await and fetches via elicit_result, while synchronous in-session forms belong to elicit_form. It also states the precondition that at least one of `context`/`requestedSchema` is required and when to pick each mode (including passing both together).

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

elicit_awaitWait for a decisionA
Read-only
Inspect

Long-poll for a decision on a pending elicitation: blocks until the request is submitted, declined, canceled, or expired — or until the server's polling window closes. Returns { status } (pending | submitted | declined | canceled | expired | consumed); a pending return means the window elapsed, so call again to keep waiting. Prefer this over polling elicit_status in a loop. If your host or gateway times out tool calls sooner than the server's window, pass maxWaitSeconds below that timeout.

NameRequiredDescriptionDefault
elicitationIdYesThe `elicitationId` returned by the creating tool (elicit_approval, elicit_selection, or elicit_proposal).
maxWaitSecondsNoLongest this call waits, in seconds. Can only shorten the server's window (50 by default), never extend it; values under 1 count as 1. Set it a few seconds below your host or gateway's tool-call timeout — e.g. 25 behind a 30-second gateway.

Output Schema

NameRequiredDescription
statusYesThe request's state when the wait ended; `pending` means the polling window elapsed undecided — call again to keep waiting.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint, so the description carries the real behavioral load and does: it discloses that the call blocks, the exact terminal conditions (submitted/declined/canceled/expired/window close), and that `pending` is not a failure but a window expiry requiring a re-call. That is precisely the non-obvious context an agent needs to avoid mis-handling a timeout as an error.

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?

Four dense sentences, zero filler, and the core blocking semantics plus the `pending`-means-retry rule are front-loaded before the timeout tuning advice. Every sentence earns its place.

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

Completeness4/5

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

With an output schema present, the description needn't enumerate return values, and it covers blocking, retry, and timeout interaction well. The one missing link is what to do after a `submitted` status — presumably `elicit_result` — which would complete the workflow chain across siblings.

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 coverage is 100%, so both parameters are already documented, including the 50-second default and the "can only shorten, never extend" rule. The description restates the host-timeout rationale but adds no syntax or edge-case detail beyond the schema, so the baseline 3 applies.

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?

States a specific verb and resource ("Long-poll for a decision on a pending elicitation") and immediately names the sibling it replaces ("Prefer this over polling `elicit_status` in a loop"). An agent can distinguish it from elicit_status, elicit_result, and elicit_cancel without opening any schema.

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?

Explicitly states when to use it over the alternative ("Prefer this over polling `elicit_status` in a loop") and gives a concrete condition for choosing `maxWaitSeconds` ("If your host or gateway times out tool calls sooner than the server's window"). It also tells the agent what to do on a `pending` return, closing the retry loop.

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

elicit_cancelCancel a pending elicitationA
Destructive
Inspect

Withdraw a pending elicitation you created — the plan changed or the request is superseded. The request resolves canceled: a terminal status distinct from declined (the reviewer's explicit no) and expired (nobody decided in time). The review page stops accepting decisions, pending elicit_await calls wake, and elicit_result has no outcome to fetch. Errors if the request was already decided or has expired; a cancel racing a concurrent decision loses cleanly to whichever landed first.

NameRequiredDescriptionDefault
elicitationIdYesThe `elicitationId` returned by the creating tool (elicit_approval, elicit_selection, or elicit_proposal).

Output Schema

NameRequiredDescription
statusYesThe request is now terminally canceled.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only say destructiveHint=true, idempotentHint=false, openWorldHint=false. The description adds substantial context beyond that: the resulting terminal state, that the review page stops accepting decisions, that pending `elicit_await` calls wake, that `elicit_result` has no outcome, the error conditions, and the concurrent-decision race behavior. This is exceptional disclosure for a mutation tool.

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?

Front-loaded with verb+resource, then consequence, then edge cases and race semantics. Every sentence carries distinct operational information with no restatement of the name or title.

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?

An output schema exists so return values needn't be spelled out, yet the description still tells the agent what happens downstream (elicit_result has no outcome). For a one-parameter mutation tool, nothing needed 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 coverage is 100%, so `elicitationId` is already fully documented, and the baseline is 3. The phrase 'you created' hints at an ownership constraint not stated in the schema, but no format, length, or lookup guidance is added, so this remains at the schema-driven baseline.

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?

States a specific verb and resource ('Withdraw a pending elicitation you created') and immediately disambiguates the resulting terminal status from the sibling concepts `declined` and `expired`. An agent can distinguish this from elicit_status, elicit_result, or elicit_await purely from the description.

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

Usage Guidelines4/5

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

Gives clear when-to-use motivation ('the plan changed or the request is superseded') and explicit when-not conditions ('Errors if the request was already decided or has expired'). It stops short of routing the agent to a sibling tool for the alternative cases, so it is clear context rather than full alternative-selection guidance.

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

elicit_confirmAsk the user to confirm (OK/Cancel)AInspect

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.

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

NameRequiredDescription
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.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations are thin (only openWorldHint/destructiveHint=false), and the description compensates by disclosing the three-state return contract and the dismissied/error reason values plus the retry advice ('ask again later') — genuinely useful behavior beyond the annotations. It stops short of 5 because it omits what happens on timeout expiry and any permission/dialog-context caveats.

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

Conciseness4/5

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

Three tight sentences, front-loaded with purpose, then routing, then return contract. The return-value sentence is partly redundant given an output schema exists, but it carries the non-obvious tri-state semantics, so it mostly earns its place.

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

Completeness4/5

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

Covers purpose, sibling routing, and the return/retry semantics an agent needs, and an output schema exists to carry the response shape. The remaining gap is disambiguation from the closest sibling, elicit_approval, which the description never addresses.

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% and every parameter (message, labels.ok/cancel, timeoutSeconds) is already documented in the schema, including trimming/clamping rules. The description adds no additional parameter semantics, so the baseline 3 applies.

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?

Names a specific verb+resource ('Ask the user an OK/Cancel confirmation') and adds the implementation identity (convenience wrapper over elicit_form, modeled on confirm()), which immediately separates it from the other elicit_* siblings.

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

Usage Guidelines4/5

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

Explicitly states the selecting condition ('single yes/no question') and the alternative ('use elicit_form to collect arbitrary fields'). However, with 13 siblings including the very close elicit_approval and elicit_selection, the routing is not exhaustive — it never says when this should lose to elicit_approval, which an agent must disambiguate.

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

elicit_displayShow the user rendered contentA
Read-only
Inspect

Show information to the user as rendered HTML instead of Markdown: pass a LiquidJS template and a JSON context, and hosts that support MCP Apps render it inline in the conversation. Use it for tables, reports, and summaries the user should scan; it does not collect a decision (use elicit_approval, elicit_selection, or elicit_confirm for that). Values interpolated with {{ context.* }} are HTML-escaped; truthiness is JavaScript-style. Templates may load Tailwind (https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4) and DaisyUI (https://cdn.jsdelivr.net/npm/daisyui@5) with their own / tags; the view follows the host's light/dark theme via data-theme. External images, scripts, styles, and fonts load only from https://cdn.jsdelivr.net and from origins your organization's admins allow (the server routes those through its resource proxy; write their normal URLs) — anything else is blocked, and the result's notes list your organization's allowed origins. Use data: URIs for images you already have that are not publicly reachable (generated, read from a local file, or from a private source the user gave you), passed in context rather than the template (64 KB vs 32 KB). Don't download a public image just to work around the allowlist; leave it out. The rendered HTML is not returned to you — the result reports what was shown and any blocked origins.

NameRequiredDescriptionDefault
titleNoHeading shown above the render.
contextNoJSON data exposed to the template as `context`. Max 64 KB serialized.
summaryNoOne or two sentences describing what is shown; returned as the tool's text result.
templateYesLiquidJS template producing an HTML fragment, rendered against {{ context.* }}. Max 32768 characters.

Output Schema

NameRequiredDescription
notesYesGuidance for you about this render (e.g. present the information in your reply, or which origins were blocked) — the same notes as the text result.
summaryYesWhat was shown (the caller's summary, or a default).
appsAdvertisedYesWhether the host advertised MCP Apps support (true/false), or null when the server couldn't tell. When false, the user may not see the render.
blockedOriginsYesExternal origins the template references that the view's CSP blocks — those resources won't load.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint; the description adds substantial context beyond them: the CDN allowlist (cdn.jsdelivr.net plus org-allowed origins), that disallowed origins are blocked and listed in the result notes, HTML-escaping of {{ context.* }}, JavaScript-style truthiness, Tailwind/DaisyUI support, data-theme theme following, and the fact that rendered HTML is never returned to the model. This is unusually rich operational disclosure.

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

Conciseness4/5

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

The core purpose and the sibling routing are front-loaded in the first sentence, which is the right call. The remainder is a dense single paragraph of em-dash and parenthetical asides; nearly every clause carries usable operational detail, but the block is harder to scan than a short bulleted constraint list would be.

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?

For a rendering tool with an output schema, the description still closes the important gaps: it states the rendered HTML is not returned to the model, what the result does report, how interpolation is escaped, and what resource-loading will silently fail. Nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is already 100%, so the schema documents all four parameters, but the description adds real meaning on top: data: URIs must be passed in context rather than the template and the 64 KB vs 32 KB budget explains why. That's a non-obvious interaction between two parameters that the schema alone does not convey.

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?

Names a specific verb and resource (render LiquidJS template + JSON context as HTML in the conversation) and immediately distinguishes itself from the decision-collecting siblings elicit_approval, elicit_selection, and elicit_confirm. An agent can tell this is a display-only tool without opening any schema.

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?

Gives an explicit when ('tables, reports, and summaries the user should scan') and an explicit when-not with named alternatives ('it does not collect a decision — use elicit_approval, elicit_selection, or elicit_confirm'). Routing between this tool and its closest siblings is fully specified.

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

elicit_doctorDiagnose the host's elicitation supportAInspect

Check whether the connected MCP host actually supports elicitation (and sampling/roots) before relying on it — advertising a capability is not the same as it working. Use it to decide whether to call elicit_form/elicit_confirm, to explain why a prompt did or didn't appear, or to contribute a host capability fingerprint. Returns a passive report derived from the initialize handshake; set probeElicitation: true to also run one live form round-trip (the user may see a dialog) and classify what really happened. Read-only. Pass share: true to contribute the report to Elicitly's public Support Matrix evidence queue — stored: this report plus the optional productName / productVersion / notes (the host product's name and version, which the report cannot see from inside, and any unusual setup); the report itself contains no elicitation payloads or conversation content. The result then carries shared: true|false.

NameRequiredDescriptionDefault
notesNoWith share: anything unusual about the setup worth recording with the evidence.
shareNoContribute this report to Elicitly's public Support Matrix evidence queue. Stored: the report plus productName / productVersion / notes; no elicitation payloads or conversation content.
productNameNoWith share: the host product's name as the user sees it (e.g. "Claude Desktop") — the report cannot detect this from inside.
productVersionNoWith share: the host product's version, if known.
probeElicitationNoAlso fire one live form-elicitation round-trip (the user may see a dialog) and report the outcome under probes.elicitationForm. Default false: passive capability report only, no prompt.

Output Schema

NameRequiredDescription
probesNoPresent only when probeElicitation was true: the live round-trip's attempted/action/latencyMs/verdict.
sharedNoPresent when share: true was passed — whether the report landed in the evidence queue.
supportYesElicitly's derived support booleans, inferred from the advertised capabilities.
initializeYesThe MCP initialize handshake echoed verbatim: { request: { clientInfo, capabilities }, response: { protocolVersion, capabilities, serverInfo } }.
shareErrorNoPresent when sharing was requested but failed: a one-line error summary.
deprecationsYesSpec-level deprecation advisories (MCP 2026-07-28, SEP-2577) for the client features the report surfaces.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only say openWorldHint=false and destructiveHint=false; the description adds the material behavioral facts beyond them — that probeElicitation fires a live round-trip with a possible user dialog, that share: true enqueues the report to a public evidence queue, exactly what is stored, and that no elicitation payloads or conversation content leave. This is exactly the extra context annotations cannot carry.

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

Conciseness4/5

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

Purpose and the safety/privacy caveats are front-loaded, and each sentence carries distinct information. It is dense and the longer sentences (share clause) could be split, but nothing is redundant 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?

An output schema exists, so return structure needn't be documented, and the description still explains the passive-vs-probe modes, the sharing side effect, and data handling. An agent has everything needed to decide whether and how to call it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds the interaction between parameters: probeElicitation's default-false passive behavior, and the pairing of share: true with productName/productVersion/notes that the report cannot self-detect. It slightly exceeds the schema's per-field text by explaining why those fields exist and what the result carries (shared: true|false).

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 — diagnosing whether the connected host actually supports elicitation — and explicitly frames it against the sibling call targets (elicit_form/elicit_confirm). An agent can distinguish this diagnostic tool from the other elicit_* siblings without opening any schema.

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?

It gives explicit when-to-use triggers: deciding whether to call elicit_form/elicit_confirm, explaining why a prompt did or didn't appear, or contributing a capability fingerprint. The alternative path (turn on probeElicitation vs the default passive report) is spelled out with the trade-off.

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

elicit_formAsk the user to fill a formAInspect

Trigger a form elicitation with a caller-supplied JSON schema; returns the raw {action, content}. For a plain OK/Cancel question, prefer elicit_confirm. MUST NOT be used to request secrets, credentials, or other sensitive information.

NameRequiredDescriptionDefault
messageYesThe instruction shown to the user above the form fields.
timeoutSecondsNoHow long to wait for the answer, in seconds (default 300, clamped 60-3600) — raise it for forms with several fields.
requestedSchemaYesJSON Schema for the form, restricted to the MCP elicitation requestedSchema subset: a flat object whose properties are strings, numbers/integers, booleans, or enums — no nested objects, arrays of objects, $ref, or allOf. See https://modelcontextprotocol.io/specification/2025-11-25/client/elicitation#requested-schema

Output Schema

NameRequiredDescription
actionYesaccept = the user submitted the form; decline = an explicit no; cancel = dismissed unanswered (including timeout); error = the elicitation failed.
contentYesOn accept, the submitted values keyed by requestedSchema property name; null for every other action.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations only cover openWorld/destructive hints, so the description carries the rest. It discloses the return shape ('raw {action, content}') and a notable behavioral constraint (MUST NOT be used to request secrets or credentials). It doesn't cover auth or what happens on timeout failure.

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?

Two sentences, zero waste, with the core capability front-loaded and the routing/prohibition clauses after it. Every clause earns its place.

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?

An output schema exists, so return values need not be elaborated; the description still notes the raw return shape. Purpose, the primary alternative, and the sensitive-data prohibition are all present, which is sufficient for a 3-param tool with rich schema coverage.

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?

The schema already documents all three parameters at 100% coverage, including the timeout default and clamp range and the requestedSchema subset restriction. The description adds no format or syntax detail beyond what the schema provides, so baseline 3 applies.

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?

States a specific verb+resource ('Trigger a form elicitation with a caller-supplied JSON schema') and names the sibling it is not for ('For a plain OK/Cancel question, prefer elicit_confirm'). An agent can distinguish it from elicit_confirm without opening either schema.

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

Usage Guidelines4/5

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

Explicitly routes the common OK/Cancel case to elicit_confirm and states a hard exclusion (no secrets/credentials). It does not differentiate against the other form-like siblings (elicit_selection, elicit_proposal, elicit_display), so it stops short of full routing guidance.

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

elicit_historyList past elicitationsA
Read-only
Inspect

List your past elicitations, newest first, paginated with jump-to-page. scope 'me' = your own requests; 'org' = the whole organization (admins only). Returns { items, page, pageSize, asOf, total, scope } — total lets you compute the last page (ceil(total/pageSize)); pass the returned asOf back on later pages to keep the window stable while new requests arrive.

NameRequiredDescriptionDefault
asOfNoSnapshot anchor from a previous page's result — pass it back to keep pagination stable while new requests arrive. Omit on the first page.
pageNo1-based page number to fetch.
scopeNo'me' = your own requests; 'org' = the whole organization (admins only).me
pageSizeNoItems per page (1-100).

Output Schema

NameRequiredDescription
asOfYesThe snapshot anchor this page was computed at — pass it back on later pages to keep the window stable while new requests arrive.
pageYesThe 1-based page that was served.
itemsYesThe requested page of elicitations, newest first.
scopeYesThe scope that was served.
totalYesTotal matching requests — the last page is ceil(total / pageSize).
pageSizeYesItems per page that was applied.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false), so the description's added value is the pagination behavior and permission constraint: org scope is admin-only, and passing back `asOf` keeps the window stable as new requests arrive. That goes beyond what annotations declare.

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

Conciseness4/5

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

Three sentences, front-loaded with purpose, ordering, and pagination before the return shape and the page-computation tip. Dense but every sentence carries information; no filler.

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?

Covers pagination semantics, stability across pages, permission gating for org scope, and the returned fields — more than an output schema would require. Nothing material for correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3; the description adds real meaning by tying `asOf` to cross-page stability and showing how `total` yields the last page via ceil(total/pageSize). It largely mirrors the schema text for `scope`, but the pagination recipe is genuinely additive.

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?

States a specific verb+resource ('List your past elicitations') with scope and ordering ('newest first'), which cleanly separates it from the sibling action tools (elicit_approval, elicit_await, etc.). An agent can identify this as the read/history tool without opening the schema.

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

Usage Guidelines4/5

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

Explains the `scope` choice ('me' = your own; 'org' = whole organization, admins only) and when to reuse `asOf` across pages. It gives clear context but does not explicitly name an alternative tool or state when-not-to-use this one.

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

elicit_pingCheck connectivityA
Read-only
Inspect

Connectivity check for the hosted Elicitly server: echoes message back as pong: <message> over the authenticated session.

NameRequiredDescriptionDefault
messageNoText to echo back (default "ping").

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so no mutation concern. The description adds meaningful context beyond the annotation by specifying that it echoes the message as 'pong: <message>' and that it requires an authenticated session, which helps the agent understand expected 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?

A single sentence that front-loads the purpose ('Connectivity check'), states the resource, and explains the returned output. Every word earns its place with zero redundancy.

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?

For a tool with one optional parameter and no output schema, the description is complete: it conveys purpose, behavior, the authenticated-session requirement, and the exact return format. An agent has everything needed to invoke it correctly.

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 coverage is 100%, with the 'message' parameter fully described as 'Text to echo back (default "ping")'. The description reinforces this by showing the output format, but does not add substantial new parameter-level meaning beyond the schema.

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 ('Connectivity check') and resource ('hosted Elicitly server'), and explains the exact echo behavior. This clearly distinguishes it from sibling elicit_* tools, which are all task-oriented operations rather than a ping.

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

Usage Guidelines4/5

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

The description clearly implies the tool is for verifying connectivity and that it operates over an authenticated session. It does not explicitly list when-not-to-use it, but the dedicated ping nature makes the usage context unambiguous among the siblings.

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

elicit_proposalPropose a record change for reviewAInspect

Ask a human to review, edit, and selectively approve a proposed record create-or-update, shown as a diff grid: one or more read-only Source columns, a read-only Current column, and an editable Proposed column. Async like elicit_approval: returns a pending request decided on the hosted review page. Pass requestedSchema (a JSON Schema in the MCP elicitation requestedSchema subset — flat object of strings/numbers/booleans/enums) to define the editable Proposed fields; each property's default is its initial proposed value (you compute it — e.g. take Current if present else Source). Pass columns to name the Source column(s) and the Current column, and fields to supply each property's Source value(s) and Current value. The reviewer edits proposed values, chooses which fields to include, and submits; the result (via elicit_result) carries decision (submitted|declined) and, on submit, formSubmission (included fields only). MUST NOT be used to request secrets or credentials.

NameRequiredDescriptionDefault
fieldsNoPer-property read-only cell values, keyed by requestedSchema property name: { <property>: { sources: { <sourceKey>: value }, current: value, include?: boolean } }. `include: false` starts the field unchecked.
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.
columnsYesNames the read-only columns of the diff grid.
contextNoOptional identity/context passthrough echoed back verbatim in elicit_result — NOT shown to the reviewer unless `displayTemplate` renders it.
messageYesThe prompt shown to the reviewer above the diff grid — say what change is proposed and why.
displayTemplateNoOptional LiquidJS template rendered above the grid. `context` is exposed under the `context` key (e.g. {{ context.recordId }}). Without it, `context` is not displayed.
requestedSchemaYesJSON Schema (MCP elicitation requestedSchema subset — flat object of string / number / boolean / enum properties) defining the editable Proposed fields; each property's `default` is its initial proposed value.
expiresInSecondsNoHow long the request stays decidable, in seconds (default 3600, clamped 60-604800 — 1 minute to 7 days).

Output Schema

NameRequiredDescription
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.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (which only declare non-destructive, non-idempotent, closed-world), the description discloses the async lifecycle, that a pending request is decided on a hosted page, the reviewer's edit/select/submit flow, and the exact result payload (`decision` = submitted|declined, `formSubmission` = included fields only). This is substantial behavioral context the annotations do not carry.

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

Conciseness4/5

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

Purpose and mechanism are front-loaded in the first sentence, and most subsequent sentences carry real payload (default computation, result shape, the secrets exclusion). It is dense and slightly long, but nearly every clause earns its place for a tool this complex.

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?

For an 8-parameter async tool with nested objects and an output schema, the description covers the async model, the grid model, the key parameter semantics, and the result path to elicit_result. Return values are not over-explained (output schema exists), and the secrets prohibition closes the main misuse risk.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline would be 3, but the description adds genuine semantics: it explains that `requestedSchema` defines the editable Proposed fields and that each property's `default` is the initial value the caller must compute (Current if present else Source), and it clarifies the roles of `columns` and `fields` in populating the grid. This is more than the schema restates.

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?

States a specific verb and resource ('Ask a human to review, edit, and selectively approve a proposed record create-or-update') and pins the mechanism ('shown as a diff grid: read-only Source / Current columns, editable Proposed column'). This makes it immediately distinguishable from elicit_approval and elicit_form without opening any schema.

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

Usage Guidelines4/5

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

Gives clear usage context ('Async like elicit_approval: returns a pending request decided on the hosted review page') and names the follow-up sibling (elicit_result), plus an explicit exclusion ('MUST NOT be used to request secrets or credentials'). It does not directly state when to choose this over sibling form/selection tools, so it stops short of full routing guidance.

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

elicit_resultFetch a decided elicitation's outcomeA
Idempotent
Inspect

Fetch the outcome of a decided request (poll elicit_status or block on elicit_await first — this errors while the request is still pending, after it expires undecided, or if it was canceled via elicit_cancel; repeatable reads are fine afterward). Returns { status: 'consumed', decision, context, formSubmission } for every tool. formSubmission is what the review form submitted, keyed by field name: the form fields for elicit_approval (null in json mode); { selectedIds } for elicit_selection; only the fields the reviewer included for elicit_proposal. Null on decline.

NameRequiredDescriptionDefault
elicitationIdYesThe `elicitationId` returned by the creating tool (elicit_approval, elicit_selection, or elicit_proposal).

Output Schema

NameRequiredDescription
statusYesThe outcome has been read at least once.
contextYesThe caller's original `context`, echoed verbatim (null if none was supplied).
decisionYesThe reviewer's choice: submitted = approved/filled in, declined = explicit no.
formSubmissionYesWhat the review form submitted, keyed by field name: elicit_approval's form fields (null in json mode), { selectedIds } for elicit_selection, the included fields for elicit_proposal. Null on decline.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover the safety profile (idempotentHint=true, destructiveHint=false), and the description goes further by disclosing lifecycle error states (pending, expired, canceled) and read-repeatability semantics. It also explains how the returned formSubmission varies by the originating tool, which no annotation conveys.

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

Conciseness4/5

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

Front-loaded with purpose, then preconditions, then return shape — a sensible order with no filler sentences. The long parentheticals make it dense to read, but every clause carries actionable information rather than repetition.

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?

An output schema exists, yet the description still usefully explains the per-tool variation in formSubmission, which the schema alone would not make obvious. Prerequisites, failure modes, and return shape are all covered for this single-parameter tool.

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% and the single parameter's provenance is already documented in the schema ('returned by the creating tool'). The description's parenthetical listing of calling tools adds marginal reinforcement but no new syntax or format detail, so baseline 3 applies.

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?

States a specific verb+resource ('fetch the outcome of a decided request') and immediately distinguishes itself from siblings by naming elicit_status and elicit_await as the prerequisite steps. An agent can tell it apart from elicit_cancel and the creating tools without opening any schema.

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?

Explicitly states the required ordering ('poll elicit_status or block on elicit_await first') and the three conditions under which it fails: still pending, expired undecided, or canceled via elicit_cancel. It also clarifies that repeat reads are permitted, leaving nothing to inference.

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

elicit_selectionAsk a human to choose optionsAInspect

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.

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

NameRequiredDescription
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.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations cover only safety/hints (openWorldHint=false, destructiveHint=false, idempotentHint=false), so the description carries the workflow burden and does so well: it discloses the async pending-request model, that the decision happens on the hosted review page, and that selected ids return via elicit_result as `selectedIds`. It does not cover expiry or cancellation behavior, but the core interaction model is explicit.

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

Conciseness4/5

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

Front-loaded with purpose, then the async contract, then rendering/selection semantics, in roughly four dense sentences. Nearly every clause earns its place, though the rendering sentence and the single/multi-select sentence could be compressed into one without loss.

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

Completeness4/5

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

With an output schema present, return values need not be described, and the description still adds the essential lifecycle (where the decision happens, how the result is fetched) plus the default selection mode for an 11-parameter tool with nested objects. Remaining gaps (expiry, behavior on decline) are minor rather than blocking.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3; the description earns extra by clarifying cross-parameter default semantics — single-select by default with `maxSelections` as the switch to multi-select — and by explaining how `css` and Liquid templates shape the option table. Detail on individual template parameters stays in the schema.

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 first sentence gives a specific verb and resource ('ask a human to choose one or more options from a caller-supplied list') plus concrete use cases (disambiguation, record matching, picking work items). It also distinguishes itself from siblings by name, framing the async flow relative to elicit_approval and elicit_result.

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

Usage Guidelines4/5

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

Concrete use cases and a clear routing signal to elicit_result for retrieving the answer, plus the async framing that parallels elicit_approval. It stops short of stating when NOT to use it (e.g. vs elicit_confirm or elicit_form), so an agent must infer the boundary from the selection-shaped framing.

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

elicit_statusCheck an elicitation's statusA
Read-only
Inspect

Non-blocking status check for an elicitation you created: returns { status } — pending | submitted | declined | canceled | expired | consumed. Read-only and repeatable (never consumes the result); use elicit_await to block on a decision and elicit_result to fetch the outcome.

NameRequiredDescriptionDefault
elicitationIdYesThe `elicitationId` returned by the creating tool (elicit_approval, elicit_selection, or elicit_proposal).

Output Schema

NameRequiredDescription
statusYesThe request's current lifecycle state.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint; the description adds the genuinely important behavioral traits beyond that — non-blocking, repeatable, and 'never consumes the result' (contrasting with elicit_result, which does). It also enumerates the possible status values the caller will observe.

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?

A single dense sentence that front-loads the core behavior, then the return shape, then the alternative tools. No filler, no repetition of the title.

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?

Read-only safety is covered by annotations, the return value is enumerated inline (and an output schema exists), and the sibling routing is spelled out. Nothing an agent needs to invoke this 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% and the single parameter's origin is already documented in the schema ('returned by the creating tool'). The description's phrasing 'an elicitation you created' adds a mild ownership constraint but nothing about id format or lookup behavior. Baseline 3 applies when the schema carries the parameter detail.

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?

States a specific verb and resource ('non-blocking status check for an elicitation') and immediately differentiates itself from two named siblings, elicit_await and elicit_result. An agent can pick this tool without opening any schema.

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?

Explicit routing: use this for non-blocking checks, elicit_await to block on a decision, elicit_result to fetch the outcome. It also implicitly scopes usage to elicitations the caller created.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedelicit_await1 field changed
      • addedInput schema / properties / maxWaitSeconds
        Added value: +{
        +  "description": "Longest this call waits, in seconds. Can only shorten the server's window (50 by default), never extend it; values under 1 count as 1. Set it a few seconds below your host or gateway's tool-call timeout — e.g. 25 behind a 30-second gateway.",
        +  "type": "number"
        +}
  2. 12 tool updates
    • Changedelicit_approval1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +{}
    • Changedelicit_await1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +{}
    • Changedelicit_cancel1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +{}
    • Changedelicit_confirm1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +{}
    • Changedelicit_display5 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +{}
      • addedOutput schema / properties / appsAdvertised
        Added value: +{
        +  "description": "Whether the host advertised MCP Apps support (true/false), or null when the server couldn't tell. When false, the user may not see the render.",
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / blockedOrigins / items / additionalProperties
        Previous value: -falseNew value: +{}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "description": "Guidance for you about this render (e.g. present the information in your reply, or which origins were blocked) — the same notes as the text result.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "summary",
        -  "blockedOrigins"
        -]New value: +[
        +  "summary",
        +  "blockedOrigins",
        +  "appsAdvertised",
        +  "notes"
        +]
    • Changedelicit_doctor3 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +{}
      • changedOutput schema / properties / probes / additionalProperties
        Previous value: -falseNew value: +{}
      • changedOutput schema / properties / support / additionalProperties
        Previous value: -falseNew value: +{}
    • Changedelicit_form1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +{}
    • Changedelicit_history1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +{}
    • Changedelicit_proposal1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +{}
    • Changedelicit_result1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +{}
    • Changedelicit_selection1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +{}
    • Changedelicit_status1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +{}
  3. 1 tool update
    • Addedelicit_display
  4. 4 tool updates
    • Changedelicit_approval1 field changed
      • changedInput schema / properties / displayTemplate / maxLength
        Previous value: -20000New value: +32768
    • Changedelicit_proposal1 field changed
      • changedInput schema / properties / displayTemplate / maxLength
        Previous value: -20000New value: +32768
    • Changedelicit_result3 fields changed
      • changedOutput schema / properties / formSubmission / description
        Previous value: -"The reviewer-filled field values keyed by requestedSchema property name; null in json mode or on decline."New value: +"What the review form submitted, keyed by field name: elicit_approval's form fields (null in json mode), { selectedIds } for elicit_selection, the included fields for elicit_proposal. Null on decline."
      • removedOutput schema / properties / selectedIds
        Removed value: -{
        -  "description": "elicit_selection only, on submit: the chosen option ids.",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / values
        Removed value: -{
        -  "additionalProperties": {},
        -  "description": "elicit_proposal only, on submit: the proposed values for just the fields the reviewer included.",
        -  "propertyNames": {
        -    "type": "string"
        -  },
        -  "type": "object"
        -}
    • Changedelicit_selection5 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
  5. 1 tool update
    • Changedelicit_selection1 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`."

Publisher details

Operator
Preneur LLC · Publisher source
Operator website
https://www.elicitly.ai
Vendor relationship
First-party · Publisher source
Trust center
Not available
Restrictions
Requires an Elicitly account (sign up at app.elicitly.ai/signup). Free during Early Access. OAuth sign-in only. · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Human-in-the-Loop authorization gateway for AI Agents. Securely pause MCP workflows and route high-risk actions to human approvers via Slack or Email.
    60 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server that provides human-in-the-loop approval for risky AI agent actions, with durable state and audit logs.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Runtime permission, approval, and audit governance for AI agent tool execution, enabling human oversight of risky actions via an MCP server.
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources