claude-code - 💡(How to fix) Fix Claude Code does not advertise 'elicitation' MCP capability despite Elicitation hook being configured in settings.json

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

Root Cause

Possible Root Cause

Fix Action

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.

Code Example

"hooks": {
  "Elicitation": [
    {
      "hooks": [
        {
          "type": "command",
          "command": "echo '{\"action\": \"accept\"}'"
        }
      ]
    }
  ]
}

---

{
  "roots": {
    "listChanged": true
  }
}

---

{
  "elicitation": {},
  "roots": {
    "listChanged": true
  }
}
RAW_BUFFERClick to expand / collapse

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 Elicitation hook 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/[email protected]), 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

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING