tinyhumansai/openhuman · error · anyhow::Error

stdio MCP response missing `result`: {payload}

Error message

stdio MCP response missing `result`: {payload}

What it means

A JSON-RPC frame arrived from the stdio MCP server with neither a "result" nor (checked just before) a usable payload shape — the message is valid JSON but not a response the client can correlate. Typically a server bug or a notification sent where a response was expected.

Source

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

            }
            if !trimmed.starts_with('{') && !trimmed.starts_with('[') {
                tracing::debug!(
                    target: "[mcp_client::stdio]",
                    command = %self.command,
                    line = %trimmed,
                    "ignoring non-JSON stdout line from stdio MCP server"
                );
                continue;
            }
            let payload: Value = serde_json::from_str(trimmed)
                .with_context(|| format!("parsing stdio MCP response: {trimmed}"))?;
            if let Some(err) = payload.get("error") {
                anyhow::bail!("MCP stdio error: {err}");
            }
            return payload
                .get("result")
                .cloned()
                .ok_or_else(|| anyhow::anyhow!("stdio MCP response missing `result`: {payload}"));
        }
    }

    async fn send_notification_on_session(
        &self,
        session: &mut StdioSession,
        method: &str,
        params: Value,
    ) -> anyhow::Result<()> {
        let line = serde_json::to_string(&json!({
            "jsonrpc": "2.0",
            "method": method,
            "params": params,
        }))?;
        session.stdin.write_all(line.as_bytes()).await?;
        session.stdin.write_all(b"\n").await?;
        session.stdin.flush().await?;
        Ok(())

View on GitHub (pinned to 7491200858)

Solutions

  1. Inspect the logged payload to identify which request the malformed reply answers
  2. Upgrade or report the MCP server — responses must carry a "result" or "error" member
  3. Retry the request; a one-off garbled frame may be transient
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at src/openhuman/mcp/config_servers/stdio.rs:249 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/573de77bec0e7bb1. Report an issue: GitHub.