The File Operations MCP Server enables advanced file and directory management with streaming, patching, and change tracking support.
File Management: Copy, read, write, move, append, and delete files with options for overwriting and encoding
Directory Management: Create, remove, list, and copy directories with recursive capabilities
Change Monitoring: Watch directories for changes, unwatch directories, check watching status
Change Tracking: Retrieve and clear recorded file system changes with filtering options
Resource Access: Access file contents via
file://{path}, metadata viametadata://{path}, directory listings viadirectory://{path}, and recent changes viafile:///recent-changesProgress Reporting: Track progress of long operations like directory copying
Security: Path validation, input sanitization, and rate limiting for safe operations
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@File Operations MCP Servercopy my project's config.json to the backup folder"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
File Operations MCP Server
A Model Context Protocol (MCP) server that provides enhanced file operation capabilities with streaming, patching, and change tracking support.
Features
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
HTTP Interface: Streamable HTTP interface with Server-Sent Events (SSE)
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
Docker Support: Containerized deployment with volume mounting
Related MCP server: MCP Filesystem Server
Installation
Installing via Smithery
To install File Operations Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @bsmi021/mcp-file-operations-server --client claudeManual Installation
npm installDocker Installation
See DOCKER.md for comprehensive Docker setup instructions including local drive mounting for Windows and Linux.
Quick Docker Start:
# Stdio transport (for MCP clients)
docker run -it --rm -v "$(pwd):/workspace" ghcr.io/bsmi021/mcp-file-operations-server
# HTTP transport (for web/remote access)
docker run -it --rm -p 3001:3001 -v "$(pwd):/workspace" -e MCP_TRANSPORT=http ghcr.io/bsmi021/mcp-file-operations-serverUsage
Transport Modes
The server supports two transport modes:
1. Stdio Transport (Default)
For direct integration with MCP clients like Claude Desktop:
npm start2. HTTP Transport with SSE (New in v1.5)
For remote connections and web applications:
npm run start:httpThe HTTP server provides:
SSE Endpoint:
GET http://localhost:3001/sse- Establishes streaming connectionMessages Endpoint:
POST http://localhost:3001/messages- Receives client messagesHealth Check:
GET http://localhost:3001/health- Server statusSessions:
GET http://localhost:3001/sessions- Active connection info
Starting the Server
Development Mode
# Stdio transport with auto-reload
npm run dev
# HTTP transport with auto-reload
npm run dev:httpProduction Mode
# Stdio transport
npm start
# HTTP transport
npm run start:http
# Custom port for HTTP
npm run start:http -- --port 8080Available Tools
Basic File Operations
copy_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
Directory Operations
make_directory: Create a directoryremove_directory: Remove a directorycopy_directory: Copy a directory recursively (with progress reporting)
Watch Operations
watch_directory: Start watching a directory for changesunwatch_directory: Stop watching a directory
Change Tracking
get_changes: Get the list of recorded changesclear_changes: Clear all recorded changes
Available Resources
Static Resources
file:///recent-changes: List of recent file system changes
Resource Templates
file://{path}: Access file contentsmetadata://{path}: Access file metadatadirectory://{path}: List directory contents
Example Usage
Using Stdio Transport (MCP Clients)
// 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);Using HTTP Transport (Web/Remote)
Connecting via JavaScript:
// Establish SSE connection
const eventSource = new EventSource('http://localhost:3001/sse');
let sessionId = null;
eventSource.onopen = function() {
console.log('Connected to MCP server');
};
eventSource.onmessage = function(event) {
const message = JSON.parse(event.data);
// Extract session ID from first message
if (!sessionId && message.sessionId) {
sessionId = message.sessionId;
}
console.log('Received:', message);
};
// Send a message to the server
async function sendMessage(method, params) {
const message = {
jsonrpc: '2.0',
id: Date.now(),
method: method,
params: params
};
const response = await fetch('http://localhost:3001/messages', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Session-ID': sessionId
},
body: JSON.stringify(message)
});
return response.json();
}
// Example: List tools
sendMessage('tools/list', {});
// Example: Read a file
sendMessage('tools/call', {
name: 'read_file',
arguments: { path: '/workspace/example.txt' }
});Using curl for testing:
# Start SSE connection in background
curl -N http://localhost:3001/sse &
# Check server health
curl http://localhost:3001/health
# List active sessions
curl http://localhost:3001/sessionsInteractive Web Client:
A complete interactive example is available at examples/http-client.html. Open this file in a web browser to test the HTTP interface with a user-friendly GUI.
What's New in v1.5
MCP SDK v1.5 Upgrade
Streamable HTTP Interface: New HTTP transport with Server-Sent Events (SSE)
Enhanced API: Upgraded to MCP SDK v1.5 with improved zod-based schemas
Multiple Connections: Support for simultaneous HTTP connections with session management
Better Type Safety: Improved TypeScript integration and error handling
Streaming Features
Large File Support: Efficient streaming for large file operations
Real-time Progress: Progress updates via SSE for long-running operations
Session Management: Multiple client connections with isolated sessions
HTTP API: RESTful endpoints alongside traditional MCP protocol
Docker Support
Quick Start with Docker
# Build the image
docker build -t mcp-file-operations-server .
# Run with stdio (for MCP clients)
docker run -it --rm -v "$(pwd):/workspace" mcp-file-operations-server
# Run with HTTP interface
docker run -it --rm -p 3001:3001 -v "$(pwd):/workspace" -e MCP_TRANSPORT=http mcp-file-operations-serverVolume Mounting
Windows:
docker run -it --rm -v "C:\MyProject:/workspace" -p 3001:3001 -e MCP_TRANSPORT=http mcp-file-operations-serverLinux/macOS:
docker run -it --rm -v "/home/user/project:/workspace" -p 3001:3001 -e MCP_TRANSPORT=http mcp-file-operations-serverFor comprehensive Docker setup instructions including local drive mounting for Windows and Linux, see DOCKER.md.
Rate Limits
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.
Security Features
Path Validation
All file paths are validated to prevent directory traversal attacks:
No parent directory references (
../)Proper path normalization
Input sanitization
Resource Protection
Rate limiting on all operations
Proper error handling and logging
Input validation on all parameters
Safe resource cleanup
Progress Reporting
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.
Development
Building
npm run buildLinting
npm run lintFormatting
npm run formatTesting
npm testConfiguration
Environment Variables
Variable | Default | Description |
|
| Transport mode: |
|
| Port for HTTP transport |
Transport Selection
Stdio: Best for MCP clients like Claude Desktop, direct integration
HTTP: Best for web applications, remote access, development/testing
The 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
Error Handling
The server provides detailed error information through the FileOperationError class and MCP error codes:
Standard 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
Custom Error Types
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
Contributing
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
License
This project is licensed under the MIT License - see the LICENSE file for details.