From 54192b05fbba0e8e3866b4ede03ab76419976afe Mon Sep 17 00:00:00 2001 From: Aleksander Grygier Date: Mon, 19 Jan 2026 16:43:53 +0100 Subject: [PATCH] feat: Simplify MCP server enabling logic per chat Refactors MCP server enabling logic to remove the dependency on global settings. This simplifies the logic by directly checking the per-chat override status, and removes the need to pass the global enabled state as a parameter. Additionally: - Only shows MCP servers that are enabled in settings in the selector. - Sorts the servers by whether they are enabled for the current chat. --- .../src/lib/clients/conversations.client.ts | 17 ++++----- .../lib/components/app/mcp/McpSelector.svelte | 37 ++++++++----------- .../src/lib/stores/conversations.svelte.ts | 26 +++++++++---- .../server/webui/src/lib/stores/mcp.svelte.ts | 11 +++++- tools/server/webui/src/lib/utils/mcp.ts | 20 ++++++---- 5 files changed, 63 insertions(+), 48 deletions(-) diff --git a/tools/server/webui/src/lib/clients/conversations.client.ts b/tools/server/webui/src/lib/clients/conversations.client.ts index 936a2399bb..cadaeb6780 100644 --- a/tools/server/webui/src/lib/clients/conversations.client.ts +++ b/tools/server/webui/src/lib/clients/conversations.client.ts @@ -433,14 +433,12 @@ export class ConversationsClient { /** * Checks if an MCP server is enabled for the active conversation. - * Per-chat override takes precedence over global setting. * @param serverId - The server ID to check - * @param globalEnabled - The global enabled state from settings * @returns True if server is enabled for this conversation */ - isMcpServerEnabledForChat(serverId: string, globalEnabled: boolean): boolean { + isMcpServerEnabledForChat(serverId: string): boolean { const override = this.getMcpServerOverride(serverId); - return override !== undefined ? override.enabled : globalEnabled; + return override?.enabled ?? false; } /** @@ -500,18 +498,17 @@ export class ConversationsClient { /** * Toggles MCP server enabled state for the active conversation. * @param serverId - The server ID to toggle - * @param globalEnabled - The global enabled state from settings */ - async toggleMcpServerForChat(serverId: string, globalEnabled: boolean): Promise { - const currentEnabled = this.isMcpServerEnabledForChat(serverId, globalEnabled); + async toggleMcpServerForChat(serverId: string): Promise { + const currentEnabled = this.isMcpServerEnabledForChat(serverId); await this.setMcpServerOverride(serverId, !currentEnabled); } /** - * Resets MCP server to use global setting (removes per-chat override). - * @param serverId - The server ID to reset + * Removes MCP server override for the active conversation. + * @param serverId - The server ID to remove override for */ - async resetMcpServerToGlobal(serverId: string): Promise { + async removeMcpServerOverride(serverId: string): Promise { await this.setMcpServerOverride(serverId, undefined); } 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 8635eadc6e..d7792f221f 100644 --- a/tools/server/webui/src/lib/components/app/mcp/McpSelector.svelte +++ b/tools/server/webui/src/lib/components/app/mcp/McpSelector.svelte @@ -1,5 +1,4 @@