From 5d011730c39013e00332757c3b90ed5d7eb66411 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Mon, 3 Nov 2025 15:56:39 -0300 Subject: [PATCH] fix: handle delayed mcp init Signed-off-by: Carlos Alexandro Becker --- internal/agent/coordinator.go | 22 ++++++++++------------ internal/tui/tui.go | 17 +++++++++++++---- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/internal/agent/coordinator.go b/internal/agent/coordinator.go index c04593badfa002c71923090992ac1ebda992e6d1..fa0a9b90dc6fbf42f06ffa636f676ac0d94d79cc 100644 --- a/internal/agent/coordinator.go +++ b/internal/agent/coordinator.go @@ -348,22 +348,20 @@ func (c *coordinator) buildTools(ctx context.Context, agent config.Agent) ([]fan if agent.AllowedMCP == nil { // No MCP restrictions filteredTools = append(filteredTools, tool) - } else if len(agent.AllowedMCP) == 0 { - // no mcps allowed + continue + } + if len(agent.AllowedMCP) == 0 { + // No MCPs allowed + slog.Warn("MCPs not allowed") break } for mcp, tools := range agent.AllowedMCP { - if mcp == tool.MCP() { - if len(tools) == 0 { - filteredTools = append(filteredTools, tool) - } - for _, t := range tools { - if t == tool.MCPToolName() { - filteredTools = append(filteredTools, tool) - } - } - break + if mcp != tool.MCP() { + continue + } + if len(tools) == 0 || slices.Contains(tools, tool.MCPToolName()) { + filteredTools = append(filteredTools, tool) } } } diff --git a/internal/tui/tui.go b/internal/tui/tui.go index a75ece6a8c4b2a91474dee65ed0daba8e08d9859..3efc581a88167493d520cc4a9d37f00e2296ac1b 100644 --- a/internal/tui/tui.go +++ b/internal/tui/tui.go @@ -143,10 +143,12 @@ func (a *appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case pubsub.Event[mcp.Event]: switch msg.Payload.Type { + case mcp.EventStateChanged: + return a, a.handleStateChanged(context.Background()) case mcp.EventPromptsListChanged: - return a, a.handleMCPPromptsEvent(context.Background(), msg.Payload.Name) + return a, handleMCPPromptsEvent(context.Background(), msg.Payload.Name) case mcp.EventToolsListChanged: - return a, a.handleMCPToolsEvent(context.Background(), msg.Payload.Name) + return a, handleMCPToolsEvent(context.Background(), msg.Payload.Name) } // Completions messages @@ -627,14 +629,21 @@ func (a *appModel) View() tea.View { return view } -func (a *appModel) handleMCPPromptsEvent(ctx context.Context, name string) tea.Cmd { +func (a *appModel) handleStateChanged(ctx context.Context) tea.Cmd { + return func() tea.Msg { + a.app.UpdateAgentModel(ctx) + return nil + } +} + +func handleMCPPromptsEvent(ctx context.Context, name string) tea.Cmd { return func() tea.Msg { mcp.RefreshPrompts(ctx, name) return nil } } -func (a *appModel) handleMCPToolsEvent(ctx context.Context, name string) tea.Cmd { +func handleMCPToolsEvent(ctx context.Context, name string) tea.Cmd { return func() tea.Msg { mcp.RefreshTools(ctx, name) return nil