{"record":{"id":"3fefc4ae5330f6ad","repo":"tinyhumansai/openhuman","slug":"command-was-not-found-this-mcp-server-needs-u","errorCode":null,"errorMessage":"`{command}` was not found. This MCP server needs uv (Python), which doesn't appear to be installed. Install it from https://docs.astral.sh/uv/ and restart OpenHuman.","messagePattern":"`(.+?)` was not found\\. This MCP server needs uv \\(Python\\), which doesn't appear to be installed\\. Install it from https://docs\\.astral\\.sh/uv/ and restart OpenHuman\\.","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/openhuman/mcp/config_servers/stdio.rs","lineNumber":101,"sourceCode":"            command.env(key, value);\n        }\n\n        // Resolve the command up front so a missing Node/uv runtime fails with\n        // actionable guidance instead of a bare ENOENT from `spawn`.\n        let effective_path = self\n            .env\n            .iter()\n            .rev()\n            .find(|(key, _)| key == \"PATH\")\n            .map(|(_, value)| value.as_str())\n            .unwrap_or(resolved_path.as_str());\n        if spawn_env::locate_command(&self.command, effective_path, self.cwd.as_deref()).is_none() {\n            tracing::warn!(\n                target: \"[mcp_client::stdio]\",\n                command = %self.command,\n                \"stdio MCP command not found on resolved PATH\"\n            );\n            anyhow::bail!(spawn_env::missing_command_error(&self.command));\n        }\n\n        let mut child = command\n            .spawn()\n            .with_context(|| format!(\"spawning MCP stdio server `{}`\", self.command))?;\n        let stdin = child\n            .stdin\n            .take()\n            .ok_or_else(|| anyhow::anyhow!(\"stdio server missing stdin\"))?;\n        let stdout = child\n            .stdout\n            .take()\n            .ok_or_else(|| anyhow::anyhow!(\"stdio server missing stdout\"))?;\n        let mut session = StdioSession {\n            child,\n            stdin,\n            stdout: BufReader::new(stdout),\n            initialize: McpInitializeResult {","sourceCodeStart":83,"sourceCodeEnd":119,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/mcp/config_servers/stdio.rs#L83-L119","documentation":"Same pre-spawn guard as the Node variant, but for `uv`/`uvx` (basename match, case-insensitive): `locate_command` cannot find the uv executable on the resolved PATH, so the Python-based stdio MCP server is never launched. The message points at uv specifically because the command basename identifies the Astral uv runtime.","triggerScenarios":"A stdio MCP server entry with `command = \"uvx\"` (or `uv`) on a machine without uv installed, or uv installed via `pip`/`pipx`/`cargo` into a user bin dir that is on the shell PATH but not on OpenHuman's resolved spawn PATH.","commonSituations":"uv installed with `curl ... | sh` which edits shell rc files only, so a GUI-launched OpenHuman misses it; CI/docker images without uv; server config authored on a developer box and synced to a host lacking uv.","solutions":["Install uv from https://docs.astral.sh/uv/ and restart OpenHuman.","If uv is installed, ensure its location (commonly `~/.local/bin`, `~/.cargo/bin`) is on the PATH OpenHuman resolves — set an explicit `env` PATH on the server entry or move/symlink uv into a system PATH dir.","Use an absolute `command` path to the uv/uvx binary.","Verify with `which uvx` from the same context that launches OpenHuman."],"exampleFix":"# before\n[[mcp_client.servers.python-server]]\ncommand = \"uvx\"\nargs = [\"some-mcp-server\"]\n\n# after — absolute path avoids PATH resolution surprises\n[[mcp_client.servers.python-server]]\ncommand = \"/Users/me/.local/bin/uvx\"\nargs = [\"some-mcp-server\"]","handlingStrategy":"validation","validationCode":"let path = std::env::var(\"PATH\").unwrap_or_default();\nif spawn_env::locate_command(\"uvx\", &path, None).is_none() {\n    // prompt the user to install uv before configuring uv-based servers\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Install uv system-wide or reference its absolute path (~/.local/bin/uvx).","Remember ~/.local/bin and ~/.cargo/bin are often missing from GUI-process PATHs.","Restart OpenHuman after installing so the resolved PATH is refreshed."],"tags":["mcp","stdio","uv","python","path","command-not-found"],"backgroundTag":"command-not-found","analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","schemaVersion":2},"datasetVersion":"2026-08-21T13:17:26.733Z"}