Skip to main content

qb-mcp

An MCP server for qBittorrent — manage torrents with natural language.

CI PyPI Python Coverage License: Apache-2.0 MCP

This is an unofficial project. It is not affiliated with, endorsed by, or supported by the qBittorrent project.

English | 简体中文

qb-mcp wraps the qBittorrent WebUI API v2 and exposes it as eleven tools that an AI agent can call. It manages any number of instances, each with its own credentials, so a single agent can drive a home NAS and a remote seedbox at once.

Why this exists

qBittorrent has a complete HTTP API but no MCP interface. Wrapping it means an agent can answer "why isn't it uploading?" by actually checking tracker health, listening ports, speed limits and peer supply — instead of guessing.

The eleven tools are grouped by user intent, not by API endpoint: mapping all 80+ endpoints one-to-one would produce a tool list no model can choose from.

Features

  • Multiple instances, each with independent credentials
  • qb_diagnose — turns "why is nothing uploading?" into one call
  • Field-trimmed responses — the API returns 30+ fields per torrent; this returns 12
  • Before/after reporting on every write operation
  • delete_files is opt-in — removing a torrent never deletes data by default
  • stdio and HTTP transports
  • Credentials never leave your machine; nothing is logged

Quick start

pip install qb-mcp
cp instances.example.json .instances.json
# edit .instances.json with your qBittorrent URL and credentials
chmod 600 .instances.json
qb-mcp

Configuration

qb-mcp reads .instances.json from the current directory, or the path in QB_MCP_CONFIG.

{
  "instances": {
    "nas": {
      "label": "Home NAS",
      "url": "http://192.168.1.100:8080",
      "username": "admin",
      "password": "${QB_PASS_NAS}"
    },
    "seedbox": {
      "url": "https://seedbox.example.com",
      "username": "me",
      "password": {"file": "~/.secrets/seedbox"}
    }
  }
}
Field Required Default Notes
url ✅ — Must start with http:// or https://
username ✅ — Per-instance; instances may use different accounts
password ✅ — Literal, "${ENV_VAR}", or {"file": "/path"}
label — key Display name
verify_ssl — true Set false for self-signed certificates
timeout — 8.0 Per-request timeout in seconds

Keep .instances.json out of version control. It is already listed in .gitignore. qb-mcp prints a warning if the file is readable by group or others.

Tools

Read (safe)

Tool Purpose
qb_instances List configured instances and whether each is reachable
qb_overview Global status for one or all instances
qb_list Torrent list with filtering, sorting and a row limit
qb_detail One torrent in depth, including tracker status
qb_diagnose Explain why an instance is or is not uploading

Write (state-changing)

Tool Purpose
qb_control pause / resume / reannounce / force_start
qb_set_limit Global or per-torrent speed limits
qb_set_share Ratio and seeding-time limits
qb_add Add from magnet, URL or a local .torrent (paused by default)
qb_remove Remove torrents; delete_files is opt-in
qb_category Assign categories and tags

Client setup

stdio (Claude Desktop, Cursor, most local clients):

{
  "mcpServers": {
    "qbittorrent": {
      "command": "qb-mcp",
      "env": { "QB_MCP_CONFIG": "/absolute/path/to/.instances.json" }
    }
  }
}

HTTP (remote or multi-client):

qb-mcp --transport http --host 127.0.0.1 --port 17890
{
  "servers": {
    "qbittorrent": {
      "url": "http://127.0.0.1:17890/mcp",
      "transport": "streamable_http"
    }
  }
}

Compatibility

qBittorrent WebUI API Status
4.x 2.8+ Supported
5.x 2.11+ Supported (tested on 5.2.4)

Both official builds and third-party NAS packages (QNAP QPKG, Synology SPK) work, with the proxy quirks below already handled.

Troubleshooting

login rejected (Fails.)

qBittorrent returns HTTP 200 even when the password is wrong — the body is Fails. instead of Ok.. qb-mcp inspects the body, so this message means the credentials are genuinely wrong.

Login fails behind a reverse proxy

The official API requires Referer or Origin to match the request Host exactly, including the port. qb-mcp sets both from your configured url, so make sure url uses the same host and port you would type in a browser.

Works with curl but not through a proxy

Some reverse proxies (QNAP QTS is one) return 204 No Content with an empty body on a successful login instead of 200 Ok.. qb-mcp treats any status below 400 with an empty or Ok. body as success.

login blocked - too many failed attempts

qBittorrent temporarily bans an IP after repeated failures. Wait a few minutes, or check the WebUI's ban list.

Development

git clone https://github.com/zxw060810/qb-mcp.git
cd qb-mcp
pip install -e ".[dev]"
ruff check .
mypy src
pytest

Tests mock the qBittorrent API; no live instance is required.

License

Apache-2.0

Metadata

Release files for qb-mcp 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for qb-mcp 0.1.1
File Size Uploaded Provenance Actions
qb_mcp-0.1.1.tar.gz 60.6 kB With provenance Details for qb_mcp-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for qb-mcp 0.1.1
File Interpreter ABI Platform Actions
qb_mcp-0.1.1-py3-none-any.whl Python 3 none any Details for qb_mcp-0.1.1-py3-none-any.whl

Total release size: 81.0 kB

Release files / qb_mcp-0.1.1.tar.gz

Download URL qb_mcp-0.1.1.tar.gz
Size 60.6 kB
Tags Source
SHA-256 checksum
How to use checksums
17db0f79cb0fead1b0dd8fd0e6ff577e7adaa9b703a5afb1d3ecb51e3ad4921d
BLAKE2b-256 checksum
How to use checksums
35ce93ac3dd601cf91fe45f30d06180bc17347308f887a0fd21231a87a166a33
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Release files / qb_mcp-0.1.1-py3-none-any.whl

Download URL qb_mcp-0.1.1-py3-none-any.whl
Size 20.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5ad1c8fd55b49a3e01d8428199310df0149672b772b208f5a1906770e06b7d4a
BLAKE2b-256 checksum
How to use checksums
8397c03ead2259ae5e78574095dca0f3c6ab677bf28be65fa5edbfd3c15c80d4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Security for qb-mcp 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for qb_mcp-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page