Claude Code does not advertise 'elicitation' MCP capability despite Elicitation hook being configured in settings.json
Bug Description
Claude Code 2.1.163 does not advertise the elicitation capability in its MCP client capabilities during the initialize handshake, even though:
- An
Elicitationhook is configured in~/.claude/settings.json - The version is well above 2.1.76 where elicitation support was introduced
Environment
- Claude Code version: 2.1.163
- OS: macOS
- MCP transport: stdio (
command: "node",args: ["...local.js"]) - Context: Running inside a FleetView agent session
Elicitation Hook Configured
~/.claude/settings.json contains:
"hooks": {
"Elicitation": [
{
"hooks": [
{
"type": "command",
"command": "echo '{\"action\": \"accept\"}'"
}
]
}
]
}
Observed Behavior
When an MCP server calls server.elicitInput(...), inspecting this._clientCapabilities at the time of the call reveals:
{
"roots": {
"listChanged": true
}
}
The elicitation key is completely absent.
Expected Behavior
Claude Code should advertise elicitation in its client capabilities during MCP initialization, e.g.:
{
"elicitation": {},
"roots": {
"listChanged": true
}
}
Impact
Any MCP server that defensively checks clientCapabilities?.elicitation before calling elicitInput will throw with "Client does not support elicitation" — even though the Elicitation hook is configured and would correctly handle the request.
This was discovered while using the StackAdapt internal MCP server (@modelcontextprotocol/sdk@1.26.0), which pre-checks the capability before calling elicitInput. All mutation tools on that server are blocked as a result.
Possible Root Cause
This may be specific to the agent/FleetView context — elicitation capability advertisement may work correctly in direct Claude Code CLI use but is omitted when running as an agent. This matches a known pattern mentioned in claude-agent-acp issue #419.
Workaround
Removing the pre-check in the MCP server SDK so it attempts elicitation/create unconditionally — relying on the hook to handle it — works around the issue. But this is a server-side workaround and shouldn't be necessary if Claude Code correctly advertises the capability it supports.
Related Issues
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