qbittorrent-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| QBITTORRENT_URL | Yes | The URL of the qBittorrent WebUI (e.g., http://localhost:8080). Required. | |
| QBITTORRENT_API_KEY | No | API key for qBittorrent >= v5.2.0. One authentication method is required: either this or username/password. | |
| QBITTORRENT_PASSWORD | No | Password for the qBittorrent WebUI login. Use with QBITTORRENT_USERNAME as the alternative authentication method. | |
| QBITTORRENT_USERNAME | No | Username for the qBittorrent WebUI login. Use with QBITTORRENT_PASSWORD as the alternative authentication method. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| qbittorrent_logoutA | Invalidate the current WebUI session. With API-key auth this endpoint is not reachable (API keys cannot interact with /auth/*) and the API will return an error which is surfaced as-is. |
| qbittorrent_app_versionA | The qBittorrent application version, e.g. v5.0.4. |
| qbittorrent_app_webapi_versionA | The WebAPI version implemented by this qBittorrent, e.g. 2.14.1. |
| qbittorrent_app_build_infoA | Build info: Qt, libtorrent, Boost and OpenSSL versions plus app bitness. |
| qbittorrent_app_shutdownA | Shut down the qBittorrent application. This stops the whole daemon/WebUI -- use sparingly, it cannot be undone from here. |
| qbittorrent_app_get_preferencesA | All application preferences as a key/value object (locale, limits, paths, WebUI settings, etc). See README for the full field list. |
| qbittorrent_app_set_preferencesA | Update application preferences. Pass only the keys you want to change, e.g. {"max_active_downloads": 5, "save_path": "/downloads"}. String values must be quoted; integers and booleans must not. |
| qbittorrent_app_default_save_pathA | The default save path for new torrents, e.g. C:/Users/me/Downloads. |
| qbittorrent_app_get_cookiesA | The cookies qBittorrent sends when downloading .torrent files. Each entry has name/domain/path/value/expirationDate. |
| qbittorrent_app_set_cookiesA | Replace the cookies used when downloading .torrent files. cookies is a JSON array of {name, domain, path, value, expirationDate} objects. |
| qbittorrent_log_mainA | The application log as a JSON array of {id, message, timestamp, type}. Filter message classes with normal/info/warning/critical (default true for all). Pass last_known_id to fetch only messages newer than a given id. |
| qbittorrent_log_peersA | Peer-block log entries as a JSON array of {id, ip, timestamp, blocked, reason}. Pass last_known_id to fetch only entries newer than a given id. |
| qbittorrent_sync_maindataA | Differential state snapshot for UI sync. Pass the rid from the previous reply to get only changes; full_update=true means you received everything. Includes torrents, categories, tags and server_state. |
| qbittorrent_sync_torrent_peersA | Differential peers data for one torrent. Pass the rid from the previous reply to get only changes. |
| qbittorrent_transfer_infoA | Global transfer info: download/upload rates and totals, rate limits, DHT nodes and connection status. |
| qbittorrent_transfer_speed_limits_modeA | 1 if alternative speed limits are enabled, 0 otherwise. |
| qbittorrent_transfer_toggle_speed_limitsA | Toggle the alternative speed limits on/off. |
| qbittorrent_transfer_download_limitA | Global download speed limit in bytes/s (0 if no limit is applied). |
| qbittorrent_transfer_set_download_limitA | Set the global download speed limit in bytes/s (0 removes the limit). |
| qbittorrent_transfer_upload_limitA | Global upload speed limit in bytes/s (0 if no limit is applied). |
| qbittorrent_transfer_set_upload_limitA | Set the global upload speed limit in bytes/s (0 removes the limit). |
| qbittorrent_transfer_ban_peersA | Ban peers. peers is one or more |
| qbittorrent_torrents_listA | List torrents matching the given filters. filter is one of all, downloading, seeding, completed, stopped, active, inactive, running, stalled, stalled_uploading, stalled_downloading, errored. category/tag filter by them (empty string = "without category/tag"). sort by any response field; reverse for descending order. limit/offset for paging; hashes (pipe-separated or "all") to select specific torrents. |
| qbittorrent_torrent_propertiesA | Generic properties of one torrent: save_path, creation/completion dates, total uploaded/downloaded, seeding_time, share_ratio, speeds, peer counts, isPrivate, etc. 404 if the hash is not found. |
| qbittorrent_torrent_trackersA | Trackers of one torrent: url, status (0 disabled, 1 not contacted yet, 2 working, 3 updating, 4 not working), tier, peer/seed/leech counts, msg. |
| qbittorrent_torrent_web_seedsB | Web seeds of one torrent (array of {url}). |
| qbittorrent_torrent_contentsA | Files of one torrent: index, name, size, progress, priority (0 skip, 1 normal, 6 high, 7 maximal), is_seed, piece_range, availability. Pass indexes (pipe-separated) to fetch only those files. |
| qbittorrent_torrent_piece_statesA | Piece states of one torrent as ints: 0 not downloaded, 1 downloading, 2 downloaded. |
| qbittorrent_torrent_piece_hashesB | SHA1 hashes of all pieces of one torrent, in order. |
| qbittorrent_torrents_pauseA | Pause (stop) torrents. hashes is pipe-separated or "all". |
| qbittorrent_torrents_resumeA | Resume (start) torrents. hashes is pipe-separated or "all". |
| qbittorrent_torrents_deleteA | Delete torrents. hashes is pipe-separated or "all". With delete_files=true the downloaded data is deleted from disk too -- this is irreversible. |
| qbittorrent_torrents_recheckA | Force recheck of torrents. hashes is pipe-separated or "all". |
| qbittorrent_torrents_reannounceA | Reannounce torrents to their trackers. hashes is pipe-separated or "all". |
| qbittorrent_torrents_addA | Add torrents. urls is one or more http(s)/magnet/bc:// links separated by newlines. Alternatively (or additionally) pass one raw .torrent file base64-encoded in torrent_b64. Optional: save_path, category, tags (comma-separated), skip_checking, paused, root_folder, rename, up_limit / dl_limit (bytes/s), ratio_limit, seeding_time_limit (minutes), auto_tmm, sequential_download, first_last_piece_prio. |
| qbittorrent_torrents_add_trackersA | Add trackers to a torrent. urls is one or more tracker URLs separated by newlines. |
| qbittorrent_torrents_edit_trackerA | Replace a tracker URL on a torrent with new_url. |
| qbittorrent_torrents_remove_trackersA | Remove trackers from a torrent. urls is one or more URLs separated by a pipe. |
| qbittorrent_torrents_add_peersA | Add peers to torrents. hashes is pipe-separated or "all"; peers is one or
more |
| qbittorrent_torrents_increase_priorityA | Increase queue priority of torrents. hashes is pipe-separated or "all". |
| qbittorrent_torrents_decrease_priorityA | Decrease queue priority of torrents. hashes is pipe-separated or "all". |
| qbittorrent_torrents_top_priorityA | Move torrents to the top of the queue. hashes is pipe-separated or "all". |
| qbittorrent_torrents_bottom_priorityA | Move torrents to the bottom of the queue. hashes is pipe-separated or "all". |
| qbittorrent_torrents_file_priorityA | Set file priority for a torrent. id is one or more file ids (from qbittorrent_torrent_contents) separated by a pipe; priority is 0 (skip), 1 (normal), 6 (high) or 7 (maximal). |
| qbittorrent_torrents_download_limitA | Per-torrent download speed limits (bytes/s), keyed by hash. hashes is pipe-separated or "all". |
| qbittorrent_torrents_set_download_limitA | Set download speed limit (bytes/s) for torrents. hashes is pipe-separated or "all"; limit 0 means no limit. |
| qbittorrent_torrents_set_share_limitsA | Set share limits for torrents (hashes pipe-separated or "all"). ratio_limit (share ratio), seeding_time_limit and inactive_seeding_time_limit (minutes). -2 = use global limit, -1 = no limit. |
| qbittorrent_torrents_upload_limitA | Per-torrent upload speed limits (bytes/s), keyed by hash. hashes is pipe-separated or "all". |
| qbittorrent_torrents_set_upload_limitA | Set upload speed limit (bytes/s) for torrents. hashes is pipe-separated or "all"; limit 0 means no limit. |
| qbittorrent_torrents_set_locationA | Move torrents to a new download location on disk. hashes is pipe-separated or "all"; location is the destination directory. |
| qbittorrent_torrents_set_nameA | Rename a torrent (display name only, does not touch files on disk). |
| qbittorrent_torrents_set_categoryA | Set the category of torrents. hashes is pipe-separated or "all"; pass an empty category to remove the current category. |
| qbittorrent_torrents_categoriesA | All categories as {name: {name, savePath}}. |
| qbittorrent_torrents_create_categoryB | Create a category with an optional save_path. |
| qbittorrent_torrents_edit_categoryB | Change the save_path of an existing category. |
| qbittorrent_torrents_remove_categoriesA | Remove categories. categories is one or more names separated by newlines. Torrents in a removed category become uncategorized. |
| qbittorrent_torrents_add_tagsA | Add tags (comma-separated) to torrents (hashes pipe-separated or "all"). |
| qbittorrent_torrents_remove_tagsA | Remove tags (comma-separated) from torrents (hashes pipe-separated or "all"). An empty tags value removes all tags from the torrents. |
| qbittorrent_torrents_tagsA | All tags as a JSON array of strings. |
| qbittorrent_torrents_create_tagsB | Create tags. tags is one or more names separated by commas. |
| qbittorrent_torrents_delete_tagsA | Delete tags. tags is one or more names separated by commas. Torrents keep their data but lose the deleted tags. |
| qbittorrent_torrents_set_auto_managementA | Enable/disable Automatic Torrent Management for torrents (hashes pipe-separated or "all"). |
| qbittorrent_torrents_toggle_sequential_downloadA | Toggle sequential download mode for torrents (hashes pipe-separated or "all"). |
| qbittorrent_torrents_toggle_first_last_piece_priorityA | Toggle first/last piece priority for torrents (hashes pipe-separated or "all"). |
| qbittorrent_torrents_set_force_startA | Force-start or un-force-start torrents (hashes pipe-separated or "all"). |
| qbittorrent_torrents_set_super_seedingA | Enable/disable super seeding for torrents (hashes pipe-separated or "all"). |
| qbittorrent_torrents_rename_fileA | Rename a file inside a torrent (relative paths from the torrent root). |
| qbittorrent_torrents_rename_folderA | Rename a folder inside a torrent (relative paths from the torrent root). |
| qbittorrent_rss_add_folderA | Create an RSS folder, e.g. "The Pirate Bay\Top100". |
| qbittorrent_rss_add_feedA | Add an RSS feed by URL, optionally into a folder path. |
| qbittorrent_rss_remove_itemA | Remove an RSS folder or feed, e.g. "The Pirate Bay\Top100". |
| qbittorrent_rss_move_itemA | Move or rename an RSS folder/feed from item_path to dest_path. |
| qbittorrent_rss_itemsA | All RSS items as a nested object of folder -> feed -> URL. Set with_data to also include current feed articles. |
| qbittorrent_rss_mark_as_readA | Mark an RSS feed as read; pass article_id to mark only one article. |
| qbittorrent_rss_refresh_itemA | Force-refresh an RSS folder or feed. |
| qbittorrent_rss_set_ruleA | Create or replace an auto-downloading RSS rule. rule_def keys: enabled, mustContain, mustNotContain, useRegex, episodeFilter, smartFilter, previouslyMatchedEpisodes, affectedFeeds, ignoreDays, lastMatch, addPaused, assignedCategory, savePath. e.g. {"enabled": true, "mustContain": "Ubuntu", "affectedFeeds": ["https://example.com/rss"]} |
| qbittorrent_rss_rename_ruleB | Rename an auto-downloading rule. |
| qbittorrent_rss_remove_ruleB | Remove an auto-downloading rule. |
| qbittorrent_rss_rulesB | All auto-downloading rules as {name: rule definition}. |
| qbittorrent_rss_matching_articlesA | All feed articles matching a rule, as {feed name: [article titles]}. |
| qbittorrent_search_startA | Start a search job across the configured plugins and return its id. plugins
is plugin names separated by |
| qbittorrent_search_stopA | Stop a running search job by id. |
| qbittorrent_search_statusA | Status of one search job (id) or all jobs: {id, status: Running|Stopped, total}. |
| qbittorrent_search_resultsB | Results of a search job: {results: [{descrLink, fileName, fileSize, fileUrl, nbLeechers, nbSeeders, siteUrl}], status, total}. limit caps the count (0/negative = no limit); negative offset counts back from the end. |
| qbittorrent_search_deleteA | Delete a search job and free its results. |
| qbittorrent_search_pluginsB | Installed search plugins: enabled, fullName, name, supportedCategories, url, version. |
| qbittorrent_search_install_pluginA | Install search plugins. sources is one or more URLs or file paths separated by a pipe. |
| qbittorrent_search_uninstall_pluginA | Uninstall search plugins. names is one or more names separated by a pipe. |
| qbittorrent_search_enable_pluginA | Enable or disable search plugins. names is one or more names separated by a pipe. |
| qbittorrent_search_update_pluginsA | Update all installed search plugins to their latest versions. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/SavageCore/qbittorrent-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server