tinyhumansai/openhuman · error

mcp --transport http unavailable: built without the http-ser

Error message

mcp --transport http unavailable: built without the http-server feature

What it means

The HTTP transport arm of the MCP server is compiled only under the `http-server` Cargo feature (axum + socketioxide, #5048), which is ON in default builds. In a slim build compiled without it, `--transport http` reaches a #[cfg(not(feature = "http-server"))] block that bails with this build fact and exits; the stdio arm still works. The message exists so the failure is a one-line diagnostic instead of a server that mysteriously never comes up.

Source

Thrown at src/openhuman/mcp/server/stdio.rs:112

                let bind_addr: SocketAddr =
                    format!("{bind_host}:{port}").parse().map_err(|err| {
                        anyhow::anyhow!("invalid bind address `{bind_host}:{port}`: {err}")
                    })?;
                log::debug!(
                    "[mcp_server] starting HTTP/SSE MCP server bind={bind_addr} auth={}",
                    auth_token.is_some()
                );
                rt.block_on(run_http(HttpServerConfig {
                    bind_addr,
                    auth_token,
                }))?;
            }
            // Built without the axum transport (#5048): the stdio path above
            // still works; `--transport http` reports the build fact.
            #[cfg(not(feature = "http-server"))]
            {
                let _ = (&bind_host, port, &auth_token);
                bail!("mcp --transport http unavailable: built without the http-server feature");
            }
        }
    }
    Ok(())
}

/// Initialize logging for the MCP server.
///
/// MCP servers run as subprocesses of clients (Claude Desktop, Cursor, …) which
/// surface the server's stderr to the user when something goes wrong. We
/// therefore always install the tracing subscriber — otherwise `log::error!` /
/// `log::warn!` events get silently dropped and field-debugging requires
/// re-running with `--verbose`.
///
/// Default level is `warn` to keep the stderr stream quiet under normal use
/// while still surfacing problems; `--verbose` promotes it to `debug` so
/// `[mcp_server]` traces become visible. A user-set `RUST_LOG` always wins.
fn init_mcp_logging(verbose: bool) {

View on GitHub (pinned to 7491200858)

Solutions

  1. Rebuild with the gate: `cargo build --bin openhuman-core --features mcp,http-server` (the default feature set already includes both).
  2. Or use the stdio transport, which requires only `mcp`.
  3. If you embed the core, surface http-server availability at startup (the core has an http-server status surface) instead of discovering it at first invocation.

Example fix

# before — slim artifact without the axum transport
$ cargo build --bin openhuman-core --no-default-features --features mcp
$ openhuman-core mcp --transport http
error: mcp --transport http unavailable: built without the http-server feature

# after — include the gate (the http arm needs mcp + http-server)
$ cargo build --bin openhuman-core --features mcp,http-server
$ openhuman-core mcp --transport http --auth-token "$MCP_TOKEN"
Defensive patterns

Strategy: fallback

Validate before calling

fn mcp_http_transport_compiled_in() -> bool {
    cfg!(all(feature = "mcp", feature = "http-server"))
}
// gate flag/UI exposure on this instead of letting users hit the runtime bail

Try / catch

Catch the bail and fall back to the stdio transport (available under `mcp` alone), or surface 'rebuild with --features http-server' to the operator — this error is a build fact, not a runtime condition to retry.

Prevention

When it happens

Trigger: Running `openhuman mcp --transport http` on a binary built `--no-default-features` or with an explicit feature list omitting `http-server`. Note the http arm actually requires both `mcp` and `http-server` (the run path is cfg(all(feature = "mcp", feature = "http-server"))).

Common situations: Slim/embedded builds trimmed for size or kernel-profile artifacts (`--no-default-features --features flows`) accidentally used as a full core; minimal CI binaries reused locally; custom embeds composing their own feature sets.

Related errors


AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17). Data as JSON: /api/errors/afe4ea13fffd1e2c. Report an issue: GitHub.