diff --git a/pkg/agent/loop_mcp.go b/pkg/agent/loop_mcp.go index 2795db52a..962789a06 100644 --- a/pkg/agent/loop_mcp.go +++ b/pkg/agent/loop_mcp.go @@ -63,6 +63,22 @@ func (al *AgentLoop) ensureMCPInitialized(ctx context.Context) error { return nil } + if al.cfg.Tools.MCP.Servers == nil || len(al.cfg.Tools.MCP.Servers) == 0 { + logger.WarnCF("agent", "MCP is enabled but no servers are configured, skipping MCP initialization", nil) + return nil + } + + findValidServer := false + for _, serverCfg := range al.cfg.Tools.MCP.Servers { + if serverCfg.Enabled { + findValidServer = true + } + } + if !findValidServer { + logger.WarnCF("agent", "MCP is enabled but no valid servers are configured, skipping MCP initialization", nil) + return nil + } + al.mcp.initOnce.Do(func() { mcpManager := mcp.NewManager() diff --git a/pkg/agent/loop_test.go b/pkg/agent/loop_test.go index cab82e176..1e8d92db8 100644 --- a/pkg/agent/loop_test.go +++ b/pkg/agent/loop_test.go @@ -770,13 +770,18 @@ func TestAgentLoop_ContextExhaustionRetry(t *testing.T) { } } -func TestProcessDirectWithChannel_InitializesMCPInAgentMode(t *testing.T) { +// TestProcessDirectWithChannel_TriggersMCPInitialization verifies that +// ProcessDirectWithChannel triggers MCP initialization when MCP is enabled. +// Note: Manager is only initialized when at least one MCP server is configured +// and successfully connected. +func TestProcessDirectWithChannel_TriggersMCPInitialization(t *testing.T) { tmpDir, err := os.MkdirTemp("", "agent-test-*") if err != nil { t.Fatalf("Failed to create temp dir: %v", err) } defer os.RemoveAll(tmpDir) + // Test with MCP enabled but no servers - should not initialize manager cfg := &config.Config{ Agents: config.AgentsConfig{ Defaults: config.AgentDefaults{ @@ -791,6 +796,7 @@ func TestProcessDirectWithChannel_InitializesMCPInAgentMode(t *testing.T) { ToolConfig: config.ToolConfig{ Enabled: true, }, + // No servers configured - manager should not be initialized }, }, } @@ -815,8 +821,9 @@ func TestProcessDirectWithChannel_InitializesMCPInAgentMode(t *testing.T) { t.Fatalf("ProcessDirectWithChannel failed: %v", err) } - if !al.mcp.hasManager() { - t.Fatal("expected MCP manager to be initialized in direct agent mode") + // Manager should not be initialized when no servers are configured + if al.mcp.hasManager() { + t.Fatal("expected MCP manager to be nil when no servers are configured") } }