工作流 📋 6 个步骤 第 551 / 551 篇

用 Apify MCP Server 让 Agent 调用数千个采集器并自己付钱

Apify MCP Server 把 Apify Store 里数千个现成采集器(Actor)整体暴露成 MCP 工具。本教程从 mcp.apify.com 托管端点接入、跑通 search-actors → fetch-actor-details → call-actor → get-dataset-items 四步工具链,到 datasetId 分页与 AGI/x402/Skyfire 智能体付费治理。

2026.10.20· 8 分钟上手· 约 2568 字· 🧩 Apify MCP Server / 🕷️ 数据采集 Agent

让 Agent 抓网页,自己写爬虫最痛苦的不是代码,而是维护:目标站一改版就失效,反爬一升级就封 IP,还要为每个站点单独写解析。Apify MCP Server 换了个思路——Apify Store 里已经有数千个现成的采集器与自动化脚本(Actor),这个 MCP 服务把它们整体暴露成工具,让 Agent 自己去「搜合适的采集器 → 看输入 schema → 调用 → 取结构化结果」。更特别的是它支持智能体付费:除了用你自己的 APIFY_TOKEN,还能通过 AGI 或 x402 让 Agent 按次自己付钱跑 Actor。本教程从接入客户端开始,跑通官方推荐的四步工具链,再讲清分页、计费与合规边界。

🧩 本教程适合:需要让 Agent 从搜索引擎、社交媒体、地图、电商站点抓取结构化数据的开发者与业务同学。推荐走托管端点(无需本地安装,支持 OAuth);本地 stdio 路线需要 Node.js 22 以上与一个 Apify API Token。文中工具名与端点以官方仓库当前版本为准。

Step 1:两种形态,先选托管还是本地

1 托管端点能力更全

官方明确推荐托管形态:https://mcp.apify.com,走 Streamable HTTP,支持 OAuth,很多客户端只要填一个 URL 就能连上。本地形态是 npm 包 @apify/actors-mcp-server,由客户端以 stdio 子进程拉起,靠 APIFY_TOKEN 环境变量鉴权。两者能力并不等价——托管端支持「对 Actor 结果做输出 schema 推断」这类结构化能力,本地 stdio 模式没有。如果你的客户端支持 OAuth 远程 MCP,直接用托管端点即可。

# 形态 A:托管(推荐)
https://mcp.apify.com                 # OAuth,客户端填 URL 即可
https://mcp.apify.com?payment=skyfire # 走 Skyfire 智能体付费

# 形态 B:本地 stdio
APIFY_TOKEN="apify_api_xxxx" npx @apify/actors-mcp-server

# 显式声明工具集(生产推荐,避免工具数量膨胀)
npx @apify/actors-mcp-server --tools actors,docs,apify/rag-web-browser

SSE 端点已移除:旧版配置里的 https://mcp.apify.com/sse 已经下线,官方在 v0.18 这条线彻底去掉了遗留的 SSE 传输,全面改用 Streamable HTTP。如果你的客户端还在报连接失败,把配置里的 /sse 后缀去掉即可。另外先花一分钟理解 Actor 这个概念:它是 Apify Store 上一个可独立运行的云端程序,封装了某个具体站点或某类数据的采集逻辑,有明确的输入 schema 与输出数据集;过去你要自己写爬虫去解决的解析与反爬问题,Actor 的作者已经替你维护了。MCP 服务做的事,就是把这些现成程序的「发现、调用、取数」三个动作翻译成模型能理解的工具。

Step 2:把它接进你的 MCP 客户端

2 托管用 URL,本地用命令

Apify MCP Server 兼容任何遵循 MCP 规范的客户端,官方测试过的包括 Claude Code、Claude.ai / Claude Desktop、Cursor、VS Code 等,但各家对「动态工具发现」的支持程度不一。托管形态在支持 OAuth 的客户端里最省事;若客户端不支持 OAuth,就在请求头里带 Authorization: Bearer <token>。本地形态则是在客户端的 MCP 配置里写命令加环境变量。接入完成后建议先做一次连通性验证:让客户端列出当前可用工具,确认能看到 actors 与 docs 相关工具,再开始跑实际任务。若工具列表为空,通常是鉴权没生效或传输方式选错,而不是 Actor 本身出了问题。

// Claude Desktop 的 claude_desktop_config.json(本地 stdio 版)
{
  "mcpServers": {
    "apify": {
      "command": "npx",
      "args": ["-y", "@apify/actors-mcp-server"],
      "env": { "APIFY_TOKEN": "apify_api_xxxxxxxx" }
    }
  }
}

# 命令行客户端(托管 + Bearer)
# 在客户端里把 URL 填成 https://mcp.apify.com,并配置
# Authorization: Bearer apify_api_xxxxxxxx
💡 生产环境建议用查询参数把工具集钉死,例如 https://mcp.apify.com?tools=actors,docs,apify/rag-web-browser。工具数量可控,Agent 的选择成本更低,也避免它误调用到你没审过的采集器。

Step 3:跑通四步工具链

3 搜、看、调、取

这是官方推荐的标准作业流,也是你要写进 Agent 提示词里的心智模型:先用 search-actors 在 Apify Store 里找合适的采集器;再用 fetch-actor-details 拿到它的输入 schema、文档、计费方式与输出 schema;确认无误后用 call-actor 启动任务;最后用 get-dataset-items 取结构化结果。关键在于中间那步——不看输入 schema 就调用,几乎必然参数错。

1) search-actors       按「抓 Google 地图上的商家信息」这类描述找 Actor
2) fetch-actor-details 读它的 input schema / 文档 / 计费 / 输出 schema
3) call-actor          按 schema 构造参数并启动
4) get-dataset-items   按 datasetId 取回结构化结果(可过滤、可分页)

