关于 web-retrieval-mcp
web-retrieval-mcp 是供 AI Agent 开展溯源网络研究的 MCP 服务,整合网页搜索、分层页面抓取,以及论文和开发者资料检索,并显示来源与抓取路径。
主要功能
- 01使用 Exa 或 Tavily 搜索网页
- 02分层抓取页面并支持回退
- 03生成摘要或基于页面的回答
- 04检索 AI/ML 论文
- 05搜索开发文档与代码仓库资料
- 06显示来源及抓取路径
适用场景
- 01查找主题资料并保留来源链接
- 02抓取需要浏览器渲染的页面
- 03查找 AI/ML 论文及相关研究
- 04搜索文档、README、议题和已合并 PR
MCP 相关
向 MCP 客户端提供六种只读工具,用于网页搜索、页面抓取、AI/ML 论文研究和开发者资料搜索。支持 stdio 与 Streamable HTTP 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
web-retrieval-mcp — 面向 AI Agent 的可靠 MCP 网页搜索与抓取
一个用于基于来源开展网页研究的开源 Model Context Protocol (MCP) 服务。将 Codex CLI 和 Codex IDE 扩展、Claude Code、Claude Desktop、Cursor、ChatGPT 桌面版或任何其他兼容的 MCP 客户端,连接到六个只读工具,以使用 Exa 或 Tavily 搜索、通过 Exa → Camoufox → Tavily → Firecrawl 进行可靠的网页抓取、发现 AI/ML 论文,以及搜索开发者资源;同时提供明确的来源信息、可选的本地缓存和 SSRF 防护。
为何使用它? · 快速开始 · 工具 · 路由 · 配置 · 安全 · 常见问题
为何使用 web-retrieval-mcp?
当 Agent 能够了解每条结果的来源、选择合适的抓取策略,并在某个服务商或网页访问方式失效时恢复,网页研究就会更加可靠。web-retrieval-mcp 将这些控制纳入工具契约:
- 区分不同来源。 默认搜索会为每条结果返回一个独立区块,其中包含标题、URL、摘要和文本,最后附上
Sources尾注。Exa 深度模式还会返回清晰标注的综合回答;如果 Exa 提供了依据,则会一并附上,然后再返回各来源独立的结果区块。 - 使用多种抓取路径。 搜索可使用 Exa 或 Tavily,并在必要时回退到 Firecrawl。完整网页抓取可从索引内容逐级切换到本地 Camoufox 浏览器、可选的 Tavily Extract 和 Firecrawl。
- 了解实际提供回答的来源。 抓取响应会标明提供内容的层级、缓存状态、语义模式和截断情况,而不会隐藏所用路径。
- 按需获取合适的内容形式。 抓取易读的网页正文、简明摘要,或针对问题提供有依据的回答。可控制内容新鲜度、渲染方式、域名、日期、结果数量和每条结果的文本长度。
- 搜索专业语料库。 发现 AI/ML 论文、查看与查询相关的全文段落、扩展到相关论文,并搜索开发者文档、README、问题和已合并的拉取请求。
- 掌控部署边界。 可通过 stdio 在本地运行,也可托管回环 HTTP 服务;自行选择服务商和密钥存储方式;还可选择在私有 Valkey sidecar 中缓存已完成的抓取。
- 明确报告失败。 不支持的服务商选项、缺少的可选软件包和不可用的凭据都会在工具结果中明确报错。Tavily 参数映射、Firecrawl 回退时的过滤器缺失,以及 Exa 类别迁移都会对调用方可见;其他 Exa 过滤器的丢弃情况则会写入服务端诊断信息。
与内置 Agent 网页工具的比较
内置功能因 Agent 而异,也可能随着时间推移而改进。因此,有意义的比较不是“所有默认功能都不好”,而是你是否需要一个可移植、可检查的检索层,并具备当前客户端未提供的控制功能。
| 需求 | 常见的内置搜索/抓取功能 | web-retrieval-mcp |
|---|---|---|
| 搜索输出 | 由客户端定义的结果或综合格式 | 默认搜索会返回按来源分隔的内容块以及 Sources;Exa 深度模式还会添加带标签的综合结果 |
| 后端选择 | 通常由客户端管理提供商和路由 | 使用 Exa 或 Tavily 搜索,并明确说明 Firecrawl 回退机制 |
| 难以访问的页面 | 客户端特定的单一访问路径 | 已索引内容、受保护的本地浏览器渲染、Tavily Extract 和 Firecrawl 层级 |
| 检索意图 | 通常是搜索或页面文本 | 完整正文、简明摘要或基于查询的页面问答 |
| 研究发现 | 通用网页索引 | 除网页搜索外,还提供专门的论文和开发者来源工具 |
| 时效性与筛选 | 取决于客户端提供的功能 | 日期范围、小时级时效、域名、类别、结果数量上限和强制更新 |
| 可审计性 | 客户端特定 | 抓取层级/缓存/截断说明;Tavily 和 Firecrawl 搜索回退标签;在支持时明确提示筛选条件 |
| 运维 | 由客户端定义;通常托管或不透明 | 本地 stdio 或可自托管的环回 HTTP,可选私有 UDS 缓存 |
| 安全策略 | 客户端特定 | 初始 URL 验证,以及受保护的浏览器请求和重定向 |
默认情况下,可将其作为独立的补充检索渠道使用。如果你希望用它替代 Claude Code 内置的 WebSearch 和 WebFetch,该软件包还提供可选且支持预览的钩子安装器。
快速开始
需要 Python 3.10 或更高版本。
1. 安装
要在隔离环境中使用完整功能集:
pipx install --include-deps 'web-retrieval-mcp[all]'
camoufox fetch
--include-deps 会从隔离的 pipx 环境中提供 Camoufox 自带的命令;第二条命令会下载其管理的浏览器。如果不需要本地渲染,可安装基础软件包或选定的非渲染扩展,并跳过浏览器下载。
要精简安装 Exa + Firecrawl:
pipx install web-retrieval-mcp
安装 uv 后,无需永久安装,即可在临时隔离环境中运行基础软件包:
uvx web-retrieval-mcp
或者安装到现有的虚拟环境中:
python -m pip install 'web-retrieval-mcp[all]'
python -m camoufox fetch
每当安装 render 扩展并希望让 Camoufox 处理 render="auto" 或 render="always" 调用时,都必须下载浏览器。
可组合使用可选扩展:
| 扩展 | 添加的功能 |
|---|---|
tavily | Tavily 搜索和 Tavily Extract |
render | 本地 Camoufox/Playwright 渲染 |
cache | 用于缓存已完成结果的 Valkey 客户端 |
keyring | 跨平台原生机密存储访问 |
all | 上述所有可选运行时功能 |
2. 添加提供商凭据
若要获得最广泛的路由覆盖范围,请配置 Exa 和 Firecrawl;如果需要可选择提供商的搜索或另一个全文抓取层级,再添加 Tavily。
export EXA_API_KEY='<your-exa-api-key>'
export FIRECRAWL_API_KEY='<your-firecrawl-api-key>'
export TAVILY_API_KEY='<your-tavily-api-key>' # optional
启动服务不需要这三个密钥。工具会按需解析凭据,并报告所选路由缺少哪些凭据。有关密钥文件和操作系统密钥存储替代方案,请参阅凭据存储。
在 2026-09-01 检查时,三个提供商都提供了无需信用卡的入门额度;套餐和单位成本可能会变动,因此估算工作负载前请查看实时定价:
| 提供商 | 2026-09-01 检查的入门额度 | 用途 |
|---|---|---|
| Exa | 注册赠送 $20 额度,另有每月 $10 的 API 额度 | 默认网页搜索和第一层索引内容抓取 |
| Firecrawl | 每月 1,000 个额度 | 搜索/抓取备用方案,以及研究/开发者索引 |
| Tavily | 每月 1,000 个 API 额度 | 可选搜索提供商和全文提取层级 |
| Camoufox | 本地开源浏览器 | 在你的机器上抓取由 JavaScript 渲染的网页 |
3. 连接 MCP 客户端
Codex CLI 和 Codex IDE 扩展共用 MCP 配置。使用 CLI 添加服务,然后确认已注册:
codex mcp add web-retrieval -- web-retrieval-mcp
codex mcp list
使用 uvx 且此前未安装:
codex mcp add web-retrieval -- uvx web-retrieval-mcp
有关当前 CLI、IDE 和配置文件的详情,请参阅 OpenAI 的 Codex MCP 文档。
Claude Code:
claude mcp add web-retrieval -- web-retrieval-mcp
使用 uvx 且此前未安装:
claude mcp add web-retrieval -- uvx web-retrieval-mcp
Claude Desktop、Cursor 和其他接受 mcpServers 对象的客户端可以使用:
{
"mcpServers": {
"web-retrieval": {
"command": "web-retrieval-mcp"
}
}
}
此配置假定可执行文件位于客户端的 PATH 中。使用 uvx 启动时,请使用 "command": "uvx" 和 "args": ["web-retrieval-mcp"]。
如果桌面客户端无法继承你的 Shell 环境,请使用下文所述的私有密钥文件,或将密钥值直接填入客户端受保护的环境配置中。除非客户端文档说明支持,否则不要依赖 ${VARIABLE} 插值。
ChatGPT 桌面版以及设置方式不同的客户端,可以通过其当前版本支持的 MCP 传输方式进行连接。此服务默认使用 stdio,也可以提供 Streamable HTTP;请查阅客户端文档,了解其配置格式和支持的传输方式。
4. 给 Agent 一个实际任务
连接 MCP 服务后,提示词可以保持自然:
Search the web for the latest primary documentation about Python package metadata.
Keep each source separate and preserve its URL.
Fetch https://example.com/report, force a fresh retrieval, and answer only:
What methodology did the authors use?
Find AI/ML papers about retrieval reranking, inspect the strongest paper for its
reported benchmark result, then find newer work that cites it.
Search merged pull requests and documentation for the origin of this exact error:
"transport closed".
六个只读工具
所有工具都带有 MCP 的只读注解。MCP 客户端连接时会收到完整的生成式 输入架构和描述。
| 工具 | 精简签名 | 最适合 |
|---|---|---|
web_search | web_search(query, num_results=8, mode="auto", …, provider=None) | 通过 Exa 或 Tavily 执行通用网页搜索,提供按来源区分的结果,并在必要时回退到 Firecrawl |
web_fetch | web_fetch(url, render="auto", max_chars=None, max_age_hours=None, mode="full", question=None, tavily=None) | 通过分层抓取流程获取易读的网页正文、简洁摘要或有依据的回答 |
research_papers | research_papers(query, k=8) | 通过 Firecrawl 的 Research Index 搜索并排序 AI/ML 论文 |
research_paper | research_paper(paper_id, query=None) | 获取论文元数据,以及可选的、与查询相关的全文段落以核实论断 |
research_similar | research_similar(paper_id, intent, k=8, mode="similar", …) | 根据自然语言意图查找相关论文、引用该论文的论文或参考文献 |
research_github | research_github(query, k=8, passages=2, types=None, repos=None) | 查找开发者文档、仓库 README、议题和已合并的拉取请求 |
web_search 支持按相关性或日期筛选、包含或排除域名、设置发布时间范围、生成逐条结果摘要,以及使用 Exa 的快速/深度搜索模式。
Tavily 也支持等效控制(若其 API 提供相应功能);近似处理和未应用的控制项会在输出中说明。
研究论文索引以 arXiv 为主,最适用于 AI/ML。对于该范围之外的学术研究,
请使用 web_search(category="publication")。
检索工作原理
搜索路由
Exa 是默认搜索提供商。若要在单次调用中选择 Tavily,请使用
provider="tavily",也可以进行全局设置:
export WEB_SEARCH_PROVIDER=tavily
只接受 exa 和 tavily。如果所选提供商失败,服务端会尝试使用
Firecrawl,并在结果中指出失败的主要提供商和实际提供服务的备用提供商。
抓取路由
对于自动模式下的普通全文请求:
Exa indexed contents
↓ unusable or unavailable
guarded local Camoufox browser
↓ unusable or unavailable
optional Tavily Extract
↓ unusable or unavailable
Firecrawl
render="auto"使用该自适应级联流程。render="never"禁用本地浏览器。render="always"从本地浏览器开始,并跳过 Exa;可选的 Tavily 和 Firecrawl 仍可用作后备。mode="concise"请求生成简短摘要。question="…"请求有依据的回答,而非整篇网页内容。max_age_hours=0强制使用提供商获取最新内容;-1请求 Exa 始终使用缓存的 行为;正值用于设置新鲜度时间范围。- 超过 Exa 正文长度上限的明确全文请求,会从能够满足所请求长度的层级开始, 而不会悄悄返回较短的正文。
若要在单次调用中启用 Tavily Extract,请使用 tavily=true,也可以进行全局设置:
export WEB_FETCH_TAVILY_TIER=1
Tavily Extract 是全文层级。如果无法满足简洁回答、问答或明确的新鲜度要求,服务端会跳过它。
凭据存储
服务端会按以下顺序延迟解析每个 API 密钥:
- 进程环境中的
EXA_API_KEY、FIRECRAWL_API_KEY或TAVILY_API_KEY。 - dotenv 格式的私有密钥文件。
- 可选的 Python
keyring包。 - macOS Keychain 或 Linux Secret Service 命令行客户端。
默认密钥文件为:
- Linux/macOS:
${XDG_CONFIG_HOME:-~/.config}/web-retrieval-mcp/keys.env - Windows:
%APPDATA%\web-retrieval-mcp\keys.env
使用 WEB_RETRIEVAL_MCP_ENV_FILE 覆盖文件路径,或使用
WEB_RETRIEVAL_MCP_CONFIG_DIR 覆盖其目录。在 POSIX 系统上,该文件不得允许
组用户或其他用户读取:
install -d -m 700 ~/.config/web-retrieval-mcp
printf '%s\n' \
'EXA_API_KEY=<your-exa-api-key>' \
'FIRECRAWL_API_KEY=<your-firecrawl-api-key>' \
'TAVILY_API_KEY=<your-tavily-api-key>' \
> ~/.config/web-retrieval-mcp/keys.env
chmod 600 ~/.config/web-retrieval-mcp/keys.env
对于 keyring,请将每个密钥存储在服务 web-retrieval-mcp 下,并将环境变量名称用作用户名:
keyring set web-retrieval-mcp EXA_API_KEY
keyring set web-retrieval-mcp FIRECRAWL_API_KEY
keyring set web-retrieval-mcp TAVILY_API_KEY
凭据仅保存在进程内存中;从提供商错误和显示的 URL 中会将其隐藏,并且绝不会将其放入提供商命令参数中。
配置参考
| 设置 | 默认值 | 用途 |
|---|---|---|
EXA_API_KEY | 未设置 | Exa 搜索和索引页面内容 |
FIRECRAWL_API_KEY | 未设置 | Firecrawl 回退、研究论文和开发者搜索 |
TAVILY_API_KEY | 未设置 | Tavily Search 和 Extract;还需要 tavily extra |
WEB_SEARCH_PROVIDER | exa | 默认 web_search 提供方:exa 或 tavily |
WEB_FETCH_TAVILY_TIER | false | 在符合条件的抓取流程中全局启用 Tavily Extract |
WEB_RETRIEVAL_MCP_ENV_FILE | 平台密钥文件路径 | 覆盖确切的 dotenv 密钥文件 |
WEB_RETRIEVAL_MCP_CONFIG_DIR | 平台配置目录 | 覆盖包含 keys.env 的目录 |
WEB_RETRIEVAL_MCP_CACHE | auto | 已完成抓取的缓存:auto、on 或 off |
WEB_RETRIEVAL_MCP_VALKEY_SOCKET | 未设置 | 私有 Valkey Unix 域套接字的绝对路径 |
WEB_RETRIEVAL_MCP_HOST | 127.0.0.1 | Streamable HTTP 绑定地址 |
WEB_RETRIEVAL_MCP_PORT | 8100 | Streamable HTTP 端口 |
布尔设置接受 1/0、true/false、yes/no 和 on/off;无效值会明确报错,
而不会被猜测解释。
可选的已完成结果缓存
安装 cache extra,并将服务指向私有、非持久化的 Valkey
Unix 域套接字:
export WEB_RETRIEVAL_MCP_CACHE=on
export WEB_RETRIEVAL_MCP_VALKEY_SOCKET=/absolute/private/path/valkey.sock
符合条件且成功的抓取结果会存储 24 小时。包含凭据的 URL、用户信息、强制或正向新鲜度设置,以及 render="always" 均会跳过缓存回放。缓存
错误会回退到常规提供方检索。默认的 auto 仅在非 Windows 主机上安装了 Valkey 客户端时启用缓存;on 仍会尝试使用
已配置的 Unix 套接字,发生错误时则回退;off 会禁用缓存。隐私模型、singleflight 行为和最精简的 sidecar 配置,请参阅缓存指南。
Streamable HTTP 传输
stdio 是本地 MCP 客户端的默认且推荐的传输方式:
web-retrieval-mcp
# equivalent: python -m web_retrieval_mcp
对于共享的本地进程,可使用无状态 Streamable HTTP:
web-retrieval-mcp --http --host 127.0.0.1 --port 8100
HTTP 传输没有内置身份验证。除非添加经过身份验证的安全边界和适当的网络控制措施,否则请将其限制在 loopback 上。
可选的 Claude Code 替换策略
该软件包包含一个 PreToolUse 钩子,可拒绝 Claude Code 内置的
WebSearch 和 WebFetch,并引导 Agent 改用此 MCP 服务。请先预览
具体的设置变更:
web-retrieval-mcp-install --print
明确安装或移除该钩子:
web-retrieval-mcp-install
web-retrieval-mcp-install --register-mcp
web-retrieval-mcp-install --uninstall
安装程序具备幂等性,并会在写入前备份现有设置文件。此可选钩子是该软件包中唯一特定于 Claude Code 的集成。MCP 服务本身不依赖特定客户端,无需此钩子也可作为补充工具使用。
从源代码安装
直接安装经过审核的源代码:
git clone https://github.com/VelvetSP/web-retrieval-mcp.git
cd web-retrieval-mcp
python -m pip install '.[all]'
python -m camoufox fetch
用于开发:
python -m pip install -e '.[all,dev]'
./run-tests.sh
发布检查会构建 wheel 和 sdist 制品,将 wheel 安装到干净的虚拟环境中,使用 loopback 提供方替身测试已安装的 MCP 命令,并运行单元测试和传输测试套件。浏览器或 SSRF 行为变更还需要运行 python test_ssrf_redirect_live.py。功能矩阵和验收规范,请参阅测试约定。
安全模型
- 仅接受
http和https初始 URL。 - 初始主机必须仅解析为全球可路由地址。
- 本地浏览器会监视文档请求,并在将内容返回给调用方之前验证每一跳重定向。
- 凭据在进程内解析,并会从错误和显示的 URL 中隐藏。
- 提供商响应和页面正文均为不可信数据;Agent 不得将检索内容中嵌入的指令视为权威。
应用程序检查无法证明在 DNS 重绑定竞态期间绝不会有数据包到达私有地址。针对这类威胁模型的部署需要使用验证型正向代理或等效的网络出口策略。请参阅安全策略,如发现疑似漏洞,请通过 GitHub 的私密漏洞报告渠道提交,而不要公开创建 issue。
常见问题
web-retrieval-mcp 是什么?
这是一个开源 MCP 服务,为 AI Agent 提供可靠的网页搜索、分层网页检索、研究论文发现和开发者源码搜索。它可通过本地 stdio 与任何兼容的 MCP 客户端配合使用,也可以提供无状态的 Streamable HTTP 服务。
这是 MCP 网页搜索服务还是 MCP 网页抓取服务?
两者都是。web_search 用于发现网页并为其排序;web_fetch 从单个 URL 提取可读内容,并可使用真实的本地浏览器处理 JavaScript 密集型网页。该服务还提供专业论文和开发者索引,这些是普通网页抓取无法提供的。
它会取代 Agent 内置的网页搜索吗?
可以,但不一定需要。工具说明建议采用独立的补充搜索渠道,因为两个检索系统可以提供有用的来源多样性。Claude Code 用户可以选择启用捆绑的替换钩子,以强制使用单一路径。
哪些 AI Agent 和 MCP 客户端可以使用它?
该服务默认通过 stdio 提供标准 MCP,也可选择使用 Streamable HTTP。文档中的客户端示例包括 Codex CLI、Codex IDE 扩展、Claude Code、Claude Desktop、Cursor 和 ChatGPT 桌面应用;其他支持 MCP 的 Agent 也可以使用。兼容性取决于客户端版本及其支持的 MCP 传输方式,因此请结合上方的服务命令参阅相应的客户端文档。
为什么要同时使用 Exa、Firecrawl、Tavily 和 Camoufox?
它们分别应对不同的故障情况。Exa 提供索引搜索和内容;Tavily 是备用搜索提供商,也可选作提取器;Camoufox 在本地渲染网页;Firecrawl 提供最终网页回退,以及专业研究和开发者索引。服务会根据请求在这些选项中进行选择,并说明成功的层级。
我需要每个提供商的密钥吗?
不需要。Exa 是通用搜索和第一层内容检索的默认选项。Firecrawl 可启用回退功能和全部四种研究工具。Tavily 是可选项。即使未配置可选路径,服务仍会列出全部六种工具;如果调用选择了不可用的功能,则会返回可执行的错误提示。
web-retrieval-mcp 免费吗?
该项目采用 MIT 许可证。提供商用量费用由你自己的账户承担;目前每家提供商都提供入门额度,但配额和价格可能会变动。Camoufox 在本地运行,无需按量计费的检索 API。
支持哪些操作系统?
基础 Python 服务与平台无关。环境变量和密钥文件凭据可在 Linux、macOS 和 Windows 上使用。Valkey UDS 缓存在 Windows 上不可用;本地浏览器的可用性取决于 Camoufox/Playwright 支持的平台。
是否支持 RAG 和自主研究 Agent?
支持。按来源区分的结果约定、明确的 URL、可控的文本预算、基于页面内容的问题、专业索引以及确定性的来源追溯机制,使这些工具适合作为 RAG 流水线和研究 Agent 的检索层。服务会返回证据;调用应用仍需负责评估、引用和提示词注入处理。
项目链接
欢迎贡献。请将 stdout 留作 JSON-RPC 专用,将诊断信息发送到
stderr,为变更的行为补充公共边界验收测试,并在创建拉取请求前运行
./run-tests.sh。
许可证
MIT © VelvetSP
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。