loading…
Search for a command to run...
loading…
Closes the find-download-install loop for lutris-mcp by searching Prowlarr, downloading via qBittorrent, polling until complete, classifying the result, and ret
Closes the find-download-install loop for lutris-mcp by searching Prowlarr, downloading via qBittorrent, polling until complete, classifying the result, and returning a path for installation.
Source pipeline MCP for lutris-mcp.
Closes the find -> download -> install loop: searches Prowlarr, hands off
to qBittorrent, polls until done, classifies the resulting tree, returns a
path that lutris-mcp's install_from_yaml or install_from_directory
consumes directly.
| Tool | What it does |
|---|---|
prepare_install_source(query, ...) |
The composite. Search → grab → poll → classify → return path. mutates: true |
cancel_pipeline(infohash) |
Abort an in-flight grab. mutates: true |
stop_seeding(infohash) |
Remove from qBittorrent without deleting on-disk files. mutates: true |
pipeline_health() |
Verify Prowlarr + qBittorrent reachable; surface configured indexers. mutates: false |
setup(...) |
Write ~/.config/lutris-source-mcp/config.toml (first-run). mutates: true |
Prowlarr aggregates public (1337x, TPB, etc.) and private (Gazelle: RED, OPS, GGn) trackers in one search. The composite ranks across them with this key:
(indexer_priority, # 1 = highest, 50 = lowest
freeleech_first if freeleech_only else 0,
-seeders,
size_bytes) # smaller wins as tiebreak
indexer_priority comes from the Prowlarr indexer's priority field — set
it in Prowlarr's UI per tracker (e.g. private = 1, public = 25). The MCP
respects it rather than inventing a separate trust ranking.
Pass freeleech_only=True (or set policy.freeleech_only = true in TOML)
to drop non-freeleech results from Gazelle indexers before ranking. Public
results pass through unchanged (freeleech is meaningless there). Auth
itself stays in Prowlarr's UI; the MCP never sees Gazelle credentials.
Each poll prints a stdout heartbeat:
[prepare_install_source] deadbeef dl=12345/100000 (12.3%) peers=8 rate=215.4KiB/s elapsed=14s
If downloaded doesn't increase for stall_timeout_seconds (default 5min),
the tool returns {ok: false, reason: "stalled"} so the agent can pick
another candidate.
~/.config/lutris-source-mcp/config.toml:
[prowlarr]
base_url = "http://localhost:9696"
api_key = "..."
[qbittorrent]
base_url = "http://localhost:8080"
username = "admin"
password = "..."
download_dir = "/mnt/games/Downloads"
[policy]
blocklist = ["fitgirl"]
allow_indexers = []
max_size_gb = 50
freeleech_only = false
min_seeders = 1
Every key has a LUTRIS_SOURCE_MCP_<SECTION>_<KEY> env override
(e.g. LUTRIS_SOURCE_MCP_PROWLARR_API_KEY, LUTRIS_SOURCE_MCP_POLICY_FREELEECH_ONLY).
For read-only Prowlarr/qBittorrent inspection, install jmagar/prowlarr-mcp and pickpppcc/qbittorrent-mcp alongside. Three small focused servers, no overlap.
MIT.
Add this to claude_desktop_config.json and restart Claude Desktop.
{
"mcpServers": {
"lutris-source-mcp": {
"command": "npx",
"args": []
}
}
}