Elicitly Pro
Elicitly puts a human in the loop of any MCP-connected agent.
What it can do
- Elicit Approval: 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
- Elicit Await: 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
- Elicit Confirm: Ask the user an OK/Cancel confirmation via elicitation (convenience wrapper over elicit_form), modeled on JavaScript's confirm(). Use this for a single yes/no question; use elicit_form
What data it sees
Do you need an account
No: the server works without sign-in
Elicitly puts a human in the loop of any MCP-connected agent. The free stdio server (npx -y elicitly) provides elicit_confirm, elicit_form, and elicit_doctor — native host dialogs plus a capability diagnostic. The hosted Pro Edition adds durable approvals: requests that survive disconnects, reach any device via a review page, and leave an audit trail.
How to connect
How to connect Elicitly Pro to Claude
The server address to paste into Claude settings:
https://elicitly-pro.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect Elicitly Pro to ChatGPT
The server address to paste into ChatGPT settings:
https://elicitly-pro.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect Elicitly Pro to Cursor
The server address to paste into Cursor settings:
https://elicitly-pro.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (12)
Raw names from tools/list. Only developers need these.
| elicit_approval | 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. |
| elicit_await | 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. |
| elicit_confirm | Ask the user an OK/Cancel confirmation via elicitation (convenience wrapper over elicit_form), modeled on JavaScript's confirm(). Use this for a single yes/no question; use elicit_form to collect arbitrary fields. Returns three-state {confirmed}: true = proceed, false = a human explicitly said no, null = no answer was obtained (reason: "dismissed" | "error") — ask again later. |
| elicit_doctor | 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. |
| elicit_form | 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. |
| elicit_history | 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. |
| elicit_ping | Connectivity check for the hosted Elicitly server: echoes `message` back as `pong: <message>` over the authenticated session. |
| elicit_proposal | 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. |
| elicit_result | 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). |
| elicit_selection | Ask a human to choose one or more options from a caller-supplied list (disambiguation, record matching, picking work items). Async like elicit_approval: returns a pending request decided on the hosted review page; the chosen option ids come back via elicit_result as `selectedIds`. Options render as rows of a table the Liquid templates and `css` can customize. Defaults to single-select — raise `maxSelections` for multi-select. |
| elicit_status | 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. |
| elicit_cancel | 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. |