如果你曾经将 AI 智能体接入过实时网络,你已经知道它在哪里会失灵。智能体的推理能力很好,但一旦它需要真实的页面内容,就会遇到瓶颈:网站是客户端渲染的,HTML 一团乱麻,或者请求在返回任何数据之前就遭到拦截。解决方法不是一个更聪明的提示词,而是给智能体一个能按需返回干净、结构化网页数据的工具,并让智能体自己决定何时调用它。
这正是 Crawlbase Web MCP 服务器所提供的。本指南展示如何围绕 Crawlbase Web MCP 构建 AI 智能体工作流:智能体运行的规划循环、它发出的 MCP 工具调用,以及一个端到端的具体示例,该示例接受一个 URL,获取渲染后的页面,并返回结构化的答案。无需自定义抓取代码,无需守护代理池,也无需将解析规则硬编码到智能体中。
Crawlbase Web MCP 为智能体带来了什么
MCP,即 Model Context Protocol(模型上下文协议),是让语言模型通过一致接口调用外部工具的开放标准。MCP 服务器发布一组工具,任何支持 MCP 的客户端(Claude Desktop、Cursor、n8n 或你自己的智能体)都可以发现并调用它们。Crawlbase MCP 服务器发布网页访问工具,使智能体能够像真实浏览器一样读取任何公开 URL。
在底层,这些工具由驱动 Crawlbase 其余功能的同一个 Crawling API 支撑。这意味着智能体继承了 JavaScript 渲染、住宅 IP 轮换、反爬虫处理、重试机制和干净输出,而无需知道这些存在。从智能体的角度来看,它只是调用了一个工具并得到了可读内容。关于服务器所暴露内容的更完整介绍,请参阅我们对 Crawlbase MCP 的介绍。
Web MCP 通常暴露你的智能体会用到的两个工具:
- crawl 获取单个 URL,并将渲染后的页面以干净的 markdown 或 HTML 形式返回,供模型阅读。
- crawl_markdown(或截图/结构化变体,取决于你的服务器构建版本)返回相同内容,但经过裁剪以保留可读文本,从而降低长页面的 token 消耗。
你可以给智能体一个普通的 HTTP 请求工具。在现代网站上,这很少有效:大多数页面是客户端渲染的,且会拦截自动化流量,因此原始抓取返回的是空壳或封锁页面。MCP 工具通过 Crawling API 进行路由,在受信任的 IP 后面渲染页面并返回完整内容,因此智能体在第一次调用时就能获得真实数据,而不是陷入重试循环。
智能体循环,逐步拆解
智能体工作流是一个循环,而非一条直线。模型进行规划,选择工具,读取结果,然后决定是否已有足够信息来回答,或者需要再次调用。接入 Web MCP 后,这个循环看起来是这样的:
- 接收任务。智能体收到一条通常包含 URL 或研究主题的指令。
- 规划。它推断自己能否用已有知识回答,还是需要实时网页数据。
-
调用 MCP 工具。当它需要该页面时,它以目标 URL 调用
crawl。 - 读取结果。Crawlbase 返回干净的渲染内容,模型将其作为工具输出进行处理。
- 决策。信息足够回答了?它写出结构化响应。还不够?它返回循环,爬取另一个 URL 或细化查询。
- 返回。它以你所要求的任何形态交回干净的结构化结果。
重要的转变在于,是否抓取的决定由智能体做出,而非由你硬编码。你描述目标,智能体自己判断需要哪些页面以及何时获取它们。
第一步:运行 Crawlbase Web MCP 服务器
任何 MCP 客户端都通过一个小的配置块连接到服务器。你将客户端指向 Crawlbase MCP 包,并通过环境变量传递你的 token。以下是典型的桌面 MCP 客户端配置。
{ "mcpServers": { "crawlbase": { "command": "npx", "args": ["-y", "@crawlbase/mcp"], "env": { "CRAWLBASE_TOKEN": "YOUR_CRAWLBASE_JS_TOKEN" } } } }
这里使用你的 JavaScript(JS)token。Crawlbase 发放两种类型的 token:普通 token 获取静态 HTML,而 JS token 则先在真实浏览器中渲染页面。由于大多数值得爬取的网站都是客户端渲染的,JS token 是智能体工作的安全默认选择。注册后,你可以从仪表盘获取这两种 token。
如果你使用的是 n8n 等智能体平台,而非桌面客户端,则通过 HTTP 连接到托管的 MCP 端点,而非在本地启动进程。完整的 n8n 设置在将 n8n 与 Crawlbase Web MCP 连接中有所介绍;本指南的其余部分用代码构建智能体,以便你直接观察到循环过程。
第二步:构建调用 MCP 工具的智能体
现在将一个真实的智能体接入服务器。以下模式使用 Python,配合 MCP 客户端库和支持工具调用的模型。智能体连接到 Crawlbase MCP 服务器,发现可用工具,并将其传递给模型,由模型决定何时进行爬取。
import asyncio from mcp import ClientSession, StdioServerParameters from mcp.client.stdio import stdio_client server = StdioServerParameters( command="npx", args=["-y", "@crawlbase/mcp"], env={"CRAWLBASE_TOKEN": "YOUR_CRAWLBASE_JS_TOKEN"}, ) async def connect(): async with stdio_client(server) as (read, write): async with ClientSession(read, write) as session: await session.initialize() tools = await session.list_tools() print([t.name for t in tools.tools]) return session asyncio.run(connect())
运行这段代码会打印服务器暴露的工具名称,在要求模型使用它们之前确认智能体能够看到 crawl 及其同类工具。这一发现步骤正是使工作流可移植的原因:之后切换到不同的 MCP 服务器,智能体会自动适应它所发现的任何工具。
第三步:为模型提供工具调用循环
会话建立后,循环非常直接。你给模型提供任务和工具列表,让它发出工具调用,对 MCP 服务器执行该调用,将结果反馈回去,然后重复,直到模型停止调用工具并写出答案。
async def run_agent(session, model, task): messages = [{"role": "user", "content": task}] tools = (await session.list_tools()).tools while True: reply = await model.chat(messages, tools=tools) if not reply.tool_calls: return reply.content for call in reply.tool_calls: result = await session.call_tool(call.name, call.arguments) messages.append({ "role": "tool", "tool_call_id": call.id, "content": result.content, })
那个 while 循环就是整个智能体。模型进行规划,需要页面时调用 crawl,读取 Crawlbase 返回的 markdown,然后要么回答,要么再次爬取。你从不告诉它要抓取哪个 URL 或何时抓取;你描述结果,它自己规划路径。
第四步:用系统提示词引导智能体
唯一可能出现歧义的地方,是模型是否信任它应该使用工具。一条简短、明确的系统消息可以消除疑虑,并锁定一致的输出形态。
SYSTEM = """You are a web research assistant with crawl tools. Always use the crawl tool to read a URL before answering about it. Never guess page contents from memory. After crawling, extract only the fields requested and return them as structured JSON.""" task = ( "Crawl https://www.example-store.com/product/123 and return " "the product name, price, rating, and a one-line summary." )
有了这些设置,一次运行就能产生干净的对象:智能体爬取页面,读取 Crawlbase 返回的渲染内容,并准确输出你所要求的字段。这与结构化AI 数据提取背后的思路相同,只是模型自己决定何时去获取页面。
Web MCP 服务器通过单次工具调用为你的智能体提供实时网络访问能力。它由 Crawling API 支撑,因此每次爬取都在轮换住宅 IP 后面渲染 JavaScript,并返回干净的 markdown,无需你运营代理池或无头浏览器集群。先在免费层将智能体指向一个公开页面试试。
一个具体工作流:竞品价格监控
将各部分串联成一个你实际会运行的工作流。假设你想每天检查几个竞品商品页面:当前价格、库存状态以及任何促销横幅。你给智能体提供列表,让它逐一处理。
urls = [ "https://competitor-a.com/p/widget", "https://competitor-b.com/p/widget", ] async def price_watch(session, model): rows = [] for url in urls: task = f"Crawl {url}. Return price, in_stock, promo as JSON." rows.append(await run_agent(session, model, task)) return rows
每次迭代都运行完整的智能体循环:模型通过 MCP 工具爬取 URL,Crawlbase 渲染页面并轮换 IP,智能体返回一个结构化的数据行。输出是一个整洁的数组,你可以将其与昨天的运行结果进行比对,推送到表格,或在价格发生变动时触发告警。
同样的框架可以灵活地适配其他任务,无需重写。更换任务字符串,你就有了新闻监控器、跨多个来源收集笔记的研究助手,或针对公开公司页面的线索丰富步骤。由于智能体通过一个稳定的工具与 Crawlbase 交互,将其指向一个新网站无需任何新的 API 接线工作。更多相关内容,请参阅AI 代理使用场景汇总,其中详细介绍了相邻的应用模式。
针对难以访问页面调优爬取
大多数页面使用默认设置即可干净地爬取,但重度单页应用有时需要一些提示。MCP 工具接受与 Crawling API 相同的等待选项,因此当页面渲染较慢时,你可以在工具参数中传入它们。最重要的两个是:一个等待异步内容加载的 ajax-wait 标志,以及一个在加载后固定等待指定毫秒数的 page-wait 值。
{ "url": "https://www.example-store.com/product/123", "ajax_wait": true, "page_wait": 5000 }
如果结果返回内容稀少,请先提高 page_wait,再尝试其他方法。你可以通过在系统提示词中描述页面来让智能体自行设置这些参数("对于缓慢的单页应用,等待 ajax 内容加载"),或者当你知道目标是重度页面时,在封装器中将其硬编码。无论哪种方式,渲染、轮换和重试行为都保留在 Crawlbase 侧;智能体只需读取结果。
如果某个网站即使经过渲染爬取仍然表现得非常强硬,Smart AI Proxy 可以为你提供单一的轮换端点来路由请求,而 Crawling API 对于热门网站会直接返回预解析的 JSON,省去模型解析页面的步骤。两者都共享 MCP 工具所依赖的同一基础设施。
保持工作流可靠运行
一些习惯可以让智能体工作流在生产环境中保持健康。在每次运行后添加检查,使失败的爬取可见而非悄悄产生空行。在循环处理多个 URL 时对请求进行节流,而非一次性全部发出。将结构化输出持久化到某个地方(数据库或电子表格),以便你可以回顾和随时间比对。并在必要时针对每个目标调优提示词:对非常不同的网站使用同一条通用指令,通常比针对特定网站的几行说明产生更弱的结果。
当智能体报告"没有使用工具"时,几乎总是意味着模型不确定是否应该爬取。收紧系统消息并确保 URL 在任务中清晰呈现即可解决。对于连接问题,请检查 MCP 服务器是否正在运行,确认 token 已设置在环境变量中,并先列出工具以验证握手正常,再调试模型问题。
核心要点
- MCP 服务器是智能体的网络访问入口。它发布任何支持 MCP 的客户端都能发现并调用的爬取工具,由 Crawling API 支撑。
- 智能体自主决定是否抓取。你描述目标,模型进行规划,需要页面时调用工具,读取结果,然后循环或回答。
- 使用 JS token。它在真实浏览器中渲染客户端页面,而这正是大多数现代网站返回真实内容所必需的。
- 循环是可移植的。在运行时发现工具,同一个智能体无需任何新的 API 接线即可适配新网站。
-
通过等待选项调优。对于重度单页应用传入
ajax_wait和page_wait;当结果返回内容稀少时,首先提高page_wait。 - 添加防护措施。检查爬取失败、对请求进行节流、持久化输出,并针对每个目标调优提示词。
常见问题
什么是 Crawlbase Web MCP,智能体如何使用它?
Crawlbase Web MCP 是一个 Model Context Protocol 服务器,它向任何支持 MCP 的 AI 智能体发布网页访问工具,主要是 crawl 工具。智能体连接到服务器,发现工具,并在需要实时页面内容时调用它们。每次调用都由 Crawling API 支撑,因此智能体无需编写任何抓取代码即可收到渲染后的干净内容。
智能体工作流应该用普通 token 还是 JS token?
智能体工作用 JS token。普通 token 获取静态 HTML,在现代客户端渲染网站上,这是一个空壳。JS token 在返回页面之前先在真实浏览器中渲染它,因此智能体读到的内容实际上包含了数据。注册后,你可以从 Crawlbase 仪表盘获取这两种 token。
哪些 AI 智能体和平台可以与 Crawlbase Web MCP 配合使用?
任何兼容 MCP 的客户端都可以,包括 Claude Desktop、Cursor、Windsurf 以及 n8n 等智能体平台,以及你用 MCP 客户端库构建的自定义智能体。只要客户端能连接到服务器并调用工具,它就可以使用 Crawlbase 爬取工具。
智能体能否无需额外设置就抓取 JavaScript 密集型网站?
可以。crawl 工具通过 Crawling API 自动渲染 JavaScript,因此智能体收到的是完全渲染后的内容,无需你运行 Puppeteer 或 Selenium。对于加载较慢的页面,在工具参数中传入 ajax_wait 和较大的 page_wait,API 会等到内容出现。
这如何避免被封锁?
MCP 工具通过 Crawling API 进行路由,该 API 轮换住宅 IP,管理浏览器指纹,并在服务端处理反爬虫挑战和重试。智能体从未接触到这些机制;它只是得到干净的内容。在循环处理多个 URL 时将请求速率保持在合理水平,工作流就能保持健康运行。
这与给智能体一个普通 HTTP 请求工具有什么不同?
原始 HTTP 工具返回的是服务器发送的任何内容,在大多数现代网站上,这是一个未渲染的空壳或一个封锁页面。Crawlbase MCP 工具在受信任的 IP 后面渲染页面,并在第一次调用时就返回完整内容,因此智能体将其时间花在对真实数据进行推理上,而不是在失败的抓取中反复重试。
大规模爬取任何站点,无需与基础设施对抗。
Crawlbase 负责处理代理、指纹和 CAPTCHA,让你的团队专注于交付数据流水线,而非维护爬取管道。1,000 次请求免费,无需信用卡。

