An independently deployable MCP (Model Context Protocol) server for qBittorrent, written in Go. It exposes one MCP server over Streamable HTTP at /mcp/qbittorrent and a health endpoint at /health.
docker run -d --name qbittorrent-mcp \
--read-only --cap-drop ALL --security-opt no-new-privileges:true \
-e QBITTORRENT_URL=http://your-qbittorrent:8080 \
-e QBITTORRENT_API_KEY='your-api-key-or-password' \
-e QBITTORRENT_LISTEN_ADDR=0.0.0.0:8080 \
-p 127.0.0.1:8092:8080 \
marcosisocram/qbittorrent-mcp:latest
http://127.0.0.1:8092/mcp/qbittorrenthttp://127.0.0.1:8092/healthThe container runs as a non-root user with no shell, on a distroless base, and declares HEALTHCHECK CMD ["/qbittorrent-mcp", "--healthcheck"] — the same command a Kubernetes livenessProbe/readinessProbe should use.
| Variable | Required | Default | Description |
|---|---|---|---|
QBITTORRENT_URL | yes | — | Trusted qBittorrent WebUI base URL |
QBITTORRENT_API_KEY | no | — | API key, when your deployment uses one |
QBITTORRENT_USERNAME | no | — | WebUI username (alternative to API key) |
QBITTORRENT_PASSWORD | no | — | WebUI password (alternative to API key) |
QBITTORRENT_LISTEN_ADDR | no | 127.0.0.1:8080 | Listen address; use 0.0.0.0:8080 in containers |
TLS verification for upstream HTTPS is always enabled, and redirects are never followed so credentials cannot be replayed to another origin.
The server provides no inbound authentication. Expose the port only on a trusted network or behind a TLS/access-control proxy. Container hardening shown above (--read-only, cap-drop ALL, no-new-privileges) is recommended for all deployments.
marcosisocram/qbittorrent-mcp — qBittorrent pilot (this image)marcosisocram/radarr-mcp — Radarr (movies)marcosisocram/sonarr-mcp — Sonarr (TV series)Content type
Image
Digest
sha256:b98b78ff8…
Size
4.3 MB
Last updated
2 days ago
docker pull marcosisocram/qbittorrent-mcp