# elicitly — the Free Edition local MCP server

A local (stdio) MCP server that makes **MCP elicitation** easy to use from any
prompt or Agent Skill — and its cross-host support visible.

## Tools

- **elicit_confirm** — an OK/Cancel confirmation modeled on JavaScript's
  `confirm()`; override `labels.ok`/`labels.cancel` to relabel or localize
  (e.g. `Aceptar`/`Cancelar`).
- **elicit_form** — fire a form elicitation with your own JSON schema
  ([`requestedSchema` subset](https://modelcontextprotocol.io/specification/2025-11-25/client/elicitation#requested-schema));
  returns the raw `{action, content}`.
- **elicit_doctor** — reports the connected host's support for the
  [client features](https://modelcontextprotocol.io/docs/learn/client-concepts)
  (elicitation *form* vs *url* mode, sampling, roots), and with
  `probeElicitation: true` runs one live elicitation round-trip and classifies
  the result (`working`, `advertised_but_autocanceled`, `user_declined`,
  `advertised_but_unanswered`, `unsupported`).
- **elicit_display** — show the user rendered HTML instead of Markdown: pass a
  [LiquidJS](https://liquidjs.com/) template plus JSON `context`, and hosts that
  support [MCP Apps](https://modelcontextprotocol.io/extensions/apps/overview)
  render it inline. Templates may load Tailwind/DaisyUI from jsDelivr; allow
  more image/script/style origins with `ELICITLY_DISPLAY_RESOURCE_DOMAINS`
  (comma-separated `https://` origins) — in the Claude Desktop extension, that's
  the **elicit_display: extra allowed origins** setting.

## Run it

    npx -y elicitly

Register it with any MCP host as a **stdio** server. In Claude Code:

    claude mcp add elicitly -- npx -y elicitly

or in a host config file (`.mcp.json` or client settings):

    {
      "mcpServers": {
        "elicitly": { "command": "npx", "args": ["-y", "elicitly"] }
      }
    }

### Claude Desktop (one-click)

Download `elicitly.mcpb` from the
[latest release](https://github.com/elicitly/elicitly/releases/latest) and
open it in Claude Desktop (or Settings → Extensions → Install extension).
The bundle is self-contained — no Node.js or npm setup of your own; it runs
on Claude Desktop's managed runtime. Build it from source with
`pnpm --filter elicitly build:mcpb`.

> **Claude Desktop and dialogs:** current Claude Desktop builds don't
> advertise elicitation to local MCP servers (config-file and extension
> installs alike — measured, not assumed), so `elicit_confirm` and
> `elicit_form` return their graceful no-answer contract there rather than
> raising a dialog. `elicit_doctor` still reports the host truthfully — that
> report is the point. See the
> [Elicitation Support Matrix](https://www.elicitly.ai/docs/elicitation/support-matrix/)
> for hosts where dialogs work, and the
> [Pro Edition](https://www.elicitly.ai/docs/pro/) for approvals that reach a
> browser-based review page when the host has no native dialog.

## Exercise it

1. **elicit_doctor** — passive capability report, no user prompt. Check
   `support.elicitationForm` / `support.elicitationUrl`.
2. **elicit_doctor with `probeElicitation: true`** — one real elicitation
   round-trip; read `probes.elicitationForm.verdict`.
3. **elicit_confirm** — an OK/Cancel prompt (e.g. `message: "Ship it?"`).
4. **elicit_form** — your own JSON schema; inspect the raw `{action, content}`.

Full docs: [elicitly.ai/docs](https://www.elicitly.ai/docs/)

## From source

    pnpm install
    pnpm --filter elicitly build   # produces packages/elicitly/dist/cli.mjs
    claude mcp add elicitly -- node /absolute/path/to/packages/elicitly/dist/cli.mjs

## Privacy

The server runs entirely on your machine: tool calls and elicitation answers
stay between your MCP host and the local process, and nothing is sent
anywhere. The `contribute-fingerprint` prompt only *prepares* a GitHub issue
link — you review and submit it yourself. Project privacy policy:
<https://www.elicitly.ai/privacy/>

## License

[Apache-2.0](../../LICENSE)

Elicitly™ is a trademark of Preneur LLC — see [TRADEMARKS.md](../../TRADEMARKS.md).
