diff --git a/packages/kilo-vscode/src/legacy-migration/legacy-types.ts b/packages/kilo-vscode/src/legacy-migration/legacy-types.ts index a57ae2bff84..15dfa1a01e3 100644 --- a/packages/kilo-vscode/src/legacy-migration/legacy-types.ts +++ b/packages/kilo-vscode/src/legacy-migration/legacy-types.ts @@ -289,6 +289,7 @@ export interface MigrationProviderInfo { export interface MigrationMcpServerInfo { name: string type: string + disabled?: boolean } export interface MigrationCustomModeInfo { diff --git a/packages/kilo-vscode/src/legacy-migration/migration-service.ts b/packages/kilo-vscode/src/legacy-migration/migration-service.ts index a3ea98ca44e..e006a4b8c84 100644 --- a/packages/kilo-vscode/src/legacy-migration/migration-service.ts +++ b/packages/kilo-vscode/src/legacy-migration/migration-service.ts @@ -767,9 +767,10 @@ async function migrateLanguage(language: string): Promise { // --------------------------------------------------------------------------- function convertMcpServer(server: LegacyMcpServer): McpLocalConfig | McpRemoteConfig | null { + const enabled = server.disabled ? { enabled: false as const } : {} if (server.type === "sse" || server.type === "streamable-http") { if (!server.url) return null - return { type: "remote", url: server.url, headers: server.headers } + return { type: "remote", url: server.url, headers: server.headers, ...enabled } } // Default: stdio if (!server.command) return null @@ -779,6 +780,7 @@ function convertMcpServer(server: LegacyMcpServer): McpLocalConfig | McpRemoteCo command, environment: server.env, ...(server.timeout !== undefined && { timeout: server.timeout }), + ...enabled, } } @@ -1145,9 +1147,11 @@ function buildProviderList( function buildMcpServerList(settings: LegacyMcpSettings | null): MigrationMcpServerInfo[] { if (!settings?.mcpServers) return [] - return Object.entries(settings.mcpServers) - .filter(([, server]) => !server.disabled) - .map(([name, server]) => ({ name, type: server.type ?? "stdio" })) + return Object.entries(settings.mcpServers).map(([name, server]) => ({ + name, + type: server.type ?? "stdio", + disabled: server.disabled, + })) } /** @internal — exported for testing only */ diff --git a/packages/opencode/src/kilocode/mcp-migrator.ts b/packages/opencode/src/kilocode/mcp-migrator.ts index 8c5ba2d6cad..d8325245242 100644 --- a/packages/opencode/src/kilocode/mcp-migrator.ts +++ b/packages/opencode/src/kilocode/mcp-migrator.ts @@ -51,9 +51,6 @@ export namespace McpMigrator { } export function convertServer(name: string, server: KilocodeMcpServer): Config.Mcp | null { - // Skip disabled servers - if (server.disabled) return null - if (isRemote(server)) { if (!server.url) { log.warn("remote MCP server missing url, skipping", { name }) @@ -63,6 +60,7 @@ export namespace McpMigrator { type: "remote", url: server.url, ...(server.headers && Object.keys(server.headers).length > 0 && { headers: server.headers }), + ...(server.disabled && { enabled: false }), } return config } @@ -80,6 +78,7 @@ export namespace McpMigrator { type: "local", command, ...(server.env && Object.keys(server.env).length > 0 && { environment: server.env }), + ...(server.disabled && { enabled: false }), } return config @@ -130,11 +129,6 @@ export namespace McpMigrator { // Convert each server for (const [name, server] of serversByName) { - if (server.disabled) { - skipped.push({ name, reason: "Server is disabled" }) - continue - } - // Warn about alwaysAllow permissions that cannot be migrated if (server.alwaysAllow && server.alwaysAllow.length > 0) { warnings.push( diff --git a/packages/opencode/test/kilocode/mcp-migrator.test.ts b/packages/opencode/test/kilocode/mcp-migrator.test.ts index 5b4864f238c..ac1e377886f 100644 --- a/packages/opencode/test/kilocode/mcp-migrator.test.ts +++ b/packages/opencode/test/kilocode/mcp-migrator.test.ts @@ -34,7 +34,7 @@ describe("McpMigrator", () => { }) }) - test("returns null for disabled servers", () => { + test("converts disabled servers with enabled: false", () => { const server: McpMigrator.KilocodeMcpServer = { command: "npx", args: ["-y", "some-package"], @@ -43,7 +43,11 @@ describe("McpMigrator", () => { const result = McpMigrator.convertServer("disabled-server", server) - expect(result).toBeNull() + expect(result).toEqual({ + type: "local", + command: ["npx", "-y", "some-package"], + enabled: false, + }) }) test("omits environment when env is empty object", () => { @@ -294,7 +298,7 @@ describe("McpMigrator", () => { }) }) - test("skips disabled servers and records them", async () => { + test("imports disabled servers with enabled: false", async () => { await using tmp = await tmpdir({ init: async (dir) => { const settingsDir = path.join(dir, ".kilo") @@ -316,10 +320,15 @@ describe("McpMigrator", () => { }) expect(result.mcp).toHaveProperty("enabled") - expect(result.mcp).not.toHaveProperty("disabled") - expect(result.skipped).toContainEqual({ - name: "disabled", - reason: "Server is disabled", + expect(result.mcp.enabled).toEqual({ + type: "local", + command: ["enabled-cmd"], + }) + expect(result.mcp).toHaveProperty("disabled") + expect(result.mcp.disabled).toEqual({ + type: "local", + command: ["disabled-cmd"], + enabled: false, }) }) @@ -495,7 +504,7 @@ describe("McpMigrator", () => { }) }) - test("returns null for disabled remote server", () => { + test("converts disabled remote server with enabled: false", () => { const server = { type: "streamable-http", url: "http://localhost:4321/mcp", @@ -504,7 +513,11 @@ describe("McpMigrator", () => { const result = McpMigrator.convertServer("disabled-remote", server) - expect(result).toBeNull() + expect(result).toEqual({ + type: "remote", + url: "http://localhost:4321/mcp", + enabled: false, + }) }) test("omits headers when not provided on remote server", () => { @@ -678,7 +691,7 @@ describe("McpMigrator", () => { }) }) - test("skips disabled remote servers and records them", async () => { + test("imports disabled remote servers with enabled: false", async () => { await using tmp = await tmpdir({ init: async (dir) => { const settingsDir = path.join(dir, ".kilo") @@ -707,10 +720,15 @@ describe("McpMigrator", () => { }) expect(result.mcp).toHaveProperty("enabled") - expect(result.mcp).not.toHaveProperty("disabled") - expect(result.skipped).toContainEqual({ - name: "disabled", - reason: "Server is disabled", + expect(result.mcp.enabled).toEqual({ + type: "remote", + url: "http://localhost:4321/mcp", + }) + expect(result.mcp).toHaveProperty("disabled") + expect(result.mcp.disabled).toEqual({ + type: "remote", + url: "http://localhost:4322/mcp", + enabled: false, }) }) })