Residential proxy MCP for AI agents. It routes HTTP requests through “2M+ real home devices” (Android phones, Windows PCs, and Macs) to bypass anti-bot systems, perform geo-targeting by country or city, and maintain sticky sessions across multi-step workflows. It is powered by Novada and is positioned to work with any provider.
🛠️ Key Features
Residential proxy routing for AI agents
Geo-targeting by country or city
Sticky sessions across multi-step workflows
Anti-bot bypass via residential devices
Works with any provider
🚀 Use Cases
Bypassing anti-bot protections for automated agents
Geo-targeted HTTP requests during workflows
Multi-step scraping or automation requiring session persistence
⚡ Developer Benefits
Developer access to residential proxy behavior via an MCP server
Sticky session support for multi-step workflows
HTTP request routing through real home endpoints
⚠️ Limitations
The provided description does not include performance, pricing, authentication details, or supported protocols beyond HTTP routing.
The agent-first residential proxy MCP — works with any provider.
Route any HTTP request through 2M+ real home devices — Android phones, Windows PCs, Macs — to bypass anti-bot systems, geo-target by country or city, and maintain sticky sessions across multi-step workflows. Powered by Novada.
Works with Claude Code, Cursor, Windsurf, Cline, Continue, and any MCP-compatible AI agent.
TIP
Free tier available — sign up at novada.com, no credit card required. Get free access to Scraper API, Web Unblocker, and residential proxies to start building immediately.
Getting Started
For Humans
Create a free account at novada.com — no credit card required
# Claude Code
claude mcp add novada-proxy-mcp \
-e NOVADA_PROXY_USER=your_username \
-e NOVADA_PROXY_PASS=your_password \
-- npx -y novada-proxy-mcp
# Or use the CLI directly
npx novada-proxy-mcp status
npx novada-proxy fetch https://example.com
For Agents
NOTE
Agents: Tell your human to complete steps 1-2 above. Once credentials are set as environment variables, all 10 tools are available immediately. No API key rotation, no token refresh — proxy credentials are persistent.
code
Required env vars:
NOVADA_PROXY_USER — from novada.com dashboard
NOVADA_PROXY_PASS — from novada.com dashboard
Optional (for extra features):
NOVADA_API_KEY — enables novada_proxy_search (Google search)
NOVADA_BROWSER_WS — enables novada_proxy_render (JS rendering)
NOVADA_PROXY_ZONE — "res" (default), "isp", or "dcp"
AI agents get blocked on 60–70% of commercial websites. Standard HTTP requests are detected and rejected by Cloudflare, Akamai, DataDome, and PerimeterX. Novada Proxy routes your agent through real residential IPs — indistinguishable from a human browser.
Crawl a URL and return all internal links as JSON array
Proxy credentials
novada_proxy_crawl
Recursively crawl a site (BFS, depth 1-5) with URL discovery
Proxy credentials
novada_proxy_session
Sticky session — same IP across every call
Proxy credentials
novada_proxy_search
Google search -> structured JSON (title, url, snippet)
NOVADA_API_KEY
novada_proxy_render
Render JS-heavy pages with real Chromium [BETA]
NOVADA_BROWSER_WS
novada_proxy_research
One-shot deep research — search + fetch + synthesize
NOVADA_API_KEY + Proxy
novada_proxy_status
Check proxy network health + version
(none)
Quick Decision Guide
I want to...
Use this tool
Fetch a single URL
novada_proxy_fetch
Fetch 2–20 URLs at once
novada_proxy_batch_fetch
Extract specific fields (title, price...)
novada_proxy_extract with fields
Extract ANY field via schema
novada_proxy_extract with schema
Find all links on a page
novada_proxy_map
Crawl an entire site
novada_proxy_crawl
Research a topic
novada_proxy_research
Search Google
novada_proxy_search
Render a JS-heavy page
novada_proxy_render
Keep same IP across calls
novada_proxy_session
Check if proxy works
novada_proxy_status
When To Use Which Tool
code
Goal: "Scrape a single URL"
└─ Static HTML page? → novada_proxy_fetch
└─ Need specific fields? → novada_proxy_extract (fields or schema mode)
└─ React/Vue SPA / blank page? → novada_proxy_render
Goal: "Scrape multiple URLs"
└─ You have the URLs already → novada_proxy_batch_fetch
└─ You need links from one page → novada_proxy_map → novada_proxy_batch_fetch
└─ You need to crawl a whole site → novada_proxy_crawl → novada_proxy_batch_fetch
Goal: "Research a topic" → novada_proxy_research (search + fetch + findings in one call)
Goal: "Search the web" → novada_proxy_search → novada_proxy_batch_fetch
Goal: "Login + multi-page flow" → novada_proxy_session (same session_id)
Goal: "Check if proxy works" → novada_proxy_status
5 Prompts
Pre-built agent workflows that chain multiple tools together. Call these from any MCP client to execute common patterns in one step.
Prompt
Description
Key Arguments
fetch_url
Fetch a URL through residential proxy with anti-bot bypass
url, country, format
research_topic
Search + batch read workflow — find and read top pages on a topic
query, num_results, country
extract_product
Extract structured product data from any e-commerce URL
url, fields
crawl_site
Discover all pages on a site, then fetch them in parallel
url, limit, country
troubleshoot
Step-by-step proxy diagnosis when things go wrong
error_message
NOTE
Prompts orchestrate multi-tool workflows automatically. For example, research_topic runs novada_proxy_search then novada_proxy_batch_fetch in sequence — the agent doesn't need to figure out the pipeline.
5 Resources
Always-accessible reference data that agents can read at any time, without making proxy calls.
Resource URI
Description
proxy://countries
Complete list of 195+ country codes with city-level targeting
proxy://error-codes
All typed error codes with recovery instructions
proxy://workflows
Common agent workflow patterns (crawl, research, monitoring)
proxy://supported-fields
All fields novada_proxy_extract can extract with strategies
proxy://cost-guide
Credits per tool, caching behavior, cost optimization tips
country, city, session_id params are ignored with Generic — encode targeting directly in your proxy URL.
Agent-First Design
NOTE
Novada Proxy is the only proxy MCP designed specifically for autonomous AI agents. Every response, error, and description is optimized for machine consumption.
Feature
What It Means
agent_instruction in errors
Every error tells the agent exactly what to do next
Decision trees in descriptions
WHEN TO USE / USE INSTEAD guides in every tool
cache_hit metadata
Agent knows when 0 credits were used (cached response)
credits_estimated per call
Cost tracking built into every response
Typed error codes
Machine-readable: BOT_DETECTION_SUSPECTED, PAGE_NOT_FOUND, etc.
Fetch any URL through a residential proxy. Returns structured JSON with content, status code, and metadata. Auto-retry on network errors. Caches repeated calls (default 300s TTL — meta.cache_hit: true means no proxy credit used).
Parameter
Type
Default
Description
url
string
required
Target URL (http:// or https://)
country
string
—
2-letter ISO code: US, DE, JP, GB, BR... (195+ options)
city
string
—
City: newyork, london, tokyo, paris, berlin...
session_id
string
—
Reuse same ID for same IP across calls (no hyphens, max 64 chars)
Fetch 2–20 URLs concurrently through residential proxy. Up to 5x faster than sequential fetches. Per-URL errors are captured individually — the batch itself succeeds even if some URLs fail. Reuses response cache for URLs already fetched.
Extract structured fields from any URL using heuristic pattern matching (meta tags, Open Graph, JSON-LD, Schema.org). Lightweight — no LLM needed. Set render_fallback: true to automatically retry via real Chromium if the proxy fetch fails.
Parameter
Type
Default
Description
url
string
required
Target URL
fields
string[]
required
Fields to extract: title, price, description, rating, image, author, date...
render_fallback
boolean
false
Auto-retry via novada_proxy_render on TLS/bot block
country
string
—
Geo-target the fetch
timeout
number
60
Timeout in seconds
Response:
json
{"ok":true,"tool":"novada_proxy_extract","data":{"url":"https://books.toscrape.com/...","fields":{"title":"A Light in the Attic","price":"£51.77","description":null},"extracted_via":"proxy_fetch"},"meta":{"latency_ms":2100,"quota":{"credits_estimated":1}}}
novada_proxy_map
Crawl a URL and return all internal links as a structured JSON array. Use as the discovery step before novada_proxy_batch_fetch to crawl an entire site without guessing URLs.
Sticky session fetch — every call with the same session_id uses the same residential IP. Essential for login flows, paginated scraping, and price monitoring. Supports verify_sticky: true to confirm IP consistency before relying on it.
Parameter
Type
Default
Description
session_id
string
required
Unique ID — reuse to keep same IP (no hyphens, max 64 chars)
url
string
required
Target URL
country
string
—
2-letter country code
city
string
—
City-level targeting
verify_sticky
boolean
false
Make 3 proxy calls to confirm IP consistency (adds ~15–25s)
format
string
markdown
markdown or raw
timeout
number
60
Timeout in seconds
novada_proxy_search
Structured Google search via Novada Scraper API. Returns titles, URLs, and snippets as clean JSON — no HTML parsing needed.
Parameter
Type
Default
Description
query
string
required
Search query
num
number
10
Results (1–20)
country
string
—
Localize: us, uk, de, jp...
language
string
—
Language: en, zh, de, ja...
novada_proxy_render [BETA]
Render JavaScript-heavy pages using Novada's Browser API (real Chromium, full JS execution). Use for SPAs, React/Vue apps, and pages that return blank with a standard HTTP fetch.
Requires:NOVADA_BROWSER_WS — copy the Puppeteer URL from Dashboard -> Browser API -> Playground
Parameter
Type
Default
Description
url
string
required
Target URL
format
string
markdown
markdown / html / text
wait_for
string
—
CSS selector to wait for before extracting (e.g. .product-title)
timeout
number
60
Timeout in seconds (5–120)
Costs ~5 proxy credits per call vs 1 for novada_proxy_fetch. Use novada_proxy_extract with render_fallback: true for automatic escalation when needed.
novada_proxy_crawl
Recursively crawl a website via BFS traversal. Starts from a URL, discovers links at each depth level, and returns the full URL tree with metadata.
Parameter
Type
Default
Description
url
string
required
Starting URL to crawl
depth
number
2
BFS depth (1–5)
limit
number
50
Max pages to crawl (10–200)
include_content
boolean
false
Also return page content for each URL
country
string
—
Geo-target all fetches
format
string
markdown
Content format when include_content: true
timeout
number
60
Per-page timeout in seconds
When to use: Full-site scraping, sitemap generation, content indexing — when you need MORE than a single page.
Use novada_proxy_map instead if: You only need links from ONE page (one level deep). Map is faster and cheaper for single-page link discovery.
Chain with:novada_proxy_batch_fetch to scrape specific pages from the URL tree.
Response:data.pages[] (url, depth, status_code, total_links), data.urls[] (flat array for chaining into novada_proxy_batch_fetch)
novada_proxy_research
One-shot research tool — searches the web, fetches top results, and returns structured findings with source previews. The agent can analyze the findings for deeper synthesis.
In addition to fields (heuristic extraction), novada_proxy_extract supports a schema parameter for extracting any arbitrary field via your agent's LLM — zero additional API cost.
Schema Mode (LLM Extraction)
Pass schema instead of fields for arbitrary field extraction. The tool returns cleaned page content + an extraction prompt — your agent does the extraction (zero additional API cost).
Parameter
Type
Default
Description
url
string
required
Target URL
schema
object
—
Keys = field names, values = field descriptions. Use instead of fields.
render_fallback
boolean
false
Auto-retry via novada_proxy_render on TLS/bot block
country
string
—
Geo-target the fetch
timeout
number
60
Timeout in seconds
Example:
json
{"url":"https://example.com/product","schema":{"product_name":"The full product name","price":"Current price with currency","warranty":"Warranty terms and duration","return_policy":"Return policy summary"}}
Response:data.mode = "llm_extract", data.content (cleaned markdown), data.extraction_prompt (instructions for your agent to follow and extract the fields)
Security: Schema keys must be alphanumeric/underscore (a-z, 0-9, _), max 50 chars. Values max 200 chars.
novada_proxy_status
Check proxy network connectivity and version. Makes a live proxy call to verify the connection is working. No credentials required.
Agent Workflows
Site crawl pipeline (map -> batch)
code
# Agent task: "Read all products on this catalogue"
1. novada_proxy_map(url="https://books.toscrape.com", limit=50)
→ returns 20–50 internal URLs in 4s, 1 credit
2. novada_proxy_batch_fetch(urls=[...20 URLs], concurrency=5)
→ fetches all 20 pages in parallel, ~4s wall time, 20 credits
(vs ~60s sequential = 15x speedup)
Research pipeline (search -> batch)
code
# Agent task: "Find and read top 5 pages about X"
1. novada_proxy_search(query="residential proxy MCP", num=5)
→ structured JSON: titles, URLs, snippets
2. novada_proxy_batch_fetch(urls=[...5 URLs], format="markdown")
→ full content of all 5 pages in parallel
Sticky session — login + multi-page scrape
code
# Same IP across all calls
novada_proxy_session(session_id="job_001", url="https://example.com/login")
novada_proxy_session(session_id="job_001", url="https://example.com/dashboard")
novada_proxy_session(session_id="job_001", url="https://example.com/data/page/1")
novada_proxy_session(session_id="job_001", url="https://example.com/data/page/2")
Price monitoring — same product, three markets
code
novada_proxy_fetch(url="https://amazon.com/dp/B0BSHF7WHW", country="US")
novada_proxy_fetch(url="https://amazon.com/dp/B0BSHF7WHW", country="DE")
novada_proxy_fetch(url="https://amazon.com/dp/B0BSHF7WHW", country="JP")
# Second call per URL is a cache hit (0ms, 0 credits) if within 300s TTL
Extract structured data
code
# Agent task: "Get product details without parsing HTML"
novada_proxy_extract(
url="https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
fields=["title", "price", "description", "rating"],
render_fallback=true # auto-retry via Chromium if proxy gets blocked
)
Response Cache
All novada_proxy_fetch and novada_proxy_batch_fetch calls are cached in-process. Repeated fetches to the same URL within the TTL window consume zero proxy credits.
Behavior
Detail
Default TTL
300 seconds (5 minutes)
Cache key
url + format + country
Session bypass
session_id present -> never cached (sticky routing requires live calls)
Disable
Set PROXY4AGENT_CACHE_TTL_SECONDS=0
Max entries
200 (oldest evicted when full)
Reading cache status from response:
json
"meta":{"cache_hit":true,// served from cache — no proxy credit used"cache_age_seconds":12,// seconds since the entry was stored"latency_ms":0// ~0ms for cache hits}
Typed Error Codes
Every error response includes a typed error.code, recoverable flag, and agent_instruction with the correct next step. Agents never need to parse error messages.
Code
Meaning
Recoverable
Agent Action
BOT_DETECTION_SUSPECTED
HTTP 4xx — target blocked the request
✓
Retry with novada_proxy_render or different country
TLS_ERROR
TLS/SSL connection failed through proxy
✓
Retry with a different country parameter
TIMEOUT
Request exceeded timeout limit
✓
Increase timeout or retry
RATE_LIMITED
HTTP 429 — too many requests
✓
Wait 5s and retry
NETWORK_ERROR
DNS failure — hostname not found
✗
Verify the URL is correct
SESSION_STICKINESS_FAILED
Same IP not maintained
✓
Retry verify_sticky: true to confirm
INVALID_INPUT
Bad parameter value
✗
Fix the parameter and retry
PROVIDER_NOT_CONFIGURED
Missing env vars
✗
Set credentials and restart MCP
UNKNOWN_ERROR
Unexpected error
✓
Check novada_proxy_status, retry
Error response format:
json
{"ok":false,"error":{"code":"BOT_DETECTION_SUSPECTED","message":"HTTP 403 — request blocked by target","recoverable":true,"agent_instruction":"Try novada_proxy_render (real browser). Or retry with a different country/session_id."}}
Geo Coverage
195+ countries including:
USGBDEFRJPCAAUBRINKRSGNLITESMXRUPLSENODKFICHATBEPTCZHUROUATRILZANGEGARCLCOPEVNTHIDMYPHTWHKNZ + 148 more
City-level targeting:newyork · losangeles · chicago · london · paris · berlin · tokyo · seoul · sydney · toronto · singapore · dubai · mumbai · saopaulo
Compatible With
Client
Install method
Claude Code
claude mcp add novada-proxy-mcp -e ... -- npx -y novada-proxy-mcp
Cursor
Settings -> MCP -> Add server -> npx -y novada-proxy-mcp
All tools work including sticky sessions (session_verified: true).
Datacenter
8
8
Fast, cost-effective. Anti-bot sites (Amazon, CNN) may block datacenter IPs — use residential for those.
Error handling
7
7
All error codes return structured JSON with agent_instruction.
Success rate: 94% (31/33 pass). Failures are proxy-type limitations (datacenter on anti-bot sites), not code bugs.
Proxy Type Guide
Use Case
Recommended Proxy
Why
Anti-bot sites (Amazon, LinkedIn, CNN)
Residential
Real home IPs, hardest to detect
Fast bulk scraping
Datacenter
Lowest latency, cheapest per GB
Sticky sessions (login flows)
ISP
6-hour sticky, stable IPs
General scraping
Any
All types handle most sites
Known Limitations
Limitation
Workaround
Datacenter IPs blocked on anti-bot sites
Use residential or ISP proxy type (NOVADA_PROXY_ZONE=res)
Proxy-side DNS errors surface as TLS_ERROR
Check if domain exists before retrying with different country
CLI is stateless (no cross-invocation cache)
Use MCP server for cache benefits, or re-fetch same URLs within one CLI batch
novada_proxy_render requires Browser API key
Set NOVADA_BROWSER_WS env var — get it from novada.com dashboard
Heuristic extraction misses a field
Use schema mode: pass schema:{"field":"description"} — returns cleaned content + extraction prompt for your agent to extract any field (zero-cost LLM extraction)
{"ok":false,"error":{"code":"BOT_DETECTION_SUSPECTED","recoverable":true,"agent_instruction":"Try novada_proxy_render (real browser). Or retry with a different country/session_id."}}
错误码
含义
可恢复
BOT_DETECTION_SUSPECTED
被目标站点封锁(403)
✓
TLS_ERROR
TLS/SSL 连接失败
✓
TIMEOUT
请求超时
✓
RATE_LIMITED
HTTP 429 限速
✓
NETWORK_ERROR
DNS 解析失败
✗
INVALID_INPUT
参数错误
✗
PROVIDER_NOT_CONFIGURED
缺少凭证
✗
6. 批量并发抓取
novada_proxy_batch_fetch 内置信号量并发控制:
json
// 10 个 URL,concurrency=5,wall time = ~8.8s(串行估计 ~50s){"data":{"results":[{"url":"...","ok":true,"cache_hit":false,"latency_ms":1200},{"url":"...","ok":true,"cache_hit":true,"latency_ms":0},{"url":"...","ok":false,"error":{"code":"TLS_ERROR"}}]},"meta":{"latency_ms":8800,"quota":{"credits_estimated":10}}}