Browser-aware web execution layer for LLM agents. Combines direct HTTP fetching with a Chrome extension bridge to give AI assistants authenticated, JavaScript-rendered web access.
+------------------+
| Claude / LLM |
+--------+---------+
|
JSON-RPC (stdio or SSE)
|
+--------v---------+
| exfetch CLI |
| (Rust binary) |
+--+-----+------+--+
| | |
+-------------+ | +--------------+
| | |
+-------v-------+ +-------v-------+ +----------v---------+
| HTTP Fetcher | | Search Engine | | WebSocket Bridge |
| (reqwest+TLS) | | (DDG/SearXNG) | | (tokio-tungstenite)|
+-------+--------+ +---------------+ +----------+---------+
| |
+-------v--------+ +---------v---------+
| Content Extract | | Chrome Extension |
| readability/md | | (Manifest V3) |
+----------------+ +-------------------+
cargo install --path .exfetch fetch https://example.com
exfetch fetch https://example.com --markdown
exfetch fetch https://example.com --json
exfetch fetch https://example.com --raw
exfetch fetch https://example.com --max-length 5000exfetch search "rust programming language"
exfetch search "rust programming" --results 10
exfetch search "rust programming" --fetch # also fetch top results
exfetch search "rust programming" --json
exfetch search "query" --engine searxng --searxng-url https://searx.beexfetch serve # WebSocket server for browser extension
exfetch serve --mcp-stdio # MCP server over stdin/stdout
exfetch serve --mcp-sse 8080 # MCP server over SSE
exfetch serve --daemon # Fork to backgroundexfetch statusAdd to your Claude Code MCP configuration:
{
"mcpServers": {
"exfetch": {
"command": "exfetch",
"args": ["serve", "--mcp-stdio"]
}
}
}For claude.ai, you need a tunnel (cloudflared or ngrok) to expose the SSE endpoint:
# Terminal 1: start exfetch with SSE
exfetch serve --mcp-sse 8080
# Terminal 2: expose via tunnel
cloudflared tunnel --url http://localhost:8080
# or
ngrok http 8080Then configure the tunnel URL as a remote MCP server in claude.ai settings.
- Open
chrome://extensions/in Chrome - Enable "Developer mode"
- Click "Load unpacked"
- Select the
extension/chrome/directory - Start the server with
exfetch serve - The extension will auto-connect via WebSocket
exfetch reads configuration from ~/.config/exfetch/config.toml:
[defaults]
timeout = 15
user_agent = "exfetch/0.1"
search_engine = "duckduckgo" # or "searxng"
# searxng_url = "https://searx.be"
[policy]
blocked_domains = []
allow_cookie_read = false
max_requests_per_minute = 60
[tabs]
reuse_strategy = "exact"
open_in_background = trueAdd to your project's CLAUDE.md:
Use `exfetch <url>` to fetch web content. Use `exfetch search <query>` to search.
MIT