mcpField
F
Fetch MCP

Fetch MCP

本地服务
1team.top浏览器自动化1.1k41 周前更新

关于 Fetch MCP

Fetcher MCP 是一个基于 Playwright 无头浏览器的 MCP 服务,用于抓取网页内容。它可以执行 JavaScript,适合处理动态页面和现代 Web 应用。

主要功能

  1. 01基于 Playwright 执行 JavaScript
  2. 02内置 Readability 提取主要内容
  3. 03支持 HTML 与 Markdown 输出
  4. 04fetch_urls 并行抓取多个 URL
  5. 05自动屏蔽图片、样式表等资源
  6. 06支持 HTTP 与 SSE 传输方式

适用场景

  1. 01抓取依赖 JavaScript 渲染的动态页面
  2. 02批量收集多个网页的正文内容
  3. 03为 LLM 提供经过清理的网页 Markdown 文本

MCP 相关

该项目是一个 MCP 服务,向 MCP 客户端暴露 fetch_url、fetch_urls 和 browser_install 等工具。

配置

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

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

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

安装包
npmfetcher-mcp

工具

3

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

参数类型必填说明
urlstring是要获取的 URL。请确保包含协议(如果未指定,则使用 http:// 或 https://;大多数情况下优先使用 https)。
timeoutnumber否页面加载超时时间(毫秒),默认值为 30000(30 秒)
waitUntilstring否指定何时视为导航完成。可选值:'load'、'domcontentloaded'、'networkidle'、'commit';默认值为 'load'
extractContentboolean否是否智能提取主要内容,默认值为 true
maxLengthnumber否返回内容的最大长度(字符数),默认不限制
returnHtmlboolean否是否返回 HTML 内容而非 Markdown,默认值为 false
waitForNavigationboolean否初始页面加载后是否等待额外导航(适用于有反机器人验证的网站),默认值为 false
navigationTimeoutnumber否等待额外导航的最长时间(毫秒),默认值为 10000(10 秒)
disableMediaboolean否是否禁用媒体资源(图像、样式表、字体、媒体),默认值为 true
debugboolean否是否启用调试模式(显示浏览器窗口);如果指定,则覆盖 --debug 命令行标志

详细介绍

Fetcher MCP 图标

中文 | Deutsch | Español | français | 日本語 | 한국어 | Português | Русский

Fetcher MCP

使用 Playwright 无头浏览器抓取网页内容的 MCP 服务。

🌟 推荐:OllaMan - 强大的 Ollama AI 模型管理器。

优势

  • JavaScript 支持:与传统网页抓取工具不同,Fetcher MCP 使用 Playwright 执行 JavaScript,因此能够处理动态网页内容和现代 Web 应用。

  • 智能内容提取:内置 Readability 算法可自动提取网页主要内容,并移除广告、导航和其他非必要元素。

  • 灵活的输出格式:支持 HTML 和 Markdown 两种输出格式,便于与各种下游应用集成。

  • 并行处理:fetch_urls 工具支持并发抓取多个 URL,大幅提升批量操作的效率。

  • 资源优化:自动屏蔽不必要的资源(图片、样式表、字体、媒体),以减少带宽使用并提升性能。

  • 稳健的错误处理:全面的错误处理和日志记录可确保即使处理有问题的网页时也能可靠运行。

  • 可配置参数:可精细控制超时、内容提取和输出格式,以满足不同的使用场景。

快速开始

使用 npx 直接运行:

npx -y fetcher-mcp

首次设置时,请在终端运行以下命令安装所需的浏览器:

npx playwright install chromium
HTTP 和 SSE 传输

使用 --transport=http 参数,同时启动 Streamable HTTP 端点和 SSE 端点服务:

npx -y fetcher-mcp --log --transport=http --host=0.0.0.0 --port=3000

启动后,服务将提供以下端点:

  • /mcp - Streamable HTTP 端点(现代 MCP 协议)
  • /sse - SSE 端点(旧版 MCP 协议)

客户端可根据需要选择连接方式。

调试模式

使用 --debug 选项运行,以显示浏览器窗口进行调试:

npx -y fetcher-mcp --debug

MCP 配置

在 Claude Desktop 中配置此 MCP 服务:

MacOS:~/Library/Application Support/Claude/claude_desktop_config.json

Windows:%APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "fetcher": {
      "command": "npx",
      "args": ["-y", "fetcher-mcp"]
    }
  }
}

Docker 部署

使用 Docker 运行
docker run -p 3000:3000 ghcr.io/jae-jae/fetcher-mcp:latest
使用 Docker Compose 部署

创建 docker-compose.yml 文件:

version: "3.8"

