3.4 Exa / Tavily / Firecrawl:三种搜索抓取路线

三个都是一等公民,但路线不同

这三个在 2026 年搜索量榜单上都进了前 25(Firecrawl 约 7.2k 排 21)。它们都围绕“从互联网取内容”,但设计哲学不同:

Exa Tavily Firecrawl
核心 语义 / 神经搜索 实时搜索 + 抽取 抓取 + 爬取 + 抽取
仓库 exa-labs/exa-mcp-server ★5158 tavily-ai/tavily-mcp ★2452 firecrawl/firecrawl-mcp-server ★7666
npm 包 exa-mcp-server 3.4.2 tavily-mcp 0.2.22 firecrawl-mcp 3.33.4
需要 API key 是 是 是
远程端点 https://mcp.exa.ai/mcp — —
一句话 按意思找页面 按时效找答案 按结构抓数据

选型决策

你要什么?
├─ 按语义找相关页面("找几篇讲 X 的好文章")
│    └─ Exa
├─ 要最新事实 / 新闻("今天发生了什么")
│    └─ Tavily
├─ 把整个站点或一批 URL 变成干净数据
│    └─ Firecrawl
└─ 只是读一个已知 URL
     └─ 回 2.4 fetch,别用这三个

Exa

官方描述:Exa MCP for web search and web crawling(用于网页搜索与爬取的 Exa MCP)。社区对它的评价是“semantic web search built for agents”(为 agent 构建的语义网页搜索)。

支持两种接法:

本地 stdio:

- insert:
    - id: exa
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: exa
        transport: stdio
        command: npx
        args: ["-y", "exa-mcp-server"]
        env:
          EXA_API_KEY: !!js process.env.EXA_API_KEY
        cwd: !!js process.cwd()

远程 HTTP(官方端点):

        transport: streamable-http
        url: https://mcp.exa.ai/mcp

远程端点走 OAuth,不用在本地放 key,适合不想在配置里碰密钥的场景(详见 1.3 远程服务器)。

典型用法:

用 exa 搜索"postgres 索引选择 实践",
找 5 篇高质量文章,返回标题、URL、摘要。

Tavily

官方描述:Production ready MCP server with real-time search, extract, crawl(生产可用的 MCP 服务器,提供实时搜索、抽取、爬取)。

它和 Exa 的最大差异是时效性。需要“今天的数据”时选它。

- insert:
    - id: tavily
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: tavily
        transport: stdio
        command: npx
        args: ["-y", "tavily-mcp"]
        env:
          TAVILY_API_KEY: !!js process.env.TAVILY_API_KEY
        cwd: !!js process.cwd()

典型用法:

用 tavily 搜索过去 7 天关于"AI agent 框架"的新闻,
按日期列标题、来源、要点。

Firecrawl

官方描述:Official Firecrawl MCP server, the context API for AI agents(官方 Firecrawl MCP 服务器,面向 AI agent 的上下文 API)。能力是抓取、爬取、抽取结构化数据、搜索网页。

它是三者里唯一主打批量结构化抽取的。

- insert:
    - id: firecrawl
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: firecrawl
        transport: stdio
        command: npx
        args: ["-y", "firecrawl-mcp"]
        env:
          FIRECRAWL_API_KEY: !!js process.env.FIRECRAWL_API_KEY
        cwd: !!js process.cwd()

典型用法:

用 firecrawl 抓取 https://example.com/blog 列表页与前 10 篇文章,
抽取标题、作者、发布日期、正文前 300 字,输出 JSON。

一个共同前提:都要 API key

三个都需注册拿 key。对使用者有两个现实提醒:

  1. 注意额度与计费,三个都是按量计费的云服务,先用免费额度试。
  2. 密钥写法统一:放进 config.env,用 !!js process.env.XXX 读取,不要写明文进 YAML。

排错

现象 原因
401 key 未设或写错了环境变量名
返回结果为空 查询太窄,放宽关键词
抓取被拒 目标站反爬,换服务或换目标
超出配额 免费额度用尽,需升级

小结

  • 三个都需 API key,路线不同:Exa 语义搜索、Tavily 实时搜索、Firecrawl 批量抽取。
  • 只是读一个已知 URL 时,回到 fetch 更轻。
  • 密钥一律 config.env + !!js,不写明文。

延伸阅读