From 91b6b3134a63036b1528da8e38d80bfe998c3d05 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Fri, 19 Sep 2025 09:16:47 -0300 Subject: [PATCH] fix(mcp): pass down mcp name to logger (#1078) This will make the logs more useful. Right now it would simply print the MCP's library logs without any additional context, so you wouldn't know which MCP is causing issues. Signed-off-by: Carlos Alexandro Becker --- internal/llm/agent/mcp-tools.go | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/internal/llm/agent/mcp-tools.go b/internal/llm/agent/mcp-tools.go index bb50231da028e714c783f50cc7ebd8a1f4b595db..90011c43a0fce476c119c7a981ea6760c294b806 100644 --- a/internal/llm/agent/mcp-tools.go +++ b/internal/llm/agent/mcp-tools.go @@ -327,7 +327,7 @@ func doGetMCPTools(ctx context.Context, permissions permission.Service, cfg *con } func createAndInitializeClient(ctx context.Context, name string, m config.MCPConfig) (*client.Client, error) { - c, err := createMcpClient(m) + c, err := createMcpClient(name, m) if err != nil { updateMCPState(name, MCPStateError, err, nil, 0) slog.Error("error creating mcp client", "error", err, "name", name) @@ -353,7 +353,7 @@ func createAndInitializeClient(ctx context.Context, name string, m config.MCPCon return c, nil } -func createMcpClient(m config.MCPConfig) (*client.Client, error) { +func createMcpClient(name string, m config.MCPConfig) (*client.Client, error) { switch m.Type { case config.MCPStdio: if strings.TrimSpace(m.Command) == "" { @@ -363,7 +363,7 @@ func createMcpClient(m config.MCPConfig) (*client.Client, error) { m.Command, m.ResolvedEnv(), m.Args, - transport.WithCommandLogger(mcpLogger{}), + transport.WithCommandLogger(mcpLogger{name: name}), ) case config.MCPHttp: if strings.TrimSpace(m.URL) == "" { @@ -372,7 +372,7 @@ func createMcpClient(m config.MCPConfig) (*client.Client, error) { return client.NewStreamableHttpClient( m.URL, transport.WithHTTPHeaders(m.ResolvedHeaders()), - transport.WithHTTPLogger(mcpLogger{}), + transport.WithHTTPLogger(mcpLogger{name: name}), ) case config.MCPSse: if strings.TrimSpace(m.URL) == "" { @@ -381,7 +381,7 @@ func createMcpClient(m config.MCPConfig) (*client.Client, error) { return client.NewSSEMCPClient( m.URL, client.WithHeaders(m.ResolvedHeaders()), - transport.WithSSELogger(mcpLogger{}), + transport.WithSSELogger(mcpLogger{name: name}), ) default: return nil, fmt.Errorf("unsupported mcp type: %s", m.Type) @@ -389,10 +389,15 @@ func createMcpClient(m config.MCPConfig) (*client.Client, error) { } // for MCP's clients. -type mcpLogger struct{} +type mcpLogger struct{ name string } -func (l mcpLogger) Errorf(format string, v ...any) { slog.Error(fmt.Sprintf(format, v...)) } -func (l mcpLogger) Infof(format string, v ...any) { slog.Info(fmt.Sprintf(format, v...)) } +func (l mcpLogger) Errorf(format string, v ...any) { + slog.Error(fmt.Sprintf(format, v...), "name", l.name) +} + +func (l mcpLogger) Infof(format string, v ...any) { + slog.Info(fmt.Sprintf(format, v...), "name", l.name) +} func mcpTimeout(m config.MCPConfig) time.Duration { return time.Duration(cmp.Or(m.Timeout, 15)) * time.Second