From 868e3f7180145cedc1fcc0f4e56d5f77725a26a4 Mon Sep 17 00:00:00 2001 From: Spencer Date: Fri, 24 Apr 2026 18:46:18 +0000 Subject: [PATCH] fix(cli): filter blocked MCP servers case-insensitively to prevent duplication Fixes a bug where disconnected MCP servers were listed twice in '/mcp list' (once as 'Disconnected' and once as 'Blocked') due to a strict string equality check that failed when extension server names had different casing or trailing whitespace compared to user configuration. Updated the filter in 'McpStatus.tsx' to use '.trim().toLowerCase()'. --- .../ui/components/views/McpStatus.test.tsx | 24 +++++++++++++++++++ .../cli/src/ui/components/views/McpStatus.tsx | 4 +++- .../__snapshots__/McpStatus.test.tsx.snap | 9 +++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/ui/components/views/McpStatus.test.tsx b/packages/cli/src/ui/components/views/McpStatus.test.tsx index 3df80360ab..30b15da310 100644 --- a/packages/cli/src/ui/components/views/McpStatus.test.tsx +++ b/packages/cli/src/ui/components/views/McpStatus.test.tsx @@ -202,6 +202,30 @@ describe('McpStatus', () => { unmount(); }); + it('filters blocked servers case-insensitively and ignores whitespace', async () => { + const { lastFrame, unmount } = await render( + , + ); + expect(lastFrame()).toMatchSnapshot(); + unmount(); + }); + it('renders only blocked servers when no configured servers exist', async () => { const { lastFrame, unmount } = await render( = ({ const serverNames = Object.keys(servers).filter( (serverName) => !blockedServers.some( - (blockedServer) => blockedServer.name === serverName, + (blockedServer) => + blockedServer.name.trim().toLowerCase() === + serverName.trim().toLowerCase(), ), ); diff --git a/packages/cli/src/ui/components/views/__snapshots__/McpStatus.test.tsx.snap b/packages/cli/src/ui/components/views/__snapshots__/McpStatus.test.tsx.snap index 71a34c5026..c0f620318e 100644 --- a/packages/cli/src/ui/components/views/__snapshots__/McpStatus.test.tsx.snap +++ b/packages/cli/src/ui/components/views/__snapshots__/McpStatus.test.tsx.snap @@ -1,5 +1,14 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html +exports[`McpStatus > filters blocked servers case-insensitively and ignores whitespace 1`] = ` +"Configured MCP servers: + +🔴 server-1 (from test-extension) - Blocked + +🔴 SERVER-2 (from test-extension) - Blocked +" +`; + exports[`McpStatus > renders correctly when discovery is in progress 1`] = ` "⏳ MCP servers are starting up (0 initializing)... Note: First startup may take longer. Tool availability will update automatically.