Kuberwastaken/claurst · error

MCP server ' ': failed to open legacy SSE stream

Error message

MCP server '{}': failed to open legacy SSE stream '{}': {}

What it means

The legacy SSE transport could not establish its event stream: the initial GET to the server's SSE URL (with Accept: text/event-stream and optional bearer auth) failed at the connection/request level. This is the first step of legacy-SSE endpoint discovery; no POST endpoint can be learned without the stream.

Solutions

  1. Verify the SSE URL is reachable and serves text/event-stream
  2. Check auth token validity if the server requires a bearer token
  3. Prefer the streamable-http transport if the server supports it
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at src-rust/crates/mcp/src/rmcp_backend.rs:267 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of Kuberwastaken/claurst@b0637c97ec (2026-09-10). Data as JSON: /api/errors/21551796271d78a5. Report an issue: GitHub.

Appendix: source

Thrown at src-rust/crates/mcp/src/rmcp_backend.rs:267

        Ok(transport)
    }

    async fn start_sse_listener(&self) -> anyhow::Result<()> {
        let (endpoint_tx, endpoint_rx) = oneshot::channel::<anyhow::Result<String>>();
        let endpoint_tx = Arc::new(StdMutex::new(Some(endpoint_tx)));

        let mut request = self
            .client
            .get(&self.sse_url)
            .header(reqwest::header::ACCEPT, "text/event-stream");
        if let Some(token) = &self.auth_token {
            request = request.header(
                reqwest::header::AUTHORIZATION,
                transport::bearer_header_value(token)?,
            );
        }
        let response = request.send().await.map_err(|e| {
            anyhow::anyhow!(
                "MCP server '{}': failed to open legacy SSE stream '{}': {}",
                self.server_name,
                self.sse_url,
                e
            )
        })?;
        if !response.status().is_success() {
            let status = response.status();
            let body = response.text().await.unwrap_or_default();
            anyhow::bail!(
                "MCP server '{}': legacy SSE stream returned HTTP {}: {}",
                self.server_name,
                status,
                body
            );
        }

        let server_name = self.server_name.clone();

View on GitHub (pinned to b0637c97ec)