MCP Hub
Back to servers

lutris-source-mcp

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.

glama
Updated
May 9, 2026

lutris-source-mcp

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.

Tools

ToolWhat 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

Multi-tracker ranking

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.

Gazelle hygiene

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.

Stall detection

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

~/.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).

Companions

For read-only Prowlarr/qBittorrent inspection, install jmagar/prowlarr-mcp and pickpppcc/qbittorrent-mcp alongside. Three small focused servers, no overlap.

License

MIT.

Reviews

No reviews yet

Sign in to write a review