chrome-downloader
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@chrome-downloader帮我用 Chrome 这个链接的数据集下载下来,完成后告诉我保存路径"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
chrome-downloader 🚀
把下载交给 Chrome 浏览器做,让程序与 AI Agent 当指挥官。
100% 流量走浏览器网络栈(自动继承 Cookie、登录态、系统代理与加速器),免人工手动开服,支持命令行 CLI 与标准 MCP 协议。
✨ 核心特性
🌐 100% 走 Chrome 原生内核:所有文件字节完全由
chrome.downloads发起。自动带入浏览器里的登录 Cookie、网页会话、专属网络代理与下载加速器。⚡ 零配置、免手动开服:不需要在后台常驻服务。命令行工具或 AI Agent 发起请求时,后台守护进程 1 秒内自动静默拉起,无需使用者人工管理。
🤖 专为 AI Agent 打造:原生支持 Model Context Protocol (MCP) 双时代协议,Claude Code、Cursor、Paseo 等大模型一句话即可调度下载。
🛡️ 纯本地回环与零外网偷跑:Python 桥接服务仅负责收发调度指令,绝不经过本机网卡直接下载文件;仅监听本地
127.0.0.1端口,结合 TOFU 握手密钥保护。📦 零强制外部依赖:Python 端核心库完全基于标准库实现(内置 RFC 6455 WebSocket 回退),无需繁琐装包,开箱即用。
Related MCP server: luffy-video
🛠️ 两步快速开始
1. 安装 Chrome 扩展插件
方式 A(Chrome 应用商店):直接在 Chrome 网上应用店搜索
chrome-dl-bridge,点击 「添加到 Chrome」。方式 B(开发者模式本地加载):
浏览器打开
chrome://extensions/并开启右上角 「开发者模式」。点击 「加载已解压的扩展程序」,选中本项目源码中的
src/chrome_downloader/extension目录即可。
2. 安装 Python 控制端
在你的终端执行:
pip install chrome-downloader
📖 使用指南
-------
### 1\. 终端命令行使用(CLI)
**完全不需要提前启动后台!** 直接敲命令,后台服务自动随需启动:
```bash
# 提交下载并等待完成(自动打印落盘路径与 SHA256 校验和)
chrome-dl download "https://example.com/data.zip" --wait
# 查看所有正在进行的任务与实时下载网速
chrome-dl progress
# 任务控制
chrome-dl pause <任务号> # 暂停
chrome-dl resume <任务号> # 继续
chrome-dl cancel <任务号> # 取消并清理未完成文件
# 查看服务与插件连接健康状态
chrome-dl health文件保存在哪?
默认保存在你 Chrome 浏览器配置的下载目录下的chrome-dl/文件夹中。
2. AI Agent 智能体调用(MCP 协议接入)
本项目原生支持 Model Context Protocol (MCP)。只需在你的 AI 客户端配置中添加:
接入 Claude Desktop / Claude Code
在 claude_desktop_config.json 中配置:
{
"mcpServers": {
"chrome-downloader": {
"command": "chrome-dl-mcp"
}
}
}接入 Cursor / Paseo / 其它 Agent
直接配置命令为 chrome-dl-mcp 即可。
接入后效果:
你只需对 AI 说:
“帮我用 Chrome 插件把这个链接的数据集下载下来并告诉我保存路径。”
AI 将自动调用 download_file 原生工具完成调度,全程无需人工干预!
3. Python 脚本中调用(SDK)
如果你要在自己的 Python 脚本或自动化流水线中使用:
from chrome_downloader.client import Client
# 自动定位本地端点并连接(免配端口与密钥)
client = Client()
# 提交下载任务
job_ids = client.download(["https://example.com/sample.csv"])
print("任务已提交:", job_ids)
# 阻塞等待下载完成
result = client.wait(job_ids)
print("下载完成:", result)🔒 安全与设计哲学
流量零越界(Zero-Egress Guard): 桥接程序和控制端在架构级别被限制为指令通道,数据帧限制在 8192 字节以内,从物理上阻止通过 Python 脚本直连外网下载文件,确保流量合规。
信任初建(TOFU 机制): 扩展程序首次与本地桥连接时生成 32 字节高强度配对密钥,拒绝外部未授权来源劫持控制。
资源友好: 扩展基于 Chrome Manifest V3 标准开发,空闲时自动进入休眠状态,不占用系统 CPU 与多余内存。
📄 开源许可证
本项目基于 MIT License 开源发布,欢迎自由使用、集成与贡献代码。
Available Tools
8 toolschrome_download提交下载(字节由 Chrome 取)A
提交一个或一批 URL 给浏览器下载。服务端不取任何字节,只把任务交给扩展。注意:插件冷启动最长约 30 秒才醒(官方定时器下限),所以提交后进度不立刻动是正常的;要等结果请带 wait=true 或改用 chrome_download_wait。
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | 要下载的 URL 列表(http/https;服务端会拒非 http(s)) | |
| wait | No | 是否阻塞到终态(默认 false,与 v0.2 SDK 一致) | |
| sha256 | No | 期望的 sha256;给了才会做完整性校验 | |
| filename | No | 落盘文件名(可省,缺省由 URL 推) | |
| stateDir | No | ||
| timeout_sec | No | wait=true 时的超时秒(上限 600) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: the server is a non-fetching dispatcher, the extension cold-start delay can reach 30 seconds due to the official timer floor, and stalled progress right after submission is expected. None of this is derivable from readOnlyHint=false / idempotentHint=false and it directly prevents premature retries or misdiagnosis.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and the no-bytes guarantee, then the latency caveat and the escape hatch. Three dense sentences with no filler; slightly crowded by bold emphasis but still efficient and well ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a submission tool with no output schema, the description covers the essential unknowns: where bytes come from, expected latency, and how to await results. It omits any mention of the sha256 verification path or what happens to previously queued tasks, minor gaps given the rich sibling toolset for status.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already explains urls, wait, sha256, filename, and timeout_sec. The description reinforces wait's blocking semantics in context, but adds no syntax or format detail beyond the schema, and stateDir remains undocumented in both places. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('提交一个或一批 URL 给浏览器下载') and immediately clarifies the critical scope boundary: the server fetches no bytes and only hands the task to the extension. This cleanly separates it from siblings like chrome_download_status/progress/list, which report on rather than create downloads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context (cold start up to ~30s, progress may not move immediately) and routes the agent: pass wait=true or use chrome_download_wait to obtain results. It does not state when NOT to submit (e.g., duplicate URLs) or other exclusions, so it falls short of a full when/when-not treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chrome_download_cancel取消B
取消一个任务(不可逆;要重下请新提交)。插件冷启动最长约 30 秒。
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | ||
| stateDir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds real information beyond the sparse annotations: irreversibility and a plugin cold-start latency of up to ~30 seconds. But it sits in tension with destructiveHint=false and idempotentHint=false — an irreversible cancel of a job is not obviously an 'additive' operation, and the description does not clarify what happens to partial download artifacts or whether cancel after completion is a no-op. Useful context, but the safety profile is left ambiguous rather than resolved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the action first, then the two operative facts (irreversibility, latency) in parentheses. Nothing is padded and nothing repeats the name or title. It is compact to the point of being sparse, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no output schema, 0% parameter coverage and only minimal annotations, the description omits everything an agent needs about the call itself: what stateDir does, what a successful cancel returns, whether an unknown/already-finished jobId errors. It correctly warns about irreversibility and cold start, but the operational gaps are significant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and it says nothing about either parameter. jobId is at least self-descriptive by name, but stateDir is completely opaque — no hint about what directory it refers to, which value to pass, or what the default is. The description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('取消一个任务' — cancel a job), so an agent can tell it apart from read-only siblings like chrome_download_status or chrome_download_list. However it does not explicitly contrast itself with the resume/pause siblings, which are the genuinely confusable alternatives. Clear purpose, but sibling differentiation is only implied by 'irreversible'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives the consequence-based guidance that the action cannot be undone and that a re-download requires a fresh submission, which implicitly tells the agent this is a terminal choice rather than a pausable one. It never names an alternative tool (e.g. use chrome_download_pause if you may want to resume), so the when-to-use-vs-alternatives guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chrome_download_list任务列表ARead-onlyIdempotent
列出账本里的下载任务(含状态/进度/字节数)。账本很大时本工具会截断到单行 8192 字节以内并标 truncated=true,届时请用 jobId 精确查(chrome_download_progress)。插件冷启动最长约 30 秒。
| Name | Required | Description | Default |
|---|---|---|---|
| stateDir | No | ||
| includeTerminal | No | 是否含终态任务(默认 true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds two behavioral facts the annotations cannot express: per-line truncation at 8192 bytes with a truncated=true marker, and a cold-start latency of up to ~30 seconds. Both directly affect how an agent should call and interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, then the truncation caveat and the latency warning. Every sentence carries actionable information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does supply the essential return context (fields, truncated flag) plus the escape hatch and latency caveat, which is strong coverage. The remaining gap is stateDir, left unexplained in both description and schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: includeTerminal is documented in the schema (default true) but stateDir has no description anywhere, and the description adds no meaning for either parameter. The only identifier it mentions, jobId, belongs to the sibling tool, not to this one, so parameter semantics are not compensated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (列出/list) and resource (下载任务/download tasks in the ledger) and even names the returned fields (状态/进度/字节数). It routes the agent away from itself toward chrome_download_progress for precise lookups, so it is distinguishable from siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit conditional alternative: when output is truncated=true, switch to chrome_download_progress using jobId. That is a concrete when-to-use-other rule. It does not address the other siblings (status, wait, pause, resume, cancel) or state any exclusion for the list call itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chrome_download_pause暂停B
暂停一个正在下的任务。插件冷启动最长约 30 秒;暂停是发给扩展的指令,扩展睡着时这条会排队到它醒来。
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | ||
| stateDir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (readOnly=false, destructive=false, idempotent=false); the description adds genuinely new operational context: up to ~30 seconds of extension cold-start latency and that the pause command queues until the extension wakes. It omits what happens when pausing an already-paused or completed job, which matters given idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the purpose front-loaded followed by the latency caveat; no filler. It is appropriately sized for a simple action tool, though the queueing clause is somewhat densely packed for a non-technical reader.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description adequately covers latency and queueing behavior but leaves both parameters undocumented and says nothing about the result or how a queued pause interacts with subsequent resume/cancel calls. Complete enough to attempt the call, incomplete for interpreting its delayed effect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description mentions neither jobId nor stateDir, so the description adds no parameter meaning at all. The only hint is that some task must be identified, which is implied by the purpose rather than documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: pausing a currently-downloading task, with the scope qualifier "正在下的" that distinguishes it from status/list/progress siblings. It does not explicitly name the complementary actions (chrome_download_resume, chrome_download_cancel), so differentiation rests on the agent inferring from the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb rather than stated: the description never says when to pause versus cancel/wait, nor any prerequisite. It does supply useful operational context (cold start up to ~30s, command queues while the extension sleeps), which is closer to behavior than to when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chrome_download_progress单个任务进度ARead-onlyIdempotent
看一个 jobId 的实时进度与网速。插件冷启动最长约 30 秒,刚提交的任务数字不动属正常,别重复提交。
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | ||
| stateDir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, so the bar is lower, yet the description adds genuinely new behavioral context: a ~30s plugin cold-start latency window and the anti-pattern of resubmitting a job whose counters have not moved. This timing and retry guidance is exactly the kind of trait annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, purpose front-loaded followed by the operational caveat. Every clause earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description conveys what is returned (progress and network speed) and the key latency behavior, which is adequate for a read-only progress poll with no output schema. It falls short on the undocumented stateDir parameter and on how progress/status/network speed are actually represented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden, and it largely does not. It implies jobId is the target of the lookup but gives no format hints, and the stateDir parameter is never mentioned at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (看/view) and resource (实时进度与网速 for one jobId), which is enough to distinguish it from the list/cancel/pause siblings. It does not, however, explicitly contrast itself with the closest sibling chrome_download_status, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real usage context: cold start can take ~30s, so unmoving numbers on a fresh task are normal and the user should not resubmit. That is useful 'when' guidance, but it never states when to choose this over chrome_download_status or chrome_download_wait, so the alternative-selection gap remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chrome_download_resume继续B
继续一个被暂停/中断的任务(能续传则 Range 续传,不能则整单重头下,重头下会标 restarted=true)。插件冷启动最长约 30 秒。
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | ||
| stateDir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give the three hints (readOnly=false, idempotent=false, destructive=false). The description adds genuinely useful behavior beyond them: Range-based resume when possible, full re-download otherwise, the restarted=true marker, and a ~30s plugin cold-start latency. It does not explicitly warn about partial-state side effects, so not a 5, but it clearly exceeds the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the action and its fallback semantics packed into a parenthetical, plus one short latency note. No filler, though the parenthetical is dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a resume tool with no output schema, the description covers the key operational uncertainty (resume vs restart, cold-start latency) and the restarted=true signal. Its main gap is the complete absence of parameter guidance for jobId/stateDir, which an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description says nothing about either parameter. jobId (the required identifier) and stateDir (the optional state location) are left entirely undocumented, so the description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (继续/resume) and resource (一个被暂停/中断的任务), so the agent knows exactly what operation is performed. It is distinguishable from sibling pause/cancel/status by its action, though it does not name those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description scopes the trigger condition to "被暂停/中断的任务" (paused/interrupted tasks), which implies when to use it. However, it never names alternatives (e.g. chrome_download to start fresh vs this to resume) or states any exclusion, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chrome_download_status桥与扩展状态ARead-onlyIdempotent
查本机下载桥是否可用、扩展有没有连上、出站熔断状态。排查第一步就敲它。插件冷启动最长约 30 秒(Chrome 扩展后台定时器官方下限),任务没动静先看这里的 extensionConnected。
| Name | Required | Description | Default |
|---|---|---|---|
| stateDir | No | 状态目录(默认按 endpoint.json 的位置) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), so the bar is lower, and the description adds genuinely useful behavioral context: extension cold start can take up to ~30s due to Chrome's background timer floor, explaining why extensionConnected may read false initially, plus the naming of the extensionConnected field. It does not explain the circuit-breaker semantics or the response structure in depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with what the tool checks, followed by when to use it and the cold-start caveat. Every sentence contributes, though the parenthetical about the Chrome timer is slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a status tool with no output schema, the description tells the agent what conditions to inspect and names one output field (extensionConnected), which is enough to call it correctly. A fuller picture of the returned shape would push this higher, but no output schema is present to rely on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single optional stateDir parameter is documented there, so the schema carries the load. The description adds no syntax, default, or format detail about stateDir, matching the baseline 3 for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (查/check) plus three concrete resources: whether the local download bridge is available, whether the extension is connected, and the outbound circuit-breaker state. This clearly distinguishes it from the action-oriented siblings (download, pause, resume, cancel) that likely appear as names in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: '排查第一步就敲它' (this is the first step in troubleshooting) and '任务没动静先看这里' (if a task isn't moving, look here first). That is strong context, though it does not name a sibling alternative or an exclusion case, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chrome_download_wait等一批任务到终态ARead-onlyIdempotent
阻塞等到指定 jobId 全部进入终态(COMPLETE/FAILED/CANCELLED)或超时。超时上限 600 秒;插件冷启动最长约 30 秒,把 timeout 压太小会误判成没下完。
| Name | Required | Description | Default |
|---|---|---|---|
| jobIds | No | ||
| stateDir | No | ||
| timeout_sec | No | 默认 120,上限 600 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds real behavioral context beyond them: the call blocks, the timeout is capped at 600s, and plugin cold start can take ~30s so an aggressive timeout produces false 'not finished' results. It does not describe what the call returns on success vs. timeout.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no filler; the core blocking behavior and its terminal states come first, and the operational caveat follows. The cold-start note is worth its length, though the 600s cap is repeated verbatim in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of saying what comes back — it does not clarify whether the result reports per-job terminal states or which jobs timed out. stateDir is also undocumented, and zero required parameters leave the calling contract underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% — jobIds and stateDir have no schema descriptions. The description compensates partly by explaining jobIds (the jobs to wait on) and adding real meaning to timeout_sec (600s cap plus cold-start sizing advice), but stateDir remains entirely unexplained in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a precise verb+resource: block until the given jobIds reach a terminal state (COMPLETE/FAILED/CANCELLED) or time out. The blocking semantics are inherently distinct from the sibling tools chrome_download_status / chrome_download_progress (presumably non-blocking polls), but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: an agent infers it should call this when it needs to await completion. There is no explicit 'use this instead of polling status' or 'do not call when you just need a snapshot' guidance, though the cold-start/timeout warning does steer practical setup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.3.0- First observed
chrome_download - First observed
chrome_download_cancel - First observed
chrome_download_list - First observed
chrome_download_pause - First observed
chrome_download_progress - First observed
chrome_download_resume - First observed
chrome_download_status - First observed
chrome_download_wait
TDQS
Scored across 8 tools
Each tool has a distinct role: status checks bridge/extension health, list enumerates tasks, download submits URLs, progress reports one job, wait blocks until terminal state, and pause/resume/cancel control a specific job. The boundaries are clear and descriptions help reinforce them, so misselection is unlikely.
All tools use snake_case with a consistent chrome_download_ prefix, and suffixes clearly indicate the operation (status, list, progress, wait, pause, resume, cancel). The base chrome_download is the submit action, which fits the same predictable pattern.
Eight tools are well-scoped for a browser download bridge, covering health, submission, monitoring, waiting, and lifecycle control without redundant or missing operations. The count is neither bloated nor too thin for the domain.
The core download lifecycle is well covered: submit, list, inspect progress, wait, pause, resume, cancel, and check bridge health. Minor gaps exist around ledger cleanup or bulk operations, but agents can work around those for typical use.
Maintenance
Related MCP Connectors
Official Browserless MCP server: browser automation, scraping, screenshots and PDFs for AI agents.
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
SubDownload exposes YouTube as an MCP-native data source. Connect via OAuth and your AI agent can summarize videos, fetch full transcripts (even for videos with no captions, via AI ASR), search across channels, and save everything into a private knowledge base. Works with Claude, ChatGPT, Cursor, and 40+ MCP clients. Free credits on signup, no card required.
A paid remote MCP for AI agent browser DevTools MCP, built to return verdicts, receipts, usage logs,
Related MCP Servers
- AlicenseBqualityBmaintenanceTurns Chrome into a local MCP server, giving AI agents 51 browser tools to inspect DOM, automate clicks, run JavaScript, audit security and accessibility, mock APIs, extract data, record demos, and more from any MCP client.9279 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables local agents to discover and download videos from current browser pages, manage download tasks, and retrieve progress and results via MCP.MIT
- AlicenseNot gradedqualityAmaintenanceEnables local Chrome control for AI clients over MCP stdio, HTTP, or CLI, exposing 20 tools to extract page text, number and click elements, type text, scroll, manage tabs, capture screenshots, and bind uploaded files to file inputs. Operations run entirely on the local machine with origin allowlists and refusal of untrusted URLs, without calling a cloud model or consuming model tokens.28 npmMIT
- AlicenseNot gradedqualityAmaintenanceA local MCP server that lets AI coding tools drive the user's real, already-logged-in Chrome — reading pages, clicking, typing, uploading files, taking screenshots, and inspecting tabs, cookies, console, and network traffic — via 25 browser automation tools that pass bot detection without a debugging port. Requires a companion Chrome extension and stays entirely on the user's machine.3 npmISC