Web access
Search and fetch, with the guards they need.
web_fetch retrieves a URL and reduces it to clean Markdown (a readability pass extracts the
main article, then converts to Markdown) — no key required. It’s SSRF-guarded: only http/https,
localhost and private/loopback/link-local addresses are blocked (including the cloud-metadata
endpoint 169.254.169.254), redirects are re-validated per hop, and the connection is pinned to the
validated IP. LUXE_WEB_ALLOW_PRIVATE=1 is an explicit opt-out for intentional internal fetches.
A GitHub repo URL is shallow-cloned into .luxe/gh-cache/ and its path returned so the agent
can read/grep/glob the real files; a blob URL fetches the raw file.
web_search works out of the box — no key, no account, no configuration. It falls back to
Exa’s public MCP endpoint, so a fresh install can research immediately. Set BRAVE_API_KEY,
TAVILY_API_KEY, or EXA_API_KEY to route through that vendor instead; an explicit key always
wins.
Results carry the relevant passage from each page, not just a snippet — so the model can
usually answer without a follow-up web_fetch. Returning bare links is what turns one research
question into six round-trips. Searches also take several query phrasings at once, plus domain and
recency filters:
{
"queries": ["tokio 1.48 release notes", "tokio 1.48 breaking changes"],
"domains": ["github.com", "-pinterest.com"], // '-' excludes
"recency": "month",
"n": 5
}
Output is compact markdown, capped like every other search tool. To check the live endpoint’s response shape after an upstream change:
LUXE_TEST_LIVE_WEB=1 cargo test -p luxe-tools --test live_exa_mcp -- --nocapture