Web Search & Crawl & Scraper & Extract server supporting agent-browser, SearXNG, Tavily, DuckDuckGo, Bing, and other search providers
The server provides 4 well-defined search and scraping tools with proper Zod schemas and descriptions. Tool naming is clear and action-oriented (one_search, one_scrape, one_map, one_extract). Descriptions are adequate but could be more LLM-optimized. All tools have input schemas visible in src/schemas.js (imported as SearchSchema, MapSchema, ScrapeToolInputSchema, ExtractSchema). Parameter schemas are well-structured with types, descriptions, and constraints (enums, optional flags). However, output schemas are not documented in the provided source, the tool definitions only show input schemas. Error handling uses a wrapper pattern (createToolHandler) with structured error responses (isError flag + text content), but lacks recovery guidance or categorization. Security is reasonable (read-only tools, no credential exposure), but tool descriptions could more explicitly state safety properties.
Fetch and preprocess page content from one or more URLs. Returns cleaned text blocks that can be passed to downstream tools or models.
Discover URLs from a starting point by loading a page in the browser and extracting links from its HTML.
Scrape a single webpage and return markdown, HTML, links, or a screenshot. Supports navigation timeout, TLS verification control, full-page screenshots, bounded pre-scrape actions, and advanced executeJavascript only when allowExecuteJavascript is true.
Search and retrieve content from web pages. Returns SERP results by default (url, title, description).
Output schemas are not documented. Tool definitions show only input schemas (SearchSchema, MapSchema, etc.), but no documented structure for what each tool returns. LLMs cannot plan downstream calls or extract specific fields without knowing the response structure.
Error handling lacks recovery guidance. The createToolHandler catches errors and returns {isError: true, content: [{type: 'text', text: msg}]}, but error messages are raw exception strings without hints about what to try next or whether the error is retryable.
Descriptions for one_map and one_extract are relatively generic and lack context about when to use them vs similar tools (e.g., when to use one_map for discovery vs one_scrape for detailed content). Descriptions should include dependency hints and selection rationale.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 58 | - | v1 |
one_scrape parameter 'actions' uses oneOf discriminated union but the discriminator is 'type' field within each action object. The schema is valid but complex; consider simplifying or adding a more explicit discriminator comment to guide LLM understanding of action variants.