tinyhumansai/openhuman · error · anyhow::Error
`{command}` was not found. This MCP server needs uv (Python)
Error message
`{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. What it means
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.
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
- 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.
Example fix
# before [[mcp_client.servers.python-server]] command = "uvx" args = ["some-mcp-server"] # after — absolute path avoids PATH resolution surprises [[mcp_client.servers.python-server]] command = "/Users/me/.local/bin/uvx" args = ["some-mcp-server"]
Defensive patterns
Strategy: validation
Validate before calling
let path = std::env::var("PATH").unwrap_or_default();
if spawn_env::locate_command("uvx", &path, None).is_none() {
// prompt the user to install uv before configuring uv-based servers
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- `{command}` was not found. This MCP server needs Node.js, wh
- `{command}` was not found on OpenHuman's PATH. Install it (o
- stdio MCP server closed stdout while waiting for `{method}`
- MCP stdio error: {err}
- memory file not found: ${path}
AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17).
Data as JSON: /api/errors/3fefc4ae5330f6ad.
Report an issue: GitHub.