• 项目简介 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 客户端无缝集成。
  • 安装步骤

    1. 克隆仓库:
      git clone https://github.com/StacklokLabs/gofetch.git
      cd gofetch
    2. 安装依赖:
      task install
    3. 构建服务器:
      task build
      构建完成后,可执行文件通常位于 './build/gofetch'。
  • 服务器配置 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