From 560d61c731d8a9b672778d959fb73882e370b4cb Mon Sep 17 00:00:00 2001 From: Aleksander Grygier Date: Sat, 22 Aug 2026 06:53:29 +0200 Subject: [PATCH] ui : browse MCP resources from the server card Make the Resources capability badge clickable so it opens the MCP resources browser dialog, and drop the page-only chrome from SettingsMcpServers. Assisted-by: pi --- .../app/mcp/McpCapabilitiesBadges.svelte | 29 +++++++++- .../mcp/McpServerCard/McpServerCard.svelte | 18 +++--- .../McpServerCard/McpServerCardHeader.svelte | 4 +- .../app/settings/SettingsMcpServers.svelte | 55 ++++--------------- 4 files changed, 51 insertions(+), 55 deletions(-) diff --git a/tools/ui/src/lib/components/app/mcp/McpCapabilitiesBadges.svelte b/tools/ui/src/lib/components/app/mcp/McpCapabilitiesBadges.svelte index 632cd3e8a7..5969547036 100644 --- a/tools/ui/src/lib/components/app/mcp/McpCapabilitiesBadges.svelte +++ b/tools/ui/src/lib/components/app/mcp/McpCapabilitiesBadges.svelte @@ -1,13 +1,22 @@ {#if capabilities} @@ -20,10 +29,24 @@ {/if} {#if capabilities.server.resources} - + { + if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault(); + onBrowseResources?.(); + } + }} + role="button" + tabindex={0} + variant="outline" + > Resources + + {/if} diff --git a/tools/ui/src/lib/components/app/mcp/McpServerCard/McpServerCard.svelte b/tools/ui/src/lib/components/app/mcp/McpServerCard/McpServerCard.svelte index 84383d59ea..6e9a995385 100644 --- a/tools/ui/src/lib/components/app/mcp/McpServerCard/McpServerCard.svelte +++ b/tools/ui/src/lib/components/app/mcp/McpServerCard/McpServerCard.svelte @@ -22,9 +22,10 @@ onToggle: (enabled: boolean) => void; onUpdate: (updates: Partial) => void; onDelete: () => void; + onBrowseResources?: () => void; } - let { enabled, onDelete, onToggle, onUpdate, server }: Props = $props(); + let { enabled, onBrowseResources, onDelete, onToggle, onUpdate, server }: Props = $props(); let healthState = $derived(mcpStore.getHealthCheckState(server.id)); let displayName = $derived(mcpStore.getServerLabel(server)); @@ -125,6 +126,7 @@ {displayName} enabled={enabled ?? server.enabled} {faviconUrl} + {onBrowseResources} {onToggle} {serverInfo} {transportType} @@ -191,12 +193,14 @@ {/if} - +
+ +
{/if} diff --git a/tools/ui/src/lib/components/app/mcp/McpServerCard/McpServerCardHeader.svelte b/tools/ui/src/lib/components/app/mcp/McpServerCard/McpServerCardHeader.svelte index 30369d6509..9baded678e 100644 --- a/tools/ui/src/lib/components/app/mcp/McpServerCard/McpServerCardHeader.svelte +++ b/tools/ui/src/lib/components/app/mcp/McpServerCard/McpServerCardHeader.svelte @@ -12,6 +12,7 @@ enabled: boolean; disabled?: boolean; onToggle: (enabled: boolean) => void; + onBrowseResources?: () => void; serverInfo?: MCPServerInfo; capabilities?: MCPCapabilitiesInfo; transportType?: MCPTransportType; @@ -23,6 +24,7 @@ displayName, enabled, faviconUrl, + onBrowseResources, onToggle, serverInfo, transportType @@ -57,7 +59,7 @@ {/if} {#if capabilities} - + {/if} {/if} diff --git a/tools/ui/src/lib/components/app/settings/SettingsMcpServers.svelte b/tools/ui/src/lib/components/app/settings/SettingsMcpServers.svelte index 5cbd249f1e..564dbf3715 100644 --- a/tools/ui/src/lib/components/app/settings/SettingsMcpServers.svelte +++ b/tools/ui/src/lib/components/app/settings/SettingsMcpServers.svelte @@ -1,14 +1,11 @@ -
-
- -
- -
-
- - -

MCP Servers

-
-
- +
+ + {#if servers.length === 0} -
+
@@ -113,7 +79,7 @@ {:else}
{#each servers as server (server.id)} {#if isServerPending(server.id, server.enabled)} @@ -121,6 +87,7 @@ {:else} (isResourcesDialogOpen = true)} onDelete={() => mcpStore.removeServer(server.id)} onToggle={async () => { const wasEnabled = conversationsStore.preferences.isMcpServerEnabledForChat(