🎯 一款可定制、具备反检测功能的云浏览器,由自主研发的 Chromium驱动,专为网页爬虫AI 代理设计。👉立即试用
返回博客

AutoGen + Scrapeless: 通过MCP为您的代理提供实时网络工具

Daniel Kim
Daniel Kim

Lead Scraping Automation Engineer

22-Jul-2026

TL;DR:

  • AutoGen 使用 mcp_server_tools 加载 Scrapeless MCP 服务器的工具,并将所有 21 个工具交给一个代理,从 scrape_markdown 到完整的浏览器集合。
  • 连接是一个对象 StreamableHttpServerParams,携带端点和 x-api-token 头;不需要模型客户端来加载或调用工具。
  • 每个工具以 StreamableHttpMcpToolAdapter 形式到达,因此您可以在将其连接到代理之前直接使用 run_json({...}, CancellationToken()) 调用其中一个。
  • 只有 AssistantAgent.run 需要模型提供者密钥;加载工具和调用 scrape_markdown 不需要。
  • 一个 scrape_markdown 调用返回目标页面的 Markdown,准备好让代理进行推理。
  • 开始使用 Scrapeless 免费计划,让您的 AutoGen 代理拥有真正的网络工具。

AutoGen 是微软的多代理应用框架,其代理的能力仅取决于他们所拥有的工具。开箱即用时,这些工具无法访问实时网络。模型上下文协议填补了这一空白:将 AutoGen 指向 MCP 服务器,它所暴露的每个工具都成为您的代理可以调用的 AutoGen 工具,具有与任何函数工具相同的接口。

本指南连接 AutoGen 到 Scrapeless MCP 服务器,加载其 21 个工具,真正调用其中一个,并将这些工具组附加到 AssistantAgent — 所有内容都经过实时服务器的验证。唯一需要模型提供者密钥的步骤是代理的生成调用,本文明确指出了这一点。

为什么选择 Scrapeless MCP

Scrapeless MCP 服务器暴露了代理可以直接调用的网络爬虫和浏览器工具,因此您无需自己构建或托管爬虫层。一个连接提供 21 种工具:用于内容的 scrape_markdownscrape_html,用于搜索数据的 google_searchgoogle_trends,用于捕获的 scrape_screenshot,以及驱动云浏览器的完整 browser_* 集合。AutoGen 通过 mcp_server_tools 将每个工具转变为本地工具,无需编写适配器代码。

browser_* 工具驱动 Scrapeless 云浏览器,因此代理可以在 Scrapeless 基础设施上导航一个交互式页面并读取所渲染的内容。对于连接到不同框架的相同服务器,LangChain + Scrapeless MCP 文章涵盖了 LangChain 方面的内容。

前提条件

  • Python 3.10 或更高版本。
  • 从仪表板获取的 Scrapeless API 密钥,导出为 SCRAPELESS_API_KEY
  • 仅用于代理运行的模型提供者密钥(例如 OPENAI_API_KEY)。加载和调用工具无需此密钥。

安装

安装带有 MCP 附加功能和代理包的 AutoGen。

bash Copy
pip install "autogen-ext[mcp]" autogen-agentchat

在 shell 中设置您的 Scrapeless 密钥。运行时使用真实密钥,并保持占位符不出现在您的源代码中。

bash Copy
export SCRAPELESS_API_KEY="sk_your_key_here"

加载工具

StreamableHttpServerParams 命名端点,并在 x-api-token 头中携带 API 密钥。mcp_server_tools 进行握手并将服务器的工具返回为 AutoGen 工具。

python Copy
import asyncio
import os

from autogen_ext.tools.mcp import StreamableHttpServerParams, mcp_server_tools


