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
- Ensure the connection completes initialization before sending requests
- Check for prior SSE endpoint discovery failures in logs
- 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)