Skip to main content
Glama
guanyuyan
by guanyuyan

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SCRAPE_MCP_PROXYNo代理,L1/L2 共用
SCRAPE_MCP_DATA_DIRNo登录态/缓存放盘目录~/.scrape_mcp
SCRAPE_MCP_CACHE_TTLNoL1 缓存 TTL(秒),`0` 关闭300
SCRAPE_MCP_HTTP_PORTNoHTTP 端口
SCRAPE_MCP_TRANSPORTNo传输协议,stdio 或 streamable-httpstdio
SCRAPE_MCP_L2_CHANNELNo关联浏览器:空=自带 Chromium,`chrome`/`msedge`=系统
SCRAPE_MCP_L2_ENABLEDNo是否启用 Playwright 升级链true
SCRAPE_MCP_IMPERSONATENocurl_cffi 指纹模板chrome
SCRAPE_MCP_L2_TIMEZONENo隐身加固时区Asia/Shanghai
SCRAPE_MCP_BATCH_MAX_URLSNo`web_batch` 单批上限20
SCRAPE_MCP_REQUEST_TIMEOUTNoL1 超时(秒)20
SCRAPE_MCP_L2_SETTLE_TIMEOUTNo挑战页等待窗口(秒)8
SCRAPE_MCP_BATCH_MAX_CONCURRENCYNo`web_batch` 并发上限4

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
web_fetchA

抓取网页并返回极省 token 的紧凑正文(自动辨别反爬拦截页并如实上报)。

支持 HTML 页面、PDF(需安装 mcp-scrape[pdf])与纯文本(.txt/.md); 后两者直接返回文本内容,不做 DOM 精简。

Args: url: 目标网页完整 URL,需带 http/https 协议头。 max_tokens: 正文 token 预算上限,超出时保留头尾、省略中段。 link_policy: 链接处理策略。internal=站内链接保留为相对路径、站外降级为纯文本(默认,最省); all=站内外链接全保留;none=全部降级为纯文本。 format: 输出格式。markdown=保留标题/列表/链接标记(默认); text=剥掉 markdown 标记的纯文本;json=按行切分的块数组(content 为字符串列表)。 headers: 自定义请求头,如 {"Referer": "...", "User-Agent": "..."};传入时不走共享缓存。 cookies: 自定义 cookie 字典;传入时不走共享缓存。 timeout: 单次请求超时秒数(默认取配置 request_timeout)。 deadline_ms: 整次调用的总预算(毫秒),不传表示不限。预算不够时逐级降级: 压缩单步超时 → 跳过重试(diagnostics 里是 deadline:skip_retry)→ 不升级 L2(deadline:skip_l2)→ 未开始就耗尽时直接返回 timeout。 预算内拿到的正文照常返回,但降级结果不会写入结果缓存。 wait_for: 仅 L2 生效,等待该 CSS 选择器出现后再取内容(适合 SPA);不传则套用站点 recipe。 scroll: 仅 L2 生效,滚动页面触发懒加载/无限滚动;不传则套用站点 recipe。 click: 仅 L2 生效,渲染后点击一次该 CSS 选择器(如"加载更多");不传则套用站点 recipe。 bypass_cache: 跳过并绕过响应缓存,强制走网络。 debug: 返回 diagnostics(分层决策、L2 交互命中情况、正文根与候选命中数), 只含计数与决策、不含页面内容;失败时默认也会带精简版决策轨迹。 session: 登录态会话名(默认 default);需与 login 时使用的会话名一致,多身份互不干扰。 proxy: 本次请求使用的代理(如 http://127.0.0.1:7890、socks5://127.0.0.1:1080), L1 与升级后的 L2 都走该出口;不传则按代理池 SCRAPE_MCP_PROXY_POOL 分配, 未配池时沿用 SCRAPE_MCP_PROXY。 显式传入代理的请求不读也不写共享缓存,避免把不同出口的结果混在一起。

web_extractA

抓取网页并按字段 schema 抽取结构化 JSON(字段级数据,可入库)。

适合需要"数据而非整页正文"的场景:给 URL 和字段规则,直接返回字段值, 而不是一段 compact 文本。抓取链路(分级反爬、登录态、合规)与 web_fetch 一致。

字段规则示例: {"fields": { "title": {"selector": "h1"}, "price": {"selector": ".price", "regex": "(\d+(?:.\d+)?)", "group": 1}, "main_link": {"selector": "a", "type": "attr", "attr": "href", "abs_url": true}, "link_count": {"selector": "a", "type": "count"}, "tags": {"selector": ".tag", "type": "list", "list_key": "text"}, "items": {"selector": ".item", "type": "list", "fields": { "name": {"selector": ".name"}, "url": {"selector": "a", "type": "attr", "attr": "href", "abs_url": true} }}, "author": {"selector": ".author", "type": "object", "fields": { "name": {"selector": ".name"}, "bio": {"selector": ".bio"} }} }} 字段类型:text(默认,节点归一化文本)/ html / attr(需配 attr)/ count(匹配节点数)/ list(配 fields 返回对象数组,否则按 list_key 取值)/ object(在第一个匹配节点内部继续按 fields 抽取)/ jsonld(不写 selector,用 path 从 JSON-LD 取值,如 {"type": "jsonld", "path": "author.name"})。 后处理:regex + group(正则提取,未命中回落 default)、abs_url(相对链接转绝对)、 strip(去首尾空白,默认 true)、convert(int / float / date,date 输出 ISO 8601)、 required(必填,缺失时整体 ok=false 并返回 missing_required)。

Args: url: 目标网页完整 URL。 schema: 字段抽取规则字典,见上方示例;不传则套用该站 recipe 的 extract 规则。 headers: 自定义请求头;传入时不走共享缓存。 cookies: 自定义 cookie 字典;传入时不走共享缓存。 timeout: 单次请求超时秒数。 deadline_ms: 整次调用的总预算(毫秒),不传表示不限;降级规则同 web_fetch。 wait_for: 仅 L2 生效,等待该 CSS 选择器出现后再取内容;不传则套用站点 recipe。 scroll: 仅 L2 生效,滚动页面触发懒加载;不传则套用站点 recipe。 click: 仅 L2 生效,渲染后点击一次该 CSS 选择器;不传则套用站点 recipe。 bypass_cache: 跳过并绕过响应缓存,强制走网络。 debug: 返回 diagnostics(分层决策与 L2 交互命中情况),不含页面内容。 session: 登录态会话名(默认 default);需与 login 时使用的会话名一致。 proxy: 本次请求使用的代理(如 http://127.0.0.1:7890);不传则按代理池分配, 未配池时沿用全局配置。显式传入代理的请求不读也不写共享缓存。

web_batchA

并发抓取一批 URL,各自走完整分级链路,返回逐个结果。

Args: urls: 目标 URL 列表(最多 batch_max_urls 个,默认 20)。 max_tokens: 每个 URL 的正文 token 预算上限。 link_policy: 同 web_fetch。 format: 同 web_fetch(markdown / text / json)。 headers: 所有 URL 共用的自定义请求头;传入时不走共享缓存。 cookies: 所有 URL 共用的自定义 cookie;传入时不走共享缓存。 timeout: 单次请求超时秒数。 deadline_ms: 整批共用的总预算(毫秒),不传表示不限。预算耗尽后还没开始的 子任务直接返回 timeout(diagnostics 为 deadline:exceeded),不再占用网络与浏览器。 bypass_cache: 跳过并绕过响应缓存。 debug: 每条结果附带 diagnostics(决策轨迹与计数,不含页面内容)。 session: 登录态会话名(默认 default);对该批所有 URL 生效。 proxy: 该批所有 URL 共用的代理;不传则按代理池分配,未配池时沿用全局配置。 显式传入代理时该批不读也不写共享缓存。 ctx: MCP 上下文,由框架注入,用于逐条上报进度(客户端请求进度时才发通知)。

web_crawlA

从起始页发现站内链接并批量抓取,或按"下一页"顺序翻页,适合把一个栏目的前 N 篇读进来。

每页都走完整的分级抓取与合规链路(robots/黑白名单/限流/同域并发), 单页失败只影响该页,不中断整次爬取;静态资源链接(图片/压缩包等)自动跳过。

两种模式:

  • 链接模式(默认):按 depth 分层发现站内链接,limit 控制总页数。

  • 分页模式:传 next_selector(或站点 recipe 配置),顺序跟进"下一页",max_pages 控制页数。

Args: url: 起始页 URL。 depth: 链接模式的跳转层数。0=只抓起始页;1=再抓起始页上的链接(默认);最大 3。 limit: 链接模式最多抓取的页面总数(含起始页),受配置 crawl_max_pages 上限约束。 same_host: 只跟进同主机链接(默认 True)。 max_tokens: 每页正文 token 预算上限。 link_policy: 同 web_fetch。 next_selector: 分页模式:指向"下一页"的 CSS 选择器;有值时忽略 depth。 max_pages: 分页模式最多翻多少页(默认 5),受 crawl_max_pages 上限约束。 headers: 所有页面共用的自定义请求头;传入时不走共享缓存。 cookies: 所有页面共用的自定义 cookie;传入时不走共享缓存。 timeout: 单次请求超时秒数。 deadline_ms: 整次爬取的总预算(毫秒),不传表示不限。预算耗尽后不再抓新页, 已抓到的页面照常返回;排队中的子任务直接返回 timeout。 bypass_cache: 跳过并绕过响应缓存。 session: 登录态会话名(默认 default);对本次所有页面生效。 proxy: 本次爬取所有页面共用的代理;不传则按代理池分配,未配池时沿用全局配置。 显式传入代理时不走共享缓存。 ctx: MCP 上下文,由框架注入,用于逐页上报进度(客户端请求进度时才发通知)。

web_watchA

检测网页(或页面内某个区块)自上次调用以来的变化。

每次成功抓取都会保存一份正文快照,下次调用与它对比,返回 changed 与增删行摘要, 适合"每天看一眼这个页面有没有新内容"的场景;无变化时 changed=false 且 diff 为空。 抓取失败(拦截/超时/登录墙)不会覆盖旧快照,等问题解决后仍能对比到真实变化。

Args: url: 目标网页完整 URL。 selector: 只看页面内的某个区块(CSS 选择器),如 "main .article";不传则对比整页正文。 reset: 丢弃该 URL 的旧快照并重建基线(本次返回 first_seen=true)。 bypass_cache: 默认 true,强制拿最新内容;false 时允许命中 CACHE_TTL 内的正文缓存。 session: 登录态会话名(默认 default);需与 login 时使用的会话名一致。 deadline_ms: 整次调用的总预算(毫秒),不传表示不限。 proxy: 本次请求使用的代理;不传则按代理池分配,未配池时沿用全局配置。

loginA

打开带界面的浏览器手动登录,并把该站登录态持久化到磁盘。

用于 web_fetch 报告 login_required=true 的站点:浏览器会以非无头方式打开目标页, 请在弹出的窗口里完成登录;检测到登录成功或超时后,登录态(cookie 等)会被保存, 之后该站的 web_fetch 会自动带上登录态。

Args: url: 目标站点任一页面 URL(按域名区分登录态)。 timeout: 等待手动登录完成的秒数,超时也会保存当前状态便于下次继续。 session: 会话名(默认 default)。需要多账号/多身份时分别用不同名字登录, web_fetch 时传同一个 session 即可,互不覆盖。

session_listA

列出本地已保存的登录态(会话名 + 主机 + 更新时间),不含 cookie 内容。

session_exportA

导出某站登录态里的 cookie,便于备份或在另一台机器上导入。

Args: url: 目标站点任一页面 URL(按域名匹配登录态)。 session: 会话名(默认 default)。 path: 可选本地文件路径;给出时把导出 JSON 写入该文件(目录需已存在), 不传则直接在返回里给出 cookies。

session_importA

从本地文件导入 cookie 到某站登录态(仅本地文件,不发起网络请求)。

文件内容支持:session_export 导出的对象(含 cookies)、Playwright storage_state、直接的 cookie 数组,或浏览器扩展导出的 Netscape cookies.txt。

Args: url: 目标站点任一页面 URL(按域名匹配登录态)。 path: 本地文件路径(容器部署时用 docker cp 放进卷,再用容器内路径)。 session: 会话名(默认 default);与 web_fetch 使用的会话名保持一致。 replace: True 时用文件里的 cookie 整体替换该会话;默认 False 为按 (name, domain, path)合并,同名以导入值为准。

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.1/5.0

Scored across 9 tools

Disambiguation4/5

The five web_* tools have distinguishable roles: single page fetch (web_fetch), given-URL batch (web_batch), link-discovery/pagination crawl (web_crawl), schema-based structured extraction (web_extract), and change tracking (web_watch). The only borderline pairs are web_batch vs web_crawl (both fetch multiple pages) and web_extract vs web_fetch (extraction is a specialization of fetching), but descriptions make the intended split clear.

Naming Consistency4/5

Nearly all tools follow a predictable prefix_verb_noun scheme with two natural groups: web_* for fetching operations and session_* for credential management. The lone 'login' breaks the pattern (should be session_login/web_login), a minor deviation that is still readable.

Tool Count5/5

Nine tools is well within the ideal 3-15 range for a scraping server, and each tool earns its place by covering a distinct fetch mode or session operation. No filler or trivially redundant tools.

Completeness4/5

The surface covers the full scraping lifecycle: single fetch, batch, crawl, structured extraction, change monitoring, and session login/export/import/list. The main gap is session lifecycle cleanup — no logout/session_delete or cache/robots inspection tool — but agents can work around this, so it's a minor gap rather than a blocker.

Maintenance

ActivityMaintained
ResponsivenessNo issues