在 GitHub 已获得 84 个星标,且数量仍在增加。Yozh Crawler + Scraper 是一款免费、开源且公开开发的工具——如果它能成为您技术栈中的一员,请给我们点个星标
CyberYozh Data / 用例 / 人工智能代理与自动化
用例 · AI 代理

您的代理可以真正调用的工具

Yozh Scraper 原生支持 MCP。只需将一个 HTTP 端点接入 Claude Desktop、Cursor 或您自己的代理循环,您的模型即可获得真正的网络工具:数据抓取、网页爬取、会话管理和预设功能。无需粘合代码,无需自定义封装。

$docker compose up # MCP endpoint live at http://localhost:8000/mcp
prompt: scrape this and return JSON
Available tools
scrape_page crawl sessions presets
Reasoning
routing tool · validating session
Yozh MCP server /mcp
Receiving tool call
Validating session_id
Routing to scrape_page
Executing (browser + proxy)
Streaming JSON back
支持 这些 MCP 客户
定制工具胶为何会失效

代理需要真正的网络工具,而不是定制的 Python 封装类

每个团队都在构建同样的“粘合剂”:每个抓取源对应一个 Python 工具、一个半残的会话存储,以及一个在调用一次后就会丢失上下文的自制协调器。 三周后,代理程序运行一次,崩溃两次,而没人记得哪个代理已过期。我们开箱即用地提供了每个代理循环所需的四个组件——通过 MCP 提供,仅需一个 HTTP 端点。

如果您的代理在多步骤爬取的第三步曾出现超时情况——那么这篇内容就是为您准备的。

针对每个源代码的自定义 Python 工具

问题在于,每项新的代理功能都需要另一个 @tool 装饰器:一个用于亚马逊,一个用于eBay,一个用于公司维基。模式漂移、版本不一致,以及一个无人负责的工具注册表。引入新模型意味着必须从头开始重新实现这些封装器。

Yozh Scraper 是如何解决这一问题的。一个 HTTP MCP 端点 localhost:8000/mcp 会自动暴露所有功能—— scrape_page, scrape_batch, crawl, sessions, presets。在 Claude / Cursor / Cline 的配置中添加一行代码,模型即可在运行时自动发现工具。所有客户端均使用同一端点。

  • 单个 MCP 端点
  • 自动发现
  • 零胶水代码

无状态工具调用会丢失登录上下文

问题在于:工具调用是无状态的——每次调用都会启动一个新的浏览器,清除 Cookie,导致第二步双因素认证失败。卡在重新登录循环中的代理会不断消耗令牌,并在第三次重试时放弃。手动存储 Cookie 的方法不稳定,且会在不同运行之间发生泄漏。

Yozh Scraper 是如何解决这一问题的。带有粘性 session_id 代理在不同调用之间传递。声明式登录 DSL(goto / fill / click / wait)或一次性粘贴导出的 Cookie——storageState 有效期为 24 小时。此后每次调用该工具都会复用该会话,无需重新认证。

  • 粘性 session_id
  • 声明式登录
  • 24h TTL

代理代码中的手动身份验证和代理配置

问题在于:每个代理最终都要处理 API 密钥、代理轮换、国家代码、重试等配置——这些配置与模型的实际任务毫无关系。机密信息会泄露到提示词中,代理会对重试做出“富有创意”的决策,而代理预算在一周内就会激增。

Yozh Scraper 是如何解决这个问题的。 CYBERYOZH_API_KEY 在服务器的 .env ——代理代码永远不会接触凭据。在 proxy: {country: "us", type: "mobile"} 在调用该工具时,Yozh 会在服务器端处理凭据轮换、指纹检测和重试。代理则专注于推理。

  • 服务端鉴权
  • 声明式代理
  • 提示词中无密钥

代理循环中的多步爬行

问题在于:“查找本网站上的所有产品页面并提取价格”虽然是一个用户意图——但在代理代码中,这却意味着200次工具调用、一个队列、一个去重层,以及对超时情况的监控。该模型将一个上下文窗口浪费在了本不该涉及的URL管理上。

