Kuberwastaken/claurst · error

MCP server ' ': legacy SSE POST endpoint has not been…

Error message

MCP server '{}': legacy SSE POST endpoint has not been discovered

What it means

The legacy SSE transport's send() was invoked before endpoint discovery finished — the post_endpoint slot is still unset, so there is nowhere to POST JSON-RPC messages. Happens when a request races ahead of the SSE endpoint event (or discovery failed silently).

Solutions

  1. Ensure the connection completes initialization before sending requests
  2. Check for prior SSE endpoint discovery failures in logs
  3. Retry the connection; use streamable-http transport if available
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src-rust/crates/mcp/src/rmcp_backend.rs:370 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/877955f4df1b3e4c. Report an issue: GitHub.

Appendix: source

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

    }
}

impl rmcp::transport::Transport<RoleClient> for LegacySseRmcpTransport {
    type Error = LegacySseTransportError;

    fn send(
        &mut self,
        item: rmcp::service::TxJsonRpcMessage<RoleClient>,
    ) -> impl std::future::Future<Output = Result<(), Self::Error>> + Send + 'static {
        let endpoint = lock_recover(&self.post_endpoint).clone();
        let client = self.client.clone();
        let auth_token = self.auth_token.clone();
        let server_name = self.server_name.clone();
        let incoming_tx = self.incoming_tx.clone();
        let background_tasks = Arc::clone(&self.background_tasks);
        async move {
            let endpoint = endpoint.ok_or_else(|| {
                anyhow::anyhow!(
                    "MCP server '{}': legacy SSE POST endpoint has not been discovered",
                    server_name
                )
            })?;

            let mut request = client
                .post(endpoint)
                .header(reqwest::header::CONTENT_TYPE, "application/json")
                .json(&item);
            if let Some(token) = &auth_token {
                request = request.header(
                    reqwest::header::AUTHORIZATION,
                    transport::bearer_header_value(token)?,
                );
            }

            let response = request.send().await.map_err(|e| {
                anyhow::anyhow!(

View on GitHub (pinned to b0637c97ec)