read_fileLABSCO SUMMARY
copy_lines moves code between files without spending context on it.
Most filesystem servers make you read a range into the conversation and write it back out; here the copy happens on disk. The dry runs are the other reason to prefer it — replacements and insertions can be previewed before they touch anything, and every path is resolved through symlinks before it is allowed.
What it is
A single Go binary sandboxed to the directories you name. Every replacement and insertion tool supports a dry run, so you can see the change before it lands.
What you get
- No runtime to install — one binary per platform
- Files read whole or by line range, several at once, and searched by regex across a tree with binary files skipped — read_file, read_multiple_files, search_in_files
- Files written, appended to and prepended to, with parent directories created — write_file, append_to_file, prepend_to_file
- Exact-string and regex replacement with capture groups, in one file or across many, each with dry_run — replace_in_file, replace_in_file_regex, replace_in_files
- Content inserted before or after a regex match, matching the surrounding indentation — insert_before_regex, insert_after_regex
- A line range copied from one file to another directly on disk — copy_lines
- Directories listed with pattern, type, depth, hidden-file and metadata filters, created, and the allowed set shown — list_directory, create_directory, list_allowed_directories
- Files moved or renamed, and file metadata read — move_file, get_file_info
- Path validation that resolves symlinks to canonical form, blocks traversal, and logs every refused attempt
Requirements
MCP_ALLOWED_DIRS, a comma-separated list of the directories the server may touch. Download the release binary for your platform — darwin-arm64, darwin-amd64, linux-amd64, linux-arm64 or windows-amd64 — or build with go build. Nothing else to install.
Setup effort
Follow the published steps — chmod +x filesystem-mcp-darwin-arm64
USE CASES
Finding every place something is referenced
Recursive regex search returns file paths, line numbers and the matched text, skipping binaries, with extension and result-count filters.
Renaming something across a codebase
Batch replace across many files, validated up front, and preview the whole change with a dry run before applying it.
Adding code in the right place
Insert before or after a regex match with auto-indent, so the new block matches the surrounding style rather than landing at column zero.
Splitting a file without reading it all
Copy a line range straight from source to destination on disk, appending if you want, without the content passing through the conversation.
17 tools
Listed in project docs. Your client may show a different list.
read_multiple_filessearch_in_fileswrite_fileappend_to_fileprepend_to_filereplace_in_filereplace_in_file_regexreplace_in_filesinsert_after_regexinsert_before_regexcopy_lineslist_directorycreate_directorylist_allowed_directoriesmove_fileget_file_infoBEFORE YOU INSTALL
What to know first
Tools you get
17 tools named in the project's documentation. The project says 18 tools but names 17. There is no delete tool: files can be created, overwritten, edited and moved, but not removed.
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Server setup
Download the binary for your platform from https://github.com/gomcpgo/filesys/releases — filesystem-mcp-darwin-arm64, filesystem-mcp-darwin-amd64, filesystem-mcp-linux-amd64, filesystem-mcp-linux-arm64 or filesystem-mcp-windows-amd64.exe
chmod +x filesystem-mcp-darwin-arm64
export MCP_ALLOWED_DIRS="/path1,/path2,/path with spaces/dir3"MCP Clients
Claude Desktop
{
"mcpServers": {
"filesystem": {
"command": "<YOUR_PATH_TO_FILESYSTEM_MCP_DARWIN_ARM64>",
"env": {
"MCP_ALLOWED_DIRS": "/path1,/path2,/path with spaces/dir3"
}
}
}
}