tinyhumansai/openhuman · error · anyhow::Error

MCP tools/list response missing `tools`

Error message

MCP tools/list response missing `tools`

What it means

The HTTP MCP server's tools/list reply succeeded at the JSON-RPC layer but its result object lacked the "tools" array. The server responded to the wrong shape or returned an empty object — a server-side protocol violation.

Source

Thrown at src/openhuman/mcp/http_client/client.rs:318

        Ok(init)
    }

    pub async fn list_tools(&self) -> anyhow::Result<Vec<McpRemoteTool>> {
        self.initialize().await?;
        let result = self
            .send_jsonrpc(
                "tools/list",
                json!({}),
                RequestOptions::standard("tools/list", None, None),
            )
            .await?
            .result;
        let tools = serde_json::from_value::<Vec<McpRemoteTool>>(
            result
                .get("tools")
                .cloned()
                .ok_or_else(|| anyhow::anyhow!("MCP tools/list response missing `tools`"))?,
        )?;
        let mut state = self.state.lock();
        state.cached_tools = tools
            .iter()
            .cloned()
            .map(|tool| (tool.name.clone(), tool))
            .collect();
        Ok(tools)
    }

    pub async fn call_tool(
        &self,
        name: &str,
        arguments: Value,
    ) -> anyhow::Result<McpServerToolResult> {
        self.initialize().await?;
        let cached_tool = { self.state.lock().cached_tools.get(name).cloned() };
        let tool = if let Some(tool) = cached_tool {

View on GitHub (pinned to 7491200858)

Solutions

  1. Capture and inspect the raw result object to see what the server returned
  2. Verify the server's MCP protocol version matches LATEST_PROTOCOL_VERSION sent in initialize
  3. Report or upgrade the remote server if it never populates tools
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/openhuman/mcp/http_client/client.rs:318 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/68acce995ceba2bf. Report an issue: GitHub.