A Model Context Protocol (MCP) server that provides enhanced file operation capabilities with streaming, patching, and change tracking support.
- Basic File Operations: Copy, read, write, move, and delete files
- Directory Operations: Create, remove, and copy directories
- File Watching: Monitor files and directories for changes
- Change Tracking: Track and query file operation history
- Streaming Support: Handle large files efficiently with streaming
- Resource Support: Access files and directories through MCP resources
- Progress Reporting: Real-time progress updates for long operations
- Rate Limiting: Protection against excessive requests
- Enhanced Security: Path validation and input sanitization
- Robust Error Handling: Comprehensive error handling and reporting
- Type Safety: Full TypeScript support with strict type checking
To install File Operations Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @bsmi021/mcp-file-operations-server --client claudenpm installnpm startFor development with auto-reloading:
npm run devcopy_file: Copy a file to a new locationread_file: Read content from a filewrite_file: Write content to a filemove_file: Move/rename a filedelete_file: Delete a fileappend_file: Append content to a file
make_directory: Create a directoryremove_directory: Remove a directorycopy_directory: Copy a directory recursively (with progress reporting)
watch_directory: Start watching a directory for changesunwatch_directory: Stop watching a directory
get_changes: Get the list of recorded changesclear_changes: Clear all recorded changes
file:///recent-changes: List of recent file system changes
file://{path}: Access file contentsmetadata://{path}: Access file metadatadirectory://{path}: List directory contents
// Copy a file
await fileOperations.copyFile({
source: 'source.txt',
destination: 'destination.txt',
overwrite: false
});
// Watch a directory
await fileOperations.watchDirectory({
path: './watched-dir',
recursive: true
});
// Access file contents through resource
const resource = await mcp.readResource('file:///path/to/file.txt');
console.log(resource.contents[0].text);
// Copy directory with progress tracking
const result = await fileOperations.copyDirectory({
source: './source-dir',
destination: './dest-dir',
overwrite: false
});
// Progress token in result can be used to track progress
console.log(result.progressToken);The server implements rate limiting to prevent abuse:
- Tools: 100 requests per minute
- Resources: 200 requests per minute
- Watch Operations: 20 operations per minute
Rate limit errors include a retry-after period in the error message.
All file paths are validated to prevent directory traversal attacks:
- No parent directory references (
../) - Proper path normalization
- Input sanitization
- Rate limiting on all operations
- Proper error handling and logging
- Input validation on all parameters
- Safe resource cleanup
Long-running operations like directory copying provide progress updates:
interface ProgressUpdate {
token: string | number;
message: string;
percentage: number;
}Progress can be tracked through the progress token returned in the operation result.
npm run buildnpm run lintnpm run formatnpm testThe server can be configured through various settings:
- Rate Limiting: Configure request limits and windows
- Progress Reporting: Control update frequency and detail level
- Resource Access: Configure resource permissions and limits
- Security Settings: Configure path validation rules
- Change Tracking: Set retention periods and storage options
- Watch Settings: Configure debounce times and recursive watching
The server provides detailed error information through the FileOperationError class and MCP error codes:
InvalidRequest: Invalid parameters or request formatMethodNotFound: Unknown tool or resource requestedInvalidParams: Invalid parameters (e.g., path validation failure)InternalError: Server-side errors
- File operation failures
- Rate limit exceeded
- Path validation errors
- Resource access errors
Each error includes:
- Specific error code
- Detailed error message
- Relevant metadata (file paths, limits, etc.)
- Stack traces in development mode
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.