# 排查与收尾的辅助工具
get-actor-run          查看某次运行状态
get-actor-log          看运行日志定位失败原因
get-key-value-store-record  读 kv 记录
abort-actor-run        中止一个仍在跑的任务
search-apify-docs / fetch-apify-docs   查官方开发文档
🔑 把「先 fetch-actor-details 再 call-actor」写成 Agent 的硬性规则,能省掉绝大多数参数错误。让模型凭猜构造输入,是这套工具链最常见的失败原因。

Step 4:用 rag-web-browser 一步完成「搜索 + 抓正文」

4 默认工具里的开箱即用款

默认配置里已经带上了 apify/rag-web-browser 与 apify/web-fetch 两个实用 Actor。前者会搜索网页、抓取排名靠前的若干 URL 并返回正文,非常适合给 RAG 或调研类 Agent 当入口;后者抓取任意 URL 并以 Markdown、纯文本、HTML 或链接形式返回,还带 JavaScript 渲染与反爬处理。想让 Agent 回答「最近发生了什么」这类问题时,先走 rag-web-browser 通常比自己拼 search + fetch 更省事。如果你用的是本地 stdio 模式,默认工具集会略有差异,官方更建议用参数显式声明需要的工具集,而不是让它把全部采集器动态展开成工具——工具数量越少,模型选错的概率越低,冷启动也更快。

# 默认工具集(本地 stdio 等价写法)
--tools actors,docs,apify/rag-web-browser

# 典型对话(给 Agent 的自然语言指令)
用 rag-web-browser 检索「2026 MCP 规范变更」,
抓前 5 个结果,总结成要点并标注来源链接。

# 另一个常见用法:地图线索
找一个能抓 Google 地图商家信息的 Actor,
提取某城市咖啡馆的名称、地址、评分与电话。

合规红线:抓取前确认目标站点的 robots 与服务条款,不要采集需要登录才能访问的内容,不要批量采集个人信息。社交媒体类 Actor 尤其要注意平台条款与数据用途限制,商用前先确认授权范围。

Step 5:大数据集用 datasetId 分页,别一次灌进上下文

5 调用返回的是句柄,不是全部数据

这是一个容易踩的设计:call-actor 的返回并不内嵌全部输出条目,而是给运行元数据、存储 ID(如 datasetId)、一段摘要和一个 nextStep 提示。Agent 需要再用 get-dataset-items 按需取回结构化结果,可以过滤也可以分页。这个设计对上下文很友好——一次采集几千条数据也不会把模型的窗口撑爆,你要做的是教会 Agent「先取一小批看结构,再决定要不要继续翻页」。

call-actor 返回大致形态:
{
  "runId": "...",
  "datasetId": "...",
  "summary": "已采集 1200 条",
  "nextStep": "用 get-dataset-items 取回结果"
}

# 给 Agent 的分页指令范式
先取 20 条看字段结构,确认有 name / address / rating 后,
再按每次 100 条翻页,全部写进本地 CSV,不要一次性塞进对话。
💡 处理大批量数据时,让 Agent 把结果落到本地文件或数据库,而不是在对话里搬运。上下文里只保留样本与统计摘要,成本和质量都会好很多。

还有一层容错上的好处:采集任务跑在 Apify 云端,本地断网或客户端重启都不会中断任务本身,你随时可以用 runId 回去取结果。对 Agent 来说,这意味着「发起长任务、稍后再取」这种异步模式天然成立,不必把整个等待过程耗在一次对话里。

Step 6:计费、付费方式与遥测开关

6 三种给钱的方式

跑 Actor 是要花钱的,官方支持三条路径:最常规是用你自己的 Apify Token 走账户额度;其次是智能体付费——买 AGI 代币让 Agent 自己付(官方推荐),或用 x402 按请求直接支付(仅支持按事件计费的 Actor);还有一条是 Skyfire,在 URL 上加 ?payment=skyfire 即可。无论走哪条,都建议给 Agent 设预算上限与调用审计。

# 三条付费路径
1) APIFY_TOKEN            走你自己账户的 Apify 额度
2) AGI 代币 / x402        让 Agent 自己按次付费(x402 仅支持 Pay Per Event Actor)
3) Skyfire                https://mcp.apify.com?payment=skyfire

# 关闭遥测(官方 README 有关闭章节)
APIFY_MCP_TELEMETRY=0    # 具体变量名以官方 README 当前版本为准

成本与权限:部分 Actor 是租赁制商业采集器,费用与免费额度差别很大,调用前务必用 fetch-actor-details 看清计费方式;如果走智能体付费,等于把「花钱的权限」交给了 Agent,必须配上限额与日志审计。另外远程形态会把抓取请求与 Actor 输入发往 Apify,对数据出境有要求的组织应改用本地 stdio 并自行评估。

常见问题速查

现象原因与处理
连不上 / 一直握手失败配置里还留着旧的 /sse 后缀,去掉即可;SSE 传输已被 Streamable HTTP 取代
call-actor 报参数错误没先读输入 schema;先用 fetch-actor-details 拿到 schema 与文档再构造参数
拿不到完整结果call-actor 只返回 datasetId 等句柄,需用 get-dataset-items 取数据
本地模式没有输出 schema 推断该能力仅托管端点提供,改用 https://mcp.apify.com
费用超出预期部分 Actor 为租赁制商用采集器,调用前查清计费;给 Agent 设预算上限与审计
任务卡住不退用 get-actor-run 与 get-actor-log 定位,必要时 abort-actor-run 中止
← 返回教程中心