lutris-source-mcp
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
Tool | What it does |
| The composite. Search → grab → poll → classify → return path. mutates: true |
| Abort an in-flight grab. mutates: true |
| Remove from qBittorrent without deleting on-disk files. mutates: true |
| Verify Prowlarr + qBittorrent reachable; surface configured indexers. mutates: false |
| Write |
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 tiebreakindexer_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=14sIf 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 = 1Every 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.
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/revelri/lutris-source-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server