MCP server with file processing capabilities, using FastMCP framework with OmniTool for lazy tool discovery via BM25 search
Single tool 'process_file' with significant quality gaps. Tool has a name starting with a verb (positive), but description is generic and lacks actionable context. Parameter descriptions are completely empty strings for all parameters except 'url'. Input schema is visible but parameter documentation is severely deficient. No output schema documented. Error handling approach is unclear. The server uses fastmcp with omnitool.py abstraction layer, but the actual tool registration in server.py is not fully visible in the provided code excerpt.
Process local or remote file with various output options
Parameter descriptions are empty strings across most parameters (path, output_format, max_lines, skip_patterns, include_metadata). LLMs cannot determine what these control or what values are valid.
No output schema documented. LLMs do not know what fields to expect from process_file, preventing downstream tool chaining and forcing them to guess at response structure.
Tool description 'Process local or remote file with various output options' is generic and does not explain WHEN to use this tool vs alternatives, WHAT it returns, or WHAT happens when called. Baseline for A+ tools is 50-200 chars with actionable context; this is 61 chars but lacks substance.
Parameter 'output_format' has no description. Default value is 'json' but valid alternatives are not documented. LLM will guess or reuse default without understanding the constraint.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 40 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Parameter 'max_lines' has no description. Default is 1000 but no minimum/maximum bounds documented. Unbounded numeric parameters allow LLMs to pass absurd values that break processing.
Parameter 'skip_patterns' (array of strings) has no description. LLM does not know: are these regex patterns? Glob patterns? Literal strings? What do they match against (filenames, content)?
Tool name 'process_file' is generic and vague. Does it read, analyze, transform, validate, or convert? More specific names like 'read_file_with_format' or 'parse_file_content' would clarify intent.
Parameters 'path' and 'url' are both optional, creating ambiguity. Description says 'url used over path if provided' but does not clarify what happens if NEITHER is provided, or both are required for different scenarios.
No error handling strategy documented. What happens if file does not exist? URL is unreachable? Format is invalid? Max_lines is exceeded? LLM has no recovery guidance.