MCPX_STDIO_HANDSHAKE_INVALID
Severity: error Domain: STDIO
What happened
The stdio server emitted bytes on stdout in response to initialize, but
mcpproxy could not parse them as a valid MCP / JSON-RPC frame. Common shapes:
HTML, a stack trace, ANSI-coloured logs, partial JSON, or an MCP frame for an
unsupported protocol version.
Common causes
- The server logs to stdout in addition to JSON-RPC frames.
- The server speaks an older / newer MCP protocol version that mcpproxy can't negotiate.
- An npm/pip wrapper script printed a deprecation warning before the real process took over.
- A shell wrapper added stdout content (e.g.
set -x,echo "starting…").
How to fix
Read the captured frame
upstream logs records the raw stdout stream — find the offending payload:
mcpproxy upstream logs <server-name> --tail 200
Silence non-JSON output
- Redirect informational output to stderr in your wrapper script:
echo "starting" >&2. - Disable colour:
NO_COLOR=1,TERM=dumb. - Remove
set -xorset -vfrom start-up scripts.
Negotiate a compatible protocol
mcpproxy currently advertises a recent protocol version. If the upstream server only supports an old one, update the server. Project maintainers should target the MCP protocol versions that mcpproxy understands.
Try Docker isolation
Running the server inside a clean container removes most sources of contamination from your shell profile and runtime:
{
"isolation": { "enabled": true }
}
Related
MCPX_STDIO_HANDSHAKE_TIMEOUT— server didn't reply at all- MCP Protocol