This server provides a set of tools to interact with a Prowlarr instance using the Model Context Protocol (MCP). It is built with FastMCP and allows for managing indexers, applications, performing searches, checking system status, and more, all based on the Prowlarr API v1.
The tools were chosen to expose core Prowlarr functionalities that are useful for automation, status checking, and manual interaction via an MCP-compatible client. The selection is based on the Prowlarr v1 OpenAPI specification (prowlarr-api.json) and common use cases for managing indexers and their associated applications.
Key considerations:
- Comprehensive Coverage: Aim to cover major Prowlarr entities like Indexers, Applications, System Status, History, and Search.
- User-Friendliness: Provide human-readable summaries for complex outputs while retaining full JSON data for programmatic use.
- Configuration: Rely on environment variables for Prowlarr API URL and Key, as well as MCP server settings (transport, host, port, logging) for security and flexibility.
- Transport: Defaults to SSE (Server-Sent Events) for remote accessibility and concurrent connections.
list_indexers(): Retrieves a list of all configured indexers.get_indexer_details(id: int): Retrieves detailed information for a specific indexer.search_releases(query: str, indexerIds: Optional[List[int]], categories: Optional[List[int]], type: Optional[str], limit: Optional[int], offset: Optional[int]): Searches for releases across indexers.test_indexer(id: int): Tests a specific indexer's connectivity and search capability.update_indexer(id: int, indexer_config: Dict[str, Any]): Updates an existing indexer's configuration.list_applications(): Retrieves a list of applications synced with Prowlarr.get_system_status(): Retrieves Prowlarr system status and information.get_indexer_categories(): Retrieves the list of default indexer categories.get_history(page: Optional[int], pageSize: Optional[int], sortKey: Optional[str], sortDirection: Optional[str], eventType: Optional[List[int]], successful: Optional[bool], downloadId: Optional[str], indexerIds: Optional[List[int]]): Retrieves Prowlarr's history records.test_all_indexers(): Triggers a test for all configured indexers and summarizes the results.
- Python 3.8+ (Python 3.10+ recommended for
yarr-mcpproject) - An operational Prowlarr instance (v1 API compatible).
uv(recommended for package management within theyarr-mcpproject).
-
Clone the
yarr-mcprepository (if you haven't already):git clone https://github.com/jmagar/yarr-mcp.git cd yarr-mcp -
Install dependencies: Dependencies (
fastmcp,httpx,python-dotenv, etc.) are managed by the mainyarr-mcpproject'spyproject.toml. Ensure you have activated the main project's virtual environment (e.g., usinguv venv):# From the yarr-mcp project root source .venv/bin/activate # or on Windows (Git Bash/WSL) # source .venv/Scripts/activate
-
Set up environment variables: Create or update a
.envfile in theyarr-mcpproject root, or specifically in thesrc/prowlarr-mcp/directory (server-specific will override project root). Refer tosrc/prowlarr-mcp/.env.examplefor all available options. Key variables:PROWLARR_URL=http://your-prowlarr-host:9696 PROWLARR_API_KEY=your_prowlarr_api_key_here PROWLARR_MCP_TRANSPORT=sse PROWLARR_MCP_HOST=0.0.0.0 PROWLARR_MCP_PORT=6973 PROWLARR_MCP_LOG_LEVEL=INFO PROWLARR_MCP_LOG_FILE=prowlarr_mcp.log
Replace with your actual Prowlarr instance URL and API key. The API key can be found in Prowlarr under Settings > General.
Ensure your project's virtual environment is activated.
From the yarr-mcp project root, run:
python src/prowlarr-mcp/prowlarr-mcp-server.pyThe server will start, by default using SSE transport on the host and port specified by PROWLARR_MCP_HOST and PROWLARR_MCP_PORT (defaults to 0.0.0.0:6973). You should see log messages indicating the server has started and the SSE endpoint, e.g.:
INFO - ProwlarrMCPServer - Prowlarr MCP SSE endpoint will be available at http://0.0.0.0:6973/mcp
If the server is running with SSE transport (the default), you can create an MCP_CLIENT_CONFIG JSON file to instruct Claude Desktop (or similar clients) how to connect. For example:
{
"clients": [
{
"name": "ProwlarrMCP", // Or any name you prefer
"command": ["curl", "-N", "http://localhost:6973/mcp"],
"type": "sse",
"is_available": true
}
// Add other MCP server configurations here
]
}Place this file (e.g., mcp_config.json) in a location your MCP client can access and configure the client to use it (often via an MCP_CLIENT_CONFIG environment variable pointing to this file's path).
If you need to use STDIO transport, set PROWLARR_MCP_TRANSPORT=stdio in your .env file. The MCP_CLIENT_CONFIG command would then be:
["python", "/path/to/yarr-mcp/src/prowlarr-mcp/prowlarr-mcp-server.py"] (using the absolute path to the script).
(Assuming the server is running and connected to your MCP client)
-
List all configured indexers:
@ProwlarrMCP list_indexersExpected Summary: "Found X indexers. First few: Name1 (ID: Y, Enabled: True), ..."
-
Get details for a specific indexer (e.g., ID 10):
@ProwlarrMCP get_indexer_details id=10Expected Summary: "Details for Indexer 'IndexerName' (ID: 10) retrieved."
-
Search for releases related to "ubuntu" in PC/ISO categories: (Category IDs can be found using
get_indexer_categoriesand examining Prowlarr UI/API)@ProwlarrMCP search_releases query="ubuntu" categories=\[4020]Expected Summary: "Found X releases for query 'ubuntu'. First few results: ..."
-
401 Unauthorized Errors:
- Verify
PROWLARR_URLandPROWLARR_API_KEYenvironment variables are correctly set. - Ensure your Prowlarr instance is network-accessible and API access is enabled.
- Verify
-
Connection issues (SSE):
- Ensure the
prowlarr-mcp-server.pyscript is running and listening on the correct host/port (default0.0.0.0:6973/mcp). - Check firewalls or network configurations.
- Verify the URL in the client configuration matches.
- Ensure the
-
Tool execution failures / Type errors with parameters:
- Check server logs (
src/prowlarr-mcp/prowlarr_mcp.logas configured byPROWLARR_MCP_LOG_FILE, and console output) for detailed error messages.
- Check server logs (
-
test_indexerreports 400 Bad Request:- This often means Prowlarr itself found a validation issue with that indexer's configuration. Check Prowlarr UI.
- The server uses a global
loggerinstance for application logging, configured for both console and rotating file output (path and level configurable viaPROWLARR_MCP_LOG_FILEandPROWLARR_MCP_LOG_LEVEL). - An asynchronous HTTP client (
httpx) is used for all API calls to Prowlarr. - Error handling in
_prowlarr_api_requestattempts to catch HTTP status errors and other request exceptions. - Tools are defined using the
@mcp.tool()decorator from FastMCP. - The server defaults to SSE transport on the path
/mcp. This can be changed tostdiovia thePROWLARR_MCP_TRANSPORTenvironment variable. - The server name registered with FastMCP is
Prowlarr MCP Server. - Refer to
prowlarr-api.jsonfor the OpenAPI specification of the Prowlarr API v1 this server interacts with. # prowlarr-mcp