From 49afaa9025d80bb020b618ad49c5d62c05657868 Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Sat, 12 Sep 2026 12:39:31 -0600 Subject: [PATCH] Render disconnected MCP servers in the stage insights sidebar A server whose connection closed mid-stage shows an amber warning icon and a "Disconnected" badge, distinct from a server that failed to start. Co-Authored-By: Claude Fable 5.1 --- .../stage-insights-sidebar.test.tsx | 20 +++++++ .../app/components/stage-insights-sidebar.tsx | 54 +++++++++++++------ 2 files changed, 59 insertions(+), 15 deletions(-) diff --git a/apps/fabro-web/app/components/stage-insights-sidebar.test.tsx b/apps/fabro-web/app/components/stage-insights-sidebar.test.tsx index 4aa368c14..fff871494 100644 --- a/apps/fabro-web/app/components/stage-insights-sidebar.test.tsx +++ b/apps/fabro-web/app/components/stage-insights-sidebar.test.tsx @@ -215,6 +215,26 @@ describe("StageInsightsSidebar", () => { expect(dom).toContain("Failed"); }); + test("renders a disconnected mcp server as disconnected, still counted as used", () => { + const dom = render( + makeStage({ + mcp_servers: [ + { + server_name: "github", + tool_count: 4, + status: { kind: "disconnected", error: "transport closed" }, + invoked: true, + }, + ], + }), + null, + ); + expect(dom).toContain("1/1"); + expect(dom).toContain("github"); + expect(dom).toContain("Disconnected"); + expect(dom).not.toContain("Failed"); + }); + test("shows skill activated/available ratio with source label", () => { const dom = render( makeStage({ diff --git a/apps/fabro-web/app/components/stage-insights-sidebar.tsx b/apps/fabro-web/app/components/stage-insights-sidebar.tsx index 3aa053c4b..65323135e 100644 --- a/apps/fabro-web/app/components/stage-insights-sidebar.tsx +++ b/apps/fabro-web/app/components/stage-insights-sidebar.tsx @@ -7,6 +7,7 @@ import { import { ArrowPathIcon, CheckCircleIcon, + ExclamationTriangleIcon, XCircleIcon, } from "@heroicons/react/24/solid"; import { @@ -554,27 +555,15 @@ function McpSection({ servers }: { servers: McpServerProjection[] }) {