async def main() -> None:
    params = StreamableHttpServerParams(
        url="https://api.scrapeless.com/mcp",
        headers={"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
    )
    tools = await mcp_server_tools(params)
    names = sorted(tool.name for tool in tools)
    print("工具数量:", len(names))
    print("工具:", ", ".join(names))


asyncio.run(main())

实时服务器返回 21 个工具,仅设置了 Scrapeless 密钥。

text Copy
工具数量: 21
工具: browser_click, browser_close, browser_create, browser_get_html, browser_get_text, browser_go_back, browser_go_forward, browser_goto, browser_press_key, browser_screenshot, browser_scroll, browser_scroll_to, browser_snapshot, browser_type, browser_wait, browser_wait_for, google_search, google_trends, scrape_html, scrape_markdown, scrape_screenshot

传输和消息层遵循 模型上下文协议规范,基于 JSON-RPC 2.0 规范。对于本地服务器,AutoGen 还提供了 StdioServerParams;Scrapeless 服务器是一个托管的 HTTP 端点,因此本指南使用流式 HTTP 参数。

调用工具

每个加载的工具都是 StreamableHttpMcpToolAdapter,您可以在将其交给代理之前直接调用其中一个。run_json 接受参数和取消令牌,并返回工具的结果。

python Copy
import asyncio
import os

from autogen_core import CancellationToken
from autogen_ext.tools.mcp import StreamableHttpServerParams, mcp_server_tools


async def main() -> None:
    params = StreamableHttpServerParams(
        url="https://api.scrapeless.com/mcp",
        headers={"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
    )
    tools = await mcp_server_tools(params)
    scrape_markdown = next(tool for tool in tools if tool.name == "scrape_markdown")
    result = await scrape_markdown.run_json({"url": "https://quotes.toscrape.com/"}, CancellationToken())
    text = result if isinstance(result, str) else str(result)
    print("markdown 字符数:", len(text))
    print("包含引用:", "我们创造的世界" in text)


asyncio.run(main())

调用返回页面作为 Markdown,并且内容检查确认存在真实引用。

text Copy
markdown 字符数: 4424
包含引用: True

这是代理返回的形状:它可以推理的页面内容。AutoGen MCP 工具参考 完整记录了参数和适配器。

将工具附加到代理

将工具与模型客户端一起传递给 AssistantAgent,当任务需要它们时代理会调用它们。这一步需要一个模型提供者密钥。

注意:AssistantAgent.run 需要一个模型提供者密钥,例如 OPENAI_API_KEY,这里没有设置。加载 21 个工具和上面的直接 scrape_markdown 调用没有它也能运行。这个代码块以其确切的形状显示;只有模型往返是一个前提条件的缺口。

python Copy
from autogen_agentchat.agents import AssistantAgent
from autogen_ext.models.openai import OpenAIChatCompletionClient


async def run_agent(tools) -> None:
    model_client = OpenAIChatCompletionClient(model="gpt-4o")
    agent = AssistantAgent("web_agent", model_client=model_client, tools=tools)
    result = await agent.run(
        task="使用 scrape_markdown 获取 https://quotes.toscrape.com/ 并列出前三个引用和作者。"
    )
    print(result.messages[-1].content)

在运行时,模型读取任务,用 URL 调用 scrape_markdown,接收直接调用已有演示的 Markdown,并写出答案。无论是模型调用它们,还是你调用它们,工具都是相同的对象。

结论

AutoGen 加上 Scrapeless MCP 服务器是从一个简单代理转向一个可以读取实时网络的快捷方式。mcp_server_tools 加载 21 个工具,run_json 证明其中一个有效,而一个 tools 参数在 AssistantAgent 上将它们全部连接。只有代理的生成步骤需要模型密钥,因此您可以先加载和测试整个工具表面。可以从上面的脚本开始,按代理所需的工具范围,并让模型驱动。

创建免费 Scrapeless 账户 获取 API 密钥,并在计划一个定期代理时查看 Scrapeless 定价

常见问答

问:AutoGen 是否需要模型客户端来加载 MCP 工具?

不需要。mcp_server_tools 执行握手并仅使用 Scrapeless API 密钥返回工具,并且每个工具都可以直接用 run_json 调用。只有在将工具附加到 AssistantAgent 并调用 run 时,才需要模型客户端,因为那时模型决定调用哪些工具。

问:如何在没有代理的情况下调用 MCP 工具?

每个来自 mcp_server_tools 的工具都是具有 run_json 方法的 StreamableHttpMcpToolAdapter。传递一个参数字典和一个 CancellationToken,并返回工具结果。这是确认连接和检查工具输出的最快方法,之后再将其连接到代理中。

问:如何连接到标准输入输出的 MCP 服务器而不是 HTTP?

更换参数。使用 StdioServerParams 加上服务器命令,而不是使用带 URL 的 StreamableHttpServerParams,然后将其传递给相同的 mcp_server_tools 调用。Scrapeless MCP 服务器是一个托管的 HTTP 端点,因此本指南使用可流式传输的 HTTP 参数。

问:如何仅给代理一些工具?

mcp_server_tools 返回一个列表,因此在将其传递给 AssistantAgent 之前进行过滤。当任务仅需要内容和搜索时,给代理提供 scrape_markdowngoogle_search 比提供全部 21 个工具更安全。

问:Scrapeless 服务器提供哪些工具?

二十一种工具:scrape_markdownscrape_htmlscrape_screenshotgoogle_searchgoogle_trends,以及一个包含 16 个工具的 browser_* 集合用于导航、点击、输入、滚动和在云浏览器中等待。它们共同覆盖内容提取、搜索和完整的浏览器交互。

问:通过工具抓取是否受目标规则的约束?

是的。这些工具获取的是公开页面,您仍需对遵守每个目标的条款及其爬虫排除协议指令负责。请保持抓取量在可控范围内,并确保数据是公开的,并将代理的范围限定在任务实际需要的工具上。

在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。

最受欢迎的文章

目录