tinyhumansai/openhuman · error
mcp_registry_install: invalid env: {e}
Error message
mcp_registry_install: invalid env: {e} What it means
The "env" argument of mcp_registry_install failed to deserialize into HashMap<String,String> — some value is not a string (or the object is malformed). The tool schema declares env as an object with additionalProperties string.
Source
Thrown at src/openhuman/mcp/registry/tools.rs:411
"properties": {
"qualified_name": { "type": "string" },
"env": { "type": "object", "additionalProperties": { "type": "string" } },
"config": { "type": "object" }
},
"required": ["qualified_name"]
})
}
fn permission_level(&self) -> PermissionLevel {
PermissionLevel::Write
}
async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {
let qn = req_str(&args, "qualified_name")?;
let env: HashMap<String, String> = args
.get("env")
.cloned()
.map(serde_json::from_value)
.transpose()
.map_err(|e| anyhow::anyhow!("mcp_registry_install: invalid env: {e}"))?
.unwrap_or_default();
let config_value = args.get("config").cloned();
emit!(
ops::mcp_clients_install(&self.config, qn, env, config_value).await,
"mcp_registry_install"
)
}
}
/// Uninstall an MCP server. Default-OFF.
pub struct McpRegistryUninstallTool {
config: Arc<Config>,
}
impl McpRegistryUninstallTool {
pub fn new(config: Arc<Config>) -> Self {
Self { config }
}
}View on GitHub (pinned to 7491200858)
Solutions
- Make every env value a string (quote numbers and booleans)
- Fix malformed JSON in the env object
- Omit env entirely if no environment variables are needed
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at src/openhuman/mcp/registry/tools.rs:411 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17).
Data as JSON: /api/errors/dc3edee9ac91fe6c.
Report an issue: GitHub.