Claude Desktop Commander MCP

  • src
import fs from 'fs/promises'; import { CONFIG_FILE } from './config.js'; class CommandManager { private blockedCommands: Set<string> = new Set(); async loadBlockedCommands(): Promise<void> { try { const configData = await fs.readFile(CONFIG_FILE, 'utf-8'); const config = JSON.parse(configData); this.blockedCommands = new Set(config.blockedCommands); } catch (error) { this.blockedCommands = new Set(); } } async saveBlockedCommands(): Promise<void> { try { const config = { blockedCommands: Array.from(this.blockedCommands) }; await fs.writeFile(CONFIG_FILE, JSON.stringify(config, null, 2), 'utf-8'); } catch (error) { // Handle error if needed } } validateCommand(command: string): boolean { const baseCommand = command.split(' ')[0].toLowerCase().trim(); return !this.blockedCommands.has(baseCommand); } async blockCommand(command: string): Promise<boolean> { command = command.toLowerCase().trim(); if (this.blockedCommands.has(command)) { return false; } this.blockedCommands.add(command); await this.saveBlockedCommands(); return true; } async unblockCommand(command: string): Promise<boolean> { command = command.toLowerCase().trim(); if (!this.blockedCommands.has(command)) { return false; } this.blockedCommands.delete(command); await this.saveBlockedCommands(); return true; } listBlockedCommands(): string[] { return Array.from(this.blockedCommands).sort(); } } export const commandManager = new CommandManager();