server-fetch 解决方案概述
server-fetch
是一个 MCP 服务器,专为 AI 模型提供网页内容抓取能力。它通过 fetch
工具,允许模型根据 URL 提取网页内容,并将其转换为 Markdown 格式,以便模型更易于理解和处理。开发者可以利用此服务器,让 AI 模型实时获取网络信息,增强其知识库和推理能力。server-fetch
解决了开发者在构建需要访问互联网信息的 AI 应用时,手动处理网页抓取和格式转换的痛点。通过可选参数,如 max_length
和 start_index
,可以控制抓取内容的大小和起始位置,实现分块读取。该服务器可以通过 pip
安装或使用 uvx
直接运行,并支持自定义 User-Agent 和代理设置,方便集成到各种 AI 应用中。
server-fetch 核心能力
网页内容抓取与转换
server-fetch
的核心功能是从指定的URL抓取网页内容,并将其转换为Markdown格式。该功能通过 fetch
工具实现,接受URL作为必需参数,并可选择性地设置最大返回字符数 (max_length
) 和起始字符索引 (start_index
)。默认情况下,服务器会遵循网站的 robots.txt
协议,但可以通过配置参数 --ignore-robots-txt
来禁用此行为。抓取到的HTML内容会被转换为Markdown,以便AI模型更容易理解和处理。这种转换简化了AI模型对网页信息的提取和分析,避免了直接处理复杂HTML结构的困难。
例如,一个AI模型需要总结一篇新闻文章的关键信息。它可以调用 server-fetch
,传入新闻文章的URL,并设置 max_length
以控制返回内容的长度。server-fetch
会抓取网页内容,将其转换为Markdown,并返回给AI模型。AI模型随后可以分析Markdown格式的内容,提取关键信息并生成摘要。
分块读取网页内容
server-fetch
允许AI模型通过 start_index
参数分块读取网页内容。即使网页内容超过了 max_length
的限制,AI模型也可以通过调整 start_index
的值,逐步读取整个网页。这种分块读取的方式解决了AI模型处理大型网页内容的限制,使得AI模型可以处理任意大小的网页信息。
例如,一个AI模型需要分析一篇长篇博客文章。由于文章内容较长,一次性抓取可能会超出 max_length
的限制。AI模型可以首先调用 server-fetch
,抓取文章的前5000个字符(默认 max_length
)。然后,AI模型可以再次调用 server-fetch
,设置 start_index
为5000,抓取接下来的内容,以此类推,直到读取完整篇文章。
可定制的用户代理
server-fetch
允许用户自定义HTTP请求的User-Agent标头。默认情况下,根据请求的来源(模型或用户),服务器会使用不同的User-Agent。模型发起的请求使用 ModelContextProtocol/1.0 (Autonomous; +https://github.com/modelcontextprotocol/servers)
,用户发起的请求使用 ModelContextProtocol/1.0 (User-Specified; +https://github.com/modelcontextprotocol/servers)
。用户可以通过配置参数 --user-agent=YourUserAgent
来自定义User-Agent。
自定义User-Agent的功能允许用户更好地控制和识别来自 server-fetch
的请求,这在需要绕过某些网站的访问限制或进行更精细的流量分析时非常有用。例如,用户可以将User-Agent设置为特定的浏览器标识,以模拟浏览器行为,从而避免被网站识别为机器人。
技术实现:灵活的部署选项
server-fetch
提供了多种部署选项,包括使用 uv
(推荐), pip
安装,以及Docker容器化部署。使用 uv
可以直接运行,无需额外安装步骤。使用 pip
安装后,可以通过命令行脚本启动。这些灵活的部署选项使得 server-fetch
可以方便地集成到不同的开发和生产环境中。此外,server-fetch
还支持通过环境变量或命令行参数进行配置,例如设置代理服务器 (--proxy-url
) 和忽略 robots.txt
规则 (--ignore-robots-txt
)。