Yozh Scraper 是如何解决这一问题的。Yozh Crawler 在服务器端遍历网站,通过 SSE 流式传输发现的 URL,并在每次匹配时将其传递给抓取器。代理程序 crawl_and_scrape 一次,获取一条结构化结果流。服务器负责维护队列,模型则保持其上下文。

  • SSE 流式传输
  • 服务端队列
  • 单次工具调用
工作原理

docker compose up 到代理呼叫工具——只需3步

一个 MCP 端点,客户端中一行配置,零粘合代码。该流程同样适用于 Claude Desktop、Cursor、Cline 或您自己的代理循环。

1 启动 MCP 端点

克隆该仓库,并 docker compose up。MCP 服务器已上线,地址为 localhost:8000/mcp — 抓取器、爬虫、会话和预设均已自动作为工具对外提供。

# one-time setup
git clone 
  github.com/CyberYozh-data/yozh-scraper
cd yozh-scraper
docker compose up -d
2 将其接入您的客户端

claude_desktop_config.json (或 Cursor / Cline 的等效功能)。重启客户端——工具会自动被发现,无需为每个源代码编写封装程序。

{
  "mcpServers": {
    "yozh": {
      "type": "http",
      "url": "http://localhost:8000/mcp"
    }
  }
}
3 让代理呼叫工具

该模型会选择工具、填写参数,并返回结构化 JSON 数据。会话在不同调用之间保持持久化。多步骤爬取通过 SSE 进行流式传输。

// claude calls scrape_page autonomously
{
  "tool":   "scrape_page",
  "input":  {"url": "…",
              "preset": "amazon_product"},
  "result": { /* structured JSON */ }
}
实时示例

您将获得什么——一种形式,适配所有市场

选择一个预设,查看响应效果。字段集因来源而异,但请求结构完全相同。


            
使用范例

代理如何将其接入——每种仅需10行代码

三种具体的代理配置方案,可直接复制粘贴。从 Claude Desktop 的单行命令到完整的 LangChain 循环——它们背后都使用同一个 MCP 端点。

1 Claude 桌面研究助手

将Yozh与Claude Desktop连接一次。让该模型研究一个主题——它会 scrape_page / crawl 自主选择并综合生成答案。

# claude_desktop_config.json (~/Library/...)
{
  "mcpServers": {
    "yozh": {
      "type": "http",
      "url":  "http://localhost:8000/mcp"
    }
  }
}

# restart Claude · prompt:
# "compare ssd prices on amazon vs walmart"
# → claude calls scrape_page on each PDP
HTTP 传输 自动工具发现 无胶水代码
2 带网络工具的Cursor Copilot

将同一台 MCP 服务器添加到 Cursor 中——现在,您的 IDE 代理可以在提示过程中实时获取文档、查询竞争对手的定价,或抓取 Stack Overflow 上的答案。

# .cursor/mcp.json (project root)
{
  "mcpServers": {
    "yozh": {
      "type": "http",
      "url":  "http://localhost:8000/mcp"
    }
  }
}

# prompt in Cmd+L composer:
# "fetch the latest pricing from acme.com/plans
#  and update PricingTable.tsx"
按项目配置 同一 MCP 端点 对话中调用工具
3 LangChain / Anthropic SDK 循环

纯Python代理 — 带 mcp_servers 列表。只需一个 HTTP URL,模型即可获取所有 Yozh 工具。与 LangChain 的 MCP 适配器使用方式相同。

# anthropic SDK · plain python
client = Anthropic()
resp   = client.messages.create(
  model="claude-sonnet-4-5",
  mcp_servers=[{
    "type": "url",
    "url":  "https://your-host/mcp"
  }],
  messages=[{
    "role": "user",
    "content": "crawl docs.x.com, summarize"
  }],
)
SSE 流式传输 多工具自动驾驶 你的编排器
FAQ

关于 MCP 与代理集成的常见问题

