2.4 fetch:让模型读网页

它是什么

官方描述:fetch and convert web content for the model——抓取网页内容并转换成模型可用的形式。Python 实现,包名 mcp-server-fetch,版本 2026.10.19。

在 2026 年 3 月搜索量榜单排第 41(约 2.9k/月)。同样是“基础到不需要搜索”的骨干——大家直接装、不再去搜教程。

它解决什么

模型的训练数据有截止日期,也不知道你公司内网文档的内容。fetch 让它能现场读网页,并把 HTML 转成干净的 markdown 再喂给模型。

没有它,模型只能靠猜;有它,模型能引原文。这是“让回答有出处”最直接的手段。

安装与配置

- insert:
    - id: fetch
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: fetch
        transport: stdio
        command: uvx
        args: ["mcp-server-fetch"]
        cwd: !!js process.cwd()

或 pip install mcp-server-fetch 后用 python -m mcp_server_fetch。

serverName 用 fetch 即可,工具前缀会变成 mcp__fetch__fetch。

典型用法

读文档:

用 fetch 抓取 https://example.com/docs/api,
提取所有接口路径与方法,整理成表格。

对比两个版本:

用 fetch 分别抓取 v1 与 v2 的 changelog 页面,
列出新增、废弃、移除三类变更。

定期巡检:

用 fetch 抓取状态页,提取当前各服务状态,
与昨天记录的值对比,标出变化。

带出处的问答:

用 fetch 抓取这篇官方公告,
基于原文回答"下个版本什么时候发布",并注明引用段落。

抓取后落盘复用:

用 fetch 抓取这篇教程,转成 markdown,
用 filesystem 服务器写入 /tmp/scratch/tutorial.md,
后续会话直接读这个文件,不再重复抓取。

和浏览器类 MCP 的分工

这是最常见的选型困惑。一句话区分:

需求 用什么
读内容(静态页面) fetch
交互(点击、填表、登录后操作) Playwright / Chrome DevTools
批量抓取整站 Firecrawl
语义搜索全网 Exa / Tavily

fetch 最快最轻,但不能执行 JS。遇到 JS 渲染的页面抓下来是空壳,就该换浏览器类。

排错

现象 原因
抓下来是空壳 页面 JS 渲染,需换 Playwright
内容被截断 页面太大,需分段或指定选择器
403 / 反爬 站点拒绝,换浏览器类或加请求头
超时 网络或站点慢,重试或换源

它和 filesystem 的搭配

fetch 负责“把网页读进来”,filesystem(见 2.1 filesystem)负责“把结果落到指定目录”。常见组合:fetch 抓取并清洗 → filesystem 写入白名单目录 → 后续会话复用。这比让模型带着大段网页内容反复对话要省 token。

小结

  • fetch 抓网页转 markdown,Python 实现,uvx 免安装。
  • 它最快最轻,但不执行 JS,动态页面要换浏览器类。
  • 四层选型:fetch 读静态、Playwright 交互、Firecrawl 批量、Exa/Tavily 搜索。
  • 和 filesystem 搭配,可做“抓取—落盘—复用”的流水线。

延伸阅读