qBittorrent MCP Server
This server lets an MCP client control a qBittorrent instance via its WebUI API.
List and filter torrents by state, category, and tag, with sorting
Get detailed properties for a specific torrent by hash
Add torrents from magnet links with optional category, save path, tags, and paused state
Pause, resume, delete, or recheck torrents (individually, by hash list, or all)
View global transfer statistics (speeds, totals, connections, DHT nodes)
Set global download/upload speed limits or toggle alternative speed limits
List torrent categories and assign categories to torrents
Get qBittorrent app/API version and application preferences
Provides tools for managing a qBittorrent instance, including torrent operations (add, pause, resume, delete, recheck), category management, and transfer information.
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., "@qBittorrent MCP Serverwhat are my active torrents?"
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.
qBittorrent MCP Server
An MCP server for controlling a qBittorrent instance through its WebUI API, using cookie-session auth. Covers torrents, categories, and transfer data.
Requirements
Node.js 20+
A running qBittorrent WebUI
Related MCP server: qBittorrent MCP Server
Install
git clone https://github.com/mattmaas/qbittorrent-mcp.git
cd qbittorrent-mcp
npm install
npm start # node server.mjsEnvironment Variables
Variable | Required | Description |
| yes | Base URL of the WebUI, e.g. |
| yes | WebUI login name |
| yes | WebUI password |
MCP Client Configuration
Add this server to your MCP client's config:
{
"mcpServers": {
"qbittorrent": {
"command": "node",
"args": ["<path>/qbittorrent-mcp/server.mjs"],
"env": {
"QBITTORRENT_URL": "http://localhost:8080",
"QBITTORRENT_USERNAME": "admin",
"QBITTORRENT_PASSWORD": "your-password"
}
}
}
}Tools
Tool | Description |
| List torrents with status and stats |
| Detailed properties for a torrent |
| Add a torrent from a magnet link |
| Pause torrent(s) |
| Resume torrent(s) |
| Delete torrent(s) (optionally files) |
| Global transfer statistics |
| Set global download/upload limits |
| Toggle alternative speed limits |
| List categories with save paths |
| Assign a category to torrent(s) |
| Force a hash recheck |
| App and API version |
| Application settings |
Usage
Ask your agent, for example:
"What's downloading right now?" →
qbittorrent_get_torrents(filter="downloading")"Add this magnet and tag it 'linux'" →
qbittorrent_add_torrent_magnet(magnet="magnet:?...", tags="linux")"Throttle uploads to 1 MB/s" →
qbittorrent_set_speed_limits(upload_limit=1048576)
License
MIT
Available Tools
14 toolsqbittorrent_add_torrent_magnetC
Add a torrent from a magnet link.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Comma-separated tags (optional) | |
| magnet | Yes | Magnet URI (magnet:?xt=...) | |
| paused | No | Add in paused state (default: false) | |
| category | No | Category to assign (optional) | |
| savepath | No | Download path (optional, uses qBittorrent default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: it doesn't say what happens on duplicate magnets, whether the torrent starts immediately or paused by default, what the response contains (e.g., a hash), or what errors occur. Only the one-line purpose is given, leaving the mutation semantics opaque.
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 short sentence with no filler and the purpose front-loaded. It is efficient, though its brevity reflects under-specification rather than tight editing of richer 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?
For a 5-parameter mutation tool with no annotations and no output schema, the description is too thin: it omits return behavior, error/duplicate handling, and any operational prerequisites. The schema covers parameter shapes, but the tool's runtime behavior is undocumented.
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%, so every parameter (magnet, tags, paused, category, savepath) is already documented in the schema with types and defaults. The description adds no extra parameter meaning, which is the baseline 3 when the schema does the heavy lifting.
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 and resource ('add a torrent from a magnet link'), making it immediately distinguishable from read, pause, delete, and recheck siblings. It is clear but does no explicit sibling differentiation beyond the magnet-link qualifier.
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?
There is no guidance on when to use this versus other torrent-management tools, no mention of prerequisites (e.g., qBittorrent must be running, auth), and no note on behavior for duplicate or already-added magnets. Usage must be inferred entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbittorrent_delete_torrentsC
Delete one or more torrents. Optionally also delete downloaded files.
| Name | Required | Description | Default |
|---|---|---|---|
| hashes | Yes | Torrent hash(es), pipe-separated or 'all' | |
| delete_files | No | Also delete downloaded files from disk (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It correctly notes optional file deletion, but omits crucial destructive-operation context: irreversibility, that both torrent and files may be unrecoverable, and any auth/prerequisite details.
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 waste. The key destructive scope is front-loaded and the file-deletion option follows immediately.
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?
Adequate for a two-parameter tool, but given the destructive nature and lack of annotations or output schema, the description should at least state permanence and any side effects on disk usage.
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%, so the schema already explains hashes (pipe-separated or 'all') and the delete_files boolean. The description adds only the word 'Optionally' for file deletion, matching baseline 3.
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 clear verb (Delete) and resource (torrents). It does not explicitly contrast with sibling operations like pause or recheck, but destruction is sufficiently distinct in the qBittorrent toolset.
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 when-to-use guidance or alternatives are mentioned. The description does not warn that this is irreversible or compare it to non-destructive operations like pause.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbittorrent_get_app_versionA
Get the qBittorrent application version and API version.
| 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, and it discloses nothing beyond the return subject: no mention of read-only nature, authentication requirements, or side effects. For a trivial zero-argument read this is a minor gap, but the burden is technically unmet.
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 filler. Every word earns its place by naming the verb and both version values returned.
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 zero parameters and no output schema, the description's job is mainly to indicate what comes back, and it does name both the application and API versions. It stops short of describing return structure, but for a trivial getter little more is needed.
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 takes zero parameters, so there are no parameter semantics to explain; baseline 4 applies. The description appropriately spends no words on nonexistent arguments.
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 (Get) and a precise resource (qBittorrent application version and API version), including both return facets. An agent can immediately distinguish this read-only metadata getter from siblings like qbittorrent_get_preferences or qbittorrent_get_transfer_info.
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?
There is no explicit when-to-use, when-not-to-use, or alternative routing. However, for a parameterless version getter the usage context is self-evident and implied by the name and description, so it is adequate rather than misleading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbittorrent_get_categoriesA
List all torrent categories with their save paths.
| 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, but this is an inherently safe parameterless read, and the wording ('List all ... with their save paths') makes the read-only nature and return content clear. It omits any mention of auth requirements or result ordering/pagination, which is a modest gap for a benign read.
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?
One sentence, front-loaded with the verb and resource, with zero padding.
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 listing tool with no output schema, stating that categories and their save paths are returned covers the essential return content without needing a separate schema. Only minor extras (ordering, auth) are absent.
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 takes no parameters, so there are no semantics to document; the baseline for a zero-parameter tool applies.
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 (torrent categories) with the returned detail (save paths). It is implicitly distinguishable from the torrent-oriented siblings, but it never names or contrasts with an alternative, so it stops short of 5.
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 when-to-use guidance, prerequisites, or alternative tools are mentioned. For a zero-param listing tool usage is largely self-evident, but the description provides no explicit routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbittorrent_get_preferencesB
Get qBittorrent application settings (save path, speed limits, connection settings, etc.).
| 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 behavioral burden. 'Get' implies a safe, non-mutating read, and the field enumeration hints at the payload's breadth, but it says nothing about permissions, whether settings reflect live or persisted state, or the response shape for a tool with no output schema.
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?
One sentence, front-loaded with the verb and resource, with the example settings parenthetical adding scope without bloat. Nothing is redundant or 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 no-parameter, no-output-schema read tool with no annotations, the description is adequate but thin: the 'etc.' leaves the returned field set open-ended and there is no indication of response structure or state semantics. It is the minimum viable description rather than a complete one.
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 takes zero parameters, so the baseline of 4 applies. The description correctly implies a no-argument, whole-configuration fetch, and there is no parameter semantics left to document.
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 (get qBittorrent application settings) and enumerates the settings families it covers (save path, speed limits, connection settings), which differentiates it from siblings like get_transfer_info or get_app_version. It stops short of naming a sibling or explicitly contrasting scope, so it is clear but not fully disambiguating.
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?
There is no guidance on when to call this versus the many other read tools in the family (get_transfer_info, get_app_version). The read-only nature is implied only by the verb 'Get'; no prerequisites, frequency, or context is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbittorrent_get_torrent_infoB
Get detailed properties for a specific torrent by hash.
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes | Torrent hash (full or 8-char prefix from listing) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It says 'get' (read-only implied) and 'detailed properties', but doesn't disclose return format, permissions, rate limits, or what happens if hash is not found. Minimal behavioral context.
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?
Single, efficient sentence with no wasted words. Front-loads verb and resource.
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 1-param read tool, the description is adequate but lacks any behavioral detail (no annotations, no output schema). It could mention that it returns detailed properties, which it does, but doesn't cover error cases or return shape.
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 100% with a clear description for hash ('full or 8-char prefix from listing'). The description adds nothing beyond the schema, so baseline 3 applies.
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 (Get) and resource (detailed properties for a specific torrent by hash). Distinguishes itself reasonably from sibling qbittorrent_get_torrents by the singular 'specific torrent' and 'detailed properties', but doesn't explicitly name the alternative.
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?
Implies use when you need details on one torrent, but gives no explicit when-to-use vs qbittorrent_get_torrents (list) or when-not. No prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbittorrent_get_torrentsA
List all torrents with status, progress, speed, seeds, and peers. Optionally filter by state (downloading, uploading, paused, completed, active, inactive, stalled, error).
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter by tag | |
| sort | No | Sort field: name, size, progress, dlspeed, upspeed, ratio, added_on (default: added_on) | |
| filter | No | State filter: all, downloading, seeding, completed, paused, active, inactive, stalled, stalled_uploading, stalled_downloading, error (default: all) | |
| category | No | Filter by category name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully enumerates the returned fields, but says nothing about read-only safety, whether results are paginated or bounded, or authentication needs. That is a modest but real gap for a list endpoint.
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 primary capability front-loaded; nothing is wasted. The trailing parenthetical of state values is somewhat redundant against the schema's enum and slightly inaccurate, but the sentence still earns its place as a usage cue.
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 correctly compensates by naming the returned fields, and all parameters are optional with full schema coverage. The main missing piece is read-only/pagination behavior, which nothing else supplies given the absence of annotations.
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%, so the schema already documents all four parameters and the baseline is 3. The description only elaborates on the state filter, and its value list ('uploading, ... stalled') is inconsistent with the schema's enum ('seeding, stalled_uploading, stalled_downloading'), which adds ambiguity rather than value for tag, sort, and category.
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 ('List all torrents') plus the fields returned (status, progress, speed, seeds, peers). It is distinguishable from the singular qbittorrent_get_torrent_info sibling by the 'all torrents' framing, though it never names that sibling 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 word 'Optionally filter by state' implies the tool works fully without arguments and that filtering is the main usage pattern, but there is no when-to-use versus when-to-prefer qbittorrent_get_torrent_info guidance or any prerequisites. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbittorrent_get_transfer_infoA
Get global transfer statistics: download/upload speeds, session and all-time totals, connection count, DHT nodes.
| 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 burden. 'Get' plus the enumerated read-only statistics make it clear this is a passive read with no side effects, and it discloses the returned fields. It says nothing about authentication requirements or whether figures are instantaneous vs averaged, leaving a moderate gap.
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 sentence, front-loaded with the verb and the scope modifier ('global'), then a compact enumeration of the payload. No filler and nothing redundant.
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 usefully enumerates the returned statistics so an agent knows what it will receive. It is close to complete for a parameterless read tool; only the omission of freshness/auth context keeps it from a 5.
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 takes zero parameters, so the baseline of 4 applies. There is nothing for the description to disambiguate, and it does not waste words inventing 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?
States a specific verb (Get) and resource (global transfer statistics) and enumerates the exact contents: speeds, session/all-time totals, connection count, DHT nodes. The word 'global' cleanly separates it from the per-torrent siblings like qbittorrent_get_torrent_info and qbittorrent_get_torrents.
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: 'global' signals this is the aggregate view as opposed to per-torrent stats, which lets an agent infer the right choice. However, it never explicitly says when to prefer this over qbittorrent_get_preferences or get_torrents, and there are no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbittorrent_pause_torrentsB
Pause one or more torrents. Use 'all' to pause everything.
| Name | Required | Description | Default |
|---|---|---|---|
| hashes | Yes | Torrent hash(es), pipe-separated (e.g. 'abc123|def456') or 'all' |
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 of behavioral disclosure. 'Pause' implies a reversible, non-destructive state change, but the description does not confirm this, explain effects on active connections or seeding, or mention permissions. It adds very little beyond the verb.
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 economical sentences with zero filler and the primary action front-loaded. Every word is useful for an agent deciding how to call the tool.
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 one-parameter tool with no output schema, the description covers the essential action and the 'all' shorthand. However, it omits expected behavior, reversibility, and error handling (e.g., invalid hash), which would be valuable given the absence of annotations.
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 parameter schema already explains the pipe-separated hash format and 'all'. The description adds no new syntax or format details, but with full schema coverage the baseline is 4. The schema handles the heavy lifting effectively.
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 ('pause') and resource ('one or more torrents'), making the action immediately clear. It does not explicitly differentiate from sibling tools like 'qbittorrent_resume_torrents' or 'qbittorrent_delete_torrents', though the operation itself is 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 provides handing for the 'all' value, which is a usage hint, but does not state when to use pause versus alternatives like resume or delete. The context is implied by naming the exact operation, meeting the minimum viable level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbittorrent_recheck_torrentsB
Force a hash recheck on one or more torrents.
| Name | Required | Description | Default |
|---|---|---|---|
| hashes | Yes | Torrent hash(es), pipe-separated or 'all' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it discloses nothing beyond the bare action. It does not say whether the recheck is destructive, resource-intensive, how long it takes, or whether it interrupts active downloads/seeding.
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; the action and target are stated immediately.
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 one-parameter tool with full schema coverage and no output schema, the description is minimally adequate. However, it omits that a recheck can be a heavy, time-consuming operation, which an agent would benefit from knowing before invoking it.
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 100% and the single 'hashes' parameter is fully documented there, so the schema does the heavy lifting. The description's 'one or more torrents' adds only marginal reinforcement of the multi-value semantics already implied by 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?
States a specific verb ('Force a hash recheck') and resource ('torrents'), making it clearly distinguishable from siblings like pause, resume, and delete. It does not explicitly name a sibling, so it falls short of 5.
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 only says what the tool does; it gives no guidance on when to use it versus alternatives (e.g., legitimate use for verifying data integrity after adding torrents) and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbittorrent_resume_torrentsB
Resume one or more paused torrents. Use 'all' to resume everything.
| Name | Required | Description | Default |
|---|---|---|---|
| hashes | Yes | Torrent hash(es), pipe-separated or 'all' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. It does not state state-transition effects (paused -> active), permissions, or that resuming a non-paused torrent is a no-op. Minimal behavioral context.
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, front-loaded with the primary action; efficient with no wasted words, though slightly terse for the operation's nuances.
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?
Adequate for a simple one-parameter action tool with full schema coverage and no output schema, but missing behavioral details (state change implications, idempotency) that would fully equip an 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?
Schema description coverage is 100% and the schema already documents pipe-separated hashes and 'all'. The description only repeats the 'all' keyword, adding nothing 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?
States a specific verb (resume) and resource (torrents), and clearly distinguishes itself from the sibling qbittorrent_pause_torrents by naming the inverse operation.
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?
Specifies the 'all' special case for resuming everything, but gives no guidance on when to use this versus pause_torrents or how it relates to recheck/re-add flows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbittorrent_set_speed_limitsB
Set global download and/or upload speed limits. Pass 0 to remove a limit.
| Name | Required | Description | Default |
|---|---|---|---|
| upload_limit | No | Global upload limit in bytes/sec (0 = unlimited) | |
| download_limit | No | Global download limit in bytes/sec (0 = unlimited) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses only that the limits are 'global' and that 0 removes a limit (already stated in the schema); it says nothing about whether the change persists across restarts, which sessions/torrents are affected, required permissions, or whether other rate settings are touched.
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 ahead of the 0-value rule, with no filler. Every sentence earns its place.
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 two-optional-parameter mutation with no output schema and no annotations, the description covers what the tool does and the key 0-value convention. It is nearly complete, missing only a note that omitting both parameters is a no-op and how it relates to alternate-speed mode.
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%, so both parameters and their 0=unlimited semantics are already fully documented in the schema. The description's 'Pass 0 to remove a limit' merely restates that convention, adding no units, ranges, or interaction details beyond the structured fields.
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 ('Set global ... speed limits') and scopes it as global, so the agent knows this is a client-wide setting rather than a per-torrent one. It does not differentiate from the sibling toggle_alt_speed, which also manipulates speed behavior, leaving some ambiguity about which to pick.
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?
'Pass 0 to remove a limit' gives one actionable usage rule, and 'and/or' implies at least one parameter should be supplied. However, there is no guidance on when to use this versus toggle_alt_speed, no mention of prerequisites, and no note on what happens if both parameters are omitted (both are optional).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbittorrent_set_torrent_categoryB
Assign a category to one or more torrents.
| Name | Required | Description | Default |
|---|---|---|---|
| hashes | Yes | Torrent hash(es), pipe-separated or 'all' | |
| category | Yes | Category name (empty string to clear category) |
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. 'Assign' implies mutation, but the description doesn't state whether this requires a specific torrent state, what happens to existing categories, whether it's reversible, or what happens when category is empty (schema mentions empty clears category, but description doesn't elaborate). For a mutation tool with zero annotations, this is a significant gap.
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?
One short sentence, front-loaded, zero waste. Everything needed is in the description or 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?
For a simple two-parameter mutation tool with complete schema documentation but no annotations and no output schema, the description is adequate but leaves behavioral questions unanswered: reversibility, permissions, side effects, and how the operation interacts with torrent states. It could do more to explain the mutating nature and edge cases.
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 100%, so the schema already documents both parameters, including that hashes can be pipe-separated or 'all' and that empty category clears it. The description adds no additional parameter meaning. Baseline 3 is correct when schema does the heavy lifting.
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 (assign) and resource (category to torrents), and scope (one or more). It's clear what the tool does, but it doesn't distinguish itself from the set_ family beyond the obvious (e.g., no mention that this is a mutating operation vs. a query).
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 on when to use this versus alternatives like add_torrent_magnet or get_categories. No prerequisites or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qbittorrent_toggle_alt_speedB
Toggle the alternative (throttled) speed limits on or off.
| 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 behavioral burden. It implies a state mutation but never states the resulting state, whether the call is idempotent, or what response the caller gets — meaningful gaps for a toggle tool where knowing the new state matters.
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 zero filler that names the action and its target. Nothing in it 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 zero-parameter toggle with no output schema and no annotations, the description is minimally adequate but omits the post-toggle state and the relationship to the sibling speed-limit setter. It tells the agent what the tool does but not enough to call it confidently in context.
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 takes zero parameters, so there is nothing for the description to clarify and the baseline of 4 applies. The description correctly implies no input is required.
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 (toggle) and resource (alternative throttled speed limits), which is clearly distinct from read-only siblings like qbittorrent_get_transfer_info. It does not, however, differentiate itself from the sibling qbittorrent_set_speed_limits, which an agent could reasonably confuse with this tool.
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 gives no guidance on when to use this versus qbittorrent_set_speed_limits or any other speed-related sibling. It also doesn't state the outcome of the toggle (whether it returns the resulting state) or whether a pre-existing alt-speed configuration is required.
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.
14 tool updates
v1.0.0- First observed
qbittorrent_add_torrent_magnet - First observed
qbittorrent_delete_torrents - First observed
qbittorrent_get_app_version - First observed
qbittorrent_get_categories - First observed
qbittorrent_get_preferences - First observed
qbittorrent_get_torrent_info - First observed
qbittorrent_get_torrents - First observed
qbittorrent_get_transfer_info - First observed
qbittorrent_pause_torrents - First observed
qbittorrent_recheck_torrents - First observed
qbittorrent_resume_torrents - First observed
qbittorrent_set_speed_limits - First observed
qbittorrent_set_torrent_category - First observed
qbittorrent_toggle_alt_speed
TDQS
Scored across 14 tools
Each tool has a clearly distinct purpose: get_torrent_info vs get_torrents (single vs list), pause/resume/delete are separate actions, and global settings tools are unique. No two tools could be confused for the same operation.
All tools follow a strict qbittorrent_verb_noun pattern (e.g., get_torrent_info, add_torrent_magnet, set_speed_limits). The prefix is uniform and action verbs are consistent throughout.
14 tools is well-scoped for a BitTorrent client: core torrent lifecycle (add, pause, resume, delete, recheck), querying, categories, and global settings. No tool feels redundant or missing for the stated purpose.
Covers torrent CRUD, state control, categories, speed limits, and app info/preferences. Minor gaps exist: no tool to add a torrent from a .torrent file (only magnet), no category creation/deletion, and no preference setting (only get). These are workaroundable but noticeable.
Maintenance
Related MCP Connectors
Manage repositories, users, releases, and automate GitHub workflows
Undetectable cloud browser sessions for AI agents and scrapers. Navigate, extract, click, captcha.
Create and manage CodeQR short links, QR codes, and analytics from any MCP client.
Create and manage short links, track clicks, and automate URL management
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceA service that provides programmatic access to qBittorrent's WebUI API, enabling management of torrents, trackers, tags, speed controls, and system information through natural language.25-
- FlicenseAqualityDmaintenanceEnables interaction with qBittorrent through its Web API to search for torrents using search plugins and manage downloads. Supports torrent searching, downloading via URLs/magnet links, and torrent management operations like pause, resume, and delete.73-
- FlicenseNot gradedqualityDmaintenanceEnables searching and downloading torrents from iptorrents.com using browser cookie-based authentication, with features like filtering, sorting, and freeleech detection.-
- FlicenseNot gradedqualityDmaintenanceEnables controlling a Transmission torrent daemon, allowing adding, listing, controlling torrents and checking free space, with support for SOCKS5 proxy for remote access.-