A search-and-fetch toolkit for AI agents — MCP server and standalone Agent Skills powered by DuckDuckGo, trafilatura, and Jina Reader
Web Forager has 4 search/fetch tools with adequate naming and mostly complete schemas. Tool names are action-oriented (duckduckgo_search, web_fetch, duckduckgo_news_search, search) and follow verb_noun convention. Descriptions are present but vary in quality, some are detailed with guidance ('search news fixtures, errors not empty results'), others are minimal ('Search DuckDuckGo for the given query'). All tools have parameter schemas with type information and descriptions. However, output schemas are not documented, and some parameter descriptions lack depth. The 'search' tool appears redundant with 'duckduckgo_search', violating the composition principle of avoiding multiple tools doing the same thing. No explicit error handling guidance in descriptions. Tool annotations are present (readOnlyHint=true) which aligns with current spec patterns.
Search DuckDuckGo for recent news articles. Returns news results sorted by date, each with title, URL, publication date, source outlet, and snippet. Use this instead of regular search when the user wants recent news, developments, or time-sensitive information.
Search the web using DuckDuckGo.
Search DuckDuckGo for the given query.
Fetch a URL and convert it to markdown or JSON. Tries direct HTTP fetch first for speed. Falls back to Jina Reader for JavaScript-heavy or bot-protected pages.
Duplicate tool functionality: 'search' and 'duckduckgo_search' perform the same operation with identical parameter signatures. LLMs will waste reasoning cycles deciding between them.
Output schemas not documented. Tool descriptions do not specify what fields are returned (e.g., search tools return list[dict] but the dict structure is not defined). LLMs cannot plan downstream calls without knowing the response structure.
No error handling guidance in tool descriptions. Descriptions do not explain what to do if a search fails, if a URL is unreachable, or what errors are recoverable vs fatal. Agents cannot self-correct without explicit guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | C | 60 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 59 | - | v1 |
'safesearch' and 'output_format' parameters lack enum constraints. Descriptions mention allowed values ('on', 'moderate', 'off' for safesearch; 'json', 'text' for output_format) but these are free-form strings. LLMs may hallucinate invalid values like 'moderate-safe' or 'xml'.
The 'search' tool description is generic and vague ('Search DuckDuckGo for the given query'). It does not explain when to use 'search' vs 'duckduckgo_search' vs 'duckduckgo_news_search', nor what structure is returned.