1999AZZAR/filesystem-mcp-server
If you are the rightful owner of filesystem-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
FileSystem MCP Server is a comprehensive server designed for advanced file system operations within the Model Context Protocol ecosystem.
FileSystem MCP Server
A comprehensive Model Context Protocol (MCP) server for advanced file system operations. This server provides structured file management capabilities including file operations, directory management, file watching, search functionality, and archiving operations.
Table of Contents
- Features
- Available Resources
- Installation
- Configuration
- Available Tools
- Usage Examples
- Development
- Security Considerations
- License
- Contributing
- Support
Features
Core File Operations
- File Reading: Read files with optional encoding and range support
- File Writing: Write content with encoding options and directory creation
- File Copying: Copy files with timestamp preservation and overwrite control
- File Moving: Move/rename files with conflict resolution
- File Deletion: Delete files and directories with recursive options
- File Information: Get detailed file metadata including permissions and timestamps
Directory Operations
- Directory Creation: Create directories with recursive parent creation
- Directory Listing: List contents with filtering, recursion, and depth control
- File Finding: Find files using glob patterns with advanced filtering
- Directory Size: Calculate directory sizes recursively with human-readable formatting
Advanced Operations
- Text Search: Search for patterns in files with context and filtering
- File Watching: Watch files and directories for changes with event handling
- File Comparison: Compare files with whitespace and case sensitivity options
- Archiving: Create and extract archives in multiple formats (ZIP, TAR, GZIP)
- Batch Operations: Perform operations on multiple files efficiently
Enterprise Features
- TypeScript: Fully typed with comprehensive error handling
- Input Validation: Zod schema validation for all parameters
- Error Recovery: Graceful error handling with detailed error messages
- Resource Management: Automatic cleanup of watchers and resources
- Performance: Optimized for large file operations and batch processing
- Intelligent Caching: TTL-based caching system for file metadata and search results
- MCP Resources: 7 specialized resources providing cached filesystem data and metadata
Available Resources
FileSystem MCP Server provides 7 specialized resources that offer cached file system data and intelligent metadata access with configurable TTL-based caching for optimal performance:
file://metadata/{path}
Returns cached metadata for files and directories including permissions, size, modification dates, and ownership.
Resource Details:
- Purpose: Access file/directory metadata without repeated stat calls
- Benefits: Faster file information queries, reduced I/O operations, metadata caching
- Cache TTL: 5 minutes - balances metadata freshness with performance
- Use Cases: File explorers, permission checking, size calculations, file monitoring
Response Format:
{
"path": "/home/user/document.txt",
"metadata": {
"size": 1024,
"permissions": "rw-r--r--",
"owner": "user",
"group": "users",
"modified": "2025-11-02T10:30:00.000Z",
"accessed": "2025-11-02T10:30:00.000Z",
"created": "2025-11-01T15:20:00.000Z"
},
"cached": false,
"timestamp": "2025-11-02T17:09:14.866Z"
}
file://directory/{path}
Provides cached directory listing with file details, sizes, and metadata for faster browsing.
Resource Details:
- Purpose: Access directory contents without repeated directory reads
- Benefits: Instant directory browsing, cached file listings, reduced I/O for navigation
- Cache TTL: 5 minutes - keeps directory structure reasonably current
- Use Cases: File managers, directory exploration, project navigation
Response Format:
{
"path": "/home/user/projects",
"contents": {
"success": true,
"data": {
"items": [
{
"name": "app.js",
"path": "/home/user/projects/app.js",
"type": "file",
"size": 2048,
"permissions": "rw-r--r--",
"modified": "2025-11-02T10:30:00.000Z"
}
]
}
},
"cached": false,
"timestamp": "2025-11-02T17:09:14.866Z"
}
file://search/cache/{query}
Caches results from file content and pattern searches across the filesystem.
Resource Details:
- Purpose: Cache expensive search operations across large codebases
- Benefits: Fast repeated searches, reduced filesystem traversal, search result persistence
- Cache TTL: 5 minutes - allows for reasonable search result freshness
- Use Cases: Code search, content finding, pattern matching, file discovery
Response Format:
{
"query": "function.*handleError",
"results": {
"success": true,
"data": {
"matches": [
{
"file": "/src/error-handler.js",
"line": 15,
"content": "function handleError(error) {",
"context": ["// Error handling function", "function handleError(error) {", " console.error(error);"]
}
]
}
},
"cached": false,
"timestamp": "2025-11-02T17:09:14.866Z"
}
file://watch/status/{path}
Shows current status and recent events for file system watchers.
Resource Details:
- Purpose: Monitor file watching status and recent change events
- Benefits: Track active watchers, view recent file changes, debug watch operations
- Cache TTL: 30 seconds - provides near real-time watch status
- Use Cases: Development monitoring, file change tracking, watch debugging
Response Format:
{
"path": "/home/user/projects",
"isWatching": true,
"lastEvents": [
{
"event": "change",
"filename": "app.js",
"timestamp": "2025-11-02T17:08:45.123Z"
}
],
"cached": false,
"timestamp": "2025-11-02T17:09:14.866Z"
}
file://recent/{type}
Lists recently accessed files of specified type (read/write/modified).
Resource Details:
- Purpose: Track recently accessed files for quick access and auditing
- Benefits: Quick access to recently worked files, usage tracking, productivity insights
- Cache TTL: 5 minutes - keeps recent file list reasonably current
- Use Cases: File history, recent documents, usage analytics
Response Format:
{
"type": "modified",
"files": [
{
"path": "/home/user/document.txt",
"accessed": "2025-11-02T17:05:00.000Z",
"size": 1024
}
],
"count": 1,
"cached": false,
"timestamp": "2025-11-02T17:09:14.866Z"
}
file://structure/{path}
Provides hierarchical directory structure with file counts and size summaries.
Resource Details:
- Purpose: Get complete directory tree structure with statistics
- Benefits: Project overview, size analysis, structure visualization, disk usage tracking
- Cache TTL: 5 minutes - balances structure accuracy with performance
- Use Cases: Project analysis, disk cleanup, directory visualization
Response Format:
{
"path": "/home/user/projects",
"structure": {
"name": "projects",
"type": "directory",
"path": "/home/user/projects",
"children": [
{
"name": "src",
"type": "directory",
"path": "/home/user/projects/src",
"size": 0
},
{
"name": "README.md",
"type": "file",
"path": "/home/user/projects/README.md",
"size": 2048
}
],
"stats": {
"totalFiles": 5,
"totalDirs": 3,
"totalSize": 15360
}
},
"cached": false,
"timestamp": "2025-11-02T17:09:14.866Z"
}
file://content/preview/{path}
Generates cached preview of file content (first lines/chars) for quick inspection.
Resource Details:
- Purpose: Preview file content without loading entire files
- Benefits: Quick file inspection, content type detection, safe file preview
- Cache TTL: 5 minutes - keeps previews reasonably fresh
- Use Cases: File exploration, content verification, type detection, safe browsing
Response Format:
{
"path": "/home/user/document.txt",
"preview": {
"path": "/home/user/document.txt",
"type": "file",
"preview": "This is the beginning of the document...\nIt contains important information...",
"canPreview": true,
"size": 1024,
"mimeType": "text/plain",
"encoding": "utf8"
},
"cached": false,
"timestamp": "2025-11-02T17:09:14.866Z"
}
Installation
- Clone the repository:
git clone https://github.com/1999AZZAR/filesystem-mcp-server.git
cd filesystem-mcp-server
- Install dependencies:
npm install
- Build the project:
npm run build
- Test the server:
npm start
Configuration
For Cursor IDE
Add this server to your Cursor MCP configuration (~/.cursor/mcp.json):
{
"mcpServers": {
"filesystem-mcp": {
"command": "node",
"args": ["/path/to/filesystem-mcp-server/dist/index.js"],
"env": {}
}
}
}
For Claude Desktop
Add this server to your Claude Desktop configuration (claude_desktop_config.json):
{
"mcpServers": {
"filesystem-mcp": {
"command": "node",
"args": ["/path/to/filesystem-mcp-server/dist/index.js"],
"env": {}
}
}
}
Available Tools
This MCP server provides 18 powerful tools for comprehensive file system management:
1. File Operations
read_file - Read File Content
Read file content with optional encoding and range support.
Parameters:
path(required): Path to the file to readencoding(optional): File encoding - "utf8", "utf16le", "latin1", "base64", "hex", "ascii", "binary" (default: "utf8")offset(optional): Byte offset to start reading fromlimit(optional): Maximum number of bytes to read
Example:
{
"name": "read_file",
"arguments": {
"path": "/path/to/file.txt",
"encoding": "utf8",
"offset": 0,
"limit": 1024
}
}
Response:
{
"success": true,
"message": "File read successfully",
"path": "/path/to/file.txt",
"data": {
"content": "File content here...",
"encoding": "utf8",
"size": 1024
}
}
write_file - Write File Content
Write content to file with optional encoding and directory creation.
Parameters:
path(required): Path to the file to writecontent(required): Content to write to the fileencoding(optional): File encoding (default: "utf8")createDirs(optional): Create parent directories if they don't exist (default: false)append(optional): Append to file instead of overwriting (default: false)
Example:
{
"name": "write_file",
"arguments": {
"path": "/path/to/file.txt",
"content": "Hello, World!",
"encoding": "utf8",
"createDirs": true
}
}
copy_file - Copy File
Copy file from source to destination with options.
Parameters:
source(required): Source file pathdestination(required): Destination file pathoverwrite(optional): Overwrite destination if it exists (default: false)preserveTimestamps(optional): Preserve file timestamps (default: true)
Example:
{
"name": "copy_file",
"arguments": {
"source": "/path/to/source.txt",
"destination": "/path/to/destination.txt",
"overwrite": true,
"preserveTimestamps": true
}
}
move_file - Move File
Move file from source to destination.
Parameters:
source(required): Source file pathdestination(required): Destination file pathoverwrite(optional): Overwrite destination if it exists (default: false)
Example:
{
"name": "move_file",
"arguments": {
"source": "/path/to/source.txt",
"destination": "/path/to/destination.txt",
"overwrite": false
}
}
delete_file - Delete File or Directory
Delete file or directory with options.
Parameters:
path(required): Path to deleterecursive(optional): Recursively delete directories (default: false)force(optional): Force deletion even if path doesn't exist (default: false)
Example:
{
"name": "delete_file",
"arguments": {
"path": "/path/to/file.txt",
"recursive": false,
"force": false
}
}
get_file_info - Get File Information
Get detailed file information including metadata.
Parameters:
path(required): Path to get information forfollowSymlinks(optional): Follow symbolic links (default: true)
Example:
{
"name": "get_file_info",
"arguments": {
"path": "/path/to/file.txt",
"followSymlinks": true
}
}
Response:
{
"success": true,
"message": "File information retrieved successfully",
"path": "/path/to/file.txt",
"data": {
"name": "file.txt",
"path": "/path/to/file.txt",
"type": "file",
"size": 1024,
"isDirectory": false,
"isFile": true,
"isSymlink": false,
"permissions": "644",
"createdAt": "2024-01-15T10:30:00.000Z",
"modifiedAt": "2024-01-15T10:30:00.000Z",
"accessedAt": "2024-01-15T10:30:00.000Z",
"extension": ".txt",
"mimeType": "text/plain"
}
}
2. Directory Operations
create_directory - Create Directory
Create directory with optional recursive creation.
Parameters:
path(required): Directory path to createrecursive(optional): Create parent directories recursively (default: false)mode(optional): Directory permissions in octal format
Example:
{
"name": "create_directory",
"arguments": {
"path": "/path/to/new/directory",
"recursive": true,
"mode": "755"
}
}
list_directory - List Directory Contents
List directory contents with optional filtering and recursion.
Parameters:
path(required): Directory path to listrecursive(optional): List contents recursively (default: false)includeHidden(optional): Include hidden files and directories (default: false)maxDepth(optional): Maximum depth for recursive listingfileTypes(optional): Filter by file types - ["file", "directory", "symlink"]
Example:
{
"name": "list_directory",
"arguments": {
"path": "/path/to/directory",
"recursive": true,
"includeHidden": false,
"maxDepth": 3,
"fileTypes": ["file", "directory"]
}
}
Response:
{
"success": true,
"message": "Directory listed successfully (15 items)",
"path": "/path/to/directory",
"data": {
"items": [
{
"name": "file1.txt",
"path": "/path/to/directory/file1.txt",
"type": "file",
"size": 1024,
"isDirectory": false,
"isFile": true,
"isSymlink": false,
"permissions": "644",
"createdAt": "2024-01-15T10:30:00.000Z",
"modifiedAt": "2024-01-15T10:30:00.000Z",
"accessedAt": "2024-01-15T10:30:00.000Z",
"extension": ".txt",
"mimeType": "text/plain"
}
],
"count": 15,
"recursive": true,
"includeHidden": false
}
}
find_files - Find Files
Find files matching a pattern.
Parameters:
pattern(required): Glob pattern to match filesdirectory(optional): Directory to search in (default: ".")maxDepth(optional): Maximum search depthincludeHidden(optional): Include hidden files (default: false)fileTypes(optional): Filter by file typescaseSensitive(optional): Case-sensitive pattern matching (default: false)
Example:
{
"name": "find_files",
"arguments": {
"pattern": "*.txt",
"directory": "/path/to/search",
"maxDepth": 3,
"includeHidden": false,
"fileTypes": ["file"],
"caseSensitive": false
}
}
get_directory_size - Get Directory Size
Get directory size recursively.
Parameters:
path(required): Directory path
Example:
{
"name": "get_directory_size",
"arguments": {
"path": "/path/to/directory"
}
}
Response:
{
"success": true,
"message": "Directory size calculated successfully",
"path": "/path/to/directory",
"data": {
"totalSize": 1048576,
"fileCount": 25,
"dirCount": 5,
"humanReadable": "1.00 MB"
}
}
3. Advanced Operations
search_in_files - Search in Files
Search for text patterns in files.
Parameters:
pattern(required): Text pattern to search fordirectory(optional): Directory to search in (default: ".")filePattern(optional): Glob pattern for files to searchmaxDepth(optional): Maximum search depthincludeHidden(optional): Include hidden files (default: false)caseSensitive(optional): Case-sensitive search (default: false)wholeWord(optional): Match whole words only (default: false)contextLines(optional): Number of context lines around matches (default: 2)
Example:
{
"name": "search_in_files",
"arguments": {
"pattern": "function",
"directory": "/path/to/code",
"filePattern": "*.js",
"maxDepth": 2,
"includeHidden": false,
"caseSensitive": false,
"wholeWord": true,
"contextLines": 3
}
}
Response:
{
"success": true,
"message": "Search completed: 5 files with matches",
"path": "/path/to/code",
"data": {
"results": [
{
"path": "/path/to/code/file.js",
"matches": [
{
"line": 10,
"column": 1,
"text": "function",
"context": "// This is a function\nexport function myFunction() {\n return 'hello';\n}"
}
],
"fileInfo": {
"name": "file.js",
"path": "/path/to/code/file.js",
"type": "file",
"size": 2048,
"isDirectory": false,
"isFile": true,
"isSymlink": false,
"permissions": "644",
"createdAt": "2024-01-15T10:30:00.000Z",
"modifiedAt": "2024-01-15T10:30:00.000Z",
"accessedAt": "2024-01-15T10:30:00.000Z",
"extension": ".js",
"mimeType": "application/javascript"
}
}
],
"totalMatches": 8,
"pattern": "function",
"directory": "/path/to/code"
}
}
watch_file - Watch File or Directory
Watch file or directory for changes.
Parameters:
path(required): Path to watchrecursive(optional): Watch recursively (default: false)ignoreInitial(optional): Ignore initial events (default: true)ignored(optional): Patterns to ignore
Example:
{
"name": "watch_file",
"arguments": {
"path": "/path/to/watch",
"recursive": true,
"ignoreInitial": true,
"ignored": ["*.tmp", "node_modules/**"]
}
}
Response:
{
"success": true,
"message": "File watching started successfully",
"path": "/path/to/watch",
"data": {
"watching": true,
"recursive": true,
"ignoreInitial": true,
"events": [
{
"type": "add",
"path": "/path/to/watch/newfile.txt",
"stats": {
"name": "newfile.txt",
"path": "/path/to/watch/newfile.txt",
"type": "file",
"size": 0,
"isDirectory": false,
"isFile": true,
"isSymlink": false,
"permissions": "644",
"createdAt": "2024-01-15T10:30:00.000Z",
"modifiedAt": "2024-01-15T10:30:00.000Z",
"accessedAt": "2024-01-15T10:30:00.000Z"
}
}
]
}
}
stop_watching - Stop Watching
Stop watching a file or directory.
Parameters:
path(required): Path to stop watching
Example:
{
"name": "stop_watching",
"arguments": {
"path": "/path/to/watch"
}
}
compare_files - Compare Files
Compare two files and show differences.
Parameters:
file1(required): First file pathfile2(required): Second file pathignoreWhitespace(optional): Ignore whitespace differences (default: false)ignoreCase(optional): Ignore case differences (default: false)
Example:
{
"name": "compare_files",
"arguments": {
"file1": "/path/to/file1.txt",
"file2": "/path/to/file2.txt",
"ignoreWhitespace": true,
"ignoreCase": false
}
}
Response:
{
"success": true,
"message": "Files differ: 3 differences found",
"path": "/path/to/file1.txt",
"data": {
"identical": false,
"differences": [
{
"line": 5,
"type": "modified",
"content": "- old content\n+ new content"
}
],
"totalDifferences": 3,
"file1": {
"path": "/path/to/file1.txt",
"lines": 10,
"size": 1024
},
"file2": {
"path": "/path/to/file2.txt",
"lines": 12,
"size": 1156
},
"options": {
"ignoreWhitespace": true,
"ignoreCase": false
}
}
}
archive_files - Create Archive
Create archive from files.
Parameters:
files(required): Files to archivearchivePath(required): Archive file pathformat(optional): Archive format - "zip", "tar", "gzip" (default: "zip")compressionLevel(optional): Compression level (0-9, default: 6)includeHidden(optional): Include hidden files (default: false)excludePatterns(optional): Patterns to exclude
Example:
{
"name": "archive_files",
"arguments": {
"files": ["/path/to/file1.txt", "/path/to/file2.txt"],
"archivePath": "/path/to/archive.zip",
"format": "zip",
"compressionLevel": 6,
"includeHidden": false,
"excludePatterns": ["*.tmp"]
}
}
Response:
{
"success": true,
"message": "Archive created successfully",
"path": "/path/to/archive.zip",
"data": {
"archivePath": "/path/to/archive.zip",
"format": "zip",
"compressionLevel": 6,
"size": 2048,
"filesCount": 2,
"humanReadable": "2.00 KB"
}
}
extract_archive - Extract Archive
Extract archive to destination.
Parameters:
archivePath(required): Archive file pathdestination(required): Extraction destination
Example:
{
"name": "extract_archive",
"arguments": {
"archivePath": "/path/to/archive.zip",
"destination": "/path/to/extract"
}
}
Usage Examples
Basic File Operations
// Read a file
const readResult = await mcpClient.callTool('read_file', {
path: '/path/to/file.txt',
encoding: 'utf8'
});
// Write a file
const writeResult = await mcpClient.callTool('write_file', {
path: '/path/to/newfile.txt',
content: 'Hello, World!',
createDirs: true
});
// Copy a file
const copyResult = await mcpClient.callTool('copy_file', {
source: '/path/to/source.txt',
destination: '/path/to/destination.txt',
overwrite: true
});
Directory Management
// Create directory
const createDirResult = await mcpClient.callTool('create_directory', {
path: '/path/to/new/directory',
recursive: true
});
// List directory contents
const listResult = await mcpClient.callTool('list_directory', {
path: '/path/to/directory',
recursive: true,
includeHidden: false,
maxDepth: 3
});
// Find files
const findResult = await mcpClient.callTool('find_files', {
pattern: '*.js',
directory: '/path/to/code',
maxDepth: 2,
fileTypes: ['file']
});
Advanced Operations
// Search in files
const searchResult = await mcpClient.callTool('search_in_files', {
pattern: 'function',
directory: '/path/to/code',
filePattern: '*.js',
caseSensitive: false,
wholeWord: true,
contextLines: 3
});
// Watch for changes
const watchResult = await mcpClient.callTool('watch_file', {
path: '/path/to/watch',
recursive: true,
ignoreInitial: true
});
// Compare files
const compareResult = await mcpClient.callTool('compare_files', {
file1: '/path/to/file1.txt',
file2: '/path/to/file2.txt',
ignoreWhitespace: true
});
// Create archive
const archiveResult = await mcpClient.callTool('archive_files', {
files: ['/path/to/file1.txt', '/path/to/file2.txt'],
archivePath: '/path/to/archive.zip',
format: 'zip',
compressionLevel: 6
});
Development
Project Structure
filesystem-mcp-server/
├── src/
│ ├── index.ts # Main entry point
│ ├── server.ts # MCP server implementation
│ ├── file-operations.ts # Core file operations
│ ├── directory-operations.ts # Directory management
│ ├── advanced-operations.ts # Advanced features
│ └── types.ts # Type definitions and schemas
├── dist/ # Compiled JavaScript output
├── __tests__/ # Test files
├── package.json # Dependencies and scripts
├── tsconfig.json # TypeScript configuration
├── jest.config.js # Jest testing configuration
└── README.md # This documentation
Development Commands
# Install dependencies
npm install
# Build the project
npm run build
# Run in development mode with hot reload
npm run dev
# Run tests
npm test
# Run tests in watch mode
npm run test:watch
# Run linting
npm run lint
# Fix linting issues
npm run lint:fix
# Clean build directory
npm run clean
# Start production server
npm start
Testing
The server includes comprehensive Jest tests:
npm test
Test Coverage:
- File operations (read, write, copy, move, delete)
- Directory operations (create, list, find)
- Advanced operations (search, watch, compare, archive)
- Error handling and edge cases
- Input validation and schema validation
Error Handling
The server includes comprehensive error handling:
- Input Validation: All parameters validated with Zod schemas
- File System Errors: Graceful handling of permission, not found, and access errors
- Resource Cleanup: Automatic cleanup of watchers and resources
- Process Management: Proper signal handling for graceful shutdown
Performance Considerations
- Streaming: Large file operations use streaming for memory efficiency
- Batch Operations: Multiple file operations optimized for performance
- Caching: File information cached for repeated operations
- Resource Management: Automatic cleanup prevents memory leaks
Security Considerations
- Path Validation: All paths validated to prevent directory traversal attacks
- Permission Checks: File operations respect system permissions
- Input Sanitization: All inputs validated and sanitized
- Error Information: Error messages don't expose sensitive information
License
MIT License - see LICENSE file for details.
Contributing
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes and add tests
- Run the test suite:
npm test - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
Support
For issues and questions:
- GitHub Issues: Open an issue
- Documentation: Check this README for comprehensive usage examples
- Examples: See the examples section above for common use cases
FileSystem MCP Server - Comprehensive file system operations for the Model Context Protocol ecosystem.