summaryrefslogtreecommitdiff
path: root/packages/cli/src/commands/mcp/remove.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src/commands/mcp/remove.ts')
-rw-r--r--packages/cli/src/commands/mcp/remove.ts60
1 files changed, 60 insertions, 0 deletions
diff --git a/packages/cli/src/commands/mcp/remove.ts b/packages/cli/src/commands/mcp/remove.ts
new file mode 100644
index 00000000..80d66234
--- /dev/null
+++ b/packages/cli/src/commands/mcp/remove.ts
@@ -0,0 +1,60 @@
+/**
+ * @license
+ * Copyright 2025 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+// File for 'gemini mcp remove' command
+import type { CommandModule } from 'yargs';
+import { loadSettings, SettingScope } from '../../config/settings.js';
+
+async function removeMcpServer(
+ name: string,
+ options: {
+ scope: string;
+ },
+) {
+ const { scope } = options;
+ const settingsScope =
+ scope === 'user' ? SettingScope.User : SettingScope.Workspace;
+ const settings = loadSettings(process.cwd());
+
+ const existingSettings = settings.forScope(settingsScope).settings;
+ const mcpServers = existingSettings.mcpServers || {};
+
+ if (!mcpServers[name]) {
+ console.log(`Server "${name}" not found in ${scope} settings.`);
+ return;
+ }
+
+ delete mcpServers[name];
+
+ settings.setValue(settingsScope, 'mcpServers', mcpServers);
+
+ console.log(`Server "${name}" removed from ${scope} settings.`);
+}
+
+export const removeCommand: CommandModule = {
+ command: 'remove <name>',
+ describe: 'Remove a server',
+ builder: (yargs) =>
+ yargs
+ .usage('Usage: gemini mcp remove [options] <name>')
+ .positional('name', {
+ describe: 'Name of the server',
+ type: 'string',
+ demandOption: true,
+ })
+ .option('scope', {
+ alias: 's',
+ describe: 'Configuration scope (user or project)',
+ type: 'string',
+ default: 'project',
+ choices: ['user', 'project'],
+ }),
+ handler: async (argv) => {
+ await removeMcpServer(argv.name as string, {
+ scope: argv.scope as string,
+ });
+ },
+};