diff --git a/crates/mcp-client/src/transport/mod.rs b/crates/mcp-client/src/transport/mod.rs index 25bcef74..e2a66b26 100644 --- a/crates/mcp-client/src/transport/mod.rs +++ b/crates/mcp-client/src/transport/mod.rs @@ -118,6 +118,14 @@ impl PendingRequests { pub async fn clear(&self) { self.requests.write().await.clear(); } + + pub async fn len(&self) -> usize { + self.requests.read().await.len() + } + + pub async fn is_empty(&self) -> bool { + self.len().await == 0 + } } pub mod stdio; diff --git a/crates/mcp-client/src/transport/sse.rs b/crates/mcp-client/src/transport/sse.rs index 90dc5f2f..8a564708 100644 --- a/crates/mcp-client/src/transport/sse.rs +++ b/crates/mcp-client/src/transport/sse.rs @@ -210,8 +210,13 @@ impl SseActor { } // mpsc channel closed => no more outgoing messages - tracing::error!("SseActor: outgoing message loop ended. Clearing pending requests."); - pending_requests.clear().await; + let pending = pending_requests.len().await; + if pending > 0 { + tracing::error!("SSE stream ended or encountered an error with {pending} unfulfilled pending requests."); + pending_requests.clear().await; + } else { + tracing::info!("SseActor shutdown cleanly. No pending requests."); + } } }