MCP server for performing Google searches via Serper API and scraping web content with structured data extraction
Three tools with complete input schemas and descriptions, but significant gaps in parameter documentation and output schema clarity. google_search has 8 parameters with good descriptions (region, language, time filters); scrape and batch_scrape are simpler but lack output schema documentation. No error handling guidance for LLMs. Parameter descriptions are adequate (avg ~60 chars) but lack constraints (enums, ranges, formats). Tool names follow verb_noun pattern correctly. No tool annotations (readOnlyHint, etc.) despite all being read-only operations.
Scrape multiple URLs in parallel and return a list of results with focused content.
Perform a Google search using the Serper API.
Scrape a single URL and return structured data focused on visible content.
Output schemas not documented. google_search returns 'Dict' with no field specification; scrape/batch_scrape return ScrapeResult/List[ScrapeResult] but structure is not visible in source. LLMs cannot plan downstream operations without knowing response fields.
No error handling guidance. Exceptions are caught and re-raised as ValueError with generic messages ('Failed to perform Google search'). LLMs receive no recovery hints (e.g., 'API key missing? Check SERPER_API_KEY' or 'Rate limited? Retry in 60s').
Missing parameter constraints. 'num' (google_search) has no min/max bounds; 'page' has no range; 'tbs' accepts free-form string instead of enum. LLMs can pass invalid values (num=10000, page=-1) that fail silently.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | <=2025-11-25 | v2 |
No tool annotations. All three tools are read-only (Risk: READ_ONLY noted in metadata) but lack readOnlyHint in schema. Agents cannot distinguish safe tools from destructive ones without explicit hints.
Incomplete parameter descriptions. 'includeMarkdown' in scrape/batch_scrape lacks detail on what markdown format is returned or when to use it. 'location' in google_search says 'Optional location' but does not explain how it interacts with 'gl' (region code).