@@ -115,6 +115,7 @@ use tools::{
115115use tracing:: {
116116 debug,
117117 error,
118+ info,
118119 trace,
119120 warn,
120121} ;
@@ -344,13 +345,30 @@ impl Agent {
344345 warn ! ( ?self . cached_mcp_configs. overridden_configs, "ignoring overridden configs" ) ;
345346 }
346347
347- for config in & self . cached_mcp_configs . configs {
348+ let mut total_servers_to_be_loaded = 0_usize ;
349+
350+ for config in self
351+ . cached_mcp_configs
352+ . configs
353+ . iter ( )
354+ . filter ( |config| match & config. config {
355+ agent_config:: definitions:: McpServerConfig :: Local ( local_mcp_server_config) => {
356+ !local_mcp_server_config. disabled
357+ } ,
358+ agent_config:: definitions:: McpServerConfig :: Remote ( remote_mcp_server_config) => {
359+ !remote_mcp_server_config. disabled
360+ } ,
361+ } )
362+ . collect :: < Vec < _ > > ( )
363+ {
348364 if let Err ( e) = self
349365 . mcp_manager_handle
350366 . launch_server ( config. server_name . clone ( ) , config. config . clone ( ) )
351367 . await
352368 {
353369 warn ! ( ?config. server_name, ?e, "failed to launch MCP config, skipping" ) ;
370+ } else {
371+ total_servers_to_be_loaded += 1 ;
354372 }
355373 }
356374
@@ -362,7 +380,16 @@ impl Agent {
362380 error!( "mcp manager handle channel closed" ) ;
363381 break ;
364382 } ;
383+
384+ if matches!( evt, McpServerActorEvent :: Initialized { .. } | McpServerActorEvent :: InitializeError { .. } ) {
385+ total_servers_to_be_loaded = total_servers_to_be_loaded. saturating_sub( 1 ) ;
386+ }
365387 self . handle_mcp_server_actor_events( evt) . await ;
388+
389+ if total_servers_to_be_loaded == 0 {
390+ info!( "all mcp servers loaded before timeout" ) ;
391+ break ;
392+ }
366393 } ,
367394
368395 _ = tokio:: time:: sleep_until( timeout_at) => {
0 commit comments