This filesystem MCP server demonstrates solid definition quality with well-structured schemas, clear naming conventions, and comprehensive parameter descriptions. All 14 tools follow verb_noun naming patterns (read_file, write_file, delete_file, etc.). Every tool has a description and all parameters are typed with descriptions. However, there are notable gaps: (1) read_file is marked DEPRECATED but still registered alongside read_text_file, creating unnecessary duplication; (2) output schemas are not explicitly documented in the tool definitions; (3) error handling descriptions lack recovery guidance; (4) several tools accept unbounded numeric parameters without min/max constraints. The server excels at parameter clarity with explicit enum constraints (sortBy: ['name','size']), sensible defaults (maxCharacters: 500000, limit: 500, maxDepth: 5), and context-aware descriptions that guide LLM selection (e.g., read_text_file vs read_media_file distinction). Tool composition is excellent, each tool has a single responsibility, and outputs contain chaining IDs (path, source, destination) needed by downstream tools. Security is well-handled: no credentials in parameters, all paths validated against allowedDirectories whitelist, and operation risk levels clearly marked (READ_ONLY, WRITE, REVERSIBLE, DESTRUCTIVE).
Create a new directory at the specified path. Creates parent directories as needed.
Delete a file. Note: This operation is permanent and cannot be undone.
Get a recursive tree view of a directory structure. Returns a tree of entries up to the specified maximum depth.
Edit a file by specifying text to find and replace. Supports multiple edits in a single call. All edits are applied sequentially. Performs an exact match for the oldText.
Get detailed metadata about a file or directory including size, permissions, and timestamps.
List the contents of a directory, returning basic metadata for each entry. Supports pagination with offset and limit parameters.
Deprecated read_file tool still registered alongside read_text_file, creating tool duplication and LLM selection confusion. Per pattern:tool, one tool should do one thing, having two nearly-identical read tools violates composition principle.
Output schemas are not documented in tool definitions. LLMs cannot plan downstream calls or extract return data without knowing structure. read_text_file returns string, read_media_file returns {data: string, mimeType: string}, list_directory returns {entries: Array<{name, type, size?, modified?}>, ...}, these must be explicit.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
List the contents of a directory with file sizes and metadata. Supports sorting by name or size. Paginated with offset and limit.
Move or rename a file or directory. The destination path must be within an allowed directory.
Read the complete contents of a file as text. DEPRECATED: Use read_text_file instead.
Read an image or audio file. Returns the base64 encoded data and MIME type. Only works within allowed directories.
Read multiple files at once. Useful for analyzing related files together.
Read the complete contents of a file from the file system as text. Handles various text encodings and provides detailed error messages if the file cannot be read. Use this tool when you need to examine the contents of a single file. Use the 'head' parameter to read only the first N lines of a file, or the 'tail' parameter to read only the last N lines of a file. Operates on the file as text regardless of extension. Only works within allowed directories.
Search for files and directories matching a glob pattern within a specified directory. Results are paginated.
Create a new file with the provided content. Will fail if the file already exists. Use edit_file to modify existing files.
Numeric parameters lack min/max bounds. maxCharacters defaults to 500000 but no max stated. head/tail parameters accept any number with no bounds. maxDepth defaults to 5 but maximum unbounded. maxEntries defaults to 1000 but no max stated. LLMs can pass absurd values (head: 999999999) causing performance issues.
delete_file lacks confirmation/dry-run mechanism. Unlike edit_file (which offers dryRun), delete_file has no safety gate. Per pattern:confirmation-request, destructive operations should support confirmation or undo.
Error handling descriptions do not guide recovery. Tools validate paths and reject files outside allowedDirectories, but error responses are not documented. Should state: 'File not found. Available directories: [list]. Did you mean: [suggestions]?' following pattern:recovery-guide.
Tool descriptions do not explicitly state which operations modify state. Per pattern:command-tool, tools that create/modify/delete must say so. write_file, edit_file, delete_file, move_file, create_directory do modify state but descriptions could be more explicit about irreversibility.