Skip to main content
Glama
revelri

lutris-source-mcp

by revelri

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

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.

Available Tools

5 tools
cancel_pipelineC

Cancel an in-flight torrent. mutates: true

ParametersJSON Schema
NameRequiredDescriptionDefault
infohashYes
delete_filesNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It mentions 'mutates: true', indicating state change, but it does not disclose potential side effects (e.g., whether delete_files removes data, what confirm does, or impact on seeding).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short (one sentence plus a note), which is concise but fails to provide sufficient information. The structure is front-loaded but not adequately informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters, no annotation support, and an output schema that is not described, the description is incomplete. It does not explain return values or behavior beyond mutation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description should explain parameters. It only says 'Cancel an in-flight torrent', leaving 'infohash', 'delete_files', and 'confirm' largely unexplained beyond their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Cancel') and the resource ('an in-flight torrent'), providing a specific verb and resource. However, it does not differentiate from sibling tool 'stop_seeding', which might have overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'stop_seeding'. There is no mention of prerequisites, context, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pipeline_healthA

Verify Prowlarr + qBittorrent reachability and surface config. mutates: false

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly states 'mutates: false', which is the key behavioral trait given no annotations. This adds value beyond the empty schema, though it could mention additional traits like 'requires active services' or 'returns health status details'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence plus a key-value for mutation status. It is front-loaded and contains no extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description adequately explains the tool's purpose for a simple verification tool with no parameters. It could mention that it outputs a health status, but since an output schema exists, this is not required. Still, it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters and 100% schema coverage, the description does not need to add parameter info. The baseline 4 is appropriate; it provides the necessary context for a param-free tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it verifies reachability of Prowlarr and qBittorrent and surfaces config, using specific verbs and resources. It distinguishes from siblings which involve cancellation, preparation, setup, or stopping.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for checking connectivity but lacks explicit context, such as when to use this over siblings (e.g., before triggering other operations). No exclusions or alternatives are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_install_sourceA

Search Prowlarr, hand off the best candidate to qBittorrent, poll until complete (5-min stall timeout, configurable), classify the tree, and return a path lutris-mcp's install_from_yaml or install_from_directory consumes directly. mutates: true

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
indexer_categoriesNo
indexer_idsNo
max_size_gbNo
min_seedersNo
freeleech_onlyNo
stall_timeout_secondsNo
poll_interval_secondsNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the multi-step process, including polling with a configurable stall timeout (5 minutes default). It also notes that the tool mutates state. The return value is a path consumed by specific functions. However, failure modes, error handling, and permission requirements are not discussed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that packs the entire process flow without redundancy. It is front-loaded with the key action. However, the sentence is somewhat run-on and could be structured into multiple sentences for clarity. Still, it is concise and each clause adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (9 parameters, multi-step process) and absence of annotations, the description provides a high-level overview of the process and return value. It does not cover all parameters or error scenarios, but the existence of an output schema likely compensates for return value details. The description is adequate but not fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain parameters. It only mentions the configurable stall timeout and implies polling interval, but does not detail the other 7 parameters (query, filters, etc.). The parameter names are somewhat self-explanatory, but the description adds minimal semantic value beyond them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: search Prowlarr, hand off to qBittorrent, poll for completion, classify, and return a path for downstream consumption. It differentiates from siblings (pipeline management) by specifying a concrete resource and outcome.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (preparing an install source) and mentions downstream consumers, but it does not explicitly state when to use this tool versus alternatives or provide exclusions. Sibling tools are for pipeline control, suggesting this is for setup, but no direct guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

setupC

Write the TOML config file (first-run setup). mutates: true

ParametersJSON Schema
NameRequiredDescriptionDefault
prowlarr_urlYes
prowlarr_api_keyYes
qb_urlYes
qb_usernameYes
qb_passwordYes
download_dirNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It only states 'mutates: true', which is redundant given 'write', and fails to disclose side effects like overwriting existing config, required state, or whether confirmation is mandatory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely brief but critically under-specified. While the first sentence is efficient, the second is redundant and overall it lacks necessary details, making it insufficient rather than concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of 7 parameters and the mutable nature of the tool, the description fails to cover return values, prerequisites, or any behavioral context beyond a single-line summary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 7 parameters with 0% description coverage, and the description offers no explanations for any parameter, such as the purpose of 'confirm' or format of URLs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Write the TOML config file (first-run setup)', clearly specifying the action and resource. This distinguishes it from sibling tools like cancel_pipeline and stop_seeding, which focus on different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies 'first-run' usage but provides no explicit guidance on when to use vs alternatives, nor any prerequisites or conditions for calling this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stop_seedingC

Stop seeding without deleting on-disk files. mutates: true

ParametersJSON Schema
NameRequiredDescriptionDefault
infohashYes
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description includes 'mutates: true' and clarifies that files are not deleted, which adds some behavioral insight beyond the action name. However, it lacks details on side effects, state changes, or permissions required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise (one sentence plus a note), but the brevity sacrifices necessary information, especially given the lack of schema descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, 0% schema coverage, and no explanation of the output schema or parameters, the description is severely incomplete for a tool requiring input parameters and producing output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description fails to explain the two parameters (infohash and confirm). No additional meaning is provided beyond the schema structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Stop seeding' and distinguishes it from deletion by noting 'without deleting on-disk files'. The resource (seeding) is implied, and the sibling tools are unrelated, making the purpose stand out.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives, nor any prerequisites or context. The sibling list doesn't include similar tools, so no comparison can be drawn.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv0.1.0
    • First observedcancel_pipeline
    • First observedpipeline_health
    • First observedprepare_install_source
    • First observedsetup
    • First observedstop_seeding

TDQS

B3.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: cancel_pipeline stops a torrent, pipeline_health checks connectivity, prepare_install_source handles full search and download, setup writes config, and stop_seeding stops seeding without deletion. No ambiguity between them.

Naming Consistency4/5

Tools use snake_case and mostly follow a verb_noun pattern (e.g., cancel_pipeline, prepare_install_source). However, 'setup' is a single verb and 'pipeline_health' is noun_noun, introducing minor inconsistency.

Tool Count5/5

With 5 tools, the set is well-scoped for a source management server. Each tool covers an essential operation without bloat or deficiency.

Completeness4/5

The tool surface covers core workflows: setup, health check, download/prepare, cancellation, and seeding control. Minor gaps like listing pipelines or updating config exist but are not critical for the intended use.

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Latest Blog Posts

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