Elicitly Pro
Server Details
Human-in-the-loop for AI agents over MCP: durable approvals with a hosted review page & audit trail
- Status
- Healthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
12 toolselicit_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.
| Name | Required | Description | Default |
|---|---|---|---|
| labels | No | 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. | |
| context | No | json 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. | |
| message | Yes | The prompt shown to the reviewer at the top of the review page — say what needs approving and why. | |
| displayTemplate | No | Optional 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 }}). | |
| requestedSchema | No | form 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. | |
| expiresInSeconds | No | How long the request stays decidable, in seconds (default 3600, clamped 60-604800 — 1 minute to 7 days). |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | Always `pending` at creation. |
| expiresAt | Yes | When the request stops being decidable (timestamp). |
| reviewUrl | Yes | URL of the hosted review page where a human decides this request. |
| elicitationId | Yes | Unique id of the created request — pass it to elicit_await / elicit_status / elicit_result / elicit_cancel. |
| elicitationDelivered | Yes | True when the request was also pushed to the connected client as a url-mode elicitation; when false, surface `reviewUrl` to the human yourself. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations are minimal (openWorldHint, idempotentHint, destructiveHint all false), so the description carries the burden of behavioral disclosure. It thoroughly explains the async 'returns immediately with a pending request' behavior, the differences between json and form modes, the fact that context is read-only and echoed back verbatim, that context does not pre-fill form fields, and that defaults seed the form. It also discloses the expiration behavior in the schema. It doesn't explicitly discuss rate limits or failure modes, but the described behaviors are substantial and beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and information-rich, but it is quite long and packs many details into one paragraph. It is front-loaded with the core purpose and the key distinguishing sibling reference, which is good. However, the form-mode restrictions and mode-by-mode explanations could be structured more cleanly. It earns a 3 because while every sentence carries information, the wall-of-text format makes it harder for an agent to quickly parse the key decision points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 6-parameter tool with nested objects and an output schema, the description is remarkably complete. It covers the async behavior, the two modes, parameter relationships, constraints from the MCP spec, security limitations (no secrets in form mode), and points to sibling tools for follow-up operations. An agent would have all the information needed to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 6 parameters. The description adds meaningful semantic value by explaining the relationship between context and displayTemplate, the implications of requestedSchema (flat object, defaults seeding the form), and the exact behavior of context in form mode (NOT merged into form fields). It also clarifies the required-ness of context/requestedSchema ('at least one is required') beyond what the schema shows. This goes beyond just repeating schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Request human approval before proceeding.' It uses a specific verb (request) and resource (human approval), and immediately distinguishes it from sibling tools like elicit_await, elicit_result, and elicit_form. It comprehensively describes the two operating modes (json mode and form mode), making it unambiguous what this tool does and how it differs from related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidance: it states when to use this tool (before proceeding with an operation needing human approval), describes the async vs sync distinction, and explicitly names alternatives (`elicit_await` for blocking, `elicit_result` for fetching outcome, `elicit_form` for synchronous in-session form). It also gives a clear constraint: 'form mode MUST NOT be used to request secrets, credentials, or other sensitive information.' This is exemplary usage guidance.
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 decisionARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| elicitationId | Yes | The `elicitationId` returned by the creating tool (elicit_approval, elicit_selection, or elicit_proposal). |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | The request's state when the wait ended; `pending` means the polling window elapsed undecided — call again to keep waiting. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the blocking long-poll behavior, the polling-window close condition, and the meaning of each returned status. Even with `readOnlyHint: true`, it adds valuable behavioral detail beyond the annotation by explaining what the caller should do on a `pending` result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. It front-loads the core behavior, immediately states the return shape, and closes with a practical usage recommendation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with an output schema and read-only annotation, the description is complete: it covers the blocking semantics, all possible statuses, timeout behavior, and the recommended alternative. Nothing essential is missing for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers the single parameter `elicitationId` with a description that explains where to obtain it. The tool description adds no additional parameter-level detail, but none is needed given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('long-poll') and resource ('decision on a pending elicitation'), and enumerates the possible terminal statuses. It also differentiates itself from the sibling tool `elicit_status` by explicitly recommending against polling in a loop.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use the tool: for waiting on a pending elicitation rather than polling `elicit_status` in a loop. It also explains that a `pending` return means the polling window elapsed and the caller should invoke the tool again, giving clear operational guidance.
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 elicitationADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| elicitationId | Yes | The `elicitationId` returned by the creating tool (elicit_approval, elicit_selection, or elicit_proposal). |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | The request is now terminally canceled. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations, detailing the terminal `canceled` status, the shutdown of further decisions, waking of pending `elicit_await` calls, the absence of an `elicit_result` outcome, error conditions, and the race behavior. This is rich, accurate behavioral context that an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries meaningful operational information. The primary purpose and rationale come first, followed by consequences, edge cases, and concurrency semantics. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent operation, the description fully covers what happens, when it fails, how it interacts with related tools, and concurrency behavior. An output schema exists, so return-value details are already structured. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the single parameter, including its type, required status, and source. The description adds some context by implying the elicitation must be one the user created, but it does not materially enrich the already complete parameter documentation. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Withdraw a pending elicitation you created') and a clear resource. It distinguishes the action from related statuses like `declined` and `expired`, and positions cancellation relative to other elicitation tools without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly describes when to use the tool: when a plan changed or the request is superseded, and only for a pending elicitation the user created. It also implicitly says when not to use it by noting it errors if already decided or expired. It does not explicitly name an alternative tool, but that is not necessary given the unique cancel semantics.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| labels | No | Relabel or localize the OK/Cancel buttons. Each label is trimmed, 1-40 characters; unknown keys are rejected. Button placement and styling stay fixed. | |
| message | Yes | The yes/no question shown to the user in the host's elicitation dialog. | |
| timeoutSeconds | No | How long to wait for the answer, in seconds (default 300, clamped 60-3600). |
Output Schema
| Name | Required | Description |
|---|---|---|
| reason | No | Present only when confirmed is null: "dismissed" = the elicitation was closed unanswered (including timeout), "error" = it failed. |
| confirmed | Yes | true = the user chose OK; false = an explicit no (Cancel choice or declined elicitation); null = no answer was obtained. |
TDQS
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.
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.
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.
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.
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.
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.
elicit_doctorDiagnose the host's elicitation supportAInspect
Report the connected host's elicitation/sampling/roots support. initialize.request/response echo the handshake verbatim; support holds Elicitly's derived booleans; deprecations flags client features (sampling, roots, logging) moved to Deprecated in the MCP 2026-07-28 spec (SEP-2577); probeElicitation adds a live form-elicitation round-trip under probes.elicitationForm. Client-features background: https://modelcontextprotocol.io/docs/learn/client-concepts. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | With share: anything unusual about the setup worth recording with the evidence. | |
| share | No | Contribute this report to Elicitly's public Support Matrix evidence queue. Stored: the report plus productName / productVersion / notes; no elicitation payloads or conversation content. | |
| productName | No | With share: the host product's name as the user sees it (e.g. "Claude Desktop") — the report cannot detect this from inside. | |
| productVersion | No | With share: the host product's version, if known. | |
| probeElicitation | No | Also 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
| Name | Required | Description |
|---|---|---|
| probes | No | Present only when probeElicitation was true: the live round-trip's attempted/action/latencyMs/verdict. |
| shared | No | Present when share: true was passed — whether the report landed in the evidence queue. |
| support | Yes | Elicitly's derived support booleans, inferred from the advertised capabilities. |
| initialize | Yes | The MCP initialize handshake echoed verbatim: { request: { clientInfo, capabilities }, response: { protocolVersion, capabilities, serverInfo } }. |
| shareError | No | Present when sharing was requested but failed: a one-line error summary. |
| deprecations | Yes | Spec-level deprecation advisories (MCP 2026-07-28, SEP-2577) for the client features the report surfaces. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (openWorldHint false, destructiveHint false, no readOnlyHint), so the description carries the transparency burden and meets it thoroughly: it discloses the user-visible dialog side effect of probeElicitation, the external write when share: true (public evidence queue), a privacy guarantee ('no elicitation payloads or conversation content'), and an intrinsic limitation (the report cannot see productName/version from inside). The public-queue write sits slightly at odds with a hard closed-world reading of openWorldHint: false, but it's an explicit opt-in, so not a contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose sentence and every sentence carries load — handshake echo, derived booleans, deprecations, probe behavior, privacy, and the share flow. But it is one dense, jargon-laden run-on paragraph (SEP-2577, Elicitly-derived booleans, probes.elicitationForm) that would scan far better split into two or three structured sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists and all five parameters are documented, the description covers the essential operational context: what the report contains, when a dialog appears, what gets stored externally, what doesn't, and where background material lives (linked docs). Minor gap: it doesn't say how the derived booleans should be interpreted or what practical consequences the deprecations flag carry, leaving that to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter's schema description is already rich (share's storage semantics, probeElicitation's dialog warning, productName's example). The main description largely restates that content; the only genuinely new tidbit is that the result carries shared: true|false. Baseline 3 applies 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.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource pair: 'Report the connected host's elicitation/sampling/roots support.' That single sentence makes the diagnostic purpose unambiguous and immediately sets it apart from the eleven sibling tools, which manipulate an elicitation flow (approve, cancel, confirm, form) rather than inspect host capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance relative to siblings; the agent must infer from the 'report' verb that this is the diagnostic tool. Within the tool it does clarify mode choice — passive by default vs the live probeElicitation round-trip and when share: true is appropriate — but it never names an alternative ('for liveness use elicit_ping') or an exclusion condition.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | The instruction shown to the user above the form fields. | |
| timeoutSeconds | No | How long to wait for the answer, in seconds (default 300, clamped 60-3600) — raise it for forms with several fields. | |
| requestedSchema | Yes | JSON 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
| Name | Required | Description |
|---|---|---|
| action | Yes | accept = the user submitted the form; decline = an explicit no; cancel = dismissed unanswered (including timeout); error = the elicitation failed. |
| content | Yes | On accept, the submitted values keyed by requestedSchema property name; null for every other action. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (openWorldHint false, destructiveHint false), so the description carries some responsibility for behavioral disclosure. It adds useful context about the return shape ('raw {action, content}') and imposes a security constraint against sensitive data. It does not describe cancellation or error behavior, but the output schema likely covers the return contract.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The primary purpose is first, the sibling alternative is second, and the security prohibition is last. Every sentence earns its place and is tightly scoped.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the three-parameter schema, the output schema, and the annotations, the description gives enough for an agent to call the tool correctly: purpose, return shape, alternative tool, and a critical security constraint. A minor gap is that it does not explain what happens if the user cancels or closes the form, but the output schema likely conveys that via the {action, content} structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 message, timeoutSeconds, and requestedSchema thoroughly. The description says 'caller-supplied JSON schema' and mentions returning raw {action, content}, but these mainly restate what the input schema and output schema already express. This matches the baseline 3: the description adds no substantial parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Trigger'), the resource ('a form elicitation'), and the key mechanism (caller-supplied JSON schema), and it mentions the return value ('raw {action, content}'). It also distinguishes itself from elicit_confirm in the same senence, so an agent can identify the correct 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit alternative: 'For a plain OK/Cancel question, prefer elicit_confirm.' It also provides a clear exclusion boundary: 'MUST NOT be used to request secrets, credentials, or other sensitive information.' This gives the agent concrete when-to-use and when-not-to-use guidance beyond the generic title.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
elicit_historyList past elicitationsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| asOf | No | Snapshot anchor from a previous page's result — pass it back to keep pagination stable while new requests arrive. Omit on the first page. | |
| page | No | 1-based page number to fetch. | |
| scope | No | 'me' = your own requests; 'org' = the whole organization (admins only). | me |
| pageSize | No | Items per page (1-100). |
Output Schema
| Name | Required | Description |
|---|---|---|
| asOf | Yes | The snapshot anchor this page was computed at — pass it back on later pages to keep the window stable while new requests arrive. |
| page | Yes | The 1-based page that was served. |
| items | Yes | The requested page of elicitations, newest first. |
| scope | Yes | The scope that was served. |
| total | Yes | Total matching requests — the last page is ceil(total / pageSize). |
| pageSize | Yes | Items per page that was applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only and closed-world, and the description adds valuable behavior: newest-first ordering, the exact return shape, the meaning of total for computing the last page, and the asOf snapshot mechanism for stable pagination. These details go beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, then covers scope, then the return contract and pagination behavior. Every sentence earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with four optional parameters, full schema coverage, annotations, and an output schema, the description is complete: it covers scope permissions, ordering, pagination, return fields, and the asOf mechanism for a stable window. An agent has enough information to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 parameters. The description repeats scope and asOf semantics but does not add meaningful new parameter-level guidance beyond the schema; the total-last-page note is return-value guidance rather than parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb and resource: 'List your past elicitations', and adds ordering and pagination context. It does not explicitly differentiate from sibling tools like elicit_status or elicit_result, so it falls short of a top score that names alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operational context: newest-first ordering, pagination, admin-only org scope, and how to keep pagination stable with asOf. It does not explicitly recommend when to use this tool versus another sibling or state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
elicit_pingCheck connectivityARead-onlyInspect
Connectivity check for the hosted Elicitly server: echoes message back as pong: <message> over the authenticated session.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Text to echo back (default "ping"). |
TDQS
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.
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.
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.
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.
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.
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, values (included fields only). MUST NOT be used to request secrets or credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Per-property read-only cell values, keyed by requestedSchema property name: { <property>: { sources: { <sourceKey>: value }, current: value, include?: boolean } }. `include: false` starts the field unchecked. | |
| labels | No | 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. | |
| columns | Yes | Names the read-only columns of the diff grid. | |
| context | No | Optional identity/context passthrough echoed back verbatim in elicit_result — NOT shown to the reviewer unless `displayTemplate` renders it. | |
| message | Yes | The prompt shown to the reviewer above the diff grid — say what change is proposed and why. | |
| displayTemplate | No | Optional LiquidJS template rendered above the grid. `context` is exposed under the `context` key (e.g. {{ context.recordId }}). Without it, `context` is not displayed. | |
| requestedSchema | Yes | JSON 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. | |
| expiresInSeconds | No | How long the request stays decidable, in seconds (default 3600, clamped 60-604800 — 1 minute to 7 days). |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | Always `pending` at creation. |
| expiresAt | Yes | When the request stops being decidable (timestamp). |
| reviewUrl | Yes | URL of the hosted review page where a human decides this request. |
| elicitationId | Yes | Unique id of the created request — pass it to elicit_await / elicit_status / elicit_result / elicit_cancel. |
| elicitationDelivered | Yes | True when the request was also pushed to the connected client as a url-mode elicitation; when false, surface `reviewUrl` to the human yourself. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (idempotentHint false, destructiveHint false), the description discloses substantial behavioral details: it is async, returns a pending request decided on a hosted review page, lets the reviewer edit proposed values and choose which fields to include, and returns a specific result shape via elicit_result. It also explains how default proposed values are computed, which is non-obvious and valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause earns its place, starting with the core purpose and moving through async behavior, parameter usage, result format, and a critical safety constraint. It is front-loaded and readable despite covering up to eight parameters and a complex diff-grid interaction, with no filler or tautology.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with nested objects, eight parameters, and an output schema, the description captures everything an agent needs: what request to construct, how defaults and column mappings work, what the reviewer interaction looks like, how the result is received, and what must never be passed. It is complete without redundantly restating the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds meaning beyond the raw schema: it explicitly explains the role of requestedSchema defaults, how to fill Source/Current values with columns and fields, that context is echoed back but not shown unless displayTemplate renders it, and that expiresInSeconds is clamped. This guidance walks an agent through composing a correct call rather than merely restating parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Ask a human to review, edit, and selectively approve a proposed record create-or-update' and identifies the distinguishing diff-grid interface. It clearly indicates what the tool produces (a pending review request) and sets it apart from generic approval tools, despite sharing an 'elicit_' prefix.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear context for when to use the tool: any time a human must review and selectively approve a proposed record change. It also gives a hard exclusion ('MUST NOT be used to request secrets or credentials') and compares its async behavior to elicit_approval, but it never explicitly names a sibling tool to prefer for other scenarios, such as simple approvals or confirmations.
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 outcomeAIdempotentInspect
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 } plus per-tool overlays: elicit_selection adds selectedIds (the chosen option ids); elicit_proposal adds, on submit, values (only the fields the reviewer included).
| Name | Required | Description | Default |
|---|---|---|---|
| elicitationId | Yes | The `elicitationId` returned by the creating tool (elicit_approval, elicit_selection, or elicit_proposal). |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | The outcome has been read at least once. |
| values | No | elicit_proposal only, on submit: the proposed values for just the fields the reviewer included. |
| context | Yes | The caller's original `context`, echoed verbatim (null if none was supplied). |
| decision | Yes | The reviewer's choice: submitted = approved/filled in, declined = explicit no. |
| selectedIds | No | elicit_selection only, on submit: the chosen option ids. |
| formSubmission | Yes | The reviewer-filled field values keyed by requestedSchema property name; null in json mode or on decline. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as idempotent and non-destructive, but the description adds valuable behavioral context: error conditions, repeatable-read reassurance, and the exact return shape including per-tool overlays. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence front-loads the core purpose, then efficiently packs lifecycle conditions, error semantics, and return format without filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema, the description fully covers preconditions, error states, idempotency, and the return shape with per-tool overlays. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already clearly describes elicitationId as returned by the creating tool. The description adds no additional parameter meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Fetch the outcome of a decided request'. It also distinguishes itself from siblings by explicitly referencing elicit_status, elicit_await, and elicit_cancel, making its role in the elicitation lifecycle clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs the agent to poll elicit_status or block on elicit_await first, and explains when this tool errors: while pending, after expiring undecided, or after cancellation. This gives clear when-to-use and when-not-to-use guidance relative to sibling tools.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| css | No | Custom CSS injected on the review page to style the option table. | |
| labels | No | 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. | |
| message | Yes | The instruction shown above the option list — say what the reviewer is choosing and why. | |
| options | Yes | 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 }}). | |
| rowTemplate | No | 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`. | |
| hoverTemplate | No | LiquidJS template for a per-option hover/details card; the option is exposed as `option`. Omit for no hover card. | |
| maxSelections | No | Most options the reviewer may pick (default 1 = single-select; clamped to the option count). | |
| minSelections | No | Fewest options the reviewer must pick to submit (default 1; 0 allows none). | |
| footerTemplate | No | LiquidJS template producing the table footer rows (no variables). Omit for no footer. | |
| headingTemplate | No | LiquidJS template producing the <th> cells of the table header (no variables). Omit for no header row. | |
| expiresInSeconds | No | How long the request stays decidable, in seconds (default 3600, clamped 60-604800 — 1 minute to 7 days). |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | Always `pending` at creation. |
| expiresAt | Yes | When the request stops being decidable (timestamp). |
| reviewUrl | Yes | URL of the hosted review page where a human decides this request. |
| elicitationId | Yes | Unique id of the created request — pass it to elicit_await / elicit_status / elicit_result / elicit_cancel. |
| elicitationDelivered | Yes | True when the request was also pushed to the connected client as a url-mode elicitation; when false, surface `reviewUrl` to the human yourself. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare openWorldHint=false, idempotentHint=false, destructiveHint=false. The description adds important behavioral context beyond annotations: the operation is asynchronous, returns a pending request, is decided on the hosted review page, and returns selected IDs through elicit_result. Multi-select defaults are also disclosed. This is solid non-obvious behavior information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences front-load the purpose, then flow, then customization and selection defaults. Every sentence adds operational value without repeating schema details. The structure is efficient and scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 11 parameters and nested objects, but the schema carries detailed per-parameter descriptions and an output schema exists. The description provides the missing operational context: async behavior, result retrieval path, default selection mode, and template/CSS customization. Nothing essential for correct invocation is left out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds extra semantic value by noting that options render as table rows, that Liquid templates and CSS can customize rendering, and that maxSelections raises single-select to multi-select. It also clarifies the meaning of option IDs as what comes back in selectedIds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb and resource: 'Ask a human to choose one or more options from a caller-supplied list', followed by concrete use cases (disambiguation, record matching, picking work items). This clearly identifies what the tool does and distinguishes it from siblings like 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool via concrete use cases and explains the async flow ('Async like elicit_approval... decisions come back via elicit_result'). It doesn't explicitly say when not to use alternatives, but the context is strong enough for an agent to route correctly.
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 statusARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| elicitationId | Yes | The `elicitationId` returned by the creating tool (elicit_approval, elicit_selection, or elicit_proposal). |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | The request's current lifecycle state. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnlyHint=true, and the description adds important behavioral context: it is non-blocking, never consumes the result, and returns only the status, not the full outcome. This goes beyond the annotation by explaining the exact side-effect-free contract and the scope 'for an elicitation you created'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The core purpose and status values are front-loaded, and the alternative-tool guidance is placed in the second sentence. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers what an agent needs: the action, the exact return shape, the statuses, the non-consuming behavior, and the routing to sibling tools. An output schema exists, so return-value detail need not be repeated, and nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for its single required parameter, and the schema already explains that `elicitationId` is returned by the creating tool. The description adds no additional parameter-level semantics beyond reinforcing 'you created', so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('status check'), a clear resource ('elicitation'), and an explicit outcome: returns `{ status }` with all six possible status values. It also differentiates itself from sibling tools by naming `elicit_await` and `elicit_result` as alternatives for other behaviors, so an agent can distinguish it without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use this tool: it is non-blocking, read-only, and repeatable, and it says to use `elicit_await` to block and `elicit_result` to fetch the outcome. This directly tells the agent which sibling to select for adjacent use cases, leaving no ambiguity.
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. Dates show when Glama detected each change.
12 tool updates
- Changed
elicit_approval8 fields changed- added
Input schema / properties / context / descriptionAdded value: +"json 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." - added
Input schema / properties / expiresInSeconds / descriptionAdded value: +"How long the request stays decidable, in seconds (default 3600, clamped 60-604800 — 1 minute to 7 days)." - added
Input schema / properties / labels / descriptionAdded 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." - added
Input schema / properties / labels / properties / decline / descriptionAdded value: +"Replacement label for the decline button." - added
Input schema / properties / labels / properties / submit / descriptionAdded value: +"Replacement label for the submit button." - added
Input schema / properties / message / descriptionAdded value: +"The prompt shown to the reviewer at the top of the review page — say what needs approving and why." - added
Input schema / properties / requestedSchema / descriptionAdded value: +"form 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." - changed
Output 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" +}
- Changed
elicit_await2 fields changed- added
Input schema / properties / elicitationId / descriptionAdded value: +"The `elicitationId` returned by the creating tool (elicit_approval, elicit_selection, or elicit_proposal)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "status": { + "description": "The request's state when the wait ended; `pending` means the polling window elapsed undecided — call again to keep waiting.", + "enum": [ + "pending", + "submitted", + "declined", + "canceled", + "expired", + "consumed" + ], + "type": "string" + } + }, + "required": [ + "status" + ], + "type": "object" +}
- Changed
elicit_cancel2 fields changed- added
Input schema / properties / elicitationId / descriptionAdded value: +"The `elicitationId` returned by the creating tool (elicit_approval, elicit_selection, or elicit_proposal)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "status": { + "const": "canceled", + "description": "The request is now terminally canceled.", + "type": "string" + } + }, + "required": [ + "status" + ], + "type": "object" +}
- Changed
elicit_confirm6 fields changed- added
Input schema / properties / labels / descriptionAdded 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." - added
Input schema / properties / labels / properties / cancel / descriptionAdded value: +"Replacement label for the Cancel button (e.g. \"Cancelar\")." - added
Input schema / properties / labels / properties / ok / descriptionAdded value: +"Replacement label for the OK button (e.g. \"Aceptar\")." - added
Input schema / properties / message / descriptionAdded value: +"The yes/no question shown to the user in the host's elicitation dialog." - added
Input schema / properties / timeoutSeconds / descriptionAdded value: +"How long to wait for the answer, in seconds (default 300, clamped 60-3600)." - changed
Output 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" +}
- Changed
elicit_doctor6 fields changed- added
Input schema / properties / notes / descriptionAdded value: +"With share: anything unusual about the setup worth recording with the evidence." - added
Input schema / properties / probeElicitation / descriptionAdded value: +"Also 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." - added
Input schema / properties / productName / descriptionAdded value: +"With share: the host product's name as the user sees it (e.g. \"Claude Desktop\") — the report cannot detect this from inside." - added
Input schema / properties / productVersion / descriptionAdded value: +"With share: the host product's version, if known." - added
Input schema / properties / share / descriptionAdded value: +"Contribute this report to Elicitly's public Support Matrix evidence queue. Stored: the report plus productName / productVersion / notes; no elicitation payloads or conversation content." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "deprecations": { + "description": "Spec-level deprecation advisories (MCP 2026-07-28, SEP-2577) for the client features the report surfaces.", + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + }, + "initialize": { + "additionalProperties": {}, + "description": "The MCP initialize handshake echoed verbatim: { request: { clientInfo, capabilities }, response: { protocolVersion, capabilities, serverInfo } }.", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "probes": { + "additionalProperties": false, + "description": "Present only when probeElicitation was true: the live round-trip's attempted/action/latencyMs/verdict.", + "properties": { + "elicitationForm": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "elicitationForm" + ], + "type": "object" + }, + "shareError": { + "description": "Present when sharing was requested but failed: a one-line error summary.", + "type": "string" + }, + "shared": { + "description": "Present when share: true was passed — whether the report landed in the evidence queue.", + "type": "boolean" + }, + "support": { + "additionalProperties": false, + "description": "Elicitly's derived support booleans, inferred from the advertised capabilities.", + "properties": { + "elicitation": { + "type": "boolean" + }, + "elicitationForm": { + "type": "boolean" + }, + "elicitationUrl": { + "type": "boolean" + }, + "roots": { + "type": "boolean" + }, + "sampling": { + "type": "boolean" + } + }, + "required": [ + "elicitation", + "elicitationForm", + "elicitationUrl", + "sampling", + "roots" + ], + "type": "object" + } + }, + "required": [ + "initialize", + "support", + "deprecations" + ], + "type": "object" +}
- Changed
elicit_form4 fields changed- added
Input schema / properties / message / descriptionAdded value: +"The instruction shown to the user above the form fields." - added
Input schema / properties / requestedSchema / descriptionAdded value: +"JSON 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" - added
Input schema / properties / timeoutSeconds / descriptionAdded value: +"How long to wait for the answer, in seconds (default 300, clamped 60-3600) — raise it for forms with several fields." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "action": { + "description": "accept = the user submitted the form; decline = an explicit no; cancel = dismissed unanswered (including timeout); error = the elicitation failed.", + "enum": [ + "accept", + "decline", + "cancel", + "error" + ], + "type": "string" + }, + "content": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "On accept, the submitted values keyed by requestedSchema property name; null for every other action." + } + }, + "required": [ + "action", + "content" + ], + "type": "object" +}
- Changed
elicit_history5 fields changed- added
Input schema / properties / asOf / descriptionAdded value: +"Snapshot anchor from a previous page's result — pass it back to keep pagination stable while new requests arrive. Omit on the first page." - added
Input schema / properties / page / descriptionAdded value: +"1-based page number to fetch." - added
Input schema / properties / pageSize / descriptionAdded value: +"Items per page (1-100)." - added
Input schema / properties / scope / descriptionAdded value: +"'me' = your own requests; 'org' = the whole organization (admins only)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "asOf": { + "description": "The snapshot anchor this page was computed at — pass it back on later pages to keep the window stable while new requests arrive.", + "type": "string" + }, + "items": { + "description": "The requested page of elicitations, newest first.", + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + }, + "page": { + "description": "The 1-based page that was served.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "pageSize": { + "description": "Items per page that was applied.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "scope": { + "description": "The scope that was served.", + "enum": [ + "me", + "org" + ], + "type": "string" + }, + "total": { + "description": "Total matching requests — the last page is ceil(total / pageSize).", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "items", + "page", + "pageSize", + "asOf", + "total", + "scope" + ], + "type": "object" +}
- Changed
elicit_ping1 field changed- added
Input schema / properties / message / descriptionAdded value: +"Text to echo back (default \"ping\")."
- Changed
elicit_proposal14 fields changed- added
Input schema / properties / columns / descriptionAdded value: +"Names the read-only columns of the diff grid." - added
Input schema / properties / columns / properties / current / properties / label / descriptionAdded value: +"Header of the read-only Current column." - added
Input schema / properties / columns / properties / sources / descriptionAdded value: +"The read-only Source column(s), in display order." - added
Input schema / properties / columns / properties / sources / items / properties / key / descriptionAdded value: +"Unique key referenced by `fields.<property>.sources`." - added
Input schema / properties / columns / properties / sources / items / properties / label / descriptionAdded value: +"Column header shown to the reviewer." - added
Input schema / properties / context / descriptionAdded value: +"Optional identity/context passthrough echoed back verbatim in elicit_result — NOT shown to the reviewer unless `displayTemplate` renders it." - added
Input schema / properties / expiresInSeconds / descriptionAdded value: +"How long the request stays decidable, in seconds (default 3600, clamped 60-604800 — 1 minute to 7 days)." - added
Input schema / properties / fields / descriptionAdded value: +"Per-property read-only cell values, keyed by requestedSchema property name: { <property>: { sources: { <sourceKey>: value }, current: value, include?: boolean } }. `include: false` starts the field unchecked." - added
Input schema / properties / labels / descriptionAdded 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." - added
Input schema / properties / labels / properties / decline / descriptionAdded value: +"Replacement label for the decline button." - added
Input schema / properties / labels / properties / submit / descriptionAdded value: +"Replacement label for the submit button." - added
Input schema / properties / message / descriptionAdded value: +"The prompt shown to the reviewer above the diff grid — say what change is proposed and why." - added
Input schema / properties / requestedSchema / descriptionAdded value: +"JSON 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." - changed
Output 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" +}
- Changed
elicit_result2 fields changed- added
Input schema / properties / elicitationId / descriptionAdded value: +"The `elicitationId` returned by the creating tool (elicit_approval, elicit_selection, or elicit_proposal)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "context": { + "description": "The caller's original `context`, echoed verbatim (null if none was supplied)." + }, + "decision": { + "description": "The reviewer's choice: submitted = approved/filled in, declined = explicit no.", + "enum": [ + "submitted", + "declined" + ], + "type": "string" + }, + "formSubmission": { + "description": "The reviewer-filled field values keyed by requestedSchema property name; null in json mode or on decline." + }, + "selectedIds": { + "description": "elicit_selection only, on submit: the chosen option ids.", + "items": { + "type": "string" + }, + "type": "array" + }, + "status": { + "const": "consumed", + "description": "The outcome has been read at least once.", + "type": "string" + }, + "values": { + "additionalProperties": {}, + "description": "elicit_proposal only, on submit: the proposed values for just the fields the reviewer included.", + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "status", + "decision", + "context", + "formSubmission" + ], + "type": "object" +}
- Changed
elicit_selection14 fields changed- added
Input schema / properties / css / descriptionAdded value: +"Custom CSS injected on the review page to style the option table." - added
Input schema / properties / expiresInSeconds / descriptionAdded value: +"How long the request stays decidable, in seconds (default 3600, clamped 60-604800 — 1 minute to 7 days)." - added
Input schema / properties / footerTemplate / descriptionAdded value: +"LiquidJS template producing the table footer rows (no variables). Omit for no footer." - added
Input schema / properties / headingTemplate / descriptionAdded value: +"LiquidJS template producing the <th> cells of the table header (no variables). Omit for no header row." - added
Input schema / properties / hoverTemplate / descriptionAdded value: +"LiquidJS template for a per-option hover/details card; the option is exposed as `option`. Omit for no hover card." - added
Input schema / properties / labels / descriptionAdded 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." - added
Input schema / properties / labels / properties / decline / descriptionAdded value: +"Replacement label for the decline button." - added
Input schema / properties / labels / properties / submit / descriptionAdded value: +"Replacement label for the submit button." - added
Input schema / properties / maxSelections / descriptionAdded value: +"Most options the reviewer may pick (default 1 = single-select; clamped to the option count)." - added
Input schema / properties / message / descriptionAdded value: +"The instruction shown above the option list — say what the reviewer is choosing and why." - added
Input schema / properties / minSelections / descriptionAdded value: +"Fewest options the reviewer must pick to submit (default 1; 0 allows none)." - added
Input schema / properties / options / descriptionAdded 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 }})." - added
Input schema / properties / rowTemplate / descriptionAdded 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`." - changed
Output 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" +}
- Changed
elicit_status2 fields changed- added
Input schema / properties / elicitationId / descriptionAdded value: +"The `elicitationId` returned by the creating tool (elicit_approval, elicit_selection, or elicit_proposal)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "status": { + "description": "The request's current lifecycle state.", + "enum": [ + "pending", + "submitted", + "declined", + "canceled", + "expired", + "consumed" + ], + "type": "string" + } + }, + "required": [ + "status" + ], + "type": "object" +}
12 tool updates
- First observed
elicit_approval - First observed
elicit_await - First observed
elicit_cancel - First observed
elicit_confirm - First observed
elicit_doctor - First observed
elicit_form - First observed
elicit_history - First observed
elicit_ping - First observed
elicit_proposal - First observed
elicit_result - First observed
elicit_selection - First observed
elicit_status
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Human-in-the-loop review and approval for AI agents. Audit trail, approval policies, native MCP.
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
Live data grids for AI agents. Push structured data; humans review, agents read back via MCP.
Human-in-the-loop approval for agent actions, with verifiable action-bound receipts.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceHuman-in-the-Loop authorization gateway for AI Agents. Securely pause MCP workflows and route high-risk actions to human approvers via Slack or Email.1151MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that provides human-in-the-loop approval for risky AI agent actions, with durable state and audit logs.MIT

Oakallow MCP Serverofficial
AlicenseNot gradedqualityCmaintenanceRuntime permission, approval, and audit governance for AI agent tool execution, enabling human oversight of risky actions via an MCP server.1MIT- AlicenseNot gradedqualityBmaintenanceProvides a human-in-the-loop approval gateway for AI agents, enforcing policies and audit logging for MCP-compatible tool calls.Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
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.
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.
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.
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.