Skip to content

tool_call_mcp_elicitation=false does not suppress elicitation.form in MCP initialize (Graylog handshake fails with -32603) #17492

@mbonenberger

Description

@mbonenberger

What version of Codex CLI is running?

codex-cli 0.120.0

What subscription do you have?

Pro

Which model were you using?

gpt-5.3-codex

What platform is your computer?

Linux 6.8.0-106-generic x86_64 x86_64

What terminal emulator and version are you using (if applicable)?

running in a generic Ubuntu Linux shell environment

What issue are you seeing?

When starting Codex with a configured Graylog MCP server, MCP startup fails during handshake with:

MCP client for `graylog` failed to start: MCP startup failed: handshaking with MCP server failed: JSON-RPC error: -32603: Unrecognized field "form" (class io.modelcontextprotocol.spec.McpSchema$ClientCapabilities$Elicitation), not marked as ignorable (0 known properties: ]) at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain:

io.modelcontextprotocol.spec.McpSchema$InitializeRequest["capabilities"] >io.modelcontextprotocol.spec.McpSchema$ClientCapabilities["elicitation"]->io.modelcontextprotocol.spec.McpSchema$ClientCapabilities$Elicitation["form"])

Then Codex shows:

⚠ MCP startup incomplete (failed: graylog)

Reproduction details

Direct request to Graylog MCP endpoint with elicitation.form reproduces the server-side failure:

curl -i -X POST \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{"elicitation": {"form":true}},"clientInfo":{"name":"probe","version":"1.0"}}}' \  
"http://<REDACTED_TOKEN>:token@127.0.0.1:9000/api/mcp"

Response:

HTTP/1.1 500 Internal Server Error
  
{"jsonrpc":"2.0","id":1,"error":{"code":-32603,"message":"Unrecognized field \"form\" ..."}}

Control check (no elicitation.form) succeeds:

curl -i -X POST \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo": {"name":"probe","version":"1.0"}}}' \
 "http://<REDACTED_TOKEN>:token@127.0.0.1:9000/api/mcp"

Response:

HTTP/1.1 200 OK
 
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18",...}}

Why this looks like a Codex bug

I disabled the feature flag but Codex still appears to send elicitation.form during startup:

codex features list | rg tool_call_mcp_elicitation

tool_call_mcp_elicitation        stable             false

Also tested launch override:

codex -c features.tool_call_mcp_elicitation=false

Result is unchanged: same MCP startup handshake failure with elicitation.form.

Environment

  • Codex CLI: @openai/codex 0.120.0
  • OS: Ubuntu Linux shell
  • Graylog: 7.0.6+711d207 (MCP endpoint at /api/mcp)

What steps can reproduce the bug?

  1. Configure Graylog MCP server in Codex:
codex mcp add graylog --url "http://<REDACTED_TOKEN>:token@127.0.0.1:9000/api/mcp"
  1. Confirm elicitation feature is disabled:
codex features disable tool_call_mcp_elicitation
codex features list | rg tool_call_mcp_elicitation

--> expected: false

  1. Start a new Codex session (or force at launch):
codex -c features.tool_call_mcp_elicitation=false
  1. Observe startup output.

Actual result

Codex still fails MCP handshake for Graylog with:

JSON-RPC error: -32603: Unrecognized field "form" ... ClientCapabilities$Elicitation["form"]
⚠ MCP startup incomplete (failed: graylog)

Control check (server behavior)

  • initialize without capabilities.elicitation.form succeeds (HTTP 200).
  • initialize with capabilities.elicitation.form fails (HTTP 500, -32603).

What is the expected behavior?

When tool_call_mcp_elicitation is disabled (either in config or via -c features.tool_call_mcp_elicitation=false), Codex should not include capabilities.elicitation.form in MCP initialize requests.

As a result:

  • Graylog MCP handshake should complete successfully.
  • Codex should start without:
    • MCP client for 'graylog' failed to start
    • ⚠ MCP startup incomplete (failed: graylog)

Additional information

  • Graylog auth/connectivity are working:
    • POST /api/mcp with valid auth and a minimal initialize payload returns HTTP 200.
  • The failure is specific to capabilities.elicitation.form.
  • Graylog was upgraded from 7.0.5 to 7.0.6; behavior is unchanged.
  • As a temporary workaround, I used a local proxy shim that strips capabilities.elicitation.form from initialize before forwarding to Graylog. With that shim, handshake succeeds and Codex can use Graylog MCP.
  • This strongly suggests either:
    1. Codex still sends elicitation form despite the feature flag being disabled, or
    2. the flag is not applied to MCP startup handshake payload generation.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingmcpIssues related to the use of model context protocol (MCP) servers

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions