# web-retrieval-mcp

Provides agents with six read-only tools for search and multi-tier page extraction using Exa and Firecrawl. Built-in SSRF guards protect local network environments.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 6
- Author: VelvetSP
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/VelvetSP/web-retrieval-mcp
- Updated: 2026-09-01
- HTML: https://affpapa.org/en/nevibecode/mcp/web-retrieval-mcp

## What it does

This server connects agents to six read-only tools designed for web lookups and AI research papers. Web searches run primarily through Exa or Tavily, with automatic routing to Firecrawl when issues occur. Page retrieval uses a staged fallback path: it inspects cached content first, spins up a local Camoufox instance if needed, and escalates to Tavily Extract or Firecrawl.

Every retrieval response details the serving tier and cache status. The process blocks requests targeting private network ranges through SSRF filters on initial URLs and browser redirects. You need Python 3.10 or newer. Without running `camoufox fetch` after installing browser extras, local page rendering will fail.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Environment variables: `EXA_API_KEY`, `FIRECRAWL_API_KEY` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add web-retrieval-mcp -e EXA_API_KEY=<EXA_API_KEY> -e FIRECRAWL_API_KEY=<FIRECRAWL_API_KEY> -- uvx web-retrieval-mcp
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from web-retrieval-mcp <command>

### Codex

**Platform CLI**
```bash
codex mcp add web-retrieval-mcp --env EXA_API_KEY=<EXA_API_KEY> --env FIRECRAWL_API_KEY=<FIRECRAWL_API_KEY> -- uvx web-retrieval-mcp
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from web-retrieval-mcp <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "web-retrieval-mcp": {
            "command": "uvx",
            "args": [
                "web-retrieval-mcp"
            ],
            "env": {
                "EXA_API_KEY": "<EXA_API_KEY>",
                "FIRECRAWL_API_KEY": "<FIRECRAWL_API_KEY>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from web-retrieval-mcp <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "web-retrieval-mcp": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "web-retrieval-mcp"
            ],
            "env": {
                "EXA_API_KEY": "<EXA_API_KEY>",
                "FIRECRAWL_API_KEY": "<FIRECRAWL_API_KEY>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from web-retrieval-mcp <command>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e EXA_API_KEY=<EXA_API_KEY> -e FIRECRAWL_API_KEY=<FIRECRAWL_API_KEY> web-retrieval-mcp uvx web-retrieval-mcp
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from web-retrieval-mcp <command>

## When to use it
- Search machine learning publications with query-focused text extracts
- Inspect developer documentation, merged pull requests, and GitHub issues
- Retrieve blocked web pages through multi-tier extraction fallbacks
- Guard agent web queries against internal network SSRF vectors

## Example prompts
- Find recent research papers on mixture of experts and extract citations
- Retrieve the full text from this documentation page and summarize its API
- Search closed pull requests in the project repository for related bugfixes

## Similar
- [Scrapling MCP Server](https://affpapa.org/en/nevibecode/mcp/scrapling-mcp-server.md) — MCP server · ★ 89899
- [browser-use](https://affpapa.org/en/nevibecode/mcp/browser-use.md) — MCP server · ★ 119231
- [AIHawk](https://affpapa.org/en/nevibecode/mcp/aihawk.md) — MCP server · ★ 32260
- [Skyvern](https://affpapa.org/en/nevibecode/mcp/skyvern.md) — MCP server · ★ 23283
- [SeleniumBase MCP](https://affpapa.org/en/nevibecode/mcp/seleniumbase-mcp.md) — MCP server · ★ 13181
- [apify-mcp-server](https://affpapa.org/en/nevibecode/mcp/apify-mcp-server.md) — MCP server · ★ 13345

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
