在将AI助手集成到日常工作流时,一个常见的需求是让AI能够获取并理解来自网络的信息。然而,直接将原始网页内容喂给大语言模型会带来两大问题:一是网页中充斥着广告、导航栏、侧边栏等大量无关“噪音”,严重浪费宝贵的上下文窗口;二是复杂的HTML结构会消耗大量令牌(Token),增加成本和延迟。mcp-fetch 正是为解决这一痛点而生,它是一个用Go语言编写的、轻量且高效的MCP服务器,专注于为AI客户端提供经过智能“净化”的网页内容。

项目基本信息

信息项详情
项目名称mcp-fetch
GitHub地址https://github.com/cnosuke/mcp-fetch
项目描述暂无描述
作者cnosuke
开源协议MIT License
开源状态公开状态
LanguagesGo
支持平台Windows / macOS / Linux
最后更新2026-02-21

一、项目介绍

MCP Fetch Server 是一个基于Go语言实现的模型上下文协议(MCP)服务器。它的核心功能非常聚焦:获取URL内容,并自动将其转换为适合AI模型处理的、令牌高效的Markdown格式

它的工作原理可以概括为“获取-提炼-转换”三步:

  1. 获取:作为HTTP客户端,向指定的URL发起请求。
  2. 提炼:利用 go-readability 库(Mozilla Readability的Go实现),智能提取网页中的主体内容,剔除广告、导航、页脚等与核心信息无关的杂乱元素。
  3. 转换:将提取出的HTML内容自动转换为结构清晰、更易于AI阅读的Markdown格式。

这种设计使得AI模型能够直接聚焦于信息的核心,极大地提升了信息处理的效率和准确性。项目完全遵循MCP规范,可以通过标准输入输出(stdio)或Docker容器的方式,与Claude Desktop等任何支持MCP的客户端无缝集成。

二、核心优势

极致的令牌效率

这是MCP Fetch Server最显著的优势。通过自动剔除网页噪音并转换为Markdown,它可以将一个臃肿的网页(可能消耗数万令牌)精简为仅有数百或数千令牌的核心文本。这不仅显著降低了API调用成本,也让AI能够更轻松地在有限的上下文窗口中处理更长的内容。

智能的内容处理

项目并非简单地进行HTML到文本的转换。它使用go-readability库对页面进行语义分析,能够识别并保留文章标题、作者信息,并将主要内容以结构化的方式呈现。即使主转换流程失败,也设计了备用处理机制,确保了服务的鲁棒性。

高性能与低资源占用

得益于Go语言原生的并发优势和轻量级特性,MCP Fetch Server在并发处理多个URL时表现出色。通过可配置的max_workers参数,可以轻松控制并发抓取的数量,以平衡性能与目标服务器的压力。对于追求效率和资源占用敏感的环境,这是一个非常理想的选择。

灵活的部署与配置

项目提供了两种主要的使用方式:DockerGo二进制文件。Docker方式最为简便,无需安装Go环境,一条命令即可运行。同时,它也支持通过YAML配置文件和环境变量对服务进行精细控制,如请求超时、用户代理、最大内容长度等,满足了不同场景下的定制化需求。

三、适用场景

AI辅助的网页内容摘要与分析

你可以让Claude Desktop等AI助手直接“阅读”一篇在线文章、技术文档或新闻,并为你生成摘要、提炼观点或进行批判性分析。你只需提供URL,mcp-fetch负责将干净的内容交给AI。

批量信息收集与研究

当需要从多个来源收集信息时,fetch_multiple工具可以高效地并行抓取。例如,你可以让AI同时获取五篇关于某个技术主题的博客文章,然后综合它们的内容,为你生成一份全面的技术综述。

构建知识库或数据管道

对于开发者而言,可以将mcp-fetch作为一个标准化的内容获取组件,集成到更大的自动化工作流或知识库构建系统中。它的MIT协议也为商业集成提供了便利。

辅助阅读与学习

对于视觉障碍者或偏好听觉学习的用户,可以结合语音合成工具,让AI先通过mcp-fetch获取文章正文,再进行朗读,提供了一种无干扰的“纯内容”阅读体验。

四、安装教程

环境要求

工具用途下载/安装方式
Git下载项目代码[https://git-scm.com/]

详细安装步骤(以Docker方式为例)

对于大多数用户,使用Docker是推荐的方式,因为它无需安装Go环境,并且能隔离运行。

第一步:拉取Docker镜像

docker pull cnosuke/mcp-fetch:latest

第二步:在Claude Desktop中配置
这是连接AI与mcp-fetch的关键。你需要编辑Claude Desktop的配置文件,其位置如下:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

打开该文件,并添加以下配置块。如果文件不存在,请创建它。

{
  "mcpServers": {
    "fetch": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "cnosuke/mcp-fetch:latest"]
    }
  }
}

第三步:重启Claude Desktop
保存配置文件后,完全退出并重新启动Claude Desktop。如果配置成功,你会在Claude的MCP服务器列表中看到fetch服务处于运行状态。

备选方案:从源码构建与运行(本地Go环境)

