
Node.js server implementing Model Context Protocol (MCP) for filesystem operations.
Node.js server implementing Model Context Protocol (MCP) for filesystem operations.
·
Node.js server implementing Model Context Protocol (MCP) for filesystem operations.
Published on npm as @modelcontextprotocol/server-filesystem.
server/discover, no handshake) and 2025-era clients (initialize)The server may touch only its allowed directories. Pass them on the command line. A 2025-era client that supports Roots can also replace them at runtime, but Roots is deprecated as of protocol version 2026-07-28 and a 2026-07-28 connection cannot use it.
Specify Allowed directories when starting the server:
mcp-server-filesystem /path/to/dir1 /path/to/dir2This is the only method that works on every protocol version, so it is the one to use.
A client that connects with a 2025-era protocol version (the initialize handshake) and supports Roots can dynamically update the Allowed directories.
Roots notified by Client to Server, completely replace any server-side Allowed directories when provided.
Important: If server starts without command-line arguments AND a 2025-era client doesn't support roots protocol, the server fails at initialization: it logs the reason to stderr, closes the connection and exits with status 1. A client that supports roots but provides none (or none that are valid) keeps the connection, with no allowed directories until it sends roots/list_changed with valid roots.
The 2026-07-28 protocol has no initialize handshake and no server-to-client roots/list request, so a 2026-07-28 client's roots are never asked for: the command-line directories are the whole allow-list. A server started with none answers every tool call on such a connection with an error saying so.
The server's directory access control follows this flow:
Server Startup
Client Connection
server/discover (or any request carrying the per-request _meta envelope): the server uses the command-line directories, and steps 3 and 4 do not applyinitialize with its capabilities, and the server checks whether it supports roots (capabilities.roots)Roots Protocol Handling (2025-era clients that support roots)
roots/listnotifications/roots/list_changedFallback Behavior (2025-era clients that don't support roots)
Access Control
list_allowed_directories tool to see current directoriesNote: The server will only allow operations within directories specified either via args or, for a 2025-era client, via Roots.
read_text_file
path (string)head (number, optional): First N linestail (number, optional): Last N lineshead and tail simultaneouslyread_media_file
path (string)image/audio content; any other file type is returned as
an embedded resource (a valid MCP content block for arbitrary binary data)read_multiple_files
paths (string[])write_file
path (string): File locationcontent (string): File contentedit_file writes the same way). The
overwrite is not crash-atomic: a crash mid-write can leave the file partly
written. A read-only file is refused rather than replacededit_file
path (string): File to editedits (array): List of edit operations
oldText (string): Text to search for (can be substring)newText (string): Text to replace withdryRun (boolean): Preview changes without applying (default: false)create_directory
path (string)list_directory
path (string)list_directory_with_sizes
path (string): Directory path to listsortBy (string, optional): Sort entries by "name" or "size" (default: "name")move_file
source (string)destination (string)search_files
path (string): Starting directorypattern (string): Search patternexcludePatterns (string[]): Exclude any patterns.directory_tree
path (string): Starting directoryexcludePatterns (string[]): Exclude any patterns. Glob formats are supported.name (string): File/directory nametype ('file'|'directory'): Entry typechildren (array): Present only for directories
get_file_info
path (string)list_allowed_directories
This server sets MCP ToolAnnotations on each tool so clients can:
openWorldHint: false).The mapping for filesystem tools is:
| Tool | readOnlyHint | idempotentHint | destructiveHint | Notes |
|---|---|---|---|---|
read_text_file | true | – | – | Pure read |
read_media_file | true | – | – | Pure read |
read_multiple_files | true | – | – | Pure read |
list_directory | true | – | – | Pure read |
list_directory_with_sizes | true | – | – | Pure read |
directory_tree | true | – | – | Pure read |
search_files | true | – | – | Pure read |
get_file_info | true | – | – | Pure read |
list_allowed_directories | true | – | – | Pure read |
create_directory | false | true | false | Re‑creating the same dir is a no‑op |
write_file | false | true | true | Overwrites existing files |
edit_file | false | false | true | Re‑applying edits can fail or double‑apply |
move_file | false | false | true | Deletes source file |
Note:
idempotentHintanddestructiveHintare meaningful only whenreadOnlyHintisfalse, as defined by the MCP spec. Every tool also setsopenWorldHint: false— this server only accesses the local filesystem within its allowed directories, never an open or external world.
Node.js 24 or later, when the server runs through npx or from source.
Add this to your claude_desktop_config.json:
Note: you can provide sandboxed directories to the server by mounting them to /projects. Adding the ro flag will make the directory readonly by the server.
Note: all directories must be mounted to /projects by default.
{
"mcpServers": {
"filesystem": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--mount", "type=bind,src=/Users/username/Desktop,dst=/projects/Desktop",
"--mount", "type=bind,src=/path/to/other/allowed/dir,dst=/projects/other/allowed/dir,ro",
"--mount", "type=bind,src=/path/to/file.txt,dst=/projects/path/to/file.txt",
"mcp/filesystem",
"/projects"
]
}
}
}{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/username/Desktop",
"/path/to/other/allowed/dir"
]
}
}
}On Windows, use cmd /c to launch npx:
{
"mcpServers": {
"filesystem": {
"command": "cmd",
"args": [
"/c",
"npx",
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/username/Desktop",
"/path/to/other/allowed/dir"
]
}
}
}For quick installation, click the installation buttons below...
For manual installation, you can configure the MCP server using one of these methods:
Method 1: User Configuration (Recommended)
Add the configuration to your user-level MCP configuration file. Open the Command Palette (Ctrl + Shift + P) and run MCP: Open User Configuration. This will open your user mcp.json file where you can add the server configuration.
Method 2: Workspace Configuration
Alternatively, you can add the configuration to a file called .vscode/mcp.json in your workspace. This will allow you to share the configuration with others.
For more details about MCP configuration in VS Code, see the official VS Code MCP documentation.
You can provide sandboxed directories to the server by mounting them to /projects. Adding the ro flag will make the directory readonly by the server.
Note: all directories must be mounted to /projects by default.
{
"servers": {
"filesystem": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--mount", "type=bind,src=${workspaceFolder},dst=/projects/workspace",
"mcp/filesystem",
"/projects"
]
}
}
}{
"servers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"${workspaceFolder}"
]
}
}
}On Windows, use:
{
"servers": {
"filesystem": {
"command": "cmd",
"args": [
"/c",
"npx",
"-y",
"@modelcontextprotocol/server-filesystem",
"${workspaceFolder}"
]
}
}
}Docker build:
docker build -t mcp/filesystem -f src/filesystem/Dockerfile .This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.
Pick your client and paste the snippet. Each one is the same server, written the way that client expects it.
claude mcp add filesystem -- docker run -i --rm --mount type=bind,src=/Users/username/Desktop,dst=/projects/Desktop --mount type=bind,src=/path/to/other/allowed/dir,dst=/projects/other/allowed/dir,ro --mount type=bind,src=/path/to/file.txt,dst=/projects/path/to/file.txt mcp/filesystem /projects{
"mcpServers": {
"filesystem": {
"args": [
"run",
"-i",
"--rm",
"--mount",
"type=bind,src=/Users/username/Desktop,dst=/projects/Desktop",
"--mount",
"type=bind,src=/path/to/other/allowed/dir,dst=/projects/other/allowed/dir,ro",
"--mount",
"type=bind,src=/path/to/file.txt,dst=/projects/path/to/file.txt",
"mcp/filesystem",
"/projects"
],
"command": "docker"
}
}
}code --add-mcp '{"name":"filesystem","args":["run","-i","--rm","--mount","type=bind,src=/Users/username/Desktop,dst=/projects/Desktop","--mount","type=bind,src=/path/to/other/allowed/dir,dst=/projects/other/allowed/dir,ro","--mount","type=bind,src=/path/to/file.txt,dst=/projects/path/to/file.txt","mcp/filesystem","/projects"],"command":"docker"}'[mcp_servers.filesystem]
command = "docker"
args = ["run", "-i", "--rm", "--mount", "type=bind,src=/Users/username/Desktop,dst=/projects/Desktop", "--mount", "type=bind,src=/path/to/other/allowed/dir,dst=/projects/other/allowed/dir,ro", "--mount", "type=bind,src=/path/to/file.txt,dst=/projects/path/to/file.txt", "mcp/filesystem", "/projects"]Runs locally on your device. Your client starts the server itself, so nothing has to be hosted.
Paste this prompt into your agent. It reads this page and does the setup for you.
Read https://aiagentslisting.com/mcp/filesystem-mcp-server to learn what the "Filesystem MCP Server" MCP server does and how to install it. Add it to my coding agent's MCP configuration as documented on that page, then confirm the server connects and list the tools it exposes.Agents can also browse this directory over MCP at https://aiagentslisting.com/api/mcp
This server runs locally, so we can't read its tool list over the web yet.
We could not run this server: it ships no npx package for our sandbox and no public endpoint. The four checks that need a live server are left out, and the grade tops out at B until one exists.
Maintain this server? Claiming proves you own the listing and earns the last 4 points.
Claim this listingPaste this line near the top of your repository's README. The badge always renders the current score.
[](https://aiagentslisting.com/mcp/filesystem-mcp-server)The markitdown-mcp package provides a lightweight STDIO, Streamable HTTP, and SSE MCP server for cal
MCP server that interacts with Obsidian via the Obsidian rest API community plugin
v2.1.0Release notesv2.0.0Release notesv1.0.0Release notes2026.8.31Release 2026.8.31Release notes2026.8.18Release 2026.8.18Release notes2026.7.10Release 2026.7.10Release notes2026.7.4Release 2026.7.4Release notes2026.1.26Release 2026.1.26Release notes2026.1.14Release 2026.1.14Release notes2025.12.18Release 2025.12.18Release notes2025.11.25Release 2025.11.25Release notes2025.9.25Release 2025.9.25Release notes2025.8.4Release 2025.8.4Release notes2025.7.1Release 2025.7.1Release notes2025.4.24Release 2025.4.24Release notes2025.4.6Release 2025.4.6Release notes2025.1.17Release 2025.1.17Release notes2025.1.14Release 2025.1.14Release notestypescript-servers-0.6.2Release notespython-servers-0.6.2Release notesConnect to the AI Agents Listing MCP server at https://aiagentslisting.com/api/mcp using the HTTP transport and complete the sign-in when it asks. Then call the submit_review tool for the listing "filesystem-mcp-server" with a rating from 1 to 5 and a short note on what worked and what did not.No reviews yet
Be the first to share your experience with this tool.
The markitdown-mcp package provides a lightweight STDIO, Streamable HTTP, and SSE MCP server for cal
AI & ML Services
MCP server that interacts with Obsidian via the Obsidian rest API community plugin
Files & Storage
One email a week. New agents, MCP servers and skills, and what is actually getting traction.