docs/errors/MCPX_STDIO_SPAWN_ENOENT.md
MCPX_STDIO_SPAWN_ENOENTSeverity: error Domain: STDIO
mcpproxy tried to spawn a stdio MCP server, but the operating system reported
ENOENT — the configured command does not exist on the user's PATH. The
subprocess never started, so the MCP initialize handshake timed out.
A typical error chain looks like:
failed to connect: stdio transport (command="uvx", docker_isolation=false):
server did not respond to MCP initialize within 30s
recent stderr: zsh:1: command not found: uvx
uvx, npx, python3, bunx, etc. are missing from the host.PATH — the GUI launcher (Finder, systemd, launchd) doesn't see the
shell-only PATH that includes ~/.local/bin, /opt/homebrew/bin, NodeSource paths, etc.working_dir.command field of the upstream entry.which npx && which uvx && which python3
echo "$PATH"
If the command is missing, install the runtime:
# uvx (Python tools) — recommended
curl -LsSf https://astral.sh/uv/install.sh | sh
# npx (Node tools)
brew install node # macOS
sudo apt install nodejs npm # Debian/Ubuntu
The macOS tray launches mcpproxy with the user's login PATH, which is shorter
than your interactive shell PATH. Either:
sudo ln -s "$(which uvx)" /usr/local/bin/uvx, or"command": "/Users/you/.local/bin/uvx".If you don't want to install language runtimes on the host, enable Docker
isolation for the server. mcpproxy will run the command inside a container
that already has uvx / npx available.
{
"name": "my-server",
"command": "uvx",
"args": ["some-mcp-server"],
"isolation": { "enabled": true }
}
See Docker Isolation.
mcpproxy upstream logs <server-name> --tail 50
The last lines of stderr usually identify exactly which executable was missing.
mcpproxy doctor --server <name> for an interactive walk-through