如果你希望进行二次开发或不喜欢使用Docker,可以按照以下步骤从源码运行:

  1. 克隆项目

    git clone https://github.com/cnosuke/mcp-fetch.git
    cd mcp-fetch
  2. 编译项目 (确保已安装Go 1.24+)

    make bin/mcp-fetch

    编译成功后,可执行文件将生成在bin/目录下。

  3. 运行服务器

    ./bin/mcp-fetch server --config=config.yml

    你可以在运行前修改config.yml文件来调整服务参数。

  4. 在Claude Desktop中配置
    配置文件内容需要稍作修改,以指向你编译的二进制文件:

    {
      "mcpServers": {
        "fetch": {
          "command": "./bin/mcp-fetch",
          "args": ["server"],
          "env": {
            "LOG_PATH": "mcp-fetch.log",
            "DEBUG": "false"
          }
        }
      }
    }

    请将command中的路径替换为你电脑上mcp-fetch二进制文件的绝对路径。

五、使用示例

配置完成后,你就可以在Claude Desktop中通过自然语言指令,让AI使用mcp-fetch来获取网页信息了。

示例一:阅读并总结一篇技术文章

用户指令:帮我阅读一下这篇关于MCP协议的文章 https://modelcontextprotocol.io/introduction,并用中文总结它的核心要点。

Claude的操作与回复:
Claude会自动调用fetch工具,并传入URL。mcp-fetch服务器会返回经过提炼的Markdown内容。Claude分析后,会生成一份结构清晰的摘要。

示例二:批量获取多个页面信息进行比较

用户指令:同时获取这三个网址的内容,并比较它们对“WebAssembly”的不同介绍:https://webassembly.org/, https://developer.mozilla.org/en-US/docs/WebAssembly, https://en.wikipedia.org/wiki/WebAssembly

Claude的操作与回复:
Claude会调用fetch_multiple工具,传入包含三个URL的数组。mcp-fetch会并行抓取、净化并返回各自的Markdown内容。随后,Claude会综合这些信息,给出一个比较性的分析。

示例三:获取页面的一部分内容(使用高级参数)

用户指令:获取https://example.com/very-long-page这个页面的内容,但只需要从第2000个字符开始,总共500个字符。

Claude的操作与回复:
Claude会使用fetch工具,并智能地填入start_indexmax_length参数:

{
  "url": "https://example.com/very-long-page",
  "max_length": 500,
  "start_index": 2000
}

这非常适合处理超长文档,可以分块阅读,避免超出上下文限制。

六、常见问题

问:配置完成后,Claude提示找不到fetch工具怎么办?

答:请按以下步骤排查:

  1. 检查配置文件:确保claude_desktop_config.json文件的JSON格式完全正确,没有缺失逗号或括号。你可以使用在线JSON验证工具进行检查。
  2. 验证Docker:打开终端,手动运行 docker run -i --rm cnosuke/mcp-fetch:latest,看是否能够正常启动并等待输入。如果提示找不到docker命令,请确认Docker已正确安装并处于运行状态。
  3. 查看日志:如果使用了本地Go二进制方式运行,可以检查LOG_PATH环境变量指定的日志文件,其中通常会包含错误信息。

问:为什么有些网页获取到的内容是乱码或者空白?

答:这通常与网页的编码、动态加载机制或反爬策略有关。

  • 动态加载mcp-fetch是一个简单的HTTP客户端,无法执行JavaScript。对于完全依赖JavaScript渲染内容的单页应用(SPA),它获取到的可能只是一个空壳HTML。在这种情况下,可能需要配合其他能够执行浏览器自动化的MCP工具。
  • 编码问题mcp-fetch会尽力处理字符集编码,但极少数不规范网页可能无法被正确解析。
  • 反爬虫:部分网站可能会根据User-Agent或请求频率拒绝服务。你可以尝试通过环境变量FETCH_USER_AGENT修改配置,模拟真实的浏览器请求。

问:max_length参数是如何在fetch_multiple中工作的?

答:在fetch_multiple工具中,max_length参数代表所有URL返回内容的总字符数上限。服务器会先将这个总额度平均分配给每个URL。如果某个URL返回的内容没有用完它的初始配额,剩余的额度会被重新分配给其他(可能内容更长的)URL。这种动态分配机制确保了总令牌消耗的可控性,并尽可能高效地利用额度。

七、总结

MCP Fetch Server是一个设计精巧、专注解决特定问题的优秀开源项目。它没有试图成为一个包罗万象的浏览器自动化工具,而是将“为AI模型高效、干净地获取网页文本内容”这一件事做到了极致。其令牌高效的设计理念,在AI应用开发日益关注成本和性能的今天,显得尤为务实和珍贵。

对于任何希望让AI助手具备“上网阅读”能力的用户或开发者来说,mcp-fetch都是一个不容错过的轻量级利器。通过Docker的便捷部署或Go原生的高性能运行,它能以极低的成本融入你的工作流,显著提升信息处理的效率。

标签: 浏览器自动化

已有 34 条评论

    1. TomChen TomChen

      Go语言写的MCP服务器,内存占用真小。挂在后台几乎感觉不到,比我之前用Node.js的同类工具轻量多了。

    2. LucyWang LucyWang

      fetch_multiple这个工具太实用了,我经常需要让Claude同时看几篇对比文章,这个并行抓取功能就是为我量身定做的。

    3. MikeBrown MikeBrown

      用Docker方式配置简直傻瓜式,复制粘贴两行代码到Claude配置里,重启就好了。对非开发人员极度友好。

    4. AnnaZhang AnnaZhang

      智能提取正文的功能很棒,再也没有广告和侧边栏的干扰了。让AI做的摘要质量都变高了。

    5. DaveLiu DaveLiu

      有个小建议,能不能支持一下自定义请求头?有些网站会检查User-Agent,如果能模拟浏览器可能会减少被拒的情况。