使用说明

项目简介

本仓库提供的 'mcp_server_fetch.py' 文件实现了一个简单的 MCP 服务器,该服务器提供了一个 'fetch' 工具,允许 MCP 客户端根据 URL 获取网页内容并提取为 Markdown 格式。这个示例展示了如何构建一个基于 MCP 协议的工具服务器,为 LLM 应用提供互联网信息访问能力。

主要功能点

  • 网页抓取: 通过给定的 URL,服务器可以访问互联网并获取网页的 HTML 内容。
  • Markdown 转换: 服务器能够将抓取的 HTML 内容转换为 Markdown 格式,方便 LLM 理解和处理。
  • robots.txt 检查: 服务器在抓取网页前会检查目标网站的 'robots.txt' 文件,遵守网站的爬虫协议,确保合规访问。
  • 内容截取: 支持限制返回内容的最大长度,避免一次性返回过多内容导致处理效率降低。
  • 起始位置控制: 允许指定返回内容的起始字符索引,用于分段获取网页内容。
  • 原始 HTML 内容获取: 可以选择获取未经 Markdown 转换的原始 HTML 内容。

安装步骤

  1. 安装依赖: 确保你的 Python 环境中安装了必要的依赖包。在命令行终端中执行以下命令安装 'mcp-server-fetch' 和 'json-schema-to-pydantic':
    pip install mcp-server-fetch
    pip install json-schema-to-pydantic

服务器配置

MCP 服务器是为 MCP 客户端提供服务的后端应用。MCP 客户端需要配置服务器的启动命令和参数才能连接和使用本服务器提供的 'fetch' 工具。以下是本示例 MCP 服务器的配置信息,客户端需要按照 MCP 协议的要求进行配置:

{
  "server_name": "mcp-fetch",
  "command": "python",
  "args": ["BasicTest/utils/mcp_server_fetch.py"],
  "transport": "stdio"
}

配置参数说明:

  • 'server_name': MCP 服务器的名称,这里设置为 'mcp-fetch',用于在客户端标识和调用。
  • 'command': 启动 MCP 服务器的命令,本示例使用 'python' 命令来运行 Python 脚本。
  • 'args': 传递给启动命令的参数列表,这里指定了 MCP 服务器脚本的路径 'BasicTest/utils/mcp_server_fetch.py'。请确保此路径相对于 MCP 客户端的运行环境是正确的。
  • 'transport': 指定客户端与服务器通信的传输协议,本示例使用 'stdio',即标准输入输出流。

注意: MCP 客户端需要根据自身实现的方式来加载和使用上述 JSON 配置信息。通常,客户端会在初始化或配置阶段读取这些信息,并根据 'command' 和 'args' 启动 MCP 服务器进程,并通过 'stdio' 协议与其通信。

基本使用方法

本 MCP 服务器主要通过工具调用的方式为 MCP 客户端提供网页抓取功能。以下是一个基本的使用示例,展示了 MCP 客户端如何配置和调用 'fetch' 工具来获取网页内容:

  1. 启动 MCP 服务器: MCP 客户端根据上述服务器配置信息,在后台启动 'BasicTest/utils/mcp_server_fetch.py' 脚本,建立与 MCP 服务器的连接。

  2. 客户端工具调用: 在 MCP 客户端的应用逻辑中,可以使用注册的 'fetch' 工具来抓取网页内容。例如,在 'BasicTest/8_RunTeamStreamMCP.py' 文件中,展示了如何在 AutoGen Agent 中使用 'mcp_server_tools' 来加载和调用 'fetch' 工具:

    from autogen_ext.tools.mcp import StdioServerParams, mcp_server_tools
    
    # ... 其他代码 ...
    
    async def main() -> None:
        fetch_mcp_server = StdioServerParams(command="python", args=["utils/mcp_server_fetch.py"])
        tools = await mcp_server_tools(fetch_mcp_server)
    
        # 定义 Agent 并注册工具
        agent = AssistantAgent(
            name="agent",
            # ... 其他 Agent 配置 ...
            tools=tools,
        )
    
        # 使用 Agent 执行任务,调用 fetch 工具抓取网页内容
        stream = reflection_team.run_stream(task="概述 https://www.emqx.com/zh 的内容")
        await Console(stream)
    
    # ... 运行 main 函数 ...

    在上述代码中,'mcp_server_tools(fetch_mcp_server)' 函数会根据 'StdioServerParams' 配置启动 'mcp_server_fetch.py' MCP 服务器,并将其提供的工具加载到 'tools' 变量中。然后,将 'tools' 注册到 'AssistantAgent',使得 Agent 具备了调用 'fetch' 工具的能力。当 Agent 接收到类似 "概述 https://www.emqx.com/zh 的内容" 的任务时,它可以智能地判断需要使用 'fetch' 工具来抓取网页内容,并将其返回给用户。

  3. 工具参数: 'fetch' 工具接受以下参数:

    • 'url' (必选): 要抓取的网页 URL。
    • 'max_length' (可选, 默认 5000): 返回内容的最大字符数。
    • 'start_index' (可选, 默认 0): 返回内容的起始字符索引。
    • 'raw' (可选, 默认 False): 是否返回原始 HTML 内容。

    客户端在调用 'fetch' 工具时,需要根据实际需求提供相应的参数。

通过以上步骤,MCP 客户端就可以利用本示例提供的 MCP 服务器来实现网页内容的抓取和处理,为 LLM 应用提供更丰富的上下文信息。

信息

分类

网页与API