diff --git a/tools/server/webui/src/lib/components/app/index.ts b/tools/server/webui/src/lib/components/app/index.ts
index 2f80665113..58918e052d 100644
--- a/tools/server/webui/src/lib/components/app/index.ts
+++ b/tools/server/webui/src/lib/components/app/index.ts
@@ -79,6 +79,7 @@ export { default as ModelsSelector } from './models/ModelsSelector.svelte';
// MCP
+export { default as McpActiveServersAvatars } from './mcp/McpActiveServersAvatars.svelte';
export { default as McpSelector } from './mcp/McpSelector.svelte';
export { default as McpSettingsSection } from './mcp/McpSettingsSection.svelte';
diff --git a/tools/server/webui/src/lib/components/app/mcp/McpActiveServersAvatars.svelte b/tools/server/webui/src/lib/components/app/mcp/McpActiveServersAvatars.svelte
new file mode 100644
index 0000000000..b22e928a26
--- /dev/null
+++ b/tools/server/webui/src/lib/components/app/mcp/McpActiveServersAvatars.svelte
@@ -0,0 +1,67 @@
+
+
+{#if hasEnabledMcpServers && mcpFavicons.length > 0}
+
+{/if}
diff --git a/tools/server/webui/src/lib/components/app/mcp/McpSelector.svelte b/tools/server/webui/src/lib/components/app/mcp/McpSelector.svelte
index b94aaf7101..3c3d156b65 100644
--- a/tools/server/webui/src/lib/components/app/mcp/McpSelector.svelte
+++ b/tools/server/webui/src/lib/components/app/mcp/McpSelector.svelte
@@ -1,13 +1,13 @@
{#if hasMcpServers}
@@ -112,7 +79,7 @@
bind:searchValue={searchQuery}
placeholder="Search servers..."
emptyMessage="No servers found"
- isEmpty={filteredMcpServers().length === 0}
+ isEmpty={filteredMcpServers.length === 0}
{disabled}
onOpenChange={handleDropdownOpen}
>
@@ -154,37 +121,58 @@
{/snippet}
- {#each filteredMcpServers() as server (server.id)}
- {@const healthState = mcpStore.getHealthCheckState(server.id)}
- {@const hasError = healthState.status === HealthCheckStatus.Error}
- {@const isEnabledForChat = isServerEnabledForChat(server.id)}
+
+ {#if isLoading}
+ {#each mcpServers as server (server.id)}
+
+ {/each}
+ {:else}
+ {#each filteredMcpServers as server (server.id)}
+ {@const healthState = mcpStore.getHealthCheckState(server.id)}
+ {@const hasError = healthState.status === HealthCheckStatus.Error}
+ {@const isEnabledForChat = isServerEnabledForChat(server.id)}
-
-
- {#if getFaviconUrl(server.url)}
-
})
{
- (e.currentTarget as HTMLImageElement).style.display = 'none';
- }}
+
-
toggleServerForChat(server.id)}
- disabled={hasError}
- />
-
- {/each}
+
+ {/each}
+ {/if}
+
{#snippet footer()}
diff --git a/tools/server/webui/src/lib/components/app/mcp/McpServerCard/McpServerCard.svelte b/tools/server/webui/src/lib/components/app/mcp/McpServerCard/McpServerCard.svelte
index c44249acc9..e39a11d341 100644
--- a/tools/server/webui/src/lib/components/app/mcp/McpServerCard/McpServerCard.svelte
+++ b/tools/server/webui/src/lib/components/app/mcp/McpServerCard/McpServerCard.svelte
@@ -18,12 +18,13 @@
interface Props {
server: MCPServerSettingsEntry;
faviconUrl: string | null;
+ enabled?: boolean;
onToggle: (enabled: boolean) => void;
onUpdate: (updates: Partial) => void;
onDelete: () => void;
}
- let { server, faviconUrl, onToggle, onUpdate, onDelete }: Props = $props();
+ let { server, faviconUrl, enabled, onToggle, onUpdate, onDelete }: Props = $props();
let healthState = $derived(mcpStore.getHealthCheckState(server.id));
let displayName = $derived(getMcpServerLabel(server, healthState));
@@ -116,7 +117,7 @@
+
+