You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Feature]: Surface Claude MCP form and URL elicitations (follow-up to #14878 / #14895)
#16539
Issue #14878 (triaged as a bug) covers Claude MCP elicitation/create requests being auto-declined because the Claude adapter never sets onElicitation. #14895 fixes the approval-only case and, by design, keeps failing closed for:
form elicitations that request values (any requestedSchema with properties), and
URL-mode elicitations.
Those are common in practice. For example, the Supabase MCP server asks for confirmation before running destructive SQL (execute_sql / apply_migration). In a T3 Claude thread these requests are declined silently, so the tool fails with {"status":"declined"} and the user never sees the confirmation. Other MCP servers built with FastMCP/Pydantic routinely send forms with optional fields.
Proposal
Extend the mcp-elicitation request so Claude elicitations always reach the user:
Forms: render the MCP primitive schema types (boolean, string with length/format, number/integer with bounds, single and multi-select enums including oneOf titles, nullable anyOf [T, null] fields) with defaults prefilled and editable. Values are validated in the client and again on the server before the SDK callback resolves. The content never contains null, which the MCP client rejects.
URL mode: show the requesting server, the host and the full URL. The browser opens only on an explicit click. The SDK's completion notification counts as an accept.
Fail closed, but visibly: schemas that cannot be represented (nested objects, pattern, other unions) are still declined, with a notice in the thread saying which server was declined and why.
Mobile: form and URL requests offer only Decline/Cancel, with a note to answer from desktop or web, so mobile can never accept values or a page the user did not see.
The requesting MCP server is always shown prominently, because the user may be approving destructive operations.
Reference implementation
I built this on top of #14895, keeping its commits intact, in my fork: Leca00711#8
The adapter, orchestrator, shared schema helpers and the web panel are covered by unit tests: 30 new tests, plus the existing adapter suite.
It was manually tested in the web dev build.
It is not opened against this repo, per CONTRIBUTING.
Question for maintainers
Would you approve this direction and scope, or a subset of it (for example forms only, without URL mode), as a follow-up to #14895? If approved, I can open a focused PR once #14895 lands, or adjust the scope to whatever you prefer.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Problem
Issue #14878 (triaged as a bug) covers Claude MCP
elicitation/createrequests being auto-declined because the Claude adapter never setsonElicitation. #14895 fixes the approval-only case and, by design, keeps failing closed for:requestedSchemawith properties), andThose are common in practice. For example, the Supabase MCP server asks for confirmation before running destructive SQL (
execute_sql/apply_migration). In a T3 Claude thread these requests are declined silently, so the tool fails with{"status":"declined"}and the user never sees the confirmation. Other MCP servers built with FastMCP/Pydantic routinely send forms with optional fields.Proposal
Extend the
mcp-elicitationrequest so Claude elicitations always reach the user:oneOftitles, nullableanyOf [T, null]fields) with defaults prefilled and editable. Values are validated in the client and again on the server before the SDK callback resolves. The content never containsnull, which the MCP client rejects.pattern, other unions) are still declined, with a notice in the thread saying which server was declined and why.Reference implementation
I built this on top of #14895, keeping its commits intact, in my fork: Leca00711#8
Question for maintainers
Would you approve this direction and scope, or a subset of it (for example forms only, without URL mode), as a follow-up to #14895? If approved, I can open a focused PR once #14895 lands, or adjust the scope to whatever you prefer.
All reactions