tinyhumansai/openhuman · error · anyhow::Error

`{command}` was not found. This MCP server needs Node.js, wh

Error message

`{command}` was not found. This MCP server needs Node.js, which doesn't appear to be installed (or isn't on OpenHuman's PATH). Install Node.js from https://nodejs.org and restart OpenHuman.

What it means

Raised by the stdio MCP transport before spawning: `spawn_env::locate_command` could not find `npx`, `npm`, or `node` on the resolved PATH (config `env` PATH override, else the OpenHuman spawn PATH), so the server process is never started. `missing_command_error` recognizes Node-family commands by basename (after the last `/` or `\\`, case-insensitive) and emits this Node.js-specific guidance. A `tracing::warn` with target `[mcp_client::stdio]` is emitted alongside.

Source

Thrown at src/openhuman/mcp/config_servers/stdio.rs:101

            command.env(key, value);
        }

        // Resolve the command up front so a missing Node/uv runtime fails with
        // actionable guidance instead of a bare ENOENT from `spawn`.
        let effective_path = self
            .env
            .iter()
            .rev()
            .find(|(key, _)| key == "PATH")
            .map(|(_, value)| value.as_str())
            .unwrap_or(resolved_path.as_str());
        if spawn_env::locate_command(&self.command, effective_path, self.cwd.as_deref()).is_none() {
            tracing::warn!(
                target: "[mcp_client::stdio]",
                command = %self.command,
                "stdio MCP command not found on resolved PATH"
            );
            anyhow::bail!(spawn_env::missing_command_error(&self.command));
        }

        let mut child = command
            .spawn()
            .with_context(|| format!("spawning MCP stdio server `{}`", self.command))?;
        let stdin = child
            .stdin
            .take()
            .ok_or_else(|| anyhow::anyhow!("stdio server missing stdin"))?;
        let stdout = child
            .stdout
            .take()
            .ok_or_else(|| anyhow::anyhow!("stdio server missing stdout"))?;
        let mut session = StdioSession {
            child,
            stdin,
            stdout: BufReader::new(stdout),
            initialize: McpInitializeResult {

View on GitHub (pinned to 7491200858)

Solutions

  1. Install Node.js from https://nodejs.org and fully restart OpenHuman (not just reload the window).
  2. If Node is already installed, add its bin dir to the PATH OpenHuman sees — prefer the system PATH over shell-rc-only setup, or set an explicit `env = { PATH = "..." }` on the server entry (the last PATH entry in `env` wins).
  3. Use an absolute `command` path to the npx/node binary to bypass PATH resolution entirely.
  4. Verify with `which npx` in the same environment OpenHuman launches from.

Example fix

# before (config.toml) — relies on inherited PATH
[[mcp_client.servers.context7]]
command = "npx"
args = ["-y", "@upstash/context7-mcp"]

# after — pin the absolute binary, or inject PATH explicitly
[[mcp_client.servers.context7]]
command = "/opt/homebrew/bin/npx"
args = ["-y", "@upstash/context7-mcp"]
# alternatively:
# [[mcp_client.servers.context7.env]]
# key = "PATH"
# value ="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin"
Defensive patterns

Strategy: validation

Validate before calling

// before enabling a Node-based stdio server, verify the runtime is visible:
let path = std::env::var("PATH").unwrap_or_default();
if spawn_env::locate_command("npx", &path, None).is_none() {
    // surface a setup hint instead of letting the first call fail
}

Prevention

When it happens

Trigger: A `[[mcp_client.servers]]` stdio entry with `command = "npx"` (or `node`/`npm`, or an absolute path whose basename is one of these) on a machine without Node.js installed, or where Node is installed via a shell-only PATH injection (nvm, volta shim, homebrew shellenv) that OpenHuman's process does not inherit.

Common situations: GUI-launched OpenHuman not inheriting the login shell PATH (macOS .zshrc-only nvm setup); Node installed for the user but OpenHuman running as a service/other user; Windows Node installed but not on system PATH; fresh machine where the MCP server was configured before installing its runtime.

Related errors


AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17). Data as JSON: /api/errors/64f1b89b9b3c7961. Report an issue: GitHub.