Filesystem
About
Provides a filesystem interface to perform file operations like creation, deletion, and manipulation without direct system access.
Details
- Author
- gomcpgo
- Repository
- gomcpgo/filesys
- GitHub stars
- 1
- Categories
- File Management, Security, Developer Tools, Productivity, Design, Workplace, AI, Infrastructure, Frontend, Project Management, Automation
Jump to
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
FilesystemCommand (node, npx, python, etc.)/path/to/filesystem-mcp-darwin-arm64Environment-
MCP_ALLOWED_DIRS
/path1,/path2,/path with spaces/dir3
Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
-
MCP_ALLOWED_DIRS
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
Set allowed directories using the environment variable:
export MCP_ALLOWED_DIRS="/path1,/path2,/path with spaces/dir3"
Add to claude_desktop_config.json:
{
"mcpServers": {
"filesystem": {
"command": "/path/to/filesystem-mcp-darwin-arm64",
"env": {
"MCP_ALLOWED_DIRS": "/path1,/path2,/path with spaces/dir3"
}
}
}
}
read_file
Read a single file, with optional `start_line`/`end_line` for partial reads.
read_multiple_files
Read multiple files simultaneously in one call.
search_in_files
Recursive regex search across files. Returns file paths, line numbers, and matched text. Params: `path`, `pattern`, `file_extensions`, `max_results`, `case_sensitive`.
write_file
Create or overwrite a file. Auto-creates parent directories.
append_to_file
Add content to end of file. Creates file if it doesn't exist.
prepend_to_file
Add content to beginning of file. Creates file if it doesn't exist.
replace_in_file
Replace exact string occurrences in a file. Params: `path`, `search`, `replace`, `occurrence` (0=all), `dry_run`.
replace_in_file_regex
Replace regex pattern matches with capture group support (`$1`, `$2`). Params: `path`, `pattern`, `replace`, `occurrence`, `case_sensitive`, `dry_run`.
replace_in_files
Batch replace a string across multiple files. Validates all paths before applying. Params: `paths`, `search`, `replace`, `dry_run`.
insert_after_regex
Insert content after a regex pattern match. Params: `path`, `pattern`, `content`, `occurrence` (0=all, default 1), `autoIndent`, `dry_run`.
insert_before_regex
Insert content before a regex pattern match. Same params as above.
copy_lines
Copy a line range from source to destination file directly on disk (no context overhead). Params: `source_path`, `destination_path`, `start_line`, `end_line`, `append`.
list_directory
List directory contents with filtering by pattern, file type, recursion depth, hidden files, and metadata. Params: `path`, `pattern`, `file_type`, `recursive`, `max_depth`, `max_results`, `include_hidden`, `include_metadata`.
create_directory
Create directory and parents (idempotent).
list_allowed_directories
Show accessible directories.
move_file
Move or rename files and directories.
get_file_info
Get file metadata (size, permissions, modification time).
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"filesystem": {
"env": {
"MCP_ALLOWED_DIRS": "/path1,/path2,/path with spaces/dir3"
},
"args": [],
"command": "/path/to/filesystem-mcp-darwin-arm64"
}
}
}
Linux
{
"env": {
"MCP_ALLOWED_DIRS": "/path1,/path2,/path with spaces/dir3"
},
"args": [],
"command": "/path/to/filesystem-mcp-linux-amd64"
}
Macos
{
"env": {
"MCP_ALLOWED_DIRS": "/path1,/path2,/path with spaces/dir3"
},
"args": [],
"command": "/path/to/filesystem-mcp-darwin-arm64"
}
Windows
{
"env": {
"MCP_ALLOWED_DIRS": "/path1,/path2,/path with spaces/dir3"
},
"args": [],
"command": "/path/to/filesystem-mcp-windows-amd64.exe"
}
Filesystem MCP Server
A secure, single-binary MCP server for filesystem operations. No runtime dependencies — download, configure allowed directories, and connect to any MCP client.
Tested extensively with Claude Desktop and Claude Code across real-world coding workflows including file editing, codebase search, refactoring, and multi-file batch operations.
Why this server?
- Single binary — no Node.js, Python, or other runtime needed. Download and run
- Tested with real AI workflows — battle-tested with Claude Desktop and Claude Code for day-to-day coding tasks
- 18 tools — goes beyond basic read/write with regex search, pattern-based replacement, auto-indented code insertion, and batch operations
- Dry-run preview — preview changes before applying them for replacement and insertion tools
- Secure by default — sandboxed to configured directories with symlink attack prevention and path traversal protection
- Detailed error messages — when access is denied, errors explain why and suggest fixes
Installation
Download a release binary
Download the latest binary for your platform from the Releases page:
| Platform | Binary |
|----------|--------|
| macOS (Apple Silicon) | filesystem-mcp-darwin-arm64 |
| macOS (Intel) | filesystem-mcp-darwin-amd64 |
| Linux (x86_64) | filesystem-mcp-linux-amd64 |
| Linux (ARM64) | filesystem-mcp-linux-arm64 |
| Windows | filesystem-mcp-windows-amd64.exe |
Make it executable (macOS/Linux):
chmod +x filesystem-mcp-darwin-arm64
Build from source
go build -ldflags="-s -w" -o bin/filesystem-mcp ./cmd
Configuration
Set allowed directories using the environment variable:
export MCP_ALLOWED_DIRS="/path1,/path2,/path with spaces/dir3"
Tools
Reading
- read_file — Read a single file, with optional start_line/end_line for partial reads
- read_multiple_files — Read multiple files simultaneously in one call
- search_in_files — Recursive regex search across files. Returns file paths, line numbers, and matched text. Skips binary files automatically. Params: path, pattern, file_extensions, max_results, case_sensitive
Writing
- write_file — Create or overwrite a file. Auto-creates parent directories
- append_to_file — Add content to end of file. Creates file if it doesn't exist
- prepend_to_file — Add content to beginning of file. Creates file if it doesn't exist
Text Replacement
All replacement tools support dry_run to preview changes without applying them.
- replace_in_file — Replace exact string occurrences in a file. Params: path, search, replace, occurrence (0=all), dry_run
- replace_in_file_regex — Replace regex pattern matches with capture group support ($1, $2). Params: path, pattern, replace, occurrence, case_sensitive, dry_run
- replace_in_files — Batch replace a string across multiple files. Validates all paths before applying. Params: paths, search, replace, dry_run
Regex-Based Insertion
All insertion tools support dry_run and autoIndent (match surrounding indentation).
- insert_after_regex — Insert content after a regex pattern match. Params: path, pattern, content, occurrence (0=all, default 1), autoIndent, dry_run
- insert_before_regex — Insert content before a regex pattern match. Same params as above
Line Copying
- copy_lines — Copy a line range from source to destination file directly on disk (no context overhead). Params: source_path, destination_path, start_line, end_line, append
Directory Operations
- list_directory — List directory contents with filtering by pattern, file type, recursion depth, hidden files, and metadata. Params: path, pattern, file_type, recursive, max_depth, max_results, include_hidden, include_metadata
- create_directory — Create directory and parents (idempotent)
- list_allowed_directories — Show accessible directories
File Management
- move_file — Move or rename files and directories
- get_file_info — Get file metadata (size, permissions, modification time)
Usage with Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"filesystem": {
"command": "/path/to/filesystem-mcp-darwin-arm64",
"env": {
"MCP_ALLOWED_DIRS": "/path1,/path2,/path with spaces/dir3"
}
}
}
}
Security
The server implements defense-in-depth security to prevent unauthorized file access.
Path Validation
- Symbolic link resolution: All paths resolved to canonical form viafilepath.EvalSymlinks() before validation
- Path traversal prevention: Blocks ../ escape attempts
- Prefix matching protection: Validates with path separators to prevent /allowed matching /allowed_attacker
Symbolic Link Handling
- Symlinks within allowed directories are permitted if their target is also within allowed directories - Symlinks pointing outside allowed directories are blocked - Broken symlinks are rejected - Allowed directories themselves may be symbolic links (resolved during initialization)Write Operation Security
- Parent directory chain is validated for new file creation - Path resolution and validation occur atomicallySecurity Logging
- All blocked access attempts are logged withSECURITY: prefix
- Logs include both the requested path and its canonical resolution
Best Practices
- ConfigureMCP_ALLOWED_DIRS with the minimum necessary directories
- Use absolute paths for allowed directories
- Monitor logs for SECURITY: messages
License
MIT License
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.





