-
项目简介 GoFetch 是一个高效的网页内容抓取 MCP 服务器,使用 Go 语言实现。它能够从互联网上抓取指定 URL 的文本内容,并支持内容提取、HTML 到 Markdown 转换、Robots.txt 协议遵守(可配置忽略)以及自定义用户代理和代理设置。作为一个 MCP 服务器,它通过标准化的 JSON-RPC 协议与 LLM 客户端通信,为 LLM 提供可靠的外部信息获取能力。
-
主要功能点
- 网页内容抓取: 根据提供的 URL 抓取网页内容。
- 智能内容提取: 从网页中提取主要文本内容,并可转换为 Markdown 格式。
- Robots.txt 遵守: 默认遵循网站的 'robots.txt' 规则,防止非法抓取,也可选择忽略。
- 灵活配置: 支持自定义 User-Agent、设置代理服务器,以及内容的截断和起始索引控制。
- MCP 协议支持: 通过 SSE 或 Streamable HTTP 协议提供服务,与 MCP 客户端无缝集成。
-
安装步骤
- 克隆仓库:
git clone https://github.com/StacklokLabs/gofetch.git cd gofetch - 安装依赖:
task install - 构建服务器:
构建完成后,可执行文件通常位于 './build/gofetch'。task build
- 克隆仓库:
-
服务器配置 MCP 客户端需要知道如何启动并连接到 GoFetch 服务器。以下是标准的 MCP 服务器配置示例,您可以根据实际部署环境进行调整。请注意,'command' 和 'args' 是 MCP 客户端启动服务器所必需的,用户无需直接执行这些命令。
{ "name": "gofetch", "displayName": "GoFetch Web Content Retriever", "description": "An MCP server that fetches and processes web content.", "command": "./build/gofetch", "args": [ "--transport", "streamable-http", "--port", "8080", "--user-agent", "MCPGoFetchBot/1.0", "--ignore-robots-txt", "false", "--proxy-url", "" ], "args_notes": { "transport": "指定传输协议类型,可选值:'sse' 或 'streamable-http' (默认)。", "port": "服务器监听的端口号,默认是 8080。", "user-agent": "自定义 HTTP 请求的 User-Agent 字符串。", "ignore-robots-txt": "是否忽略网站的 robots.txt 规则,设置为 'true' 表示忽略,'false' 表示遵守 (默认)。", "proxy-url": "用于所有 HTTP 请求的代理服务器 URL,例如 'http://proxy.example.com:8080'。" } }注意:
- 'command' 字段指向您构建后服务器可执行文件的路径。
- 'args' 字段包含启动服务器的命令行参数。您可以根据需要调整 'port'、'user-agent'、'ignore-robots-txt' 和 'proxy-url' 等参数。
- 'args_notes' 字段是对参数的中文注释,方便理解。
-
基本使用方法 一旦 GoFetch 服务器通过 MCP 客户端启动并连接成功,LLM 即可通过调用其提供的 'fetch' 工具来获取网页内容。
'fetch' 工具参数说明:
- 'url' (必需): 要抓取的网页 URL。
- 'max_length' (可选): 返回内容的最大字符数,超出部分将被截断。
- 'start_index' (可选): 内容提取的起始字符索引。
- 'raw' (可选): 如果设置为 'true',则返回原始 HTML 内容;否则,将 HTML 转换为更易读的 Markdown 格式。
示例(LLM 客户端调用 'fetch' 工具):
调用示例 1: 抓取一个网页的默认内容
{ "name": "fetch", "arguments": { "url": "https://example.com" } }调用示例 2: 抓取网页内容,限制最大长度并转换为 Markdown
{ "name": "fetch", "arguments": { "url": "https://example.com/some-article", "max_length": 1000, "raw": false } }调用示例 3: 抓取原始 HTML 内容
{ "name": "fetch", "arguments": { "url": "https://example.com/raw-page", "raw": true } }
信息
分类
网页与API