A semantic programming system for AI agents — easy enough to design behavior, rigorous enough to run it at enterprise scale.
The server exposes 17 tools across three example implementations (web_tools_mcp.py, deep_file_researcher/mcp_server.py, deep_thinker/mcp_server.py). While most tools have descriptions and input schemas are visible, quality varies significantly. Tool names follow verb-noun convention (web_search, fetch_url, read_file, write_file) which is good. Parameters generally have types and descriptions, but several lack depth about constraints, formats, or when to use them. Error handling is minimal, no guidance on recovery or error classification. Output schemas are not documented. The file-based tools (read_file, write_file, list_files) lack security details about path traversal protection. Overall, the server is functional but falls short of production-grade patterns.
Append content to a file.
Create directory if it doesn't exist.
Fetch content from a URL and convert HTML to markdown format. This tool fetches web page content and converts it to clean markdown text, making it easy to read and process HTML content.
Get a hierarchical structure of all markdown files in a directory.
Get detailed information about a markdown file.
Get file metadata and statistics.
Search for a pattern in files within a directory.
http_request has a bare 35-char description ('Make HTTP requests to APIs and web services.'), critically underdescribed. No guidance on when to use it vs fetch_url, error handling, timeout behavior, or security considerations for untrusted URLs.
File manipulation tools (read_file, write_file, append_file, list_files, ensure_directory, get_file_stats) lack security descriptions about path traversal protection, permission checks, or symlink handling. Description says 'relative to base directory' but does not explain if '..' or symlinks are blocked.
No output schemas documented for any tool. LLMs cannot predict what fields will be returned (e.g., does read_file return {content, encoding, size} or just a string?).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 62 | <=2025-11-25 | v2 |
| 2026-03-09 | C | 66 | - | v1 |
Make HTTP requests to APIs and web services.
List files and directories in the specified path.
List files and directories in a directory.
Read complete file contents.
Read a specific line range from a file (1-indexed).
Read file contents with support for multiple line ranges. This tool handles the complexity of reading multiple ranges from a file and returning them in a format suitable for FileLoadLLMMessage integration.
Search for text in a file and return matching lines with line numbers.
Validate that the specified path is a directory and exists and contains at least one markdown file (recursive listing).
Search the web using Tavily for current information and documentation. This tool searches the web and returns relevant results. After receiving results, synthesize the information into a natural, helpful response for the user.
Write or overwrite a file with content.
Stateful operations (write_file, append_file, ensure_directory) lack confirmation or dry-run support. Agents could accidentally overwrite or delete data. No guidance on idempotence or retry safety.
Error handling is not documented. No guidance on retryability, user-fixable errors, or recovery steps. E.g., what happens if write_file fails due to permissions? What should the agent do?
Parameter descriptions for list_directory, read_file_range, grep_files, and get_file_hierarchy are sparse. E.g., 'recursive' param has no detail on performance implications or max depth; 'file_extension' default is not explained; 'pattern' in grep_files does not clarify if it's a Python regex or POSIX grep syntax.
fetch_url and http_request both perform HTTP requests but serve different purposes. Names do not make the distinction obvious, an LLM could conflate them. fetch_url converts HTML to markdown; http_request is generic. Naming should clarify this (e.g., fetch_and_convert_url).
validate_directory, list_directory, get_file_info, and get_file_hierarchy all operate on directories/files but descriptions do not clarify what data structure is returned or how they compose. E.g., does validate_directory return a boolean or metadata? Does list_directory match get_file_hierarchy output?