支持哪些 MCP 客户端?
任何支持 Model Context Protocol(MCP)HTTP 传输协议的组件:Claude DesktopCursorClineContinueZedn8n MCP 节点LangChain MCP 适配器,以及 Anthropic SDKmcp_servers param。该端点的地址为 localhost:8000/mcp 是一个统一的 URL——您可以将上述任何服务指向该地址。无需维护针对特定客户端的封装层或 stdio 适配层。
工具是如何在代理上注册的?
通过 MCP 进行自动发现。当客户端连接到 /mcp时,服务器会列出所有可用工具及其 JSON 模式: scrape_page, scrape_batch, crawl, create_session, list_presets, generate_preset。模型在运行时会将其视为原生工具——无需装饰器,也无需手动定义模式。上游中的新功能 yozh-scraper 中的新功能将在下次拉取后自动出现。
我的代理能否流式传输多步爬取?
是的——Yozh Crawler 在服务器端对网站进行爬取,并通过 SSE 流式传输发现的 URL。该爬虫代理 crawl 一次,并随着结构化结果的到达,获取单一事件流。每次爬取均支持范围设置(同域/同主机/白名单)、按域的请求速率(RPS),以及可选的与抓取器的链式调用,确保每个发现的 URL 在进入数据流前均经过解析。可通过 DELETE /scrape/{id} ——软停止允许正在处理的页面完成;强制停止则需再次调用。
会话如何在不同工具调用之间保持持久性?
会话 API。可通过声明式登录 DSL(goto / fill / click / wait) 或粘贴导出的 Cookie 来创建一次会话。Yozh 将 Cookie 与 Playwright storageState ,并为您提供一个持久的 session_id。此后每次调用工具时,只要传入该 ID,都会复用相同的浏览器状态——包括受双因素认证保护的门户、LinkedIn 以及合作伙伴管理后台。默认 TTL 为 24 小时,可刷新。代理程序绝不接触凭据;它仅转发收到的会话 ID。
如何使用自定义工具进行扩展?
有三种选项。(1) 自定义预设——将一个 JSON 文件拖放到 src/presets/custom/ 或调用 POST /api/v1/presets/generate 并提供一个示例 URL,让大型语言模型(LLM)推断出模式。该预设将作为参数显示在现有的 scrape_page 工具上显示为一个参数。(2)自定义 MCP 工具 — 在 src/mcp/tools/中注册您自己的处理程序,它将加入自动发现的列表。(3) 分叉 — 代码库采用 MIT 许可证,MCP 服务器位于一个 Python 模块中(src/mcp/server.py),扩展起来非常简单。
开源 · MIT 许可 · 84 ★

准备好为您的代理提供实用的工具了吗?

一个 MCP 端点,即可将所有 Yozh 功能自动暴露给 Claude、Cursor、Cline 以及您自己的代理循环。免费。永久有效。如果对您有帮助,请给我们点个星——每一个星都至关重要。

Yozh Crawler + Scraper 根据 MIT 许可证发布。请随意使用、分叉和基于它进行开发。

深受数据团队和人工智能开发者的喜爱

使用 Yozh 进行开发的用户怎么说

5.0 / 5 · 5 评测
GitHub
仅用一个下午就将我们内部的 Playwright 集群替换为 Yozh。MCP 端点直接接入我们的 Claude 代理——无需任何胶水代码,爬虫和数据提取工具便能正常运行。
Marcus Reinhardt 首席数据工程师 Northwind Analytics
X
预设系统是其杀手级功能。我们传入源名称,就能得到干净的 JSON 数据;其自动修复功能甚至在我们察觉之前就发现了亚马逊的两次布局变更。
Priya Nair 创始人 ScrapeStack
Reddit
终于出现了一个将代理和会话视为第一类对象的开源爬虫工具。我们将其部署在合作伙伴门户网站的登录墙后方——会话能够保持持久性,且跨区域的爬取结果始终保持一致。
Daniel Osei 后端工程师 Loopfeed
X
通过 MCP 将其连接到 Cursor 后,我的代理现在可以在任务进行中实时提取网页数据。通过 SSE 进行的流式爬取,正是代理工作流所缺失的功能。
Elena Kovac 人工智能工程师 Vektor Labs
GitHub
为了节省成本,我们放弃了付费的数据抓取 API,并做好了性能下降的准备——结果却事与愿违。现在采用自托管模式,无需按请求付费,而且输出数据结构比我们以前付费使用的还要简洁。
Sofia Almeida 工程经理 Tabbly