stdin: {"id":1,"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{},"clientInfo":{"name":"toolwitness","version":"s772-v0"},"protocolVersion":"2025-11-25"}} {"jsonrpc":"2.0","method":"notifications/initialized"} {"id":2,"jsonrpc":"2.0","method":"tools/list","params":{}} stdout: {"result":{"protocolVersion":"2025-11-25","capabilities":{"tools":{"listChanged":true},"resources":{"listChanged":true},"prompts":{"listChanged":true}},"serverInfo":{"name":"elicitly","version":"0.8.4"}},"jsonrpc":"2.0","id":1} {"result":{"tools":[{"name":"elicit_confirm","title":"Ask the user to confirm (OK/Cancel)","description":"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.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"message":{"type":"string","description":"The yes/no question shown to the user in the host's elicitation dialog."},"labels":{"description":"Relabel or localize the OK/Cancel buttons. Each label is trimmed, 1-40 characters; unknown keys are rejected. Button placement and styling stay fixed.","type":"object","properties":{"ok":{"description":"Replacement label for the OK button (e.g. \"Aceptar\").","type":"string","minLength":1,"maxLength":40},"cancel":{"description":"Replacement label for the Cancel button (e.g. \"Cancelar\").","type":"string","minLength":1,"maxLength":40}},"additionalProperties":false},"timeoutSeconds":{"description":"How long to wait for the answer, in seconds (default 300, clamped 60-3600).","type":"number"}},"required":["message"]},"annotations":{"destructiveHint":false,"openWorldHint":false},"execution":{"taskSupport":"forbidden"},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","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.","type":"string","enum":["dismissed","error"]}},"required":["confirmed"],"additionalProperties":{}}},{"name":"elicit_doctor","title":"Diagnose the host's elicitation support","description":"Check whether the connected MCP host actually supports elicitation (and sampling/roots) before relying on it — advertising a capability is not the same as it working. Use it to decide whether to call elicit_form/elicit_confirm, to explain why a prompt did or didn't appear, or to contribute a host capability fingerprint. Returns a passive report derived from the initialize handshake; set probeElicitation: true to also run one live form round-trip (the user may see a dialog) and classify what really happened. Read-only; safe to call anytime.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"probeElicitation":{"description":"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.","type":"boolean"}}},"annotations":{"readOnlyHint":true,"openWorldHint":false},"execution":{"taskSupport":"forbidden"},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"initialize":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"The MCP initialize handshake echoed verbatim: { request: { clientInfo, capabilities }, response: { protocolVersion, capabilities, serverInfo } }."},"support":{"type":"object","properties":{"elicitation":{"type":"boolean"},"elicitationForm":{"type":"boolean"},"elicitationUrl":{"type":"boolean"},"sampling":{"type":"boolean"},"roots":{"type":"boolean"}},"required":["elicitation","elicitationForm","elicitationUrl","sampling","roots"],"additionalProperties":{},"description":"Elicitly's derived support booleans, inferred from the advertised capabilities."},"deprecations":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"description":"Spec-level deprecation advisories (MCP 2026-07-28, SEP-2577) for the client features the report surfaces."},"probes":{"description":"Present only when probeElicitation was true: the live round-trip's attempted/action/latencyMs/verdict.","type":"object","properties":{"elicitationForm":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["elicitationForm"],"additionalProperties":{}}},"required":["initialize","support","deprecations"],"additionalProperties":{}}},{"name":"elicit_form","title":"Ask the user to fill a form","description":"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.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"message":{"type":"string","description":"The instruction shown to the user above the form fields."},"requestedSchema":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"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"},"timeoutSeconds":{"description":"How long to wait for the answer, in seconds (default 300, clamped 60-3600) — raise it for forms with several fields.","type":"number"}},"required":["message","requestedSchema"]},"annotations":{"destructiveHint":false,"openWorldHint":false},"execution":{"taskSupport":"forbidden"},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"action":{"type":"string","enum":["accept","decline","cancel","error"],"description":"accept = the user submitted the form; decline = an explicit no; cancel = dismissed unanswered (including timeout); error = the elicitation failed."},"content":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}],"description":"On accept, the submitted values keyed by requestedSchema property name; null for every other action."}},"required":["action","content"],"additionalProperties":{}}},{"name":"elicit_display","title":"Show the user rendered content","description":"Show information to the user as rendered HTML instead of Markdown: pass a LiquidJS template and a JSON context, and hosts that support MCP Apps render it inline in the conversation. Use it for tables, reports, and summaries the user should scan; it does not collect a decision (use elicit_confirm or elicit_form for that). Values interpolated with {{ context.* }} are HTML-escaped; truthiness is JavaScript-style. Templates may load Tailwind (https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4) and DaisyUI (https://cdn.jsdelivr.net/npm/daisyui@5) with their own