services:
  fetcher-mcp:
    image: ghcr.io/jae-jae/fetcher-mcp:latest
    container_name: fetcher-mcp
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    # Using host network mode on Linux hosts can improve browser access efficiency
    # network_mode: "host"
    volumes:
      # For Playwright, may need to share certain system paths
      - /tmp:/tmp
    # Health check
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost:3000"]
      interval: 30s
      timeout: 10s
      retries: 3

然后运行:

docker-compose up -d

功能

  • fetch_url - 从指定 URL 获取网页内容

    • 使用 Playwright 无头浏览器解析 JavaScript
    • 支持智能提取主要内容并转换为 Markdown
    • 支持以下参数:
      • url:要获取的网页 URL(必填参数)
      • timeout:页面加载超时时间,单位为毫秒,默认值为 30000(30 秒)
      • waitUntil:指定何时视为导航完成,可选值:'load'、'domcontentloaded'、'networkidle'、'commit',默认值为 'load'
      • extractContent:是否智能提取主要内容,默认值为 true
      • maxLength:返回内容的最大长度(字符数),默认不限制
      • returnHtml:是否返回 HTML 内容而非 Markdown,默认值为 false
      • waitForNavigation:初始页面加载后是否等待额外导航(适用于有反机器人验证的网站),默认值为 false
      • navigationTimeout:等待额外导航的最长时间,单位为毫秒,默认值为 10000(10 秒)
      • disableMedia:是否禁用媒体资源(图片、样式表、字体、媒体),默认值为 true
      • debug:是否启用调试模式(显示浏览器窗口);如果指定,则覆盖命令行标志 --debug
  • fetch_urls - 并行批量获取多个 URL 的网页内容

    • 使用多标签页并行获取,以提升性能
    • 返回合并后的结果,并清晰区分各个网页
    • 支持以下参数:
      • urls:要获取的 URL 数组(必填参数)
      • 其他参数与 fetch_url 相同
  • browser_install - 自动安装 Playwright Chromium 浏览器二进制文件

    • 当 Chromium 浏览器二进制文件不可用时,安装所需文件
    • 发生浏览器安装错误时会自动建议使用
    • 支持以下参数:
      • withDeps:安装 Chromium 浏览器所需的系统依赖,默认值为 false
      • force:即使已安装 Chromium,也强制安装,默认值为 false

提示

处理网站特殊场景
应对反爬虫机制
  • 等待完全加载:对于使用 CAPTCHA、重定向或其他验证机制的网站,请在提示词中加入:

    Please wait for the page to fully load
    

    这会使用 waitForNavigation: true 参数。

  • 延长超时时间:对于加载缓慢的网站:

    Please set the page loading timeout to 60 seconds
    

    这会相应调整 timeout 和 navigationTimeout 参数。

调整内容获取方式
  • 保留原始 HTML 结构:内容提取可能失败时:

    Please preserve the original HTML content
    

    设置 extractContent: false 和 returnHtml: true。

  • 获取完整网页内容:提取的内容过于有限时:

    Please fetch the complete webpage content instead of just the main content
    

    设置 extractContent: false。

  • 以 HTML 格式返回内容:需要 HTML 格式而非默认的 Markdown 时:

    Please return the content in HTML format
    

    设置 returnHtml: true。

调试与身份验证
启用调试模式
  • 动态启用调试:要在特定获取操作期间显示浏览器窗口:
    Please enable debug mode for this fetch operation
    
    即使服务启动时未使用 --debug 标志,这也会设置 debug: true。
使用自定义 Cookie 进行身份验证
  • 手动登录:使用你自己的凭据登录时:

    Please run in debug mode so I can manually log in to the website
    

    设置 debug: true 或使用 --debug 标志,让浏览器窗口保持打开以便手动登录。

  • 与调试浏览器交互:启用调试模式后:

    1. 浏览器窗口会保持打开
    2. 你可以使用自己的凭据手动登录网站
    3. 登录完成后,将使用经过身份验证的会话获取内容
  • 为特定请求启用调试:即使服务已在运行,你也可以为特定请求启用调试模式:

    Please enable debug mode for this authentication step
    

    这只会为此特定请求设置 debug: true,并打开浏览器窗口以便手动登录。

开发

安装依赖
npm install
安装 Playwright 浏览器

安装 Playwright 所需的浏览器:

npm run install-browser
构建服务
npm run build

调试

使用 MCP Inspector 进行调试:

npm run inspector

你也可以启用可视化浏览器模式进行调试:

node build/index.js --debug

相关项目

  • g-search-mcp:一个功能强大的 Google 搜索 MCP 服务,可使用多个关键词同时进行并行搜索。非常适合批量搜索操作和数据收集。

许可证

基于 MIT License 授权。

由 DartNode 提供支持

评论

支持 Markdown

第一次接触 MCP?

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

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