MCP server providing web search and file reading tools for a small language model agent
The server provides 3 tools with explicit schemas and descriptions. Tool names follow verb_noun convention (web_search, read_file_info, read_file) which is good. However, there are significant gaps: descriptions are minimal (10-120 chars, below the 50-200 char LLM-optimized range), parameter descriptions are sparse, and output schemas are completely undocumented. The read_file and read_file_info tools have name ambiguity (both deal with file operations, distinction unclear from names alone). Error handling is not documented. No evidence of parameter validation guidance or constraint documentation (e.g., chunk_size ranges, max_file_size enforcement logic). The tools are read-only which is good from a security perspective, but no explicit permission gates or scope declarations are present.
Read a file with intelligent streaming vs concatenation.
Get file information without reading contents.
Search the web using DuckDuckGo.
Minimal tool descriptions (10-120 chars) lack LLM selection guidance. 'Search the web using DuckDuckGo' and 'Get file information without reading contents' do not explain WHEN to use the tool, what it returns, or dependencies.
Output schemas completely undocumented. LLMs cannot plan downstream tool calls or extract results without knowing what fields are returned. No documentation of pagination, result limits, or response structure.
Parameter descriptions are generic or missing validation constraints. num_results lacks min/max bounds (DuckDuckGo likely has limits). chunk_size and max_file_size have no documented valid ranges, format, or units.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 62 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 45 | - | v1 |
read_file and read_file_info have name ambiguity. Both operate on files; the distinction (info vs content) is not obvious from the names alone. Consider rename to get_file_metadata and read_file_content for clarity.
No error handling documentation. Tools provide no guidance on recovery (e.g., 'file not found' → suggest alternatives; 'quota exceeded' → retry later). LLMs receive raw errors with no actionable next step.
Path parameter in file tools accepts free-form strings with no documented path traversal or symlink guards. No validation rules stated (e.g., 'must be absolute', 'no ../sequences'). LLMs could pass unsafe paths.