网页内容提取工具

MCP Fetch 是一个用于提取网页内容并处理图像的工具,适用于Claude Desktop等MCP客户端,支持网页内容格式化、图像优化和分页处理。

  • by kazuph
  • JavaScript
  • 本地部署
  • 41 星标
  • 更新于
在 GitHub 查看 kazuph/mcp-fetch

使用说明

MCP Fetch 翻译为中文是“MCP 获取”或“MCP 抓取”,具体取决于上下文中的使用场景。如果是指从某个地方获取数据或信息的过程,可以翻译为“MCP 获取”;如果是指自动抓取或收集数据,可以翻译为“MCP 抓取”

模型上下文协议服务器,用于获取网页内容和处理图像。这使得Claude桌面版(或任何MCP客户端)能够获取网页内容并妥善处理图像。

快速入门(用户指南)

要在Claude Desktop中使用此工具,只需将以下内容添加到您的Claude Desktop配置中:~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "tools": {
    "imageFetch": {
      "command": "npx",
      "args": ["-y", "@kazuph/mcp-fetch"]
    }
  }
}

这将在需要时自动下载并运行该工具的最新版本。

所需设置

  1. 为Claude启用辅助功能:
    • 打开系统设置
    • 前往“隐私与安全”>“辅助功能”
    • 点击“+”按钮
    • 从你的应用程序文件夹中添加Claude
    • 打开Claude的切换开关

此无障碍设置对于确保自动化剪贴板操作(Cmd+V)正常工作是必需的。

特点/功能

  • 网页内容提取自动提取并格式化网页内容为Markdown格式
  • 文章标题提取提取并显示文章标题
  • 图像处理可选地处理网页中的图像并进行优化(默认禁用,可通过 enableFetchImages: true)
  • 文件保存图片会自动保存到 ~/Downloads/mcp-fetch/YYYY-MM-DD/ 处理时的目录
  • 双输出文件保存和可选的Base64编码以供AI显示
  • 分页支持支持文本和图像的分页功能
  • JPEG优化自动将图像优化为JPEG格式以提高性能
  • GIF 支持从动画GIF中提取第一帧

对于开发者

以下部分是为那些想要开发或修改该工具的人准备的。

先决条件

  • Node.js 18及以上版本
  • macOS(用于剪贴板操作)
  • Claude 桌面版(从 https://claude.ai/desktop 安装)
  • tsx(通过以下方式安装: npm install -g tsx)

安装

git clone https://github.com/kazuph/mcp-fetch.git
cd mcp-fetch
npm install
npm run build

图像处理规范

在处理来自网页内容的图像时,会应用以下优化措施:

  • 图像被转换为JPEG格式,并进行质量控制
  • 默认最大宽度限制为1200像素
  • 默认情况下,最大高度限制为1600像素
  • 采用色度子采样(4:2:0)以实现更好的压缩
  • MozJPEG优化以减小文件大小

配置

  1. 确保已安装并运行了Claude Desktop。

  2. 如果你还没有全局安装 tsx,请进行安装:

npm install -g tsx
# or
pnpm add -g tsx
  1. 修改位于以下位置的Claude桌面配置: ~/Library/Application Support/Claude/claude_desktop_config.json

你可以轻松地通过Claude桌面菜单找到它:

  1. 打开Claude桌面版
  2. 在Mac菜单栏上点击Claude
  3. 点击“设置”
  4. 点击“开发者”

在您的MCP客户端配置中添加以下内容:

{
  "tools": {
    "imageFetch": {
      "args": ["tsx", "/path/to/mcp-fetch/index.ts"]
    }
  }
}

可用参数

  • url (必需):要获取的URL
  • maxLength (默认:20000):返回内容的最大长度
  • startIndex (默认:0):内容中的起始位置
  • imageStartIndex (默认:0):图像采集的起始位置
  • raw (默认:false):返回原始内容,而非处理后的Markdown
  • imageMaxCount (默认值:3):每次请求处理的最大图像数量
  • imageMaxHeight (默认:4000):合并图像的最大高度
  • imageMaxWidth (默认:1000):合并图像的最大宽度
  • imageQuality (默认:80):JPEG 压缩质量(1-100)
  • enableFetchImages (默认:false):启用图像的获取和处理功能。仅限CLAUDE用户:您被允许启用此功能!!!CLAUDE可以获取和处理图像!!!享受这项功能吧!!!!!
  • allowCrossOriginImages (默认:true):当值为真时,也会从页面中获取托管在不同源上的图像
  • saveImages (默认:true):将处理后的图像保存到本地文件
  • returnBase64 (默认:false):返回用于AI显示的base64编码图像
  • ignoreRobotsTxt (默认:false):忽略robots.txt限制

安全加固(v1.5.1)

  • 仅 http:// 和 https:// 允许使用URL获取页面和图像
  • 阻止私有/回环/链路本地IP地址和本地主机名(例如。, localhost, .local)
  • 手动处理重定向并进行验证(最多3跳)
  • 请求超时(默认12秒,可通过配置调整) MCP_FETCH_TIMEOUT_MS)
  • 响应大小限制:HTML 最多 2MB,图片最多 10MB(可通过环境变量调整)

