diff --git a/packages/cli/src/config/settings.test.ts b/packages/cli/src/config/settings.test.ts index 2234c9ea45..9550932c9f 100644 --- a/packages/cli/src/config/settings.test.ts +++ b/packages/cli/src/config/settings.test.ts @@ -348,7 +348,7 @@ describe('Settings Loading and Merging', () => { fileName: 'WORKSPACE_CONTEXT.md', }, mcp: { - allowed: ['server1', 'server2'], + allowed: ['server1', 'server2', 'server3', 'server1', 'server2'], }, }); }); @@ -1474,8 +1474,8 @@ describe('Settings Loading and Merging', () => { const settings = loadSettings(MOCK_WORKSPACE_DIR); expect(settings.merged.mcp).toEqual({ - allowed: ['system-allowed'], - excluded: ['workspace-excluded'], + allowed: ['user-allowed', 'workspace-allowed', 'system-allowed'], + excluded: ['user-excluded', 'workspace-excluded'], }); }); diff --git a/packages/cli/src/config/settingsSchema.ts b/packages/cli/src/config/settingsSchema.ts index b2d24712b6..4701abc1ab 100644 --- a/packages/cli/src/config/settingsSchema.ts +++ b/packages/cli/src/config/settingsSchema.ts @@ -998,6 +998,7 @@ const SETTINGS_SCHEMA = { default: undefined as string[] | undefined, description: 'A list of MCP servers to allow.', showInDialog: false, + mergeStrategy: MergeStrategy.CONCAT, }, excluded: { type: 'array', @@ -1007,6 +1008,7 @@ const SETTINGS_SCHEMA = { default: undefined as string[] | undefined, description: 'A list of MCP servers to exclude.', showInDialog: false, + mergeStrategy: MergeStrategy.CONCAT, }, }, }, diff --git a/packages/cli/src/ui/components/mcp/MCPManagementDialog.tsx b/packages/cli/src/ui/components/mcp/MCPManagementDialog.tsx index b9881932df..ce84814a7a 100644 --- a/packages/cli/src/ui/components/mcp/MCPManagementDialog.tsx +++ b/packages/cli/src/ui/components/mcp/MCPManagementDialog.tsx @@ -95,16 +95,10 @@ export const MCPManagementDialog: React.FC = ({ let source: 'user' | 'project' | 'extension' = 'user'; if (serverConfig.extensionName) { source = 'extension'; - } - - // Determine the scope of the configuration - let scope: 'user' | 'workspace' | 'extension' = 'user'; - if (serverConfig.extensionName) { - scope = 'extension'; } else if (workspaceSettings.mcpServers?.[name]) { - scope = 'workspace'; + source = 'project'; } else if (userSettings.mcpServers?.[name]) { - scope = 'user'; + source = 'user'; } // Use config.isMcpServerDisabled() to check if server is disabled @@ -119,7 +113,6 @@ export const MCPManagementDialog: React.FC = ({ name, status, source, - scope, config: serverConfig, toolCount: serverTools.length, invalidToolCount, @@ -343,7 +336,7 @@ export const MCPManagementDialog: React.FC = ({ // Determine the scope based on server configuration location let targetScope: 'user' | 'workspace' = 'user'; - if (server.scope === 'extension') { + if (server.source === 'extension') { // Extension servers should not be disabled through user/workspace settings // Show error message and return debugLogger.warn( @@ -351,7 +344,7 @@ export const MCPManagementDialog: React.FC = ({ ); setIsLoading(false); return; - } else if (server.scope === 'workspace') { + } else if (server.source === 'project') { targetScope = 'workspace'; } diff --git a/packages/cli/src/ui/components/mcp/steps/ServerDetailStep.tsx b/packages/cli/src/ui/components/mcp/steps/ServerDetailStep.tsx index d23dccf871..a4463476fb 100644 --- a/packages/cli/src/ui/components/mcp/steps/ServerDetailStep.tsx +++ b/packages/cli/src/ui/components/mcp/steps/ServerDetailStep.tsx @@ -136,9 +136,9 @@ export const ServerDetailStep: React.FC = ({ - {server.scope === 'user' + {server.source === 'user' ? t('User Settings') - : server.scope === 'workspace' + : server.source === 'project' ? t('Workspace Settings') : t('Extension')} diff --git a/packages/cli/src/ui/components/mcp/types.ts b/packages/cli/src/ui/components/mcp/types.ts index 34374fa23b..8812c5f12c 100644 --- a/packages/cli/src/ui/components/mcp/types.ts +++ b/packages/cli/src/ui/components/mcp/types.ts @@ -34,8 +34,6 @@ export interface MCPServerDisplayInfo { status: MCPServerStatus; /** 来源类型 */ source: 'user' | 'project' | 'extension'; - /** 配置所在的 scope */ - scope: 'user' | 'workspace' | 'extension'; /** 配置文件路径 */ configPath?: string; /** 服务器配置 */ diff --git a/packages/cli/src/ui/components/mcp/utils.test.ts b/packages/cli/src/ui/components/mcp/utils.test.ts index 3b058ba554..155195454f 100644 --- a/packages/cli/src/ui/components/mcp/utils.test.ts +++ b/packages/cli/src/ui/components/mcp/utils.test.ts @@ -25,7 +25,6 @@ describe('MCP utils', () => { name: 'server1', status: MCPServerStatus.CONNECTED, source: 'user', - scope: 'user', config: { command: 'cmd1' }, toolCount: 1, promptCount: 0, @@ -35,7 +34,6 @@ describe('MCP utils', () => { name: 'server2', status: MCPServerStatus.CONNECTED, source: 'extension', - scope: 'extension', config: { command: 'cmd2' }, toolCount: 2, promptCount: 0,