在将AI助手集成到日常工作流时,一个常见的需求是让AI能够获取并理解来自网络的信息。然而,直接将原始网页内容喂给大语言模型会带来两大问题:一是网页中充斥着广告、导航栏、侧边栏等大量无关“噪音”,严重浪费宝贵的上下文窗口;二是复杂的HTML结构会消耗大量令牌(Token),增加成本和延迟。mcp-fetch 正是为解决这一痛点而生,它是一个用Go语言编写的、轻量且高效的MCP服务器,专注于为AI客户端提供经过智能“净化”的网页内容。
项目基本信息
| 信息项 | 详情 |
|---|---|
| 项目名称 | mcp-fetch |
| GitHub地址 | https://github.com/cnosuke/mcp-fetch |
| 项目描述 | 暂无描述 |
| 作者 | cnosuke |
| 开源协议 | MIT License |
| 开源状态 | 公开状态 |
| Languages | Go |
| 支持平台 | Windows / macOS / Linux |
| 最后更新 | 2026-02-21 |
一、项目介绍
MCP Fetch Server 是一个基于Go语言实现的模型上下文协议(MCP)服务器。它的核心功能非常聚焦:获取URL内容,并自动将其转换为适合AI模型处理的、令牌高效的Markdown格式。
它的工作原理可以概括为“获取-提炼-转换”三步:
- 获取:作为HTTP客户端,向指定的URL发起请求。
- 提炼:利用
go-readability库(Mozilla Readability的Go实现),智能提取网页中的主体内容,剔除广告、导航、页脚等与核心信息无关的杂乱元素。 - 转换:将提取出的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参数,可以轻松控制并发抓取的数量,以平衡性能与目标服务器的压力。对于追求效率和资源占用敏感的环境,这是一个非常理想的选择。
灵活的部署与配置
项目提供了两种主要的使用方式:Docker 和 Go二进制文件。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,可以按照以下步骤从源码运行:
克隆项目
git clone https://github.com/cnosuke/mcp-fetch.git cd mcp-fetch编译项目 (确保已安装Go 1.24+)
make bin/mcp-fetch编译成功后,可执行文件将生成在
bin/目录下。运行服务器
./bin/mcp-fetch server --config=config.yml你可以在运行前修改
config.yml文件来调整服务参数。在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_index和max_length参数:
{
"url": "https://example.com/very-long-page",
"max_length": 500,
"start_index": 2000
}这非常适合处理超长文档,可以分块阅读,避免超出上下文限制。
六、常见问题
问:配置完成后,Claude提示找不到fetch工具怎么办?
答:请按以下步骤排查:
- 检查配置文件:确保
claude_desktop_config.json文件的JSON格式完全正确,没有缺失逗号或括号。你可以使用在线JSON验证工具进行检查。 - 验证Docker:打开终端,手动运行
docker run -i --rm cnosuke/mcp-fetch:latest,看是否能够正常启动并等待输入。如果提示找不到docker命令,请确认Docker已正确安装并处于运行状态。 - 查看日志:如果使用了本地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原生的高性能运行,它能以极低的成本融入你的工作流,显著提升信息处理的效率。
我在Windows上用Docker Desktop,配置时路径老是搞错,后来直接用`docker run`命令,反而没问题。
作为一个后端开发者,看到这么清晰的Go项目结构,感觉非常舒适。已star,准备研究源码学习一下。
用这个工具配合Claude,我快速阅读完了积压一周的行业新闻简报,效率太高了。
`start_index`参数挺有用的,可以用来分块阅读超长文档,像看书一样“翻页”。
要是能输出一个阅读进度或者预估令牌数就更好了,在使用前心里有个底。