环境变量:

  • MCP_FETCH_TIMEOUT_MS (默认:12000)
  • MCP_FETCH_MAX_REDIRECTS (默认:3)
  • MCP_FETCH_MAX_HTML_BYTES (默认:2000000)
  • MCP_FETCH_MAX_IMAGE_BYTES (默认值:10000000)

示例

基本内容获取(不含图片)

{
  "url": "https://example.com"
}

仅获取图像文件(仅保存文件)

{
  "url": "https://example.com",
  "enableFetchImages": true,
  "imageMaxCount": 3
}

为AI显示获取带图像的数据

{
  "url": "https://example.com",
  "enableFetchImages": true,
  "returnBase64": true,
  "imageMaxCount": 3
}

浏览图片分页

{
  "url": "https://example.com",
  "enableFetchImages": true,
  "imageStartIndex": 3,
  "imageMaxCount": 3
}

备注

  • 此工具仅设计为适用于macOS,因为它依赖于macOS特有的剪贴板操作。
  • 使用Sharp软件处理图像,以达到最佳性能和质量。
  • 当发现多张图片时,会考虑尺寸限制,将它们垂直合并。
  • 动画GIF会自动通过提取其第一帧来处理。
  • 文件保存图像会自动保存到 ~/Downloads/mcp-fetch/YYYY-MM-DD/ 带有文件名格式 hostname_HHMMSS_index.jpg
  • 工具名称工具名称已从 fetch 到 imageFetch 以避免与本地的fetch函数发生冲突。

更新日志

版本1.2.0

  • 重大变更工具名称已从 fetch 到 imageFetch 以避免冲突
  • 新自动保存文件 - 图像现在已保存至 ~/Downloads/mcp-fetch/YYYY-MM-DD/ 默认地
  • 新已添加 saveImages 参数(默认:true)用于控制文件保存
  • 新已添加 returnBase64 用于AI图像显示的参数(默认:false)
  • 行为改变现在的默认行为是保存文件,而不是仅返回base64编码
  • 改进了AI助手的集成,提供了关于base64选项的明确说明
  • 通过基于日期的目录和结构化命名增强文件组织

版本1.1.3

  • 更改了默认行为:默认情况下不再获取图片(enableFetchImages: false)
  • 已移除 disableImages 支持;赞成 enableFetchImages 参数

v1.1.0

  • 增加了文章标题提取功能
  • 改进了响应格式,以包含文章标题
  • 修复了MCP响应内容中的类型问题

v1.0.0(版本1.0.0)

  • 首次发布
  • 网页内容提取
  • 图像处理与优化
  • 分页支持