Filesystem MCP

July 17, 2026 · View on GitHub

Filesystem MCP

filesystem-mcp — Sylphx Mark banner

Your agent touched the repo. Did it stay in the project?

Secure, token-optimized filesystem operations for AI agents — batch reads, surgical edits, and project-root confinement without shell spawn overhead.

npm version Docker Pulls License TypeScript

Batch operations · Project root safety · Zod validation · 13 MCP tools · Docker-ready

⭐ Star this repo if agents should read and edit your codebase safely — not spawn shells per file. · Quick start · See it work · Why not shell commands? · Roadmap

Filesystem MCP Server

The problem

Agents need filesystem access to read code, apply edits, and search across a repo. The default path is shell commands — one spawn per operation, no batching, stderr parsing, and paths that can wander outside the project.

That costs tokens, adds latency, and turns every file touch into a trust exercise.

Filesystem MCP is built for the moment your agent needs fast, bounded, batch-friendly file operations — confined to the project root.

Why not shell commands?

Shell commands per fileFilesystem MCP
One operation per spawnBatch 10+ files in one MCP call
Full shell accessConfined to server cwd at launch
stderr parsingPer-item success/failure in structured JSON
High token round tripsFewer host↔server calls
Path traversal riskRelative paths only; traversal blocked
No schemaZod-validated arguments on every tool

Full benchmark contract: docs/benchmark.md.

See it work

Configure once. Read many files in one call.

claude mcp add filesystem -- npx @sylphx/filesystem-mcp
{
  "paths": ["src/index.ts", "package.json", "README.md"]
}

read_content returns per-file results in one response:

{
  "results": [
    { "path": "src/index.ts", "content": "...", "success": true },
    { "path": "package.json", "content": "...", "success": true },
    { "path": "README.md", "content": "...", "success": true }
  ]
}

Important: launch the MCP server with cwd set to your project root. All paths are relative to that directory.

Why agents use it

NeedWhat you get
Read multiple filesread_content — batch paths, optional line ranges
Write or appendwrite_content — multiple files per call
Surgical editsapply_diff, replace_content — diff output and per-file status
Search the treesearch_files — regex with context
Refactor across filesreplace_content — multi-file search & replace
Explore structurelist_files — recursive listing with optional stats
Move/copy/deletemove_items, copy_items, delete_items
Permissionschmod_items, chown_items
Inspect metadatastat_items, create_directories

Quick Start

Claude Code

claude mcp add filesystem -- npx @sylphx/filesystem-mcp

Run from your project directory so cwd is the repo root.

Claude Desktop / any MCP host

{
  "mcpServers": {
    "filesystem-mcp": {
      "command": "npx",
      "args": ["@sylphx/filesystem-mcp"]
    }
  }
}

Set the host's working directory to your project root.

Docker

{
  "mcpServers": {
    "filesystem-mcp": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-v", "/path/to/your/project:/app",
        "sylphx/filesystem-mcp:latest"
      ]
    }
  }
}

Local development

git clone https://github.com/SylphxAI/filesystem-mcp.git
cd filesystem-mcp
bun install
bun run build
bun run test

MCP Tool Surface

ToolUse it when the agent needs to...
read_contentRead one or more files (optional line ranges)
write_contentWrite or append to files
apply_diffApply structured diffs across files
search_filesRegex search with context lines
replace_contentMulti-file search and replace
list_filesList a directory tree (optional stats)
stat_itemsGet detailed file/directory metadata
create_directoriesCreate directories (with parents)
delete_itemsRemove files or directories
move_itemsMove or rename items
copy_itemsCopy files or directories
chmod_itemsChange POSIX permissions
chown_itemsChange ownership

Release proof

Claims are backed by CI benchmark:release-gate, safety fixture corpus, and the shipped-path matrix (Rust-default primary tools).

bun run benchmark:release-gate

Artifact: benchmark-artifacts/filesystem_release_gate.json — must report status: passed before release.

Performance benchmarks

Reproduce local throughput on the shipped Rust CLI path:

bunx vitest bench __tests__/benchmarks/throughput.bench.ts --run

See docs/benchmark.md for scenarios, design goals, and how to interpret results.

Security model

  • All operations confined to the server cwd at launch.
  • Absolute paths rejected; path traversal blocked.
  • Zod schemas validate every tool argument.
  • Batch tools return per-item status — one failure does not hide the rest.

Documentation

TopicLink
Docs sitesylphxai.github.io/filesystem-mcp
Introductiondocs/guide/introduction.md
Benchmarksdocs/benchmark.md

Development

bun run validate    # lint + typecheck + test
bun run docs:build  # VitePress + API docs
bun run benchmark   # vitest bench

Support

Help this reach more builders

If shell-per-file agent workflows have burned your tokens or your trust in path safety, this project is for you.

⭐ Star the repo — it helps more agent builders find secure, batch-friendly filesystem access.

Discovery (in progress)

ChannelStatus
Glama MCP directoryListed — claim server for full discoverability
Official MCP RegistryNot listed yet
mcp.so submitNot listed yet — directory submission
mcpservers.org submitNot listed yet — free web-form submission

Know another MCP directory? Open an issue with the link.

License

MIT © Sylphx