diff --git a/sgl-router/src/routers/grpc/common/responses/utils.rs b/sgl-router/src/routers/grpc/common/responses/utils.rs
index 24d6cb847..3fbe20efb 100644
--- a/sgl-router/src/routers/grpc/common/responses/utils.rs
+++ b/sgl-router/src/routers/grpc/common/responses/utils.rs
@@ -7,7 +7,7 @@ use axum::{
response::{IntoResponse, Response},
};
use serde_json::{json, to_value};
-use tracing::{debug, warn};
+use tracing::{debug, error, warn};
use crate::{
core::WorkerRegistry,
@@ -44,6 +44,10 @@ pub async fn ensure_mcp_connection(
.await
.is_none()
{
+ error!(
+ function = "ensure_mcp_connection",
+ "Failed to connect to MCP server"
+ );
return Err(error::failed_dependency(
"Failed to connect to MCP server. Check server_url and authorization.",
));
diff --git a/sgl-router/src/routers/grpc/common/stages/client_acquisition.rs b/sgl-router/src/routers/grpc/common/stages/client_acquisition.rs
index d2b912ee2..c6fea0635 100644
--- a/sgl-router/src/routers/grpc/common/stages/client_acquisition.rs
+++ b/sgl-router/src/routers/grpc/common/stages/client_acquisition.rs
@@ -2,6 +2,7 @@
use async_trait::async_trait;
use axum::response::Response;
+use tracing::error;
use super::PipelineStage;
use crate::routers::grpc::{
@@ -15,11 +16,13 @@ pub struct ClientAcquisitionStage;
#[async_trait]
impl PipelineStage for ClientAcquisitionStage {
async fn execute(&self, ctx: &mut RequestContext) -> Result