From cf2320480fadf1b2e4954d11e08eff034fcbf269 Mon Sep 17 00:00:00 2001 From: Stephen Wang Date: Sat, 24 Jan 2026 14:55:59 +0800 Subject: [PATCH] Fix MCP disabled flag not removing previously loaded servers (#985) When a later-loaded MCP config (e.g., .claude/.mcp.json) marks a server as disabled, it now properly removes that server from both the servers object and loadedServers array. Previously, disabled servers were only skipped during loading, which meant they wouldn't override servers loaded from earlier configs. This made it impossible to disable project-level MCPs using local overrides. Now the disabled flag works as expected: local configs can disable servers defined in project or user configs. --- src/features/claude-code-mcp-loader/loader.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/features/claude-code-mcp-loader/loader.ts b/src/features/claude-code-mcp-loader/loader.ts index ff9c60ff8..76a2f1945 100644 --- a/src/features/claude-code-mcp-loader/loader.ts +++ b/src/features/claude-code-mcp-loader/loader.ts @@ -77,7 +77,13 @@ export async function loadMcpConfigs(): Promise { for (const [name, serverConfig] of Object.entries(config.mcpServers)) { if (serverConfig.disabled) { - log(`Skipping disabled MCP server "${name}"`, { path }) + log(`Disabling MCP server "${name}"`, { path }) + delete servers[name] + const existingIndex = loadedServers.findIndex((s) => s.name === name) + if (existingIndex !== -1) { + loadedServers.splice(existingIndex, 1) + log(`Removed previously loaded MCP server "${name}"`, { path }) + } continue }