@modelcontextprotocol/server-filesystem passing
npx -y @modelcontextprotocol/server-filesystem <allowed-dir>Clean install pass
Fresh npm/uv cache, start over stdio (or connect for remote URLs), initialize + tools/list, on GitHub-hosted Linux, macOS and Windows runners.
| Host | Status | Node | Server | Tools | Time | Result |
|---|---|---|---|---|---|---|
| local macOS (local probe) | pass | v22.23.2 | secure-filesystem-server 0.2.0 | 14 | 7.0 s | 14 tools in 7.0 s |
Client compatibility pass
Cursor and VS Code embed the official TypeScript SDK client; their chips are inferred from the TypeScript SDK rows (no GUI automation). Claude Code is verified with a claude mcp list health check — a real handshake over its own transport.
| Client | local macOS |
|---|---|
| TypeScript SDK client (current) v1.30.0 embedded by Cursor, VS Code, Claude Desktop, Windsurf | pass 14 tools via ts-sdk 1.30.0 |
| TypeScript SDK client (previous minor) v1.29.0 embedded by Cursor, VS Code | pass 14 tools via ts-sdk 1.29.0 |
| Python SDK client (current) v2.1.1 | pass 14 tools via mcp 2.1.1 |
| Python SDK client (previous minor) v2.0.1 | pass 14 tools via mcp 2.0.1 |
| Claude Code (`claude mcp list`) v2.1.196 embedded by Claude Code | pass Claude Code 2.1.196 connected (14 tools in the catalog) |
OAuth conformance n/a
Package specs run over stdio; there is no HTTP endpoint to authorize.
Tool catalog pass
14 tools · hash 48dc3bea5068887a · captured 6 d ago · secure-filesystem-server 0.2.0
| Tool | Description | Arguments |
|---|---|---|
create_directory | Create a new directory or ensure a directory exists. Can create multiple nested directories in one operation. If the directory already exist… | 1 (1 required) |
directory_tree | Get a recursive tree view of files and directories as a JSON structure. Each entry includes 'name', 'type' (file/directory), and 'children' … | 2 (1 required) |
edit_file | Make line-based edits to a text file. Each edit replaces exact line sequences with new content. Returns a git-style diff showing the changes… | 3 (2 required) |
get_file_info | Retrieve detailed metadata about a file or directory. Returns comprehensive information including size, creation time, last modified time, p… | 1 (1 required) |
list_allowed_directories | Returns the list of directories that this server is allowed to access. Subdirectories within these allowed directories are also accessible. … | 0 |
list_directory | Get a detailed listing of all files and directories in a specified path. Results clearly distinguish between files and directories with [FIL… | 1 (1 required) |
list_directory_with_sizes | Get a detailed listing of all files and directories in a specified path, including sizes. Results clearly distinguish between files and dire… | 2 (1 required) |
move_file | Move or rename files and directories. Can move files between directories and rename them in a single operation. If the destination exists, t… | 2 (2 required) |
read_file | Read the complete contents of a file as text. DEPRECATED: Use read_text_file instead. | 3 (1 required) |
read_media_file | Read a file and return it as a base64-encoded content block with its MIME type. Image and audio files are returned as image/audio content; a… | 1 (1 required) |
read_multiple_files | Read the contents of multiple files simultaneously. This is more efficient than reading files one by one when you need to analyze or compare… | 1 (1 required) |
read_text_file | Read the complete contents of a file from the file system as text. Handles various text encodings and provides detailed error messages if th… | 3 (1 required) |
search_files | Recursively search for files and directories matching a pattern. The patterns should be glob-style patterns that match paths relative to the… | 3 (2 required) |
write_file | Create a new file or completely overwrite an existing file with new content. Use with caution as it will overwrite existing files without wa… | 2 (2 required) |
Error ergonomics pass 54/100
10 malformed inputs per tool (missing/mistyped/null/out-of-range/unknown fields …). Each error response is graded on code · cause · fix · retryable; 24 distinct error shapes graded by the judge ($0.0000), cached.
| Tool | Score | Errors | Accepted | Cases |
|---|---|---|---|---|
create_directory | 53/100 | 9 | 1 | 10 |
directory_tree | 53/100 | 9 | 1 | 10 |
edit_file | 48/100 | 10 | 0 | 10 |
get_file_info | 54/100 | 7 | 3 | 10 |
list_allowed_directories | 60/100 | 5 | 5 | 10 |
list_directory | 53/100 | 9 | 1 | 10 |
list_directory_with_sizes | 58/100 | 9 | 1 | 10 |
move_file | 45/100 | 10 | 0 | 10 |
read_file | 60/100 | 10 | 0 | 10 |
read_media_file | 57/100 | 10 | 0 | 10 |
read_multiple_files | 64/100 | 7 | 3 | 10 |
read_text_file | 60/100 | 10 | 0 | 10 |
search_files | 50/100 | 9 | 1 | 10 |
write_file | 44/100 | 9 | 1 | 10 |
Weakest errors
| Tool · case | Grade | Response |
|---|---|---|
read_file`path` contains NUL and control characters | ✗ code · ✓ cause · ✗ fix · ✗ retryable llm | Access denied - path outside allowed directories: /private/tmp/claude-501/-Users-admin-Library-Application-Support-Claude-scratch-workspaces-bd294301-74cd-4252-a662-5bde89535ede-775db1f4-0139-439d-a811-1a8f63b77023-scratch-2026-09-02-fed499/4f7244e4-d740-457c-8686-a5dd02bf0943/scratchpad/fs-root/ … |
write_file`path` is an empty string | ✓ code · ✗ cause · ✗ fix · ✗ retryable heuristic | EISDIR: illegal operation on a directory, rename '/private/tmp/claude-501/-Users-admin-Library-Application-Support-Claude-scratch-workspaces-bd294301-74cd-4252-a662-5bde89535ede-775db1f4-0139-439d-a811-1a8f63b77023-scratch-2026-09-02-fed499/4f7244e4-d740-457c-8686-a5dd02bf0943/scratchpad/fs-root.851… |
move_file`destination` is an empty string | ✓ code · ✗ cause · ✗ fix · ✗ retryable heuristic | Destination already exists: /private/tmp/claude-501/-Users-admin-Library-Application-Support-Claude-scratch-workspaces-bd294301-74cd-4252-a662-5bde89535ede-775db1f4-0139-439d-a811-1a8f63b77023-scratch-2026-09-02-fed499/4f7244e4-d740-457c-8686-a5dd02bf0943/scratchpad/fs-root |
read_file`path` is an empty string | ✗ code · ✓ cause · ✓ fix · ✗ retryable llm | Cannot specify both head and tail parameters simultaneously |
read_file`path` is a 20000-character string | ✓ code · ✓ cause · ✗ fix · ✗ retryable llm | ENAMETOOLONG: name too long, realpath '/private/tmp/claude-501/-Users-admin-Library-Application-Support-Claude-scratch-workspaces-bd294301-74cd-4252-a662-5bde89535ede-775db1f4-0139-439d-a811-1a8f63b77023-scratch-2026-09-02-fed499/4f7244e4-d740-457c-8686-a5dd02bf0943/scratchpad/fs-root/xxxxxxxxxxxxxx… |
read_media_filerequired field `path` is null | ✓ code · ✓ cause · ✗ fix · ✗ retryable heuristic | MCP error -32602: Input validation error: Invalid arguments for tool read_media_file: Invalid input: expected string, received null at path |
read_media_file`path` is an empty string | ✓ code · ✓ cause · ✗ fix · ✗ retryable llm | EISDIR: illegal operation on a directory, read |
read_media_filean unexpected extra property | ✓ code · ✓ cause · ✗ fix · ✗ retryable llm | ENOENT: no such file or directory, open '/private/tmp/claude-501/-Users-admin-Library-Application-Support-Claude-scratch-workspaces-bd294301-74cd-4252-a662-5bde89535ede-775db1f4-0139-439d-a811-1a8f63b77023-scratch-2026-09-02-fed499/4f7244e4-d740-457c-8686-a5dd02bf0943/scratchpad/fs-root/example' |
Protocol conformance n/a
Not applicable to stdio package specs.
Badge
[](https://agentwares-agentcheck.vercel.app/mcpcheck/demo/filesystem)
Machine-readable: report.json · trust.json