(mcpStore.getHealthCheckState(server.id));
+ let displayName = $derived(getMcpServerLabel(server, healthState));
let isHealthChecking = $derived(healthState.status === HealthCheckStatus.Connecting);
let isConnected = $derived(healthState.status === HealthCheckStatus.Success);
let isError = $derived(healthState.status === HealthCheckStatus.Error);
diff --git a/tools/server/webui/src/lib/components/app/mcp/McpServerCard/McpServerCardHeader.svelte b/tools/server/webui/src/lib/components/app/mcp/McpServerCard/McpServerCardHeader.svelte
index 8b49761b8b..0eeee8f379 100644
--- a/tools/server/webui/src/lib/components/app/mcp/McpServerCard/McpServerCardHeader.svelte
+++ b/tools/server/webui/src/lib/components/app/mcp/McpServerCard/McpServerCardHeader.svelte
@@ -58,9 +58,7 @@
{/if}
-
- {serverInfo?.title || serverInfo?.name || displayName}
-
+ {displayName}
{#if serverInfo?.version}
diff --git a/tools/server/webui/src/lib/components/app/mcp/McpSettingsSection.svelte b/tools/server/webui/src/lib/components/app/mcp/McpSettingsSection.svelte
index 378b4250be..aa485343fc 100644
--- a/tools/server/webui/src/lib/components/app/mcp/McpSettingsSection.svelte
+++ b/tools/server/webui/src/lib/components/app/mcp/McpSettingsSection.svelte
@@ -2,7 +2,7 @@
import { Plus, X } from '@lucide/svelte';
import { Button } from '$lib/components/ui/button';
import * as Card from '$lib/components/ui/card';
- import { getServerDisplayName, getFaviconUrl } from '$lib/utils/mcp';
+ import { getFaviconUrl } from '$lib/utils/mcp';
import type { MCPServerSettingsEntry } from '$lib/types';
import { mcpStore } from '$lib/stores/mcp.svelte';
import { McpServerCard } from '$lib/components/app/mcp/McpServerCard';
@@ -117,7 +117,6 @@
{#each servers as server (server.id)}
mcpStore.updateServer(server.id, { enabled })}
onUpdate={(updates) => mcpStore.updateServer(server.id, updates)}
diff --git a/tools/server/webui/src/lib/utils/mcp.ts b/tools/server/webui/src/lib/utils/mcp.ts
index d3e8dc67ef..f8f35f13df 100644
--- a/tools/server/webui/src/lib/utils/mcp.ts
+++ b/tools/server/webui/src/lib/utils/mcp.ts
@@ -1,7 +1,12 @@
-import type { MCPClientConfig, MCPServerConfig, MCPServerSettingsEntry } from '$lib/types';
+import type {
+ HealthCheckState,
+ MCPClientConfig,
+ MCPServerConfig,
+ MCPServerSettingsEntry
+} from '$lib/types';
import type { SettingsConfigType } from '$lib/types/settings';
import type { McpServerOverride } from '$lib/types/database';
-import { MCPTransportType, MCPLogLevel } from '$lib/enums';
+import { MCPTransportType, MCPLogLevel, HealthCheckStatus } from '$lib/enums';
import { DEFAULT_MCP_CONFIG } from '$lib/constants/mcp';
import { normalizePositiveNumber } from '$lib/utils/number';
import { Info, AlertTriangle, XCircle } from '@lucide/svelte';
@@ -32,29 +37,19 @@ export function generateMcpServerId(id: unknown, index: number): string {
}
/**
- * Extracts a human-readable server name from a URL.
- * Strips common prefixes like 'www.' and 'mcp.' and capitalizes the result.
+ * Gets a display label for an MCP server based on health state.
*/
-export function extractServerNameFromUrl(url: string): string {
- try {
- const parsedUrl = new URL(url);
- const host = parsedUrl.hostname.replace(/^(www\.|mcp\.)/, '');
- const name = host.split('.')[0] || 'Unknown';
-
- return name.charAt(0).toUpperCase() + name.slice(1);
- } catch {
- return 'New Server';
+export function getMcpServerLabel(
+ server: MCPServerSettingsEntry,
+ healthState?: HealthCheckState
+): string {
+ if (healthState?.status === HealthCheckStatus.Success) {
+ return (
+ healthState.serverInfo?.title || healthState.serverInfo?.name || server.name || server.url
+ );
}
-}
-/**
- * Gets a display name for an MCP server.
- * Returns server.name if set, otherwise extracts name from URL.
- */
-export function getServerDisplayName(server: MCPServerSettingsEntry): string {
- if (server.name) return server.name;
-
- return extractServerNameFromUrl(server.url);
+ return server.url;
}
/**