A collection of FastMCP servers for basic CLI execution, file reading, and file writing operations
This server implements 8 file/CLI tools with basic functionality, but exhibits significant definition quality gaps. All tools have descriptions and visible schemas, but lack important details on error handling, constraints, and output structure documentation. Parameter descriptions are present but often generic. No tool annotations (readOnlyHint/destructiveHint) despite obvious safety implications. The server declares destructive tools (run_cli_command, write operations) but provides no guidance on error recovery or input validation messaging. Output schemas are not formally documented, responses are described in docstrings but not as structured JSON schemas. read_file and edit_files have no explicit error handling guidance. The write_* tools validate paths but don't communicate validation errors back in machine-parseable format. Average tool description length is ~150 chars, within baseline, but lacks LLM-specific guidance on WHEN to use each tool vs. alternatives.
Create a directory at the specified path.
Edit specified file by replacing the 'match' string with 'substitute'. Use this method when you need to make smaller edits to a file without overwriting the entire file. Prefer to make smaller edits to avoid losing any existing data or functionality.
List files in specified directory.
Return contents of file located at specified path.
Return dictionary with filenames as keys and contents of file as values. If failed to read file then value is None.
Execute a CLI command and return structured output. Runs a shell command and returns the return code, standard output, and standard error in a structured format for easy parsing.
Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk markers. run_cli_command, write_whole_file, write_multiple_files, edit_files, create_directory are all marked DESTRUCTIVE/WRITE but lack schema-level hints.
Output schemas not formally documented. Tools return free-form strings (format_output) or dicts, but no explicit JSON schema definition. LLMs cannot plan downstream operations without knowing field structure.
Error messages are generic strings without actionable recovery guidance. Example: read_file raises uncaught exceptions; write_whole_file returns raw error strings like 'No such file or directory' instead of guiding the LLM on next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 55 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 13 | - | v1 |
Write contents to multiple files. Each file will be overwritten. Use when you need to create or overwrite multiple files at once.
Write contents to specified file. The whole file will be overwriten. Use when you need to create or overwrite existing file. Prefer use of edit_file if you need to make small changes.
Parameter descriptions lack actionable constraints. 'Path to directory to list files from' does not specify if relative paths are accepted, what happens with symlinks, or max recursion depth. 'CLI command to execute' does not warn about shell injection or timeout behavior.
Missing idempotency guidance. Tools like edit_files and write_whole_file are not declared idempotent. When an LLM retries after a transient error, these tools may produce unexpected results (e.g., overwriting with stale content).
list_files does not return pagination support or result limits. Recursive listing on a large directory tree could return thousands of files, exhausting context window. No mention of max results or when to use offset/limit.
read_multiple_files silently returns None for files that cannot be read, with no error classification. LLM cannot distinguish between 'file not found' and 'permission denied', limiting recovery strategies.
run_cli_command accepts arbitrary shell commands with no warnings about command injection, resource limits, or dangerous patterns (e.g., rm -rf /). Path validation in write tools does not apply to CLI execution.