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 搭配,可做“抓取—落盘—复用”的流水线。
延伸阅读
- 本章其余小节:2.3 git、2.5 sequential-thinking
- 浏览器类方案:3.1 Playwright、3.2 Chrome DevTools
- 搜索类方案:3.4 Exa / Tavily / Firecrawl
- 相关书籍:DeepSeek Harness 完全使用指南
