v1.2.0 — fetch_url + API 2026-05-22 sync
Description
Mirrors the @competlab/sdk@1.2.0 release. Brings the MCP surface in line with the 2026-05-22 API ship.
✨ New tool: fetch_url
Fetch any URL with automatic JS-rendering and common bot-protection handling. Returns body, headers, and cleanStats. Optional cleanHtml strips HTML noise while preserving text content — significant token-cost win for LLM consumption (typical: ~90% reduction on content-heavy pages).
- Rate limit: 60 req/min per API key (tighter than the 1000/min default for other free tools)
- Honest degradation:
headersAvailable: falseis surfaced when targets use advanced behavioral fingerprinting - Pass-through validation: out-of-range knobs, IPv4/IPv6/localhost hosts, and the no-output combo (
bodyNeeded: false, headersNeeded: false) return preciseinvalid_parameterserrors
📡 New degradation discriminators (pass-through)
The MCP server stays a thin pass-through over the API. The 2026-05-22 response-shape additions flow through automatically — no client changes needed unless you want to handle the degraded case explicitly:
signalsAvailableonget_trust_signals_scanand per-competitor security headerspartialDetectiononget_tech_stack_scan(HTML-based detection still fires; only header-based hosting/CDN signals are affected)securitySignalsAvailable+ nullablesecurityGrade/securityScoreonget_tech_trust_dashboarddetails.reason: 'site_uses_behavioral_protection'on agent-adoptionlink-headers/cache-header-hygienechecks (scored: false, weight: 0 — no score impact)- New
BEHAVIORAL_PROTECTION_ADOPTEDalert type +previousSecurityProfilecontext field onlist_alerts - Counter rename:
meta.counters.n8nCalls→meta.counters.heavyFetchCallsonget_agent_adoption_scan
Tool descriptions for the 5 affected tools now include 1-line advisory notes so agents handle the degraded case cleanly without re-reading the spec.
📊 Counts
- Tool count: 32 → 33
- Free tools: 8 → 9
- Read-only: 29 → 30
✅ Verified
Smoke-tested against prod:
competlab.com(healthy) →headersAvailable: true, full body + headers,cleanStatsshowing 92.95% reductiong2.com(bot-protected) →headersAvailable: false, body populated, headers correctly absent- Negative test (
bodyNeeded: false, headersNeeded: false) → returns the locked 400invalid_parametersresponse verbatim
🔗 Companion release
- SDK:
@competlab/sdk@1.2.0(already published 2026-05-22)