关于 filesystem-context
filesystem-context 是本机运行的文件系统 MCP 服务,让 AI 助手在指定文件夹内读取、搜索、比较和修改文件。它通过目录沙箱、敏感文件屏蔽和可选只读模式限制访问。
主要功能
- 01限定授权目录的文件访问
- 02文件名与内容搜索
- 03按行读取和文件比较
- 04精确编辑、补丁与批量替换
- 05敏感文件默认屏蔽
- 06只读模式及写入确认
适用场景
- 01在代码库中搜索 TODO 和正则内容
- 02查看文件差异并预览修改
- 03安全地整理项目文件
MCP 相关
它是 MCP 服务,向 MCP 客户端提供 14 个文件操作工具。支持 stdio 和 Streamable HTTP 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Filesystem MCP
让你的 AI 助手安全地处理文件。
读取、搜索、编辑和修补你选择的文件夹中的文件。
机密文件会保持隐藏,有风险的更改则会等待你的确认。
这是什么?
模型上下文协议(MCP)是 Claude、GitHub Copilot in VS Code 和 Cursor 等 AI 应用连接工具的方式。 Filesystem MCP 是一个 MCP 服务:它是在你的计算机上运行的小程序,为 AI 提供 14 个用于处理文件的工具。你可以选择它能访问哪些文件夹,其他所有位置都无法访问。
连接后,你可以提出以下请求:
- “找出此仓库中的所有 TODO,并按文件分组。”
- “将所有
.ts文件中的getUser重命名为fetchUser。先给我看差异。” - “
config.dev.json和config.prod.json之间有哪些更改?” - “读取
server.log的最后 50 行并解释错误。” - “将旧截图移到
archive/2025/。”
为什么选择 Filesystem MCP?
- 默认安全。AI 只能使用你允许的文件夹,并且会阻止访问
.env文件、私钥和云凭据。AI 删除非空文件夹、打开未经你允许的文件夹,或使用create或move覆盖文件前,服务会先征求你的同意。只有create和复制操作可以通过传入overwrite: true跳过确认。使用edit、patch和replace_text所做的编辑会直接应用,但你可以先通过dryRun查看差异。如果你希望 AI 绝不修改任何内容,--read-only会移除所有写入工具。 - 专为代码搜索和编辑而设计。AI 可以像使用
grep一样搜索文件内容,并使用不会卡住的正则表达式引擎(RE2);默认情况下,服务会跳过.gitignore忽略的文件,以及node_modules等文件夹。编辑采用精确匹配替换,文本不匹配时会返回错误;你也可以先预览差异。 - 节省 AI 的上下文。AI 可以在一次调用中读取多个文件,也可以只读取所需的行;读取前还可以检查文件大小和令牌估算值。
- 兼容任何 MCP 客户端,可通过 stdio 或 HTTP 运行,支持 macOS、Linux 和 Windows。你可以通过 npx、Docker 或一键安装的 Claude Desktop 扩展来安装,也可以基于它构建自己的客户端。
- 注重隐私。它在你的计算机上运行,不收集遥测数据,也不会发起网络请求。
与参考服务相比
以下是本服务与官方
@modelcontextprotocol/server-filesystem
的区别,依据其 2026-10-11 的 README 核对:
| 功能 | Filesystem MCP | 参考服务 |
|---|---|---|
| 搜索文件内容 | search_text:字面文本或 RE2 正则表达式 | 无;search_files 仅匹配名称 |
| 敏感文件 | 默认阻止访问 .env、密钥和凭据 | 不阻止 |
| 覆盖文件 | create 会先征求你的同意(除非使用 overwrite: true) | write_file 会直接覆盖,不征求同意 |
| 删除文件 | delete;删除非空文件夹前会征求同意 | 无 |
.gitignore | 列出和搜索工具会遵循其规则 | 不支持 |
| 只读模式 | --read-only 会移除所有写入工具 | 仅支持 Docker ro 挂载 |
| 应用统一差异 | patch | 无 |
| 比较两个文件 | diff | 无 |
| 跨多个文件替换 | 在文件夹或 glob 范围内使用 replace_text | 无 |
| 监视文件 | 订阅文件并接收变更通知 | 无 |
| 传输方式 | stdio,或使用 --port 的 Streamable HTTP | stdio |
快速开始
说明
你需要 Node.js 24 或更高版本。使用
node --version查看。
- 将服务添加到你的 AI 应用。请从下方选择对应的应用。
- 将
/path/to/project替换为 AI 可访问的文件夹。你可以列出多个文件夹。 - 重启应用并询问:“你可以访问哪些文件夹?”
提示
VS Code 目前会将你打开的文件夹共享给服务,因此一键安装到 VS Code 无需指定路径。在其他应用中或通过 HTTP 使用时,请将文件夹填入
args。如果 AI 提示没有可访问的文件夹,这样就能解决。
VS Code
点击上方的 Install in VS Code,或将以下内容添加到 .vscode/mcp.json:
{
"servers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@j0hanz/filesystem-mcp@latest", "/path/to/project"]
}
}
}
也可以在终端中运行:
code --add-mcp '{"name":"filesystem","command":"npx","args":["-y","@j0hanz/filesystem-mcp@latest","/path/to/project"]}'
Cursor
点击上方的 Install in Cursor,然后将文件夹添加到 args。或者将以下内容添加到项目中的 .cursor/mcp.json,或添加到 ~/.cursor/mcp.json 以应用于所有项目:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@j0hanz/filesystem-mcp@latest", "/path/to/project"]
}
}
}
Claude Desktop
如需一键安装,请下载
filesystem-mcp.mcpb,
用 Claude Desktop 打开,并选择允许访问的文件夹。Claude Desktop 内置的 Node.js 会运行它。扩展的设置还允许你启用只读模式并屏蔽更多文件。
如需手动设置,请将以下内容添加到 claude_desktop_config.json
(Settings → Developer → Edit Config):
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@j0hanz/filesystem-mcp@latest", "/path/to/project"]
}
}
}
Claude Code
claude mcp add filesystem -- npx -y @j0hanz/filesystem-mcp@latest /path/to/project
或者安装插件,它会将服务指向当前项目:
/plugin marketplace add j0hanz/j0hanz-marketplace
/plugin install filesystem-mcp@j0hanz-marketplace
Visual Studio
将以下内容添加到解决方案文件夹中的 .vs\mcp.json,或添加到 %USERPROFILE%\.mcp.json 以应用于所有解决方案:
{
"servers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@j0hanz/filesystem-mcp@latest", "C:/path/to/project"]
}
}
}
GitHub Copilot CLI 和 Antigravity CLI(插件)
filesystem-mcp 插件 会将服务设置为用于当前项目:
| 客户端 | 安装 |
|---|---|
| Copilot CLI | copilot plugin marketplace add j0hanz/j0hanz-marketplace,然后运行 copilot plugin install filesystem-mcp@j0hanz-marketplace |
| Antigravity CLI | git clone https://github.com/j0hanz/j0hanz-marketplace,然后运行 agy plugin install ./j0hanz-marketplace/plugins/filesystem-mcp |
Docker
容器只能访问你挂载的文件夹。此配置通过 :ro 挂载和 --read-only 标志双重禁止写入。
{
"mcpServers": {
"filesystem": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/path/to/project:/workspace:ro",
"ghcr.io/j0hanz/filesystem-mcp:latest",
"--read-only",
"/workspace"
]
}
}
}
移除 :ro 和 --read-only,即可允许 AI 进行更改。VS Code 和 Visual Studio 使用 "servers",而不是 "mcpServers"。更多信息请参阅
在 Docker 中运行。
其他 MCP 客户端
Windsurf、Cline 和大多数其他客户端使用与上文 Claude Desktop 相同的 mcpServers JSON 配置。在任何客户端中,服务配置如下:
- 命令:
npx - args:
-y、@j0hanz/filesystem-mcp@latest,然后是一个或多个文件夹
你也可以全局安装,并运行 filesystem-mcp /path/to/project:
npm install -g @j0hanz/filesystem-mcp
| 工具 | 功能 |
|---|---|
list_roots | 显示服务可以使用的文件夹。 |
list | 以树形结构列出文件夹内容,类似于 ls 或 tree。 |
find_files | 按名称或 glob 查找文件,例如 **/*.test.ts。 |
search_text | 在文件中搜索文本或正则表达式,类似于 grep,并可选择显示上下文行。 |
stat | 获取文件大小、日期、类型、权限和令牌估算值,不读取文件内容。 |
read | 读取整个文本文件,或按行、文件头或文件尾读取。图片和音频会作为媒体返回;其他文件则以 binary 返回。 |
diff | 比较两个文件并返回统一 diff。 |
create ✎ | 写入新文件、追加内容或创建空文件夹。替换文件前会先询问,除非设置 overwrite: true。 |
edit ✎ | 替换文件中的指定文本。对同一文件的所有编辑要么全部应用,要么全部不应用。dryRun 会先显示 diff。 |
patch ✎ | 将统一 diff 应用到文件。所有区块要么全部应用,要么全部不应用。 |
replace_text ✎ | 在多个文件中查找并替换文本或正则表达式。dryRun 会显示将要进行的更改。 |
move ✎ | 移动、重命名或复制文件和文件夹。覆盖前会先询问,除非复制操作设置了 overwrite: true。 |
delete ✎ | 删除文件和文件夹。删除非空文件夹前会先询问。 |
undo ✎ | 在服务运行期间,按撤销 ID 或最近的 N 次调用还原之前的更改。跳过已更改的文件。 |
✎ 会更改文件。--read-only 会移除这些工具。
除非 AI 明确要求,否则搜索和列表工具会跳过隐藏文件、被 .gitignore 忽略的文件,以及
node_modules、dist 和 .git 等文件夹。
配置
大多数人只需要提供文件夹参数。以下选项涵盖常见 场景:
| 选项 | 功能 |
|---|---|
--read-only | 移除所有会更改文件的工具。 |
--deny '<pattern>' | 屏蔽更多文件,例如 --deny 'private/**' 或 --deny '*.sqlite'。 |
--allow '<pattern>' | 取消屏蔽一个内置的机密文件模式,例如 --allow '.env.example'。 |
--allow-cwd | 也允许使用启动服务时所在的文件夹。 |
--max-file-size <n> | read 可读取的最大文件大小,以字节为单位。默认值为 10 MiB。 |
--port <n> | 通过 HTTP 在 http://127.0.0.1:<n>/mcp 提供服务,而非使用 stdio。 |
--print-config | 打印服务将使用的设置,然后退出。 |
标志放在包名称之后的 args 中,例如
["-y", "@j0hanz/filesystem-mcp@latest", "--read-only", "/path/to/project"]。
完整配置参考涵盖所有标志 和环境变量、完整的机密文件列表、限制、使用 API 密钥的 HTTP 设置、 Docker 和故障排除。
安全
| 保护措施 | 工作原理 |
|---|---|
| 文件夹沙箱 | 服务端会解析所有路径,包括符号链接;解析后的路径必须位于允许的文件夹内。 |
| 敏感文件 | .env、*.pem、*.key、SSH 密钥、.npmrc、云凭据以及更多文件都会被禁止访问,并从列表中隐藏。 |
| 由你掌控 | 当 AI 要删除非空文件夹、访问新文件夹或使用 create 或 move 覆盖文件时,服务端会先征求你的同意。只有当 AI 传入 overwrite: true 时,create 和复制操作才会跳过确认。原地编辑(edit、patch、replace_text)无需确认,但 dryRun 会预览这些操作。无法征求确认的客户端会收到错误。 |
| 禁止访问的文件夹 | AI 和客户端都无法添加你的主文件夹本身、系统文件夹,或 ~/.ssh、~/.aws 等类似文件夹。 |
| 安全写入 | 新内容会先写入临时文件,然后再重命名到目标位置,因此即使发生崩溃,也不会留下写了一半的文件。写入时会保留文件权限。 |
| 不会因正则表达式卡住 | RE2 的运行时间呈线性,因此任何搜索模式都不会让服务端卡住。 |
| HTTP | 服务端默认仅监听 localhost。使用任何其他地址都需要 API 密钥。 |
| 容器 | Docker 镜像以非 root 用户运行。 |
如果你发现安全漏洞,请私下报告。 SECURITY.md 说明了具体方式。
构建自己的客户端
你也可以在自己的代码中调用 Filesystem MCP:例如 Agent、编辑器插件、Web 应用、CI 任务或脚本。规则与 AI 应用相同,因此你的代码无法访问允许文件夹之外的内容,也无法读取机密文件。
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
基本信息:
- 数据所在位置。 文本块是为模型编写的。对于会自行编写文本的工具(
list、search_text、edit等),相同的数据以 JSON 格式存放在_meta中;对于stat、create和list_roots,则存放在structuredContent中。read是例外:文件文本仅在文本块中,_meta中存放的是相关元数据。 - 路径。 如果服务器的工作目录位于某个根目录下,相对路径将相对于该工作目录解析;否则,相对路径将相对于根目录解析。如果有多个根目录,路径必须仅存在于其中一个根目录下。绝对路径不会产生歧义。搜索结果以相对于根目录的路径显示,因此可以直接传回。名称与磁盘上的名称仅在 Unicode 形式(NFC 或 NFD)或空格字符(U+00A0、U+202F)上不同,也能找到对应条目。
- 确认。 覆盖文件、递归删除以及根目录之外的路径都需要向用户确认。声明
elicitation能力并在处理程序中回答;或者,对于 2026-07-28 协议,将它们作为数据(input_required)接收,稍后再回答。 - 协议版本。 服务器支持 2025 协议和 2026-07-28 协议,可通过 stdio 和 Streamable HTTP 通信。通过 HTTP 通信时,2025 年协议的客户端不会收到确认请求或更改通知。
- 资源。 可通过
filesystem-mcp://file/{+path}读取和订阅任何文件;internal://instructions和get-help提示词包含面向模型的服务器指南。
客户端指南中有详细说明,并使用 TypeScript 和 Python SDK 进行了测试;examples/ 中有六个可运行的客户端:
| 示例 | 说明 |
|---|---|
| fsq | 通过 stdio 或 HTTP,从 shell 调用任意工具;脚本可使用 --json |
| browser | 本地 Web UI,服务器的问题会显示在页面中 |
| tail | 通过文件订阅实现 tail -f,可在本地使用,也可连接远程服务 |
| gatekeeper | 编码 Agent 会显示每项更改的差异,并等待你输入 y/N |
| hooks | 每当工作区发生更改时,通过模型运行一项任务 |
| python | 使用 Python SDK 为工作区生成 TODO 报告 |
隐私政策
Filesystem MCP 完全在你的机器上运行。本政策适用于 npm 包、Docker 镜像和 .mcpb 桌面扩展。
- 数据收集: 无。服务器不进行遥测、分析或崩溃报告,也不会发出任何外部网络请求。
- 使用和存储: 服务器只会在你允许的文件夹内读取和写入文件,且仅在 MCP 客户端调用工具时执行。工具结果只会发送给该客户端,不会发送到其他地方。短期结果缓存和撤销历史记录(保存的文件内容)都存储在内存中,并会在服务器退出时消失。
- 与第三方共享: 服务器不会共享数据。你的 MCP 客户端可能会根据其自身的隐私政策,将工具结果发送给其模型提供商。
- 保留: 进程退出后,服务器不会保留任何内容。诊断日志会写入你机器上的 stderr;你的 MCP 客户端可能会将日志保存到自己的日志文件中。
- 联系方式: 在 https://github.com/j0hanz/filesystem-mcp/issues 提交问题,或通过 GitHub Security Advisories 私下报告安全问题。
参与贡献
欢迎提交 Bug 报告、想法和拉取请求。请先阅读 CONTRIBUTING.md。其中介绍了环境配置、从源代码运行服务,以及拉取请求需要通过的检查。
如果 Filesystem MCP 对你有帮助,请在 GitHub 上点个星,帮助更多人发现它。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。