File Operation MCP Server
Enables comprehensive file and document operations including image compression, archive creation/extraction, file copying/moving, PDF merging/splitting/conversion, SQLite database queries, and advanced text processing.
README
File Operation MCP Server
A Model Context Protocol (MCP) based file operation server, providing file statistics, list queries, image compression, and various system utilities.
✨ Features
- 📊 File Statistics - Count files in a specified folder
- 📋 File Listing - Get detailed information of all files in a folder
- 🖼️ Image Compression - High-quality image compression, supporting multiple formats
- 🗜️ File Compression - Create ZIP, TAR, TAR.GZ archive files
- 📦 File Extraction - Extract ZIP, TAR, TAR.GZ archive files
- 📂 File Copy - Copy files or folders to a specified location
- 🔄 File Move - Move files or folders to a specified location
- 📄 PDF Merge - Merge multiple PDF files into one
- ✂️ PDF Split - Split PDF files by page or range
- 🖼️ PDF to Image - Convert PDF pages to JPEG/PNG images
- 🔒 Secure & Reliable - Comprehensive error handling and parameter validation
- ⚡ High Performance - Built with TypeScript and powered by Bun for speed.
🛠️ Technology Stack
- TypeScript - Type-safe JavaScript
- Bun - High-performance JavaScript runtime, used for running the server.
- MCP SDK - Official Model Context Protocol SDK
- Sharp - High-performance image processing library
- PDF-lib - Pure JavaScript PDF processing library, supports merging and splitting
- PDF2pic - PDF to image conversion tool
- Mammoth - Word document processing library
- Puppeteer - Headless browser, used for PDF generation
- Archiver - File compression library, supports ZIP, TAR, etc.
- Extract-Zip - ZIP file extraction library
- TAR - TAR format file processing library
- fs-extra - Enhanced file system operations
- Zod - TypeScript-first data validation
📦 Installation
Environment Requirements
- Node.js >= 18.0.0 (for
pnpmbuild steps) - Bun (recommended for running the server)
- pnpm (recommended for package installation and build)
Clone Project
git clone https://github.com/lxKylin/file-operation-mcp.git
cd file-operation-mcp
Install Dependencies
bun install # Use Bun for faster installation
pnpm install # (Alternative if Bun is not preferred, or for specific build dependencies)
Build Project
pnpm build
## ⚙️ Configuration
### Environment Variables
| Variable | Description | Default | Example |
|----------|-------------|---------|---------|
| `TIME_LIMIT` | Default time limit for operations (seconds) | `120` | `300` |
| `MAX_TIME_LIMIT` | Maximum allowed time limit (seconds) | `600` | `1800` |
### Example Usage
```bash
# Set custom time limit (5 minutes)
TIME_LIMIT=300 bun run start
# Set maximum time limit (30 minutes)
MAX_TIME_LIMIT=1800 bun run start
🔌 Transport Method Comparison
This project supports two MCP transport methods. You can choose the appropriate method based on your usage scenario:
📊 Stdio vs SSE Comparison Table
| Feature | Stdio | SSE |
|---|---|---|
| Transfer Protocol | Inter-process Communication (IPC) | HTTP/HTTPS |
| Connection Method | stdin/stdout | Server-Sent Events |
| Multi-client Support | ❌ 1-to-1 connection | ✅ Many-to-1 connection |
| Remote Access | ❌ Local only | ✅ Supported |
| Deployment Complexity | ✅ Simple | ❌ Requires HTTP server |
| Resource Usage | ✅ Low | ❌ Relatively higher |
| Debugging Convenience | ❌ Difficult | ✅ Easy (HTTP tools) |
| Network Traversal | ❌ Not supported | ✅ Supported |
| Load Balancing | ❌ Not supported | ✅ Supported |
| Monitoring Capabilities | ❌ Limited | ✅ Rich (health checks, etc.) |
| Latency | ✅ Very Low (~1-5ms) | ❌ Slightly Higher (~10-50ms) |
🎯 Recommended Use Cases
Choose Stdio if you need:
- 🏠 Local Development: Simple personal desktop tools
- 🔒 Single User: Applications for personal use only
- ⚡ Low Latency: Extremely high response time requirements
- 📦 Simple Deployment: Don't want to configure an HTTP server
- 💾 Resource Saving: Limited system resources
Choose SSE if you need:
- 🌐 Remote Access: Connect to the server over a network
- 👥 Multi-user: Team-shared server
- 🔄 High Availability: Requires load balancing and failover
- 🐛 Easy Debugging: Convenient debugging tools during development
- 📈 Scalability: May need horizontal scaling in the future
- 🔍 Monitoring Needs: Requires detailed service monitoring
🔧 Performance Comparison
Stdio Architecture
Client <─> Server Process (Direct IPC)
Latency: 1-5ms | Memory: Low | CPU: Low
SSE Architecture
Client <─> HTTP Server <─> MCP Server
Latency: 10-50ms | Memory: Medium | CPU: Medium
🛠️ Code Difference Example
Stdio Startup
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const transport = new StdioServerTransport();
await server.connect(transport);
console.error('Stdio MCP server started');
SSE Startup
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
import express from 'express';
const app = express();
app.get('/sse', async (req, res) => {
const transport = new SSEServerTransport('/messages', res);
await server.connect(transport);
});
app.listen(3000, () => {
console.error('SSE MCP server started on port 3000');
});
💡 Recommendation: If you are a single user and only need local use, choose Stdio; if you need team collaboration or remote access, choose SSE.
⚙️ Stdio Configuration
Claude Desktop Configuration
Add the following configuration to Claude Desktop's configuration file:
Configuration File Location:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%/Claude/claude_desktop_config.json
Configuration Content:
{
"mcpServers": {
"file-operation-mcp": {
"command": "node",
"args": ["path/to/file-operation-mcp/dist/index.js"],
"cwd": "path/to/file-operation-mcp",
"env": {
"NODE_ENV": "production"
}
}
}
}
⚠️ Note: Please replace
path/to/file-operation-mcpwith the actual project path
Cursor IDE Configuration
{
"mcpServers": {
"file-operation-mcp": {
"command": "node",
"args": ["path/to/file-operation-mcp/dist/index.js"]
}
}
}
⚙️ SSE Configuration
Starting the SSE Server
First, start the HTTP server:
bun start
# Or using pnpm (less recommended for runtime due to Bun's performance)
The server will be available at:
- Health check: http://localhost:3000/health
- MCP endpoint: http://localhost:3000/sse
Configuration
Environment Variables
| Variable | Description | Default | Example |
|---|---|---|---|
TIME_LIMIT |
Default time limit for operations (seconds) | 120 |
300 |
MAX_TIME_LIMIT |
Maximum allowed time limit (seconds) | 600 |
1800 |
Check server health status
curl http://localhost:3000/health
Example response
{ "status": "ok", "message": "MCP File Operation Server is running", "timestamp": "2024-01-01T12:00:00.000Z" }
### Claude Desktop Configuration
Add the following configuration to Claude Desktop's configuration file:
```json
{
"mcpServers": {
"file-operation-mcp": {
"url": "http://localhost:3000/sse"
}
}
}
Cursor IDE Configuration
{
"mcpServers": {
"file-operation-mcp": {
"url": "http://localhost:3000/sse"
}
}
}
SSE Endpoint Description
- SSE Connection:
http://localhost:3000/sse- Primary MCP connection endpoint - Message Handling:
http://localhost:3000/messages- Handles JSON-RPC messages - Health Check:
http://localhost:3000/health- Server status check - Port Configuration: Can be modified via
PORTenvironment variable, defaults to 3000
⚠️ Note: SSE mode requires manual server startup first, then client connection configuration.
🚀 Usage
After configuration, restart Claude Desktop to use the following features in your conversations:
1. File Counting (count-files)
Counts the number of files in a specified folder, defaults to desktop files.
Parameters:
folderPath(Optional): Folder path, defaults to desktop
Example:
Please count how many files are on my desktop
Please count the number of files in /Users/username/Documents folder
2. File Listing (list-files)
Gets detailed information of all files in a specified folder, including filename, type, and size.
Parameters:
folderPath(Optional): Folder path, defaults to desktopincludeHidden(Optional): Whether to include hidden files, defaults to false
Example:
Please list all files on my desktop
Please show the contents of /Users/username/Downloads folder, including hidden files
3. Image Compression (compress-image)
Compresses specified image files, supports various formats and custom parameters.
Parameters:
imagePath: Image file path (Required)quality(Optional): Compression quality (1-100), defaults to 80maxWidth(Optional): Maximum width limitmaxHeight(Optional): Maximum height limitoutputPath(Optional): Output path, defaults to original filename with_compressedsuffix
Supported Formats:
- JPEG/JPG
- PNG
- WebP
- TIFF
- GIF
Example:
Please compress /Users/username/Desktop/photo.jpg to 60% quality
Please compress image /path/to/image.png, limit max width to 1920 pixels
4. File Compression (create-archive)
Compresses files or folders into ZIP, TAR, or TAR.GZ format.
Parameters:
files: Array of file/folder paths to compress (Required)outputPath: Output archive file path (Required)format(Optional): Compression format (zip, tar, tar.gz), defaults to zipcompressionLevel(Optional): Compression level (0-9), defaults to 6
Supported Formats:
- ZIP - General compression format, best compatibility
- TAR - Common Unix/Linux format, no compression
- TAR.GZ - TAR format + GZIP compression, high compression ratio
Example:
Please compress /Users/username/Documents folder to ZIP format
Please compress files ["/path/file1.txt", "/path/file2.txt"] to /backup/files.tar.gz format
Please compress the project folder into a high-compression ZIP package
5. File Extraction (extract-archive)
Extracts ZIP, TAR, or TAR.GZ files to a specified directory.
Parameters:
archivePath: Archive file path (Required)extractTo: Target directory for extraction (Required)overwrite(Optional): Whether to overwrite existing files, defaults to false
Supported Formats:
- ZIP - .zip file
- TAR - .tar file
- TAR.GZ - .tar.gz, .tgz files
Example:
Please extract /Downloads/archive.zip to /Projects/ directory
Please extract /backup/files.tar.gz to /restore/ and overwrite existing files
Please extract the archive to a temporary folder
Notes:
- Checks if the target directory is empty before extraction (unless overwrite=true)
- Supports automatic detection of compression format
- Displays extracted file count and total size
- Maintains original file structure during extraction
6. File Copy (copy-files)
Copies a file or folder to a specified location, keeping the original file unchanged.
Parameters:
sourcePath: Source file/folder path (Required)targetPath: Target path (Required)overwrite(Optional): Whether to overwrite existing files, defaults to falsepreserveTimestamps(Optional): Whether to preserve timestamps, defaults to true
Features:
- Supports file and folder copying
- Recursively copies entire directory structure
- Option to preserve original timestamps
- Security checks prevent accidental overwrites
- Displays copy details and file statistics
Example:
Please copy /Users/username/Documents/report.pdf to /backup/ directory
Please copy the entire project folder to a backup directory, preserving timestamps
Please copy the file and overwrite the existing target file
7. File Move (move-files)
Moves a file or folder to a specified location, equivalent to a cut operation.
Parameters:
sourcePath: Source file/folder path (Required)targetPath: Target path (Required)overwrite(Optional): Whether to overwrite existing files, defaults to false
Features:
- Supports file and folder moving
- Atomic operation, ensuring data integrity
- Automatic verification of move completion
- Prevents source and target paths from being the same
- Cross-filesystem move support
Example:
Please move /Downloads/archive.zip to /Projects/ directory
Please move the temporary folder to a permanent storage location
Please move the file and overwrite the same-named file at the target location
Notes:
- Move operation deletes the original file/folder
- Supports cross-partition/drive moves
- Verifies target directory permissions before moving
- Validates results after operation completion
8. PDF Merge (merge-pdf)
Merges multiple PDF files into a single complete PDF document.
Parameters:
inputPaths: Array of PDF file paths (Required)outputPath: Output PDF file path (Required)title(Optional): Title of the merged PDF
Features:
- Supports merging any number of PDF files
- Maintains original page format and quality
- Automatically sets document metadata
- Detailed merge statistics report
- Automatically adds .pdf extension
Example:
Please merge these PDF files: ["/reports/report1.pdf", "/reports/report2.pdf"] to "/merged/combined_report.pdf"
Please merge project documents, set title to "Complete Project Documentation"
9. PDF Split (split-pdf)
Splits a PDF file into multiple independent files, supporting splitting by page or custom range.
Parameters:
inputPath: Input PDF file path (Required)outputDir: Output directory (Required)splitMode(Optional): Split mode -pages(one file per page) orranges(split by range), defaults to pagesranges(Optional): Array of page ranges, e.g., ["1-3", "4-6"], only required for ranges modeprefix(Optional): Output filename prefix, defaults to original filename
Features:
- Two splitting modes: page-by-page splitting or range splitting
- Flexible page range settings
- Maintains original page format
- Automatic file naming and numbering
- Detailed splitting statistics
Example:
Please split "/documents/manual.pdf" by page to "/pages/" directory
Please split the PDF by ranges: ["1-5", "6-10", "11-15"]
Please split pages 3 to 8 of the PDF into separate files
- Before splitting

- After splitting

10. PDF to Image (pdf-to-image)
Converts PDF pages to high-quality image files, supports various formats and custom settings.
Parameters:
inputPath: Input PDF file path (Required)outputDir: Output directory (Required)format(Optional): Image format -jpegorpng, defaults to jpegquality(Optional): Image quality 1-100, defaults to 80dpi(Optional): Resolution DPI 50-600, defaults to 150pages(Optional): Page range, e.g., "1-3" or "1,3,5", defaults to all pagesprefix(Optional): Output filename prefix
Features:
- Supports JPEG and PNG formats
- Adjustable image quality and resolution
- Flexible page selection (range, list, single page)
- Batch processing of all pages
- Detailed conversion statistics
Example:
Please convert "/docs/presentation.pdf" to PNG image, 300 DPI resolution
Please convert only pages 1, 3, and 5 of the PDF to JPEG images
Please convert PDF pages 10-20 to high-quality images
Notes:
- PDF to image conversion requires system support for ImageMagick or GraphicsMagick
- High resolution settings will increase file size and processing time
- PNG format files are larger but higher quality
- Recommended resolution: 150 DPI for screen display, 300 DPI for printing
11. SQLite Database Operations (query-sqlite)
Performs various SQLite database operations including creating databases, executing queries, importing/exporting CSV, getting schema info, and more.
Parameters:
database_path: SQLite database file path (Required)operation: Operation type (Required) - create_db, execute_query, import_csv, export_csv, get_schema, drop_table, backup, restore, transaction, get_statsquery(Optional): SQL query statement (for execute_query and transaction operations)table_name(Optional): Table name (for drop_table, export_csv, etc. operations)csv_path(Optional): CSV file path (for import_csv and export_csv operations)backup_path(Optional): Backup file path (for backup and restore operations)
Features:
- Create new SQLite databases
- Execute SELECT, INSERT, UPDATE, DELETE and other SQL queries
- Import data from CSV files to database tables
- Export database tables as CSV files
- Get database table schema information
- Delete database tables
- Backup and restore database files
- Execute transactions to ensure data consistency
- Get database statistics
Example:
Please create a new SQLite database /data/mydb.sqlite
Please execute query "SELECT * FROM users WHERE age > 18" in /data/mydb.sqlite database
Please import /data/users.csv into /data/mydb.sqlite database
Please backup /data/mydb.sqlite database to /backup/mydb_backup.sqlite
12. Advanced File Compression (compress-files)
Compresses or decompresses files with various formats and options including ZIP, TAR, GZIP, BZIP2.
Parameters:
source_paths: File or directory paths to compress (Required, space-separated)destination_path: Output archive file path (Required)operation: Operation type (Required) - compress, decompress, info, update, test, encodeformat(Optional): Compression format - zip, tar, gzip, bzip2, defaults to zipcompression_level(Optional): Compression level 0-9, defaults to 6password(Optional): Password for ZIP archivesexclude_patterns(Optional): File/directory patterns to exclude (space-separated)encoding(Optional): Filename encoding
Features:
- Supports multiple compression formats (ZIP, TAR, GZIP, BZIP2)
- Adjustable compression levels
- ZIP archive password protection
- File exclusion patterns
- View compressed file information
- Test compressed file integrity
- Decompress archive files
Example:
Please compress /Documents/ and /Projects/ directories to /backup/archive.zip
Please create /data/files.tar.gz archive with highest compression level
Please decompress /backup/archive.zip to /restore/ directory
Please test the integrity of /backup/archive.zip
13. Text Processing (process-text)
Performs various text processing operations including sorting lines, removing duplicates, filtering patterns, replacing text, counting words/lines, and more.
Parameters:
file_path: Path to the text file to process (Required)operation: Operation type (Required) - sort, dedupe, filter, replace, count, convert_encoding, split, merge, case_transform, prefix_suffix, tabs_spaces, trimsort_order(Optional): Sort order asc/desc (for sort operation)filter_pattern(Optional): Filter pattern (for filter operation)is_regex(Optional): Whether it's a regex, defaults to false (for filter and replace operations)find_text(Optional): Text to find (for replace operation)replace_text(Optional): Replacement text (for replace operation)merge_paths(Optional): File paths to merge (for merge operation)case_option(Optional): Case transformation option upper/lower/capitalize (for case_transform operation)prefix(Optional): Line prefix (for prefix_suffix operation)suffix(Optional): Line suffix (for prefix_suffix operation)tab_size(Optional): Tab size, defaults to 4 (for tabs_spaces operation)output_path(Optional): Output file path
Features:
- Sort text lines (ascending/descending)
- Remove duplicate lines
- Text filtering (plain text/regex)
- Text replacement (plain text/regex)
- Count words, lines, characters
- Text case transformation
- Add line prefixes/suffixes
- Tab to space conversion
- Merge multiple text files
- Trim leading/trailing whitespace
Example:
Please sort /data/sorted.txt file in ascending order
Please remove duplicate lines from /logs/error.log
Please filter lines containing "ERROR" from /data/input.txt
Please merge /data/file1.txt and /data/file2.txt to /output/merged.txt
Please convert text in /data/input.txt to uppercase
📸 Feature Demo
File Listing Query
Defaults to querying desktop files, or specify a path:

File Count Statistics
Quickly count files in a specified directory:

Image Compression Feature
High-quality image compression, supports custom parameters:


🔧 Development
Development Mode
pnpm dev
Code Formatting
pnpm format
Code Linting
pnpm lint
Start Server
bun start # Now uses Bun for faster startup
⚠️ Notes
- Permission Requirements: Ensure Node.js has access to the target folders
- Path Format:
- macOS/Linux:
/Users/username/path - Windows:
C:\Users\username\path
- macOS/Linux:
- Image Formats: Only common image formats (JPEG, PNG, WebP, TIFF, GIF) are supported
- Archive Formats: Supports ZIP, TAR, TAR.GZ for compression and extraction
- File Operations: Copy and move operations support files and folders
- PDF Processing: PDF merge, split, and convert-to-image functions are purely JavaScript-based
- Image Conversion: PDF to image conversion requires ImageMagick or GraphicsMagick system support
- File Permissions: Ensure appropriate permissions for source files and target directories
- Overwrite Protection: By default, existing files are not overwritten; explicit setting is required
- File Size: Large file processing may take longer
- Debugging Output: Use
console.error()instead ofconsole.log()to avoid interfering with the MCP protocol
🐛 Troubleshooting
Common Issues
1. Server Startup Failure
Error: Cannot find module 'xxx'
Solution: Ensure bun install (or pnpm install) and pnpm build have been run.
2. Permission Error
Error: EACCES: permission denied
Solution: Check folder access permissions, or use a path with appropriate permissions.
3. Path Does Not Exist
Error: Path /xxx does not exist
Solution: Confirm the path is correct, use absolute paths.
4. Unsupported Image Format
Error: Unsupported image format .xxx
Solution: Use a supported image format (jpg, png, webp, tiff, gif).
5. Archive Creation Failure
Error: An error occurred while creating the archive
Solution:
- Check if file paths are correct
- Ensure write permissions for the output directory
- Check for sufficient disk space
6. File Extraction Failure
Error: Target directory is not empty
Solution: Set overwrite=true or clear the target directory.
7. Unsupported Archive Format
Error: Unsupported archive format
Solution: Use a supported format (.zip, .tar, .tar.gz, .tgz).
8. File Copy Failure
Error: Target path already exists
Solution: Set overwrite=true or choose a different target path.
9. File Move Failure
Error: Source path and target path cannot be the same
Solution: Ensure source and target paths are different.
10. Insufficient Permissions
Error: EACCES: permission denied
Solution:
- Check access permissions for source files and target directories
- Ensure sufficient disk space
- Avoid moving critical system files
11. Corrupted PDF File
Error: Unable to process PDF file
Solution:
- Check if the PDF file is complete and undamaged
- Confirm the PDF file is not password protected
- Try verifying the file with another PDF viewer
12. PDF to Image Conversion Failure
Error: Batch conversion failed
Solution:
- Ensure ImageMagick or GraphicsMagick is installed on the system
- Check system PATH environment variable configuration
- Lower DPI settings or reduce the number of pages
13. Page Range Error
Error: Page range out of valid bounds
Solution:
- Check the actual number of pages in the PDF file
- Ensure page range format is correct (e.g., "1-5", "1,3,5")
- Page numbering starts from 1, not 0
Debugging Tips
- Check Claude Desktop's developer console
- Check server log output
- Use MCP Inspector for debugging
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.