MCP stdio handshake times out with Honeybadger MCP server despite valid initialize response
Summary
Codex fails to complete the MCP handshake with the Honeybadger MCP server over stdio.
Codex reports:
MCP startup failed: timed out handshaking with MCP server after 10s
However, the server does respond correctly to initialize when tested manually outside the Codex MCP host.
Environment
- Codex CLI:
0.114.0 - Transport:
stdio - Host OS: macOS
- Honeybadger MCP server image:
ghcr.io/honeybadger-io/honeybadger-mcp-server:latest - Docker server version:
29.2.1
MCP config
[mcp_servers.honeybadger]
command = "/Users/<redacted>/.codex/bin/honeybadger_mcp_stdio_bridge.py"
args = []
[mcp_servers.honeybadger.env]
HONEYBADGER_PERSONAL_AUTH_TOKEN = "redacted"
LOG_LEVEL = "error"
What I expected
Codex should connect to the Honeybadger MCP server and list resources/tools normally.
What happened
Codex consistently fails with:
MCP startup failed: timed out handshaking with MCP server after 10s
Important detail
I verified manually that the wrapped server does return a valid MCP initialize response when sent a Content-Length framed request:
Content-Length: 190
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"logging":{},"tools":{"listChanged":true}},"serverInfo":{"name":"honeybadger-mcp-server","version":"1.0.0"}}}
So the server side appears responsive outside the Codex MCP host.
Additional investigation
- The Honeybadger MCP server itself appears to use a line-delimited JSON style internally.
- I added a local bridge that translates between
Content-Lengthframing and line-delimited JSON. - The bridge works in direct manual tests.
- Codex still times out during handshake when trying to use the same bridge via MCP config.
Related issues
These may be related to broader MCP handshake / timeout / protocol compatibility issues in Codex:
- #5444
- #5161
- #6127
- #5619
Repro steps
- Configure the Honeybadger MCP server in Codex via
stdio - Restart Codex
- Attempt to access MCP resources/tools
- Observe timeout during handshake
Notes
I can provide the bridge script and more raw handshake logs if useful.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