关于 Fetch
Fetch 是一个 MCP 服务,为 LLM 提供网页内容抓取,并将 HTML 转为 Markdown,便于处理。它支持分段读取长内容,并默认拒绝访问非公网地址。
主要功能
- 01抓取 URL 网页内容
- 02将 HTML 转为 Markdown
- 03分段提取长内容
- 04可选择返回原始内容
- 05遵守 robots.txt 规则
适用场景
- 01为 LLM 获取网页资料
- 02分段读取较长网页
- 03提取网页内容用于后续处理
MCP 相关
该 MCP 服务向客户端提供 fetch 工具和对应提示词,用于读取互联网网页并提取内容。默认禁止访问私有、回环及其他非公网地址。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 是 | 要获取的 URL |
| max_length | integer | 否 | 返回的最大字符数。 |
| start_index | integer | 否 | 返回结果时从此字符索引开始;如果先前的获取结果被截断且需要更多上下文,此参数会很有用。 |
| raw | boolean | 否 | 获取请求页面的实际 HTML 内容,不进行简化。 |
详细介绍
Fetch MCP Server
一个 Model Context Protocol 服务,提供网页内容抓取功能。该服务可让大模型检索并处理网页内容,将 HTML 转换为 Markdown,以便更轻松地使用。
Source: https://github.com/modelcontextprotocol/servers/tree/main/src/fetch
需要 MCP Python SDK 2.x(mcp>=2.3,<3)。
注意
此服务可以访问本地/内部 IP 地址,可能带来安全风险。使用此 MCP 服务时请谨慎操作,确保不会暴露任何敏感数据。
默认情况下,此服务会拒绝抓取私有、环回、链路本地及其他非公网地址,包括
169.254.169.254等云元数据端点,并以相同方式检查每一跳重定向。--allow-private-ips参数会关闭此保护;请参阅自定义 - 私有地址。此保护会在每次请求前检查主机名解析出的地址,因此无法防范检查与连接之间发生的 DNS 重绑定;如果服务本身无法解析某个主机名(只有代理可以解析),则不会对其进行检查。
fetch 工具会截断响应内容,但你可以使用 start_index 参数指定内容提取的起始位置。这样,模型就可以分段阅读网页,直到找到所需信息。
可用工具
fetch- 从互联网抓取 URL 并将其内容提取为 Markdown。url(字符串,必填):要抓取的 URLmax_length(整数,可选):返回的最大字符数(默认值:5000)start_index(整数,可选):内容的起始字符索引(默认值:0)raw(布尔值,可选):获取未转换为 Markdown 的原始内容(默认值:false)- 注解:
readOnlyHint: true、destructiveHint: false、idempotentHint: true、openWorldHint: true(该工具只读取内容,并且可以访问互联网上的任意主机)
提示词
- fetch
- 抓取 URL 并将其内容提取为 Markdown
- 参数:
url(字符串,必填):要抓取的 URL
错误
- 抓取失败(robots.txt 拒绝访问、页面无法访问、HTTP 错误状态、私有地址被拒绝、代理设置不可用),或参数与工具架构不匹配时,系统会返回一个
isError: true的工具结果。其文本以Error executing tool fetch:开头,并说明出错原因,供模型读取并决定如何处理。 - 调用服务不具备的工具会产生 JSON-RPC 协议错误
-32602(Unknown tool: <name>),这符合规范。请求服务不具备的提示词(Unknown prompt: <name>),或调用fetch提示词时未提供url(URL is required),也会产生相应错误。 fetch提示词抓取失败时,提示词仍会返回:其消息中包含抓取失败的原因。
此服务基于 MCP Python SDK 的高级 MCPServer 构建:工具和提示词均为装饰函数,其类型提示和字段描述分别用作输入架构和提示词参数。
协议版本
此服务通过标准输入/输出支持 Model Context Protocol 的两个版本,无需任何配置:2026-07-28 客户端(通过 server/discover 发现,无会话)和 2025-11-25 客户端(使用 initialize 握手)。客户端的首个请求决定使用哪个版本。两个版本中的工具和提示词行为相同。对于 2026-07-28 规范中已移除的方法(如 ping),服务仅在 2025-11-25 连接上响应。
安装
可选:安装 node.js,这样 fetch 服务就会使用更可靠的另一种 HTML 简化器。
使用 uv(推荐)
使用 uv 时,无需进行特定安装。我们将使用 uvx 直接运行 mcp-server-fetch。
使用 PIP
或者,你可以通过 pip 安装 mcp-server-fetch:
pip install mcp-server-fetch
安装后,可以将其作为脚本运行:
python -m mcp_server_fetch
配置
为 Claude.app 配置
将以下内容添加到 Claude 设置中:
使用 uvx
{
"mcpServers": {
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"]
}
}
}
使用 docker
{
"mcpServers": {
"fetch": {
"command": "docker",
"args": ["run", "-i", "--rm", "mcp/fetch"]
}
}
}
使用 pip 安装
{
"mcpServers": {
"fetch": {
"command": "python",
"args": ["-m", "mcp_server_fetch"]
}
}
}
为 VS Code 配置
如需快速安装,请使用下方的一键安装按钮之一……
如需手动安装,请将以下 JSON 代码块添加到 VS Code 的“用户设置 (JSON)”文件中。你可以按下 Ctrl + Shift + P,然后输入 Preferences: Open User Settings (JSON) 来完成此操作。
你也可以选择将其添加到工作区中名为 .vscode/mcp.json 的文件。这样便可以与他人共享此配置。
请注意,使用
mcp.json文件时需要mcp键。
使用 uvx
{
"mcp": {
"servers": {
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"]
}
}
}
}
使用 Docker
{
"mcp": {
"servers": {
"fetch": {
"command": "docker",
"args": ["run", "-i", "--rm", "mcp/fetch"]
}
}
}
}
自定义 - robots.txt
默认情况下,如果请求由模型发起(通过工具),服务会遵循网站的 robots.txt 文件;但如果请求由用户发起(通过提示词),则不会遵循。工具抓取过程中的每次重定向都会根据其目标主机的 robots.txt 进行检查,方式与请求的 URL 相同。可以在配置的 args 列表中添加参数 --ignore-robots-txt 来禁用此行为。
自定义 - 私有地址
默认情况下,对于主机解析到不可全局路由的地址的任何请求,服务都会拒绝,包括重定向请求或 robots.txt 抓取请求:环回地址(127.0.0.0/8、::1)、私有地址(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、fc00::/7)、链路本地地址(169.254.0.0/16、fe80::/10)、共享地址空间(100.64.0.0/10)、多播地址、未指定地址、文档专用地址以及其他 IANA 特殊用途地址范围。IPv4 映射地址(::ffff:0:0/96)或知名 NAT64 地址(64:ff9b::/96)将根据其所包含的 IPv4 地址进行判定。如果主机名的任一地址位于这些范围内,服务就会拒绝该主机名。客户端会收到一条指出被拒绝地址的错误信息。
如需从本地或内部主机(开发服务器、内网页面)抓取内容,请在配置的 args 列表中添加参数 --allow-private-ips。
自定义 - User-agent
默认情况下,服务会根据请求是由模型发起(通过工具)还是由用户发起(通过提示词),使用以下其中一种 user-agent:
ModelContextProtocol/1.0 (Autonomous; +https://github.com/modelcontextprotocol/servers)
或
ModelContextProtocol/1.0 (User-Specified; +https://github.com/modelcontextprotocol/servers)
可以在配置的 args 列表中添加参数 --user-agent=YourUserAgent 来自定义此设置。
自定义 - 代理
可以使用 --proxy-url 参数配置服务器使用代理。
如果不使用 --proxy-url,服务器会使用标准的 HTTP_PROXY、HTTPS_PROXY 和 ALL_PROXY 环境变量中的代理(并遵循 NO_PROXY)。支持 http(s):// 和 SOCKS5 代理(服务器安装了 SOCKS 支持)。许多桌面代理设置导出的 socks:// 代理 URL 会被视为 socks5://。如果服务器无法使用某项代理设置,每次抓取都会失败,并返回说明原因的工具错误。
Windows 配置
如果你在 Windows 上遇到超时问题,可能需要设置 PYTHONIOENCODING 环境变量,以确保字符编码正确:
Windows 配置(uvx)
{
"mcpServers": {
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"],
"env": {
"PYTHONIOENCODING": "utf-8"
}
}
}
}
Windows 配置(pip)
{
"mcpServers": {
"fetch": {
"command": "python",
"args": ["-m", "mcp_server_fetch"],
"env": {
"PYTHONIOENCODING": "utf-8"
}
}
}
}
这可以解决可能导致服务器在 Windows 系统上超时的字符编码问题。
调试
你可以使用 MCP inspector 调试服务器。对于 uvx 安装:
npx @modelcontextprotocol/inspector uvx mcp-server-fetch
如果你已将软件包安装到特定目录,或正在开发该软件包:
cd path/to/servers/src/fetch
npx @modelcontextprotocol/inspector uv run mcp-server-fetch
开发
在 src/fetch 目录下:
uv sync --frozen --all-extras --dev
uv run --frozen pytest
测试会在进程内通过 MCP ClientSession 调用 serve()(在 tests/test_eras.py 中,还会分别通过作为 2026-07-28 客户端和 2025-11-25 客户端的 Client 调用),并模拟 HTTP,因此无需联网。HTML 提取测试需要在 PATH 中找到 Node.js(如果存在 Node,readabilipy 会使用 Readability.js;否则会使用纯 Python 回退方案)。
覆盖率按文件测量,包含分支覆盖率:
uv run --frozen pytest --cov --cov-report=term-missing --cov-report=json
此命令会生成 coverage.json(已被 git 忽略)。该命令会报告覆盖率,但不会强制要求达到某个阈值;目标是 src/mcp_server_fetch 下的每个文件都至少达到 90% 的行覆盖率和 90% 的分支覆盖率。
贡献
我们欢迎你参与贡献,帮助改进 mcp-server-fetch。错误报告、新工具构想、现有功能增强以及文档改进都很有价值。
如需查看其他 MCP 服务的示例和实现模式,请访问: https://github.com/modelcontextprotocol/servers
贡献请通过**问题(issue)而非拉取请求(pull request)**提交:仓库维护者负责实现。请使用错误报告或功能请求表单新建问题;如果你已经制作了变更原型,请分享你使用的提示词,而不是差异文件。完整政策请参阅 CONTRIBUTING.md。
许可证
mcp-server-fetch 采用 MIT License 授权。这意味着你可以自由使用、修改和分发该软件,但须遵守 MIT License 的条款和条件。详情请参阅项目仓库中的 LICENSE 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。