Open-source CLI, MCP, skills, templates, workflows, recipes, and evals layer for giving AI agents reliable access to protected web data through Zenrows cloud infrastructure.
Zenrows MCP has 5 tools with complete input schemas and descriptions. Naming follows verb_noun convention (fetch, extract, batch, validateJsonl, estimateCredits). Descriptions are domain-specific and explain API mapping (e.g., 'Protected Fetch adapter → Zenrows Fetch (GET /v1/)'). However, descriptions lack LLM-optimized guidance on WHEN to use each tool vs. alternatives, and output schemas are not documented. Parameters are well-typed with descriptions, but some lack constraints (e.g., 'proxyCountry' accepts any string; should be enum or pattern). Error handling and recovery guidance are absent from tool definitions. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications in metadata.
Batch Jobs adapter. Validates JSONL job specs, estimates credit cost, and maps validated specs to Batch API request bodies.
Rough local credit estimate using documented multipliers (basic 1x, js 5x, proxies 10x, both 25x). Counts in abstract credits.
Structured extraction on the same /v1/ Fetch and Extract API via extract=auto (site-tailored), autoparse=true (general-purpose), css_extractor (selector-based), outputs (built-in filters), or response_type (markdown/plaintext).
Protected Fetch adapter → Zenrows Fetch (GET /v1/). Maps toolkit options to confirmed API parameters and enforces the auto/manual contract for Adaptive Stealth Mode.
Parse and validate a JSONL job spec locally. Returns validation results with total lines, valid jobs count, errors, and parsed jobs.
Output schemas not documented. LLMs cannot plan downstream calls or extract required fields (e.g., what does fetch() return? HTML string? Structured object? Metadata?). Breaks tool chaining.
No tool annotations despite clear risk metadata. 'batch' is marked WRITE but has no destructiveHint. 'fetch' is READ_ONLY but has no readOnlyHint. LLMs cannot reason about side effects or retry safety.
Parameter constraints missing or under-specified. 'proxyCountry' accepts any string (should be enum of ISO 3166-1 codes). 'output' accepts 'html, markdown, plaintext, or pdf' but not declared as enum. 'method' in extract has 6 options but no enum constraint.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Descriptions lack WHEN-to-use guidance. 'extract' vs 'fetch' distinction unclear from descriptions alone. No guidance on when to use extract=auto vs autoparse vs css_extractor. LLMs must guess.
No error handling or recovery guidance in tool definitions. What happens if a URL is unreachable? If JavaScript rendering times out? If a CSS selector matches nothing? LLMs have no next action.