REA
Reverse engineer anything from your terminal or agent with one CLI and MCP server.
MOmorluto/rea111k104,453 new stars in the last 7 days
Secure filesystem MCP server for reading, writing, searching, diffing, and patching files.
Let your AI assistant work with your files, safely.
Read, search, edit, and patch files in the folders you choose.
Secret files stay hidden, and risky changes wait for your OK.
Model Context Protocol (MCP) is how AI apps such as Claude, GitHub Copilot in VS Code, and Cursor connect to tools. Filesystem MCP is an MCP server: a small program that runs on your computer and gives the AI 13 tools for working with files. You choose which folders it can use, and everything outside them is off limits.
Once it is connected, you can ask things like:
getUser to fetchUser in all .ts files. Show me the diff first."config.dev.json and config.prod.json?"server.log and explain the error."archive/2025/.".env files, private keys, and cloud credentials are blocked. The server
asks you before the AI deletes a non-empty folder, opens a folder you did
not allow, or writes over a file with create or move. Only create and
copies can skip that question, by passing overwrite: true. Edits made with
edit, patch, and replace_text apply without asking, but the AI can
show you the diff first with dryRun. If the AI should never change
anything, --read-only removes every tool that writes.grep, with a regex engine (RE2) that cannot hang, and by default the
server skips .gitignored files and folders like node_modules. Edits are
exact-match replacements that fail loudly instead of guessing, and you can
preview them as a diff first.How this server differs from the official
@modelcontextprotocol/server-filesystem,
checked against its README on 2026-10-11:
| Capability | Filesystem MCP | Reference server |
|---|---|---|
| Search inside files | search_text: literal text or RE2 regex | None; search_files matches names only |
| Secret files | .env, keys, and credentials blocked by default | Not blocked |
| Overwriting a file | create asks you first (unless overwrite: true) | write_file overwrites without asking |
| Delete files | delete; asks before deleting a non-empty folder | None |
.gitignore | Respected by listing and search tools | Not supported |
| Read-only mode | --read-only removes every tool that writes | Docker ro mounts only |
| Apply a unified diff | patch | None |
| Compare two files | diff | None |
| Replace across many files | replace_text over a folder or glob | None |
| Watch files | Subscribe to a file and get change notifications | None |
| Transport | stdio, or Streamable HTTP with --port | stdio |
Note
You need Node.js 24 or later. Check with
node --version.
/path/to/project with the folder the AI may use. You can list
several folders.Tip
VS Code currently shares the folders you have open with the server, so the one-click VS Code install works without a path. In other apps, or over HTTP, put the folder in
args. If the AI says it has no folders, that is the fix.
Click Install in VS Code above, or add this to .vscode/mcp.json:
{
"servers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@j0hanz/filesystem-mcp@latest", "/path/to/project"]
}
}
}
Or from a terminal:
code --add-mcp '{"name":"filesystem","command":"npx","args":["-y","@j0hanz/filesystem-mcp@latest","/path/to/project"]}'
Click Install in Cursor above, then add your folder to args. Or add this
to .cursor/mcp.json in your project, or ~/.cursor/mcp.json for all
projects:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@j0hanz/filesystem-mcp@latest", "/path/to/project"]
}
}
}
For a one-click install, download
filesystem-mcp.mcpb,
open it with Claude Desktop, and pick the folders to allow. Claude Desktop's
built-in Node.js runs it.
To set it up by hand, add this to claude_desktop_config.json
(Settings → Developer → Edit Config):
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@j0hanz/filesystem-mcp@latest", "/path/to/project"]
}
}
}
claude mcp add filesystem -- npx -y @j0hanz/filesystem-mcp@latest /path/to/project
Or install the plugin, which points the server at your current project:
/plugin marketplace add j0hanz/j0hanz-marketplace
/plugin install filesystem-mcp@j0hanz-marketplace
Add this to .vs\mcp.json in your solution folder, or %USERPROFILE%\.mcp.json
for all solutions:
{
"servers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@j0hanz/filesystem-mcp@latest", "C:/path/to/project"]
}
}
}
The filesystem-mcp plugin sets the server up for your current project:
| Client | Install |
|---|---|
| Copilot CLI | copilot plugin marketplace add j0hanz/j0hanz-marketplace, then copilot plugin install filesystem-mcp@j0hanz-marketplace |
| Antigravity CLI | git clone https://github.com/j0hanz/j0hanz-marketplace, then agy plugin install ./j0hanz-marketplace/plugins/filesystem-mcp |
The container can only see the folders you mount. This setup is read-only
twice over: the :ro mount and the --read-only flag.
{
"mcpServers": {
"filesystem": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/path/to/project:/workspace:ro",
"ghcr.io/j0hanz/filesystem-mcp:latest",
"--read-only",
"/workspace"
]
}
}
}
Drop :ro and --read-only to let the AI make changes. VS Code and Visual
Studio use "servers" instead of "mcpServers". See
Running in Docker for more.
Windsurf, Cline, and most other clients use the same mcpServers JSON as
Claude Desktop above. In any client, the server is:
npx-y, @j0hanz/filesystem-mcp@latest, then one or more foldersYou can also install it globally and run filesystem-mcp /path/to/project:
npm install -g @j0hanz/filesystem-mcp
| Tool | What it does |
|---|---|
list_roots | Shows the folders the server may use. |
list | Lists a folder as a tree, like ls or tree. |
find_files | Finds files by name or glob, such as **/*.test.ts. |
search_text | Searches inside files for text or a regex, like grep, with optional context lines. |
stat | Gets size, dates, type, permissions, and a token estimate without reading the file. |
read | Reads one or many text files, whole or by line range, head, or tail. Images and audio come back as media. |
diff | Compares two files and returns a unified diff. |
create ✎ | Writes new files, or appends to them. Asks before replacing an existing file, unless overwrite: true. |
edit ✎ | Replaces exact text in files. All edits to a file apply, or none do. dryRun shows the diff first. |
patch ✎ | Applies a unified diff to a file. All hunks apply, or none do. |
replace_text ✎ | Finds and replaces text or a regex across many files. dryRun shows what would change. |
move ✎ | Moves, renames, or copies files and folders. Asks before overwriting, unless a copy passes overwrite: true. |
delete ✎ | Deletes files and folders. Asks before deleting a non-empty folder. |
✎ changes files. --read-only removes these tools.
Search and listing tools skip hidden files, .gitignored files, and folders
like node_modules, dist, and .git unless the AI asks for them.
Most people only need the folder argument. These options cover the common cases:
| Option | What it does |
|---|---|
--read-only | Removes every tool that changes files. |
--deny '<pattern>' | Blocks more files, for example --deny 'private/**' or --deny '*.sqlite'. |
--allow '<pattern>' | Unblocks one built-in secret pattern, for example --allow '.env.example'. |
--allow-cwd | Also allows the folder the server was started from. |
--max-file-size <n> | Largest file read will load, in bytes. Default 10 MiB. |
--port <n> | Serves over HTTP at http://127.0.0.1:<n>/mcp instead of stdio. |
--print-config | Prints the settings the server would use, then exits. |
Flags go in args after the package name, for example
["-y", "@j0hanz/filesystem-mcp@latest", "--read-only", "/path/to/project"].
The full configuration reference covers every flag and environment variable, the complete secret-file list, limits, HTTP setup with API keys, Docker, and troubleshooting.
| Protection | How it works |
|---|---|
| Folder sandbox | The server resolves every path, including symlinks, and the resolved path must stay inside an allowed folder. |
| Secret files | .env, *.pem, *.key, SSH keys, .npmrc, cloud credentials, and more are blocked and hidden from listings. |
| You stay in charge | The server asks you before the AI deletes a non-empty folder, gets access to a new folder, or writes over a file with create or move. Only create and copies skip that question, when the AI passes overwrite: true. In-place edits (edit, patch, replace_text) do not ask, but dryRun previews them. A client that cannot ask gets a clear error instead. |
| Off-limits folders | Neither the AI nor the client can ever add your home folder itself, system folders, or ~/.ssh, ~/.aws, and similar folders. |
| Safe writes | New content goes to a temporary file that is then renamed into place, so a crash never leaves a half-written file. Writes keep the file's permissions. |
| No regex hangs | RE2 runs in linear time, so no search pattern can freeze the server. |
| HTTP | The server listens only on localhost by default. Any other address requires an API key. |
| Container | The Docker image runs as a non-root user. |
If you find a vulnerability, please report it privately. SECURITY.md explains how.
You can also call Filesystem MCP from your own code: an agent, an editor plugin, a web app, a CI job, or a script. The same rules apply as for an AI app, so your code cannot reach outside the allowed folders or read secret files.
import { Client } from '@modelcontextprotocol/client';
import { StdioClientTransport } from '@modelcontextprotocol/client/stdio';
const dir = '/path/to/project';
const client = new Client(
{ name: 'my-app', version: '1.0.0' },
{ capabilities: { elicitation: { form: {} } }, versionNegotiation: { mode: 'auto' } },
);
client.setRequestHandler('elicitation/create', async () => ({ action: 'decline' }));
await client.connect(
new StdioClientTransport({
command: 'npx',
args: ['-y', '@j0hanz/filesystem-mcp', dir],
cwd: dir,
}),
);
const result = await client.callTool({ name: 'search_text', arguments: { searchPattern: 'TODO' } });
const { matches } = (result.structuredContent ?? result._meta) as { matches: unknown[] };
console.log(matches);
await client.close(); // stops the server process; without it the script never exits
The basics:
_meta for tools that write their own text (list,
search_text, edit, ...) and in structuredContent for stat,
create, and list_roots. read is the exception: the file's text is
only in the text block, and _meta holds metadata about it.cwd over stdio, and send absolute paths over HTTP.elicitation capability and
answer them in a handler, or, on the 2026-07-28 protocol, take them as data
(input_required) and answer later.filesystem-mcp://file/{+path}; internal://instructions and the
get-help prompt hold the server's guide for models.The client guide has the details, tested with the
TypeScript and Python SDKs, and examples/ has six runnable
clients:
| Example | What it is |
|---|---|
| fsq | Any tool from your shell, over stdio or HTTP; --json for scripts |
| browser | A local web UI where the server's questions appear in the page |
| tail | tail -f through file subscriptions, locally or on a remote server |
| gatekeeper | A coding agent that shows each change's diff and waits for your y/N |
| hooks | Runs a task through a model whenever the workspace changes |
| python | A TODO report for a workspace, with the Python SDK |
Filesystem MCP runs entirely on your machine. This policy covers the npm
package, the Docker image, and the .mcpb desktop extension.
Bug reports, ideas, and pull requests are welcome. Start with CONTRIBUTING.md: it covers setup, running the server from source, and the checks a pull request needs.
If Filesystem MCP is useful to you, a star on GitHub helps other people find it.
Reverse engineer anything from your terminal or agent with one CLI and MCP server.
MOmorluto/rea111k104,453 new stars in the last 7 days
Secure file operations with configurable access controls
MOmodelcontextprotocol/servers91k182 new stars in the last 7 days
Live markets, conflicts, country risk, chokepoints, energy, and China decision signals. 93 tools.
KOkoala73/worldmonitor88k525 new stars in the last 7 days
AI-powered reverse engineering assistant that bridges IDA Pro with language models through MCP.
MRmrexodia/ida-pro-mcp13k192 new stars in the last 7 days
HexStrike AI MCP Agents is an advanced MCP server that lets AI agents (Claude, GPT, Copilot, etc.) autonomously run 150+ cybersecurity tools for automated pentesting, vulnerability discovery, bug bounty automation, and security research. Seamlessly bridge LLMs with real-world offensive security capabilities.
0X0x4m4/hexstrike-ai13k229 new stars in the last 7 days
200+ reverse-engineering tools for Ghidra, as a GUI plugin or headless server.
BEbethington/ghidra-mcp5.5k1,123 new stars in the last 7 days