@@ -107,29 +107,28 @@ func GetState(name string) (ClientInfo, bool) {
107107
108108// Close closes all MCP clients. This should be called during application shutdown.
109109func Close() error {
110− var errs []error
111110 var wg sync.WaitGroup
112− for name, session := range sessions.Seq2() {
113− wg.Go(func() {
114− done := make(chan bool, 1)
115− go func() {
111+ done := make(chan struct{}, 1)
112+ go func() {
113+ for name, session := range sessions.Seq2() {
114+ wg.Go(func() {
116115 if err := session.Close(); err != nil &&
117116 !errors.Is(err, io.EOF) &&
118117 !errors.Is(err, context.Canceled) &&
119118 err.Error() != "signal: killed" {
120− errs = append(errs, fmt.Errorf("close mcp: %s: %w", name, err))
119+ slog.Warn("Failed to shutdown MCP client", "name", name, "error", err)
121120 }
122− done <- true
123− }()
124− select {
125− case <-done:
126− case <-time.After(time.Millisecond * 250):
127− }
128− })
121+ })
122+ }
123+ wg.Wait()
124+ done <- struct{}{}
125+ }()
126+ select {
127+ case <-done:
128+ case <-time.After(5 * time.Second):
129129 }
130− wg.Wait()
131130 broker.Shutdown()
132− return errors.Join(errs...)
131+ return nil
133132}
134133
135134// Initialize initializes MCP clients based on the provided configuration.