UNPKG

knip-mcp-server

Version:

MCP server for knip.dev integration to help AI agents identify and clean up unused code

90 lines 3.78 kB
import { KnipRemoveUnusedFilesInputSchema } from '../types/index.js'; export function createKnipRemoveUnusedFilesTool(knipClient, config) { return { name: 'knip_remove_unused_files', description: 'Safely remove unused files with backup options', inputSchema: { type: 'object', properties: { files: { type: 'array', items: { type: 'string' }, description: 'Array of file paths to remove. If empty, removes all unused files.', }, dryRun: { type: 'boolean', default: true, description: 'Run in dry-run mode (no files are actually removed)', }, createBackup: { type: 'boolean', default: true, description: 'Create backup of files before removing them', }, backupDir: { type: 'string', description: 'Directory to store backups (defaults to .backup next to each file)', }, maxFiles: { type: 'number', default: 50, description: 'Maximum number of files to remove in one operation', }, }, required: [], }, execute: async (args) => { try { const input = KnipRemoveUnusedFilesInputSchema.parse(args); // Get files to remove let filesToRemove = input.files; if (!filesToRemove || filesToRemove.length === 0) { filesToRemove = await knipClient.getUnusedFiles(); } // Apply safety limits const maxFiles = config.maxFilesPerOperation || 100; if (filesToRemove.length > maxFiles) { return { success: false, error: `Too many files to remove (${filesToRemove.length}). Maximum allowed: ${maxFiles}. Please specify specific files or increase the limit.`, }; } // Safety check for important files if (config.enableSafeMode) { const safetyPatterns = [ /package\.json$/, /tsconfig\.json$/, /\.env$/, /README\.md$/i, /LICENSE$/i, /\.git/, ]; const dangerousFiles = filesToRemove.filter(file => safetyPatterns.some(pattern => pattern.test(file))); if (dangerousFiles.length > 0) { return { success: false, error: `Safe mode prevented removal of important files: ${dangerousFiles.join(', ')}`, }; } } const result = await knipClient.removeUnusedFiles(filesToRemove, { dryRun: input.dryRun, createBackup: input.createBackup, backupDir: input.backupDir || config.backupDir, }); return { success: true, ...result, dryRun: input.dryRun, }; } catch (error) { return { success: false, error: error instanceof Error ? error.message : String(error), }; } }, }; } //# sourceMappingURL=knip-remove-unused-files.js.map