From 6a477c4cf5afbaff939b93ed57925fe97c0d011c Mon Sep 17 00:00:00 2001 From: LukeParkerDev <10430890+Hona@users.noreply.github.com> Date: Sat, 23 May 2026 14:14:30 +1000 Subject: [PATCH 1/2] feat(mcp): start configured servers asynchronously --- .../app/src/components/dialog-select-mcp.tsx | 5 +- .../src/components/status-popover-body.tsx | 8 +- packages/app/src/context/global-sync.tsx | 2 + .../src/context/global-sync/event-reducer.ts | 6 + packages/app/src/i18n/en.ts | 1 + packages/opencode/src/cli/cmd/mcp.ts | 3 + .../opencode/src/cli/cmd/tui/context/sync.tsx | 7 + packages/opencode/src/config/mcp.ts | 4 +- packages/opencode/src/mcp/index.ts | 195 +++++++++++++----- .../opencode/test/cli/cmd/tui/sync.test.tsx | 44 +++- packages/opencode/test/mcp/lifecycle.test.ts | 119 ++++++++++- packages/sdk/js/src/v2/gen/types.gen.ts | 74 ++++--- 12 files changed, 369 insertions(+), 99 deletions(-) diff --git a/packages/app/src/components/dialog-select-mcp.tsx b/packages/app/src/components/dialog-select-mcp.tsx index 5a28173ead..f6046fb625 100644 --- a/packages/app/src/components/dialog-select-mcp.tsx +++ b/packages/app/src/components/dialog-select-mcp.tsx @@ -11,6 +11,7 @@ import { pathKey } from "@/utils/path-key" const statusLabels = { connected: "mcp.status.connected", + connecting: "mcp.status.connecting", failed: "mcp.status.failed", needs_auth: "mcp.status.needs_auth", needs_client_registration: "mcp.status.needs_client_registration", @@ -79,6 +80,7 @@ export const DialogSelectMcp: Component = () => { if (s?.status === "failed" || s?.status === "needs_client_registration") return s.error } const enabled = () => status() === "connected" + const connecting = () => status() === "connecting" return (
@@ -95,8 +97,9 @@ export const DialogSelectMcp: Component = () => {
e.stopPropagation()}> { + if (connecting()) return if (toggle.isPending) return toggle.mutate(i.name) }} diff --git a/packages/app/src/components/status-popover-body.tsx b/packages/app/src/components/status-popover-body.tsx index b38c98f141..678f5b665f 100644 --- a/packages/app/src/components/status-popover-body.tsx +++ b/packages/app/src/components/status-popover-body.tsx @@ -321,15 +321,17 @@ export function StatusPopoverBody(props: { shown: Accessor }) { {(name) => { const status = () => mcpStatus(name) const enabled = () => status() === "connected" + const connecting = () => status() === "connecting" return (