jdownloader-mcp
The jdownloader-mcp server enables an AI agent to fully control a local JDownloader 2 instance across its download lifecycle.
Add Downloads: Add URLs with optional package name, priority, passwords, destination folder, and autostart; add encrypted container files (DLC, RSDF, CCF) by their content.
Inspect & Monitor: List linkgrabber packages/links with online status and resolution state; list download queue items with progress, speed, ETA, status, and save path; get overall download controller status; check URL availability without queuing; find packages by name; wait for a download package to finish/fail/stall (with timeout); monitor changes via server-side wait_for_change.
Control Downloads: Start, stop, pause, resume the entire queue; force-start specific items bypassing limits; set priority; enable/disable items; reset items for re-download; remove items with optional file deletion; promote linkgrabber items to download queue; set per-package save directory and configure extraction settings; one-shot download to add, queue, start, and retrieve a package in a single call.
Accounts & Hosters: List, add, remove, enable/disable, refresh premium/hoster accounts; query supported hosters and get premium signup URLs; manage FTP/HTTP basic-auth entries.
Configuration & Extensions: Get, list, and set ~2200 configuration keys; list and enable/disable extensions.
Issue Resolution: List pending captchas, fetch image, and submit a solution; list, get, and answer interactive dialogs; diagnose stuck queues and get prioritized fixes; trigger router reconnect; get a quick health summary with diagnose_queue and recommend.
Cleanup & Maintenance: Clear entire linkgrabber with backup/restore; clean download queue by category (finished, failed, offline, disabled, all); remove individual items.
System Control: Get storage info, restart JDownloader, get/set speed limit.
Advanced Features: Get/set variants for multi-variant links; rename packages/links; move items to new packages; retrieve resolved original download URLs.
Raw API Access: Call any JDownloader API endpoint via raw_action.
Enables downloading Instagram content through the server's smart_download router, using yt-dlp as a fallback when JDownloader cannot handle the URL.
Enables downloading Reddit videos through the server's smart_download router, using yt-dlp as a fallback when JDownloader cannot handle the URL.
Enables downloading TikTok videos through the server's smart_download router, using yt-dlp as a fallback when JDownloader cannot handle the URL.
Enables downloading YouTube videos through the server's smart_download router, using yt-dlp as a fallback when JDownloader cannot handle the URL.
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., "@jdownloader-mcpAdd this .dlc container to JDownloader and start downloads when resolved."
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.
jdownloader-mcp
An MCP server that lets an agent drive a local JDownloader 2 through its entire download lifecycle — add links / containers, watch the linkgrabber resolve them, move them to the queue, set priority, force-start, track progress, inspect download/extract directories, and clean up.
It exists for the one download workload the shell can't already do: premium
hosters, one-click hosters, .dlc/.crypt containers, and captcha-gated folder
links. JDownloader stays the moat for that case — but plain video/social
URLs (TikTok, YouTube, X, Instagram, Reddit, ...) are often where JD's
plugins fall behind (anti-bot walls, "plugin outdated"). For those, the
server also carries a yt-dlp backend and a smart_download router that
tries JDownloader first and auto-falls-back to yt-dlp when a link breaks, so
the agent can finish the download either way instead of stopping at "left to
the shell."
Thin wrapper over myjdapi
and yt-dlp; built on the mcp 1.x FastMCP API.
Status: v0.6.0 — 62 tools.
monitor()is the tool for watching a queue over time: a live snapshot for polling — overall state + speed, download counts bucketed by category, active-download progress, and blocked hosts, in one call. The full v0.3 tool surface has now been exercised live against a real JDownloader 2: 24 safe tools (config, cleanup/update, variants/organize, extensions, dialogs, basic-auth/account creds reads, plus the original 34 v0.2.0 lifecycle/query/account tools) are live-verified, on top of 91+ mocked unit tests and the fullsmoke_test.pylifecycle. That live pass found and fixed two bugs:get_download_urls(now returns each link'surlviaquery_links) andget_variants(now handles non-variant links gracefully) — both are now live-verified working, as isset_variant. Destructive tools (clear_linkgrabber,update_jd,restart_jd,reconnect) remain unit-tested only by design — not exercised live.
Lifecycle
add_links / add_container ─▶ LINKGRABBER ─(move_to_downloads)─▶ DOWNLOADS ─▶ extract ─▶ remove
list_linkgrabber list_downloads / force_start / wait_forItem IDs (uuid) come from the list_* tools; most tools take
package_ids / link_ids plus a stage (linkgrabber | downloads).
See Agent lifecycle below for worked tool-call flows, and the full tool reference for every parameter.
Related MCP server: mcp-yt-dlp
Tools (62)
Every tool returns {"ok": true, "result": ...} on success or
{"ok": false, "error": "..."} on failure — no tool raises.
Lifecycle (16)
Tool | Parameters | Description |
|
| Add URLs to the linkgrabber. |
|
| Add a link container ( |
| — | List linkgrabber packages+links (online/offline status) and whether JD is still collecting. Use the |
| — | List download-queue packages with |
| — | Overall dashboard: state, running/paused, aggregate speed (bytes/s), premium, speed-limit state, bytes downloaded, and |
|
| Bounded poll of one download package (cap 120s). Returns finished / failed / stalled / still_running / not_found — finished/failed/stalled are terminal, re-call only on still_running. |
|
| Promote resolved linkgrabber items to the download queue. |
|
| Global queue control. |
|
| Force the given items to download now, bypassing queue/connection limits. |
|
| Set priority (HIGHEST..LOWEST) on items in the given stage (linkgrabber | downloads). |
|
| Enable/disable items in the given stage (linkgrabber | downloads). |
|
| Per-package save paths + the default download folder + extraction settings (extension enabled, custom extract path). |
|
| Set the download directory for the given download-queue packages. |
|
| Toggle the extraction extension and/or set a custom extract path. |
|
| Remove items from a list. |
|
| Reset download-queue items so they re-download from scratch. |
Ergonomic / composite (3)
Tool | Parameters | Description |
|
| One-shot download: add URLs, auto-move to the queue, start, and return the resulting download package. The common case in a single call. |
|
| Check whether URLs are online (and their size) WITHOUT queueing them. Resolves in the linkgrabber, reports per-link availability, then cleans up. |
|
| Find packages by name substring across both lists -> uuid + stage. |
Accounts / premium hosters (6)
Tool | Parameters | Description |
| — | List premium/hoster accounts: hostname, username, valid, traffic left, expiry (-1 = unlimited/none), enabled, uuid. |
|
| List hosters JDownloader supports (optionally filtered by substring). |
|
| Add a premium/hoster account. The password is a hoster credential supplied by the user; it travels through the My.JDownloader relay (end-to-end encrypted) to your JDownloader instance and is never stored by this server. |
|
| Remove hoster accounts by uuid. Irreversible — re-adding requires the credentials again. |
|
| Enable or disable hoster accounts by uuid. Disabling can stop in-flight premium downloads that rely on the account. |
|
| Refresh hoster account status/traffic (all accounts if none given). |
System / control (5)
Tool | Parameters | Description |
| — | Free/total disk per drive (with |
| — | Restart the JDownloader application (recovery). |
| — | Current download speed-limit state: enabled + limit in bytes/s. |
|
| Enable/disable the download speed limit and optionally set it (bytes/s). |
| — | Trigger a router reconnect to get a new IP (resets some hoster limits). |
Captcha — human-in-the-loop (3)
Tool | Parameters | Description |
| — | List captchas JDownloader is currently waiting on. |
|
| Fetch a pending captcha (image data) for a human to solve. |
|
| Submit a human-provided solution for a pending captcha. |
Config (generic settings) (3)
Tool | Parameters | Description |
|
| Read one JDownloader config value. |
|
| List JD config entries (interface/key/value), optionally filtered by substring. JD exposes ~2200 keys — always pass a filter and expect |
|
| Write one JDownloader config value; returns the re-read value. Use |
Cleanup, update & diagnostics (8)
Tool | Parameters | Description |
|
| Clear the ENTIRE linkgrabber list. With |
|
| Re-add links from a backup file written by |
|
| Remove a category of links from the download list (files stay on disk): |
| — | One-shot health summary of the download queue: totals, unfinished links bucketed by status and host, and pending captcha/dialog counts. The fast way to understand WHY a queue is stuck without dumping every link. |
| — | Turn the current queue state into prioritized, actionable fixes (offline links, anti-bot/plugin hosts, waiting captchas, stopped-with-pending, low disk, bad accounts). Priority 1 = most urgent. The "what should I do?" tool. |
| — | Live monitoring snapshot for polling: overall state + speed, download counts bucketed by category (downloading | pending | done | stopped | error | blocked), the currently-active downloads with progress/speed/eta, and which hosts are blocked. |
|
| Block (server-side) until the queue status changes, then return the new |
| — | Apply an available JDownloader update and restart it. Disruptive — downloads pause during the restart. |
Variants & organize (5)
Tool | Parameters | Description |
|
| List the variants (audio/video/quality) of a multi-variant link. |
|
| Select a variant (from |
|
| Rename a linkgrabber package ( |
|
| Move the given items into a new package named |
|
| Get the resolved original download URLs for the given linkgrabber items. |
Extensions (2)
Tool | Parameters | Description |
| — | List JDownloader extensions (id, name, installed, enabled). |
|
| Enable or disable a JDownloader extension by id (from |
Dialogs (3)
Tool | Parameters | Description |
| — | List interactive dialogs JDownloader is currently waiting on. |
|
| Fetch a pending dialog's details/options. |
|
| Answer a pending dialog with a data payload (shape per the dialog type). |
Basic-auth & account credentials (5)
Tool | Parameters | Description |
| — | List stored FTP/HTTP basic-auth entries. |
|
| Add an FTP/HTTP basic-auth entry ( |
|
| Remove FTP/HTTP basic-auth entries by id. |
|
| Update a hoster account's username/password. The password is a user-supplied credential; it travels the My.JDownloader relay (end-to-end encrypted) and is never stored by this server. |
|
| Get the signup/premium URL for a hoster. |
Escape hatch (1)
Tool | Parameters | Description |
|
| Call any JD API endpoint not wrapped above (e.g. premium accounts, captcha, reconnect, speed-limit). |
yt-dlp backend (2)
Tool | Parameters | Description |
|
| Download a URL directly via yt-dlp (thousands of video/social sites); bypasses JDownloader. For private/login-gated content pass |
|
| Known video/social sites (tiktok, youtube, x, instagram, reddit, ...) go straight to yt-dlp. Everything else is tried on JDownloader first; if the link breaks within |
16 + 3 + 6 + 5 + 3 + 3 + 8 + 5 + 2 + 3 + 5 + 1 + 2 = 62 tools.
Agent lifecycle
JDownloader keeps two separate lists. Understanding this is the key to using the tools correctly:
Linkgrabber — a staging area.
add_links/add_containerdrop URLs here; JD resolves them (checks online/offline, size, host) in the background. Inspect withlist_linkgrabber.Downloads queue — the actual download engine. Nothing downloads until an item is here. Promote resolved linkgrabber items with
move_to_downloads, or add withautostart=True/ use thedownloadtool to skip straight there. Inspect and poll withlist_downloads/status/wait_for.
uuid values returned by any list_* tool are the IDs (package_ids /
link_ids) that every other tool expects — there is no other way to get an
ID.
Config surface: JD exposes its full ~2,200-key settings tree via
get_config / list_config / set_config. Don't try to enumerate it —
start with list_config(filter=...) to find the interface/key you need, then
get_config/set_config on that exact pair. List cleanup: once you're
done with a package, clear_linkgrabber wipes the whole staging list —
by default it backs up every link URL first (backup=True), so the wipe is
recoverable via restore_linkgrabber(backup_file) — and clean_downloads
(what = finished | offline | failed | disabled | all) removes a category
of entries from the download queue (files stay on disk) — both are separate
from the per-item remove tool above. Stuck queue? Call diagnose_queue
first — it buckets unfinished links by status/host and surfaces pending
captcha/dialog counts in one call, before you reach for
list_downloads/list_captchas individually. Then call recommend() for
the quickest path to an actionable next step — it turns that same queue
state (offline links, anti-bot/plugin hosts, waiting captchas,
stopped-with-pending, low disk, bad accounts) into a prioritized fix list. Watching a queue over
time? monitor gives the same status/host buckets plus per-download
progress/speed/eta for active items — it's the one to poll on an interval
instead of re-calling diagnose_queue/list_downloads separately. Token-free
waiting: instead of calling monitor() on a timer, call wait_for_change
(optionally with since = the last snapshot's signature) — it blocks
server-side and only returns when the queue actually changes or the timeout
elapses, so you don't burn tokens on unchanged snapshots.
stateDiagram-v2
[*] --> Linkgrabber: add_links / add_container
Linkgrabber --> Linkgrabber: list_linkgrabber while resolving
Linkgrabber --> Downloads: move_to_downloads
Linkgrabber --> [*]: remove to discard
Downloads --> Downloads: control_downloads / force_start / set_priority
Downloads --> Downloads: list_downloads / status / wait_for to poll
Downloads --> Finished: wait_for returns finished
Downloads --> Failed: wait_for returns failed or stalled
Finished --> [*]: remove / get_directories
Failed --> Downloads: reset to retry
Failed --> [*]: removePolling pattern: list_downloads / status are the workhorses — call
them as often as you like. wait_for is a bounded convenience (hard-capped
at 120s server-side); for anything longer, loop: call wait_for, and if it
returns still_running, call it again. A stalled result means the item is
idle with no progress (captcha / reconnect needed / all links offline) —
don't re-poll blindly, investigate first (e.g. list_captchas).
"Just download this" (fire and forget)
1. download(urls=[...]) # add + auto-queue + start in one call
2. wait_for(package_id) # poll until finished/failed/stalled
3. get_directories(package_ids) # confirm where the files landedFor a fast preflight check without committing to a download, use
check_availability(urls) first — it reports online/offline + size and
leaves nothing queued (timed_out flags if the check itself ran out of time).
"Careful lifecycle" (inspect before committing)
1. add_links(urls, package="my-set")
2. list_linkgrabber() # confirm links resolved online, get uuid
3. move_to_downloads(package_ids=[uuid])
4. force_start(package_ids=[uuid]) # or control_downloads("start")
5. wait_for(package_id=uuid)
6. remove(stage="downloads", package_ids=[uuid]) # cleanup once finished"Manage premium accounts"
1. list_accounts() # see current hosters, validity, traffic
2. add_account(hoster, username, password) # add a new one, or:
set_account_enabled(enabled, account_ids) # temporarily disable one, or:
refresh_accounts(account_ids) # re-check traffic/validity"Precondition checks" (before a large or unattended download)
1. get_storage_info() # confirm free_gb on the target drive
2. list_accounts() # confirm the needed hoster account is valid/enabled
3. download(urls, dest=...)Downloading video / social (yt-dlp)
smart_download(url) is JDownloader-first with an auto-fallback to yt-dlp.
Known video/social hosts (tiktok, youtube, x/twitter, instagram, facebook,
reddit, vimeo, twitch, soundcloud, ...) route straight to ytdlp_download.
Everything else is tried on JDownloader's download first; if that link
breaks within jd_wait_s seconds (default 45 — offline / error /
plugin-outdated / stalled), the failed JD entry is auto-removed and the URL
falls back to ytdlp_download. The result carries "routed_to": "jd" when
JD is handling it, or "routed_to": "jd->ytdlp" plus jd_outcome/jd_reason
when a fallback happened. Override with backend='ytdlp'|'jd' to force one
engine (strict, no fallback), or call ytdlp_download directly to skip the
router.
Private/login-gated content (your own TikTok videos, members-only posts) needs cookies — pick one:
cookies_from_browser='chrome'|'firefox'|'edge'|...— reads that browser's cookie store directly. On Windows the browser must be closed first (it locks the cookie DB while running).cookies_file='path/to/cookies.txt'— a Netscape-format cookies file exported via a "Get cookies.txt" browser extension. Works while the browser stays open.
ffmpeg must be on PATH for audio_only=True (audio extraction) and for
merging separate video+audio streams on formats that need it — yt-dlp will
otherwise fail or fall back to a lower-quality single-stream format.
Connection modes
Set via MYJD_CONNECT_MODE in .env (default relay):
relay(default) — connects via My.JDownloader, which works through NAT with no port-forwarding.myjdapiautomatically upgrades data calls to a direct LAN connection when JD advertises one, so only the initial handshake actually touches the cloud. UsesMYJD_EMAIL/MYJD_PASSWORD/MYJD_DEVICE.direct— pure-local via JDownloader's built-in RemoteAPI, no cloud account involved. SetMYJD_CONNECT_MODE=directplusMYJD_DIRECT_IP(default127.0.0.1) /MYJD_DIRECT_PORT(default3128). Requires enabling RemoteAPI in JDownloader first (Settings → Advanced Settings, search "RemoteAPI" / "Deprecated"). It's a deprecated, more limited API that may not support every tool here —relayis the full-featured default; only usedirectif you specifically need to avoid the cloud account.
Setup
In JDownloader: pick a connection mode (see above). For the default
relaymode, go to Settings → My.JDownloader, sign in / link the device, note its device name. Fordirectmode, instead enable RemoteAPI (Settings → Advanced Settings, search "RemoteAPI").Configure creds:
cp .env.example .env # then edit .envInstall deps (already done if you used
uv):uv syncDeps:
mcp,myjdapi,requests,yt-dlp. For the yt-dlp backend, also putffmpegon PATH (needed foraudio_onlyextraction and video+audio merges) — JDownloader-only usage doesn't need it.
Verify
uv run pytest # mocked unit tests (no JD needed)
uv run python smoke_test.py # live end-to-end against your JD2 (uses .env)The smoke test walks the whole lifecycle with a tiny file and cleans up. It SKIPs cleanly if the env vars aren't set.
Register with Claude Code
claude mcp add jdownloader -- uv run --directory E:/SWE-Pioneers/projects/jdownloader-mcp jdownloader-mcpor add to your MCP client config (stdio):
{
"mcpServers": {
"jdownloader": {
"command": "uv",
"args": ["run", "--directory", "E:/SWE-Pioneers/projects/jdownloader-mcp", "jdownloader-mcp"]
}
}
}The server reads MYJD_CONNECT_MODE plus either the relay creds
(MYJD_EMAIL / MYJD_PASSWORD / MYJD_DEVICE) or the direct-mode settings
(MYJD_DIRECT_IP / MYJD_DIRECT_PORT) from .env (or the environment). See
Connection modes.
Docs
docs/2026-08-01-jdownloader-mcp-design.md— design spec.docs/myjdapi-api-reference.md— exact installed-API reference the code targets.
License
MIT — see LICENSE.
Available Tools
17 toolsadd_containerA
Add a link container (container_type: DLC | RSDF | CCF) by its content.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| container_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, and the description provides minimal behavioral context. It does not mention that this is a write operation, what happens to the added container (e.g., goes to linkgrabber), or any side effects. The word 'Add' implies mutation, but no further transparency is offered.
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?
The description is a single concise sentence that front-loads the action and resource. It avoids redundancy and includes only essential information, making it easy to scan and understand.
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 only two parameters, no output schema, and no annotations, the description is relatively complete for a simple tool. Yet it lacks context about what 'content' means, whether the container is added to a specific list, and what the expected outcome is. This leaves the agent uncertain about the exact invocation semantics.
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 0%, so the description must clarify parameters. It does add value by enumerating allowed container_type values (DLC | RSDF | CCF), which the schema does not provide as enums. However, 'content' is left vague—only described as 'by its content' without explaining what format or source is expected. Partial compensation for schema 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 clearly states a specific action ('Add') applied to a specific resource ('link container'), and lists the valid container types (DLC | RSDF | CCF). It distinguishes itself from the sibling 'add_links' by targeting container files rather than plain links.
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 implies usage: use this when you have a container file to add. However, it does not explicitly contrast with alternatives like 'add_links' or state when not to use it. The guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_linksA
Add URLs to the linkgrabber. autostart=True moves them straight to the download queue once resolved. priority: HIGHEST..LOWEST.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | ||
| package | No | ||
| priority | No | DEFAULT | |
| autostart | No | ||
| extract_password | No | ||
| download_password | No | ||
| destination_folder | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of transparency. It discloses that autostart moves links to the download queue once resolved and mentions the priority range, but it omits important behaviors such as resolution side effects (network requests), error handling, and package handling.
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?
The description is concise, consisting of two sentences that are appropriately front-loaded with the primary action. It adds relevant detail (autostart behavior and priority range) without wasted words.
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 tool with 7 parameters, no annotations, and no output schema, a two-sentence description is inadequate. It lacks return value information, side effects, and parameter details, leaving much to be inferred by the agent.
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?
The description explains the autostart parameter (moves to download queue) and the priority range (HIGHEST..LOWEST), but it leaves urls, package, extract_password, download_password, and destination_folder unexplained. With 0% schema coverage, this is insufficient for a tool with seven parameters.
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 clearly states the action ('Add URLs') and the target ('linkgrabber'), distinguishing it from sibling tools like add_container and move_to_downloads. It also provides brief notes on autostart and priority, reinforcing the tool's specific role.
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?
No explicit guidance is given on when to use this tool over alternatives like add_container or force_start. The description implies usage by stating the tool adds URLs to the linkgrabber, but it does not mention when not to use it or provide alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
control_downloadsA
Global queue control. action: start | stop | pause | resume.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full burden of disclosing behavior. It does not explain what each action does (e.g., does 'stop' cancel downloads or just pause them?), whether changes are reversible, or any side effects. This is a significant gap for a control tool.
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?
The description is extremely concise, front-loading the purpose ('Global queue control') and then listing the action values. Every word earns its place, with no unnecessary fluff or repetition.
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?
While the tool is simple with one parameter, the description still fails to convey important context like the effect of each action, any prerequisites, or what the tool returns. The absence of an output schema makes this more critical, but the description remains minimally adequate for a basic control action.
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?
The schema provides no description or enum for the 'action' parameter, but the description lists the allowed values: start, stop, pause, resume. This adds critical semantic information beyond the schema, though it does not elaborate on the meaning of each value.
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 clearly states the tool's purpose as 'Global queue control' and lists the supported actions (start, stop, pause, resume). This distinguishes it from sibling tools like force_start or set_enabled, which likely operate on individual items rather than the entire queue.
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 action list implies usage (e.g., use 'pause' to pause the queue), but the description does not explicitly explain when to use this tool versus alternatives like force_start, nor does it exclude cases where another tool would be more appropriate. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
force_startA
Force the given items to download now, bypassing queue/connection limits.
| Name | Required | Description | Default |
|---|---|---|---|
| link_ids | No | ||
| package_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the key behavioral trait: bypassing queue/connection limits and starting downloads immediately. Yet it omits side effects (e.g., impact on existing downloads, reversibility) and prerequisites, which a mutation tool should clarify. It adds some value over the name but is not comprehensive.
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 no wasted words. It efficiently conveys the core action and qualifier, earning a top score for conciseness and clear structure.
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 tool is relatively simple, but with no output schema and no annotations, the description should ideally clarify return behavior, expected outcomes, or error conditions. It explains the action but leaves gaps around parameter usage and side effects, making it minimally adequate for context completeness.
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 0%—the description never mentions link_ids or package_ids. While the schema names are clear, the description does not explain that users can pass either or both, nor what happens if both are null. Given low schema coverage, the description should compensate but doesn't, providing minimal semantic value.
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 clearly states the action ('Force... to download now') and resource ('given items'), with a specific qualifier ('bypassing queue/connection limits') that distinguishes it from sibling tools like control_downloads or move_to_downloads. This meets the 'specific verb+resource, distinguishes from siblings' criterion.
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 phrase 'bypassing queue/connection limits' clearly implies this tool is for forcing downloads immediately, overriding normal limits—a context distinct from siblings. However, it does not explicitly mention when not to use it or name alternative tools, so it falls short of the 'explicit when/when-not/alternatives' standard for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_directoriesA
Per-package save paths + the default download folder + extraction settings (extension enabled, custom extract path).
| Name | Required | Description | Default |
|---|---|---|---|
| package_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It communicates that the tool retrieves directory/settings information, which implies a read-only operation, but it does not describe behavior when package_ids is null, return format, or error cases. Some useful context is added via 'extension enabled' and 'custom extract path'.
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?
The description is a single concise fragment that wastes no words and front-loads the key content. Every element ('per-package save paths', 'default download folder', 'extraction settings') carries meaningful information.
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 simple getter with one optional parameter and no output schema, the description gives a reasonable overview of the response categories. However, it lacks details about how results are structured, the effect of omitting package_ids, and whether the response is grouped per package. This leaves some gaps for an agent to handle 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?
The schema has one optional parameter with no description, and schema coverage is 0%. The description adds partial meaning by tying 'per-package save paths' to package_ids, but it does not clarify how package_ids affects the default folder/extraction settings or what null means. This partially compensates for the missing schema documentation.
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 lists the specific information returned (per-package save paths, default download folder, extraction settings) and the tool name 'get_directories' reinforces the retrieval purpose. It is specific and distinguishable from sibling setters, though it lacks an explicit 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 tool being a getter: an agent would use it to inspect current save paths and extraction settings, as opposed to set_download_dir or set_extraction. However, there is no explicit when-to-use guidance or mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_downloadsA
List download-queue packages with progress_pct, speed, ETA, status, and save path ('saveTo'). The workhorse for polling.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses output fields and a key behavioral trait (poll-friendly), which strongly implies a read-only, lightweight operation. It doesn't mention auth or rate limits, but for a simple list tool these are less critical.
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 sentences, front-loaded with the action and resource, followed by a valuable usage hint. No wasted words.
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 zero-param tool with no output schema, the description provides sufficient detail: it names the main return fields and gives a clear use case. The tool is simple, and the description covers all essential aspects.
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?
The tool has zero parameters, and the description correctly doesn't discuss any. Baseline for 0 params is 4; no further elaboration needed.
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 clearly states 'List download-queue packages' with a specific verb and resource. It distinguishes from the sibling 'list_linkgrabber' by focusing on the download queue and enumerating exact fields (progress_pct, speed, ETA, status, saveTo).
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 phrase 'The workhorse for polling' gives clear usage context, implying frequent/repeated calls for progress monitoring. However, it does not explicitly mention when to prefer this over alternatives like 'status' or 'wait_for', though the name and field list imply its niche.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_linkgrabberA
List linkgrabber packages+links (online/offline status) and whether JD is still collecting. Use the 'uuid' fields to act on items.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the exact output content (status, collecting state, and UUIDs), which is valuable behavioral detail. The verb 'list' implicitly indicates a read-only operation, though explicit safety notes are absent.
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?
The description is two sentences with no redundancy. It front-loads the action and resource, and every word adds value—first the primary function, then the critical UUID usage note.
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 parameter-less list tool with no output schema, the description covers all essential aspects: what is listed, status details, the collecting state, and the presence of UUIDs for actions. It is sufficiently complete for an agent to use the tool 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?
The tool has zero parameters, so the description appropriately does not discuss them. The baseline for 0 parameters is 4, and the description adds no confusion by mentioning parameters that do not exist.
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 clearly states the tool lists linkgrabber packages and links with online/offline status and whether JD is still collecting. It distinguishes itself from sibling list_downloads by explicitly naming 'linkgrabber' and provides actionable output details (UUIDs).
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 implies usage context: it is for inspecting linkgrabber items and the UUIDs are meant for subsequent actions. It does not explicitly name alternatives or exclusions, but the context is clear enough for an AI agent to know when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_to_downloadsB
Promote resolved linkgrabber items to the download queue.
| Name | Required | Description | Default |
|---|---|---|---|
| link_ids | No | ||
| package_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of behavioral disclosure. It states the action ('promote') but does not disclose whether items are removed from the linkgrabber, what happens for invalid IDs, or what the return value is. The 'resolved' precondition is helpful but incomplete.
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?
The description is a single, front-loaded sentence with no fluff. It is concise and readable, though slightly undersized given the tool's behavioral complexity.
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 annotations, no output schema, and only 0% parameter coverage, this description leaves major gaps: return values, side effects, selection behavior, and error handling are all omitted. It is not complete enough for reliable tool invocation.
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 provides no parameter-level semantics. link_ids and package_ids are not explained—neither their relationship nor whether one is required over the other. The parameter names are somewhat self-explanatory, but the description adds no meaning beyond the schema.
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 uses a specific verb ('Promote') with a clear resource ('resolved linkgrabber items') and destination ('download queue'). It clearly distinguishes from siblings like add_links, list_linkgrabber, and control_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?
The word 'resolved' implies a precondition for use, but no explicit alternatives or when-not-to-use scenarios are given. It provides some implied usage context but lacks explicit guidance compared to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
raw_actionA
Call any JD API endpoint not wrapped above (e.g. premium accounts, captcha, reconnect, speed-limit). path like '/downloadsV2/setPriority'; params is the positional argument list that endpoint expects.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| params | No | ||
| http_action | No | POST |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explains the path format and that params is a positional argument list, but it does not mention return values, side effects (e.g., destructive actions), error handling, or authentication requirements, which are critical for a raw passthrough tool. The 'call any endpoint' phrasing hints at broad behavior but lacks explicit safety or response info.
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?
The description is one concise, front-loaded sentence that efficiently states purpose, gives examples, and explains the key parameter. Every phrase earns its place, with no redundant or filler content.
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?
Given no output schema and no annotations, the description provides a reasonable but incomplete picture. It covers purpose and parameter semantics but omits return values and side-effect warnings, which are especially important for an arbitrary endpoint caller. The tool's simplicity and clear role prevent a lower score, but the lack of behavioral details is a notable gap.
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 compensates by explaining that params is the positional argument list and giving an example path format. It does not explain http_action, but the name and default ('POST') make it self-evident. This adds meaning beyond the bare schema.
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 clearly identifies the tool as a generic caller for any JD API endpoint not covered by dedicated wrappers, with concrete examples (premium accounts, captcha, reconnect, speed-limit). It distinguishes itself from sibling tools by explicitly positioning itself as the 'not wrapped above' fallback, making its purpose unmistakable.
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 states when to use: for endpoints not wrapped by other tools, and gives examples that imply alternatives (the specialized sibling tools). While it doesn't explicitly say 'use other tools for wrapped endpoints', the phrase 'not wrapped above' plus the examples provide clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
removeB
Remove items from a list. from_disk=True (downloads only) also deletes the files from disk.
| Name | Required | Description | Default |
|---|---|---|---|
| stage | No | downloads | |
| link_ids | No | ||
| from_disk | No | ||
| package_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description discloses an important side effect: from_disk=True deletes files from disk. It also notes this applies only to downloads, which is a useful scope restriction. Missing details include whether removal is permanent, what happens to associated metadata, or required permissions, but the key destructive behavior is surfaced.
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?
The description is extremely concise: two short sentences, front-loaded with the primary purpose and one crucial qualifier. Every word contributes value with no redundancy or fluff.
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?
Given four optional parameters, no annotations, and no output schema, the description is markedly incomplete. It fails to explain how to specify what to remove (link_ids vs package_ids), what stage options exist, or what the tool returns. An agent would struggle to construct a correct invocation beyond guessing from param names.
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 explain parameters. Only from_disk is partially explained (its effect on files), while stage, link_ids, and package_ids are left completely undefined. The description does not clarify the distinction between link_ids and package_ids or valid values for stage.
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 clearly states the primary action ('Remove items from a list') and the from_disk qualifier, which distinguishes it from sibling tools like add_links and move_to_downloads. However, 'list' is generic and does not specify whether it targets linkgrabber or downloads, leaving some ambiguity.
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 provides no guidance on when to use this tool versus alternatives such as reset or move_to_downloads. It only mentions a constraint (from_disk applies 'downloads only') but does not explain selection criteria or exclusions. This is insufficient for an agent to decide between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resetA
Reset download-queue items so they re-download from scratch.
| Name | Required | Description | Default |
|---|---|---|---|
| link_ids | No | ||
| package_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It conveys that the tool resets download state and causes re-download, but does not detail side effects like whether existing files are deleted, if downloads are immediately stopped, or if the operation is reversible. The main behavior is stated, but additional nuance is missing.
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?
The description is a single, focused sentence with no unnecessary words. It is appropriately sized and front-loaded, delivering the core function efficiently.
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?
Given the tool has 2 optional parameters, no output schema, and no annotations, the description leaves critical ambiguities unaddressed, such as the default behavior when no parameters are provided, the relationship between link_ids and package_ids, and the exact effects of the reset operation. The description is too minimal to be considered complete for this tool.
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?
The input schema has two parameters (link_ids and package_ids) with no descriptions, and the tool description does not explain them. The parameter names hint at their purpose, but the description does not clarify how they interact, whether both can be used together, or what happens when they are null (e.g., does it reset all items?). Schema coverage is 0%, so the description should compensate but does not.
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 clearly states the tool resets download-queue items, specifying the action (reset), the resource (download-queue items), and the intended outcome (re-download from scratch). This distinguishes it from siblings like 'remove' or 'force_start'.
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 explicitly indicates when to use the tool: when download-queue items need to be re-downloaded from scratch. It provides clear context but does not mention exclusions or alternatives, which prevents a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_download_dirC
Set the download directory for the given download-queue packages.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | Yes | ||
| package_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states the mutation action ('set') and scope ('for the given download-queue packages') but omits details like whether existing directories are overwritten, permission requirements, side effects, or result confirmation.
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?
The description is a single, clear sentence that front-loads the core action and object. Every word contributes meaning, with no filler or redundancy.
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?
Given the lack of annotations, no output schema, and the presence of many sibling tools with overlapping concepts, the description is not complete. It lacks usage context, behavioral caveats, and return expectations, leaving an agent under-informed for reliable invocation.
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 compensate. It vaguely maps 'directory' to the target directory and 'package_ids' to 'download-queue packages', but offers no format, constraints, or behavior beyond the parameter names. This is insufficient for full understanding of parameter semantics.
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 clearly identifies the action ('set') and resource ('download directory') for specific entities ('given download-queue packages'). It distinguishes from siblings like get_directories (retrieval) and set_extraction (different resource), though it does not explicitly name alternatives.
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?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, when not to use it, or how it fits into a workflow. The context of setting a directory is only implicitly understood from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_enabledB
Enable/disable items in the given stage (linkgrabber | downloads).
| Name | Required | Description | Default |
|---|---|---|---|
| stage | No | downloads | |
| enabled | Yes | ||
| link_ids | No | ||
| package_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It states the toggle action but does not explain scoping behavior (e.g., whether link_ids/package_ids act as filters or targets), the effect on running downloads, or whether changes are reversible. This is insufficient for a mutation tool.
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?
The description is a single, front-loaded sentence with no filler or redundancy. Every word contributes to defining the action and scope, achieving maximum brevity while remaining clear.
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 tool has 4 parameters, no output schema, and no annotations, yet the description is extremely thin. It fails to clarify the role of the selection parameters (link_ids, package_ids), the default behavior when they are null, or the practical difference between 'enabled' and related sibling actions. This is inadequate for safe and correct invocation.
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 compensate. It only adds meaning for the 'stage' parameter by listing valid values, but it does not explain 'enabled', 'link_ids', or 'package_ids' beyond their names and schemas. Given 4 parameters and minimal param-level guidance, this is a significant 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 clearly identifies the action ('Enable/disable') and the resource ('items in the given stage'), and explicitly enumerates valid stage values (linkgrabber | downloads). This distinguishes it from sibling tools like set_priority or control_downloads, making the primary function unambiguous.
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 implies usage when you need to toggle item enabled-state within a specific stage, and the stage list provides some context. However, it does not explicitly state when to prefer this tool over alternatives, nor does it mention prerequisites or exclusions, leaving the guidance only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_extractionC
Toggle the extraction extension and/or set a custom extract path.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | No | ||
| custom_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must bear the full burden of behavioral disclosure. It only states the two actions but does not explain side effects, reversibility, requirements, or what happens when parameters are null. This is insufficient for a configuration mutation tool.
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?
The description is a single concise sentence that front-loads the main actions. It avoids unnecessary words, though the phrase 'and/or' is slightly awkward. It earns its place but is terse.
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?
Given the lack of annotations and output schema, the description should explain what the tool does beyond the bare action. It does not mention return values, behavior of null inputs, or any downstream effects. For a simple tool this is minimal but still leaves the agent with limited context for correct invocation.
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 compensate. It hints at parameter roles by mentioning 'Toggle' (implying 'enabled') and 'set a custom extract path' (implying 'custom_path'), but it does not describe the parameters explicitly or explain their interaction or defaults beyond what the schema already titles.
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 clearly identifies the tool's dual function: toggling the extraction extension and setting a custom extract path. It uses specific verbs ('Toggle', 'set') and a specific resource ('extraction extension', 'custom extract path'), distinguishing it from generic sibling tools like set_enabled and set_download_dir.
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?
No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or contrast with sibling tools such as set_enabled for toggling or set_download_dir for path settings. The usage context is entirely absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_priorityB
Set priority (HIGHEST..LOWEST) on items in the given stage (linkgrabber | downloads).
| Name | Required | Description | Default |
|---|---|---|---|
| stage | No | linkgrabber | |
| link_ids | No | ||
| priority | Yes | ||
| package_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for disclosing behavior. It mentions setting priority but does not explain effects like what happens when both link_ids and package_ids are provided, whether priority is overwritten or appended, or any side effects. It also does not describe return values or error conditions.
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?
The description is a single sentence with no filler. It front-loads the core action and includes the key scoping information (stage). Every word earns its place, and it is easy to scan.
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?
Despite the tool having 4 parameters and no annotations/output schema, the description only covers the basic purpose and stage values. It lacks detail on parameter interactions, priority value enumeration, prerequisites, and behavioral outcomes. This is insufficient for an agent to confidently invoke the tool with correct parameter combinations.
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 compensate. It provides useful context for the `stage` parameter (allowed values: linkgrabber|downloads) and mentions priority range (HIGHEST..LOWEST), but it does not explain the relationship between `link_ids` and `package_ids` (e.g., are they alternatives or combinable), nor the exact set of valid priority values. The term 'items' is vague and does not clearly map to the schema's parameters.
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 clearly states the action ('Set priority'), the resource ('items'), and the scope ('in the given stage (linkgrabber | downloads)'). This distinguishes it from sibling tools like set_enabled or set_extraction, which target different attributes.
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 implies the tool is used to set priority on items in either the linkgrabber or downloads stage, but does not explicitly mention when to use it over alternatives or any exclusion criteria. No alternative tools are named, so 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.
statusA
Overall download-controller state and aggregate speed (bytes/s).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It indicates what the tool returns but does not explicitly state that it is read-only or has no side effects. For a status tool, this is straightforward, but the description does not add behavioral context beyond the basic result.
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?
The description is a single, well-structured sentence that immediately conveys the essence of the tool. Every word earns its place, and there is no redundancy or 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?
Given the tool's simplicity (no parameters, no output schema), the description provides a clear overview of the return value: overall state and aggregate speed. It could be slightly more detailed about the format or structure of the state, but for a basic status tool, it is sufficient.
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?
The tool has zero parameters, so the baseline is 4. The description does not need to explain parameter semantics, and it does not detract from them.
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 clearly states the resource (download-controller) and what it provides (state and aggregate speed in bytes/s). It is not a tautology and is distinct from sibling tools that perform actions like add_links or control_downloads, though it lacks an explicit verb like 'get' or 'retrieve'.
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 name 'status' and the description, but there is no explicit guidance on when to use this tool versus alternatives. Since there is no sibling status tool, the intended use is fairly evident, but no exclusions or conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_forA
Bounded poll of one download package (cap 120s). Returns finished/failed/ still_running/not_found — re-call on still_running.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout_s | No | ||
| package_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the bounded nature (cap 120s), the possible return values, and the retry instruction. It is a read/poll operation and the side-effect-free nature is implied by 'poll' and 'returns', but it could be more explicit about not mutating state.
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?
The description is two sentences, front-loaded with the core action ('Bounded poll'), and every clause adds useful information—no filler. The return statuses and re-call guidance are packed efficiently.
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 simple two-parameter tool with no output schema, the description covers the essential behavior: what it polls, the timeout cap, the possible return statuses, and the retry instruction. It misses precise parameter semantics but is otherwise complete enough for an agent to select and invoke 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%. The description mentions 'one download package' (mapping to package_id) and a 120s cap (relating to timeout_s), but it does not directly explain the timeout_s parameter, its units, or how it relates to the cap. It doesn't sufficiently compensate for the lack of parameter descriptions in the schema.
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 clearly states the action: 'Bounded poll of one download package' with a specific resource (download package) and a cap of 120s. It also lists the distinct return statuses, which differentiates it from sibling tools like status or list_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?
It provides explicit usage guidance by saying 're-call on still_running', indicating a polling loop with retry behavior. It implies its use for waiting on a package rather than a one-shot check, but it doesn't explicitly name alternatives like 'status' or say when not to use it.
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.
17 tool updates
v0.1.0- First observed
add_container - First observed
add_links - First observed
control_downloads - First observed
force_start - First observed
get_directories - First observed
list_downloads - First observed
list_linkgrabber - First observed
move_to_downloads - First observed
raw_action - First observed
remove - First observed
reset - First observed
set_download_dir - First observed
set_enabled - First observed
set_extraction - First observed
set_priority - First observed
status - First observed
wait_for
TDQS
Scored across 17 tools
Each tool targets a distinct operation or stage (linkgrabber vs downloads vs global controller). The only adjacent tools, force_start and control_downloads, have clearly different scopes (specific items vs global state).
Most tools follow a consistent verb_noun pattern (add_links, list_downloads, set_priority). Minor deviations: status, wait_for, remove, and reset are shorter but still intuitive; no mixing of styles.
At 17 tools, the set is on the heavier side but each tool covers a meaningful function in the download lifecycle. The count is reasonable for a full-featured download manager.
The toolkit covers the full workflow: adding, collecting, moving, controlling, prioritizing, configuring directories/extraction, and removing/resetting. The raw_action fallback ensures no endpoint is unreachable, making the surface effectively complete.
Maintenance
Related MCP Connectors
MCP server to assist with JxBrowser development.
The official MCP Server for the Mux API
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProduction-grade MCP server for universal reverse engineering automation.76GPL 3.0
- FlicenseAqualityDmaintenanceMCP server wrapping yt-dlp for downloading videos and audio from URLs, providing tools to check dependencies, retrieve video metadata, and perform downloads.4-
- AlicenseNot gradedqualityAmaintenanceMCP server for interacting with Creo Parametric CAD software. Enables tool calls like file_open, feature_set, and J-Link execution through a Python-based server and optional Java gateway.MIT
- AlicenseNot gradedqualityAmaintenanceMCP server and CLI for yt-dlp to search and download media, embed metadata and cover art, and deliver to local, SSH, rclone, or Plex targets.2AGPL 3.0