@@ -463,6 +463,100 @@ func (s *Server) UnquarantineServer(serverName string) error {
463463 return s .storageManager .QuarantineUpstreamServer (serverName , false )
464464}
465465
466+ // EnableServer enables/disables a server via tray UI
467+ func (s * Server ) EnableServer (serverName string , enabled bool ) error {
468+ err := s .storageManager .EnableUpstreamServer (serverName , enabled )
469+ if err != nil {
470+ return err
471+ }
472+
473+ // Update upstream manager
474+ if enabled {
475+ // Get server config and add to upstream manager
476+ serverConfig , err := s .storageManager .GetUpstreamServer (serverName )
477+ if err != nil {
478+ return fmt .Errorf ("failed to get server config: %w" , err )
479+ }
480+
481+ if err := s .upstreamManager .AddServer (serverName , serverConfig ); err != nil {
482+ s .logger .Warn ("Failed to connect to upstream server after enabling" ,
483+ zap .String ("server" , serverName ),
484+ zap .Error (err ))
485+ }
486+ } else {
487+ // Remove from upstream manager
488+ s .upstreamManager .RemoveServer (serverName )
489+ }
490+
491+ // Trigger configuration save
492+ s .OnUpstreamServerChange ()
493+
494+ return nil
495+ }
496+
497+ // QuarantineServer sets quarantine status via tray UI
498+ func (s * Server ) QuarantineServer (serverName string , quarantined bool ) error {
499+ err := s .storageManager .QuarantineUpstreamServer (serverName , quarantined )
500+ if err != nil {
501+ return err
502+ }
503+
504+ // Trigger configuration save
505+ s .OnUpstreamServerChange ()
506+
507+ return nil
508+ }
509+
510+ // GetAllServers returns information about all servers for tray UI
511+ func (s * Server ) GetAllServers () ([]map [string ]interface {}, error ) {
512+ servers , err := s .storageManager .ListUpstreamServers ()
513+ if err != nil {
514+ return nil , err
515+ }
516+
517+ var result []map [string ]interface {}
518+ for _ , server := range servers {
519+ // Get connection status and tool count
520+ toolCount := 0
521+ connected := false
522+ connecting := false
523+ lastError := ""
524+
525+ if client , exists := s .upstreamManager .GetClient (server .Name ); exists {
526+ connectionStatus := client .GetConnectionStatus ()
527+ if c , ok := connectionStatus ["connected" ].(bool ); ok {
528+ connected = c
529+ }
530+ if c , ok := connectionStatus ["connecting" ].(bool ); ok {
531+ connecting = c
532+ }
533+ if e , ok := connectionStatus ["last_error" ].(string ); ok {
534+ lastError = e
535+ }
536+
537+ if connected {
538+ toolCount = s .getServerToolCount (server .Name )
539+ }
540+ }
541+
542+ result = append (result , map [string ]interface {}{
543+ "name" : server .Name ,
544+ "url" : server .URL ,
545+ "command" : server .Command ,
546+ "protocol" : server .Protocol ,
547+ "enabled" : server .Enabled ,
548+ "quarantined" : server .Quarantined ,
549+ "connected" : connected ,
550+ "connecting" : connecting ,
551+ "tool_count" : toolCount ,
552+ "last_error" : lastError ,
553+ "created" : server .Created ,
554+ })
555+ }
556+
557+ return result , nil
558+ }
559+
466560// getServerToolCount returns the number of tools for a specific server
467561func (s * Server ) getServerToolCount (serverID string ) int {
468562 client , exists := s .upstreamManager .GetClient (serverID )
0 commit comments