@@ -96,20 +96,31 @@ pub enum AgentSubcommand {
9696 Swap { name : Option < String > } ,
9797}
9898
99- fn prompt_mcp_server_selection ( servers : & [ McpServerInfo ] ) -> eyre:: Result < Vec < & McpServerInfo > > {
99+ fn prompt_mcp_server_selection ( servers : & [ McpServerInfo ] ) -> eyre:: Result < Option < Vec < & McpServerInfo > > > {
100100 let items: Vec < String > = servers
101101 . iter ( )
102102 . map ( |server| format ! ( "{} ({})" , server. name, server. config. command) )
103103 . collect ( ) ;
104104
105- let selections = MultiSelect :: new ( )
105+ let selections = match MultiSelect :: new ( )
106106 . with_prompt ( "Select MCP servers (use Space to toggle, Enter to confirm)" )
107107 . items ( & items)
108- . interact ( ) ?;
109-
110- let selected_servers: Vec < & McpServerInfo > = selections. iter ( ) . filter_map ( |& i| servers. get ( i) ) . collect ( ) ;
108+ . interact_on_opt ( & dialoguer:: console:: Term :: stdout ( ) )
109+ {
110+ Ok ( sel) => sel,
111+ Err ( dialoguer:: Error :: IO ( ref e) ) if e. kind ( ) == std:: io:: ErrorKind :: Interrupted => {
112+ return Ok ( None ) ;
113+ } ,
114+ Err ( e) => return Err ( eyre:: eyre!( "Failed to get MCP server selection: {e}" ) ) ,
115+ } ;
116+
117+ let selected_servers: Vec < & McpServerInfo > = selections
118+ . unwrap_or_default ( )
119+ . iter ( )
120+ . filter_map ( |& i| servers. get ( i) )
121+ . collect ( ) ;
111122
112- Ok ( selected_servers)
123+ Ok ( Some ( selected_servers) )
113124}
114125
115126impl AgentSubcommand {
@@ -280,7 +291,12 @@ impl AgentSubcommand {
280291 let selected_servers = if mcp_servers. is_empty ( ) {
281292 Vec :: new ( )
282293 } else {
283- prompt_mcp_server_selection ( & mcp_servers) . map_err ( |e| ChatError :: Custom ( e. to_string ( ) . into ( ) ) ) ?
294+ match prompt_mcp_server_selection ( & mcp_servers)
295+ . map_err ( |e| ChatError :: Custom ( e. to_string ( ) . into ( ) ) ) ?
296+ {
297+ Some ( servers) => servers,
298+ None => return Ok ( ChatState :: default ( ) ) ,
299+ }
284300 } ;
285301
286302 let mcp_servers_json = if !selected_servers. is_empty ( ) {
0 commit comments