MCP server for filesystem operations with file tree listing, reading, writing, and moving capabilities
This server has critical definition quality gaps. Tool descriptions are vague and lack actionable context (e.g., 'using the tree command' instead of explaining when/why to call it). Parameter descriptions are minimal, 'file path to show' doesn't specify format, encoding, or size limits. No output schemas are documented, forcing LLMs to guess response structure. Error handling is generic ('Error: <err>') with no recovery guidance. The write-file tool has a dangerous shell injection vulnerability (unescaped content in echo command). No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. Naming is acceptable but descriptions fall well below the 194-char baseline for production tools.
using the mv command to move a file
using the cat command to show the content of a file
using the tree comand to show all files in this directoy recursively depending on depth
using the echo command to write a file
Descriptions are under 20 characters and lack actionable context. 'using the cat command to show the content of a file' (56 chars) does not explain when to call this vs alternatives, what encoding is supported, or size limits. Baseline is 194 chars for production tools.
No output schemas documented. LLMs cannot predict response structure (fields, types, pagination). Baseline: 100% of A+ tools document return types.
Shell injection vulnerability in write-file. Content is escaped with only backtick replacement: `echo "${content.replace('`', '\`')}" > ...`. Quotes, semicolons, and $() are not escaped, allowing command injection. Use execFile or proper shell escaping.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
No tool annotations despite clear risk levels. write-file and move-file are destructive; read-file and tree-files are read-only. Missing readOnlyHint and destructiveHint annotations prevent agents from reasoning about safety.
Error responses are generic ('Error: <err>') with no recovery guidance. Pattern requires: 'User not found. Try search_users() with a partial name.' Current errors give LLMs nothing actionable.