mcpField
F
Fetch

Fetch

精选本地服务
modelcontextprotocol.io浏览器自动化91.6k3 天前更新

关于 Fetch

Fetch 是一个 MCP 服务,为 LLM 提供网页内容抓取,并将 HTML 转为 Markdown,便于处理。它支持分段读取长内容,并默认拒绝访问非公网地址。

主要功能

  1. 01抓取 URL 网页内容
  2. 02将 HTML 转为 Markdown
  3. 03分段提取长内容
  4. 04可选择返回原始内容
  5. 05遵守 robots.txt 规则

适用场景

  1. 01为 LLM 获取网页资料
  2. 02分段读取较长网页
  3. 03提取网页内容用于后续处理

MCP 相关

该 MCP 服务向客户端提供 fetch 工具和对应提示词,用于读取互联网网页并提取内容。默认禁止访问私有、回环及其他非公网地址。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"fetch": {
"command": "uvx",
"args": [
"mcp-server-fetch"
]
}
}
}
启动命令uvx mcp-server-fetch

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimcp-server-fetch

工具

1

收录的工具列表 · 更新于 2 周前

参数类型必填说明
urlstring是要获取的 URL
max_lengthinteger否返回的最大字符数。
start_indexinteger否返回结果时从此字符索引开始;如果先前的获取结果被截断且需要更多上下文,此参数会很有用。
rawboolean否获取请求页面的实际 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(字符串,必填):要抓取的 URL
    • max_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 配置

如需快速安装,请使用下方的一键安装按钮之一……

在 VS Code 中使用 UV 安装 在 VS Code Insiders 中使用 UV 安装

在 VS Code 中使用 Docker 安装 在 VS Code Insiders 中使用 Docker 安装

如需手动安装,请将以下 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 文件。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。