如何透過 Python 智能代理路由 MCP 伺服器削減 80% 瀏覽器智能體代理成本
How to Cut 80% of Browser Agent Proxy Costs: An Intelligent Proxy Routing MCP Server in Python
ProxyShield 是以 Python 開發的 MCP 伺服器,透過智能代理路由協助削減瀏覽器智能體的代理成本。它將圖片、字型、影片等靜態資產改走直接連線或數據中心代理,令住宅代理頻寬用量減少 70% 至 85%。伺服器亦提供 SQLite WAL 資產快取、TLS JA3/JA4 指紋模擬,以及封鎖 IP 隔離機制。
How to Cut 80% of Browser Agent Proxy Costs: An Intelligent Proxy Routing MCP Server in Python
In 2026, autonomous browser agents—powered by models like Claude Computer Use, OpenAI Operator, Stagehand, and browser-use—are routinely deployed across automated web tasks: QA regression tests, competitor intelligence extraction, purchasing flows, and account workflows.
To bypass anti-bot systems (Cloudflare Turnstile, DataDome, Akamai, PerimeterX), developers equip these agents with residential proxies. However, engineering teams quickly run into a painful economic reality: residential proxy bills routinely surpass the token costs of the LLMs themselves.
💸 The $20/GB Problem: Blind Proxy Routing
Residential bandwidth costs anywhere between $10.00 and $25.00 USD per Gigabyte.
When an AI agent navigates a modern website, it downloads:
- HTML DOM: ~60 KB
- Core APIs: ~30 KB
-
Web Fonts (
.woff2,.ttf): ~400 KB - Hero Images & WebP Graphics: ~2.5 MB
- Massive JavaScript Bundles: ~4.0 MB
-
Background Autoplay Videos (
.mp4): ~8.0 MB to 15.0 MB
Traditional Agent Setup:
[Browser Agent] ===(100% Residential Tunnel @ $15/GB)===> [Web Page]
├── 60 KB HTML (Needed for reasoning)
├── 2.5 MB Images (Wasted $$$)
├── 4.0 MB JS Bundles (Wasted $$$)
└── 10.0 MB Videos (Wasted $$$)
Result: >95% of residential data budget wasted on non-essential static assets.
Worse, standard Chromium builds in Playwright or Puppeteer emit distinct TLS Client Hello fingerprints (ciphersuite sequences and extension orders) that trigger bot firewalls regardless of whether a residential IP is used. Teams burn through expensive IPs without addressing the root detection mechanism.
To solve this, we built ProxyShield: an open Model Context Protocol (MCP) server in Python that enforces split-tunnel proxy routing, caches static vendor assets in a content-addressable SQLite WAL store, rotates authentic TLS JA3/JA4 fingerprints, and auto-quarantines blocked IPs with an anti-bot circuit breaker.
🏗️ System Architecture
ProxyShield acts as an authoritative network governance sidecar between your browser agents and the public internet:
+-------------------------------------------------------------------------+
| AI Browser Agent (Claude / Stagehand / Playwright) |
+-------------------------------------------------------------------------+
|
(MCP JSON-RPC Tools)
v
+-------------------------------------------------------------------------+
| ProxyShield MCP Server |
+-------------------------------------------------------------------------+
| | |
v v v
+-----------------+ +-----------------+ +-----------------+
| Static Asset | | Hybrid Proxy | | Anti-Bot |
| Filter & Cache | | Pool (SQLite) | | Circuit Breaker |
| (85% Bandwidth) | | (DC / ISP / Res)| | (Cloudflare/DD) |
+-----------------+ +-----------------+ +-----------------+
| | |
+-----------------------+-----------------------+
|
v
+------------------------------------------------+
| TLS JA3/JA4 Handshake & Client Hello Engine |
+------------------------------------------------+
|
v
+-----------------------+
| Target Web Endpoints |
+-----------------------+
1. Split-Tunnel Routing: Diverting Heavy Static Assets
Static assets like images, fonts, stylesheets, and background videos do not determine your session's bot trust score. ProxyShield intercepts URLs before dispatch and categorizes them:
import re
from urllib.parse import urlparse
STATIC_EXTENSIONS = {
".png", ".jpg", ".jpeg", ".webp", ".avif", ".gif", ".svg",
".woff", ".woff2", ".ttf", ".otf", ".mp4", ".webm", ".css"
}
def route_request(url: str, force_residential: bool = False) -> dict:
parsed = urlparse(url)
path = parsed.path.lower()
# 1. High-trust residential: reserved for auth/checkout
is_sensitive = any(re.search(p, path) for p in [r"/login\b", r"/auth\b", r"/checkout\b"])
if force_residential or is_sensitive:
return {
"tier": "residential",
"bypass_proxy": False,
"reason": "Sensitive interaction requires residential IP."
}
# 2. Direct or datacenter: bypass residential billing for static media
for ext in STATIC_EXTENSIONS:
if path.endswith(ext) or f"{ext}?" in path:
return {
"tier": "direct",
"bypass_proxy": True,
"reason": f"Static asset ({ext}) bypassed to conserve quota."
}
# 3. Economical datacenter proxy for general navigation
return {
"tier": "datacenter",
"bypass_proxy": False,
"reason": "General web request. Use datacenter proxy."
}
By filtering static assets, residential bandwidth consumption immediately drops by 70% to 85%.
2. Content-Addressable Asset Cache (SQLite WAL)
Across multiple browser agent sessions, agents frequently download the exact same 3MB React bundle, Google Fonts, or UI stylesheets.
ProxyShield stores these static payloads indexed by their SHA-256 URL hash:
import hashlib
import sqlite3
def get_or_cache_asset(conn: sqlite3.Connection, url: str, fetcher_fn) -> bytes:
url_hash = hashlib.sha256(url.strip().encode("utf-8")).hexdigest()
row = conn.execute(
"SELECT data_blob FROM cached_assets WHERE url_hash = ?", (url_hash,)
).fetchone()
if row:
conn.execute("UPDATE cached_assets SET hit_count = hit_count + 1 WHERE url_hash = ?", (url_hash,))
return row[0] # Instant local cache hit: 0 bytes consumed!
# Cache miss: fetch once and store
data = fetcher_fn(url)
conn.execute(
"INSERT INTO cached_assets (url_hash, url, data_blob, byte_size) VALUES (?, ?, ?, ?)",
(url_hash, url, data, len(data))
)
return data
3. Emulating Authentic TLS Handshakes (JA3 / JA4)
Modern anti-bot firewalls check the TCP/TLS handshake before any HTTP headers are read. If your Python or Node agent connects with standard OpenSSL defaults, it gets blocked before receiving a response.
ProxyShield models real Chrome 131, Firefox 133, and Safari 18 TLS Client Hello profiles:
TLS_PROFILES = {
"chrome_131": {
"tls_version": "771", # TLS 1.2/1.3
"ciphers": ["4865", "4866", "4867", "49195", "49199", "52393"],
"extensions": ["0", "23", "65281", "10", "11", "35", "16", "5", "51", "43"],
"elliptic_curves": ["29", "23", "24"],
"alpn": ["h2", "http/1.1"],
"ja4_signature": "t13d1516h2_8daaf6152771_01906f0e7aa3"
}
}
When integrating with tools like curl-impersonate or browser drivers, ProxyShield provides exact ciphersuite, ALPN, and curve parameters that match human browser sessions.
4. Anti-Bot Circuit Breaker & Auto-Quarantine
When an IP triggers a bot challenge, continuing to make requests burns residential data and damages proxy reputation. ProxyShield inspects response payloads and headers:
def inspect_response(status_code: int, headers: dict, body: str) -> dict:
is_blocked = status_code in (403, 429)
is_turnstile = "cf-turnstile" in body.lower() or "checking your browser" in body.lower()
if is_turnstile or is_blocked:
return {
"action": "quarantine_ip_and_escalate",
"quarantine_duration_sec": 300,
"recommendation": "Cloudflare challenge detected. Quarantine IP, rotate TLS fingerprint, and switch to residential pool."
}
return {"action": "pass"}
Failed IPs are placed into a 300-second quarantine in SQLite, preventing agents from repeatedly burning failing proxies.
⚡ Setup with Claude Desktop & Cursor
Connect ProxyShield to your local agent environment:
{
"mcpServers": {
"proxyshield": {
"command": "python3",
"args": ["-m", "proxyshield.server"]
}
}
}
Now, when your agent scripts browser navigation:
"Before downloading assets for this automation, check ProxyShield for routing instructions and evasion headers."
The agent routes media directly, retrieves cached vendor scripts locally, and uses residential tunnels solely when entering checkout or authentication pages.
🚀 Get Started: Open-Source & Enterprise
The open-source ProxyShield Lite is available immediately on GitHub under the MIT license:
👉 GitHub Repository: https://github.com/johannschiffer/proxyshield-mcp
For enterprise development teams requiring the persistent SQLite WAL hybrid proxy pool, Content-Addressable Asset Cache, automated anti-bot circuit breaking, and complete Docker Compose manifests:
👉 Explore ProxyShield Pro on Gumroad ($14.99 USD)
How do you manage proxy bandwidth and anti-bot evasion in your AI browser pipelines? Let's discuss in the comments below!
來源:DEV Community · dev.to