diff --git a/internal/llm/agent/mcp-tools.go b/internal/llm/agent/mcp-tools.go index 7ef24148c93c7c9d08156e25f59b55e1327c3534..67f0b39ccfb6eb8aad3abd337e7545a59766d872 100644 --- a/internal/llm/agent/mcp-tools.go +++ b/internal/llm/agent/mcp-tools.go @@ -6,6 +6,7 @@ import ( "encoding/json" "errors" "fmt" + "io" "log/slog" "maps" "net/http" @@ -254,7 +255,10 @@ func updateMCPState(name string, state MCPState, err error, client *mcp.ClientSe func CloseMCPClients() error { var errs []error for name, c := range mcpClients.Seq2() { - if err := c.Close(); err != nil { + if err := c.Close(); err != nil && + !errors.Is(err, io.EOF) && + !errors.Is(err, context.Canceled) && + err.Error() != "signal: killed" { errs = append(errs, fmt.Errorf("close mcp: %s: %w", name, err)) } } @@ -367,7 +371,6 @@ func createMCPSession(ctx context.Context, name string, m config.MCPConfig, reso if err != nil { updateMCPState(name, MCPStateError, maybeTimeoutErr(err, timeout), nil, 0) slog.Error("error starting mcp client", "error", err, "name", name) - _ = session.Close() cancel() return nil, err }