Residential proxy MCP server for AI agents — provides tools for web scraping, searching, rendering, and data extraction through 2M+ residential IPs across 195 countries
Strong tool definitions with comprehensive descriptions and well-structured schemas. All 10 tools have detailed descriptions (avg 250+ chars) explaining WHEN to use each tool and error recovery paths. Input schemas are complete with types, enums, and constraints. However, output schemas are not formally documented in the tool definitions themselves, only described in prose. Parameter descriptions are excellent (avg 80+ chars) with clear guidance on formats and constraints. Tool naming follows verb_noun pattern consistently (novada_proxy_*). Minor gaps: no tool annotations (readOnlyHint/destructiveHint), no explicit error classification guidance in responses, and output structure not formally schematized.
Fetch multiple URLs concurrently through residential proxy. Returns structured JSON with per-URL results including ok/error status. Up to 20 URLs, up to 5 concurrent. WHEN TO USE: Scraping lists of URLs from search results, product catalogs, competitor pages. USE novada_proxy_fetch INSTEAD FOR: Single URLs — lower overhead. ON FAILURE: Individual URL failures are captured in results[].error — the batch itself succeeds even if some URLs fail.
Recursively crawl a site (BFS, depth 1-5) via residential proxy. Returns JSON with ok, data.pages as array of {url, title, content, links}. Useful for site-wide content discovery.
Extract structured fields (title, price, rating, author, etc.) from any URL via residential proxy. Returns JSON with ok, data.fields as key-value map. Uses Open Graph, JSON-LD, and HTML heuristics. WHEN TO USE: Product pages, articles, listings where you need specific fields not raw content. USE novada_proxy_fetch INSTEAD IF: You need full page content, not specific fields. AUTO-ESCALATION: Set render_fallback:true to automatically retry via real browser if proxy fetch fails. Costs 5 credits if escalated. ON FAILURE without render_fallback: If TLS_ERROR or BOT_DETECTION_SUSPECTED → retry with render_fallback:true. SCHEMA MODE: Pass schema:{field_name: "description"} for LLM-based extraction — returns cleaned content + extraction prompt. See schema property for example.
Fetch any URL through residential proxy (2M+ IPs, 195 countries, anti-bot bypass). Returns JSON: ok, data.content, data.status_code, meta.latency_ms, meta.cache_hit. WHEN TO USE: Static/HTML pages, Amazon, LinkedIn, news sites, most commercial sites. USE novada_proxy_render INSTEAD IF: Page requires JavaScript to load (SPAs, React/Vue apps, dynamic feeds). USE novada_proxy_extract INSTEAD IF: You need structured fields (title, price, rating) not raw content. ON FAILURE: If error.code is BOT_DETECTION_SUSPECTED → retry with novada_proxy_render. If TLS_ERROR → retry with a different country parameter. CACHING: Same URL+format+country hits in-process cache (TTL 300s). meta.cache_hit=true = no credit used. session_id calls bypass cache.
Output schemas not formally documented. Tool descriptions explain response structure in prose (e.g., 'Returns JSON with ok, data.content, meta.latency_ms') but no explicit JSON Schema definitions for outputs. LLMs cannot reliably parse unstructured prose responses or plan downstream tool chains without formal output schemas.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are marked READ_ONLY in metadata but MCP tool annotations are not present in the schema. This prevents agents from understanding which tools are safe to retry, which modify state, and which are idempotent.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Discover all internal links on a page via residential proxy. Returns JSON with ok, data.links as array of {url, title, type}. Useful for site structure discovery and crawl planning.
Render a JavaScript-heavy page with real Chromium [BETA]. Returns structured JSON with ok, data.content. Requires NOVADA_BROWSER_WS env var. WHEN TO USE: SPAs, React/Vue apps, infinite scroll, pages that require JS to load content. USE novada_proxy_fetch INSTEAD FOR: Static HTML pages — it is 3-5x faster. ON FAILURE: If error.code is TIMEOUT → increase timeout. If PROVIDER_NOT_CONFIGURED → set NOVADA_BROWSER_WS.
One-shot deep research: search for sources, fetch them, and synthesize findings. Returns JSON with ok, data.summary, data.sources. Requires NOVADA_API_KEY.
Search Google and return structured results (title, url, snippet) as JSON. No HTML parsing needed — results are pre-structured. WHEN TO USE: Finding pages by topic, factual queries, discovering URLs to then fetch. USE novada_proxy_fetch INSTEAD FOR: Reading a specific URL you already have. ON FAILURE: If error.code is PROVIDER_NOT_CONFIGURED → set NOVADA_API_KEY.
Fetch a URL with sticky-session IP persistence and optional verification. For basic sticky routing without verification, use session_id in novada_proxy_fetch instead.
Check proxy health and quota. Returns JSON with ok, data.status, data.quota_remaining, meta.latency_ms. No parameters required.
novada_proxy_session description is vague. States 'For basic sticky routing without verification, use session_id in novada_proxy_fetch instead' but does not clearly explain when to prefer this tool over passing session_id to fetch. Lacks WHEN guidance.
novada_proxy_status has minimal description (60 chars). 'Check proxy health and quota. Returns JSON with ok, data.status, data.quota_remaining, meta.latency_ms. No parameters required.' Does not explain when an agent should call this or what actions to take based on quota_remaining.
Error recovery guidance is prose-only. Descriptions include recovery hints (e.g., 'If error.code is BOT_DETECTION_SUSPECTED → retry with novada_proxy_render') but no structured error classification (retryable, user-fixable, fatal). Agents cannot programmatically determine next steps.