prowlarr-mcp
This MCP server exposes Prowlarr's API as tools for an LLM, enabling full read/write management of a Prowlarr instance. Key capabilities:
System & Commands: Get system status, restart/shutdown, run commands (sync, backup, update), manage backups, view logs, tasks, health, API routes, and filesystem.
Indexers: List, create, update, delete, bulk-edit, test, view stats/schemas/categories, manage status and run actions.
Applications: Manage connected apps (Sonarr, Radarr, Lidarr, Readarr, etc.), their profiles, test connections, bulk operations, and sync indexers.
Download Clients: CRUD, test, bulk edit/delete, and run named actions.
Indexer Proxies: Manage HTTP/SOCKS5 proxies, test, and run actions.
Notifications: Manage notification connections (Discord, Telegram, etc.), test, and run actions.
Tags: CRUD plus usage details across components.
Configuration: Get/update host, UI, development, and download client configs; manage custom filters.
Search & History: Search across indexers or Newznab XML, download releases, push to download clients, ping server, and query paged history with filters.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@prowlarr-mcp search for 'The Matrix' across all indexers"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
prowlarr-mcp
Part of the arr-mcps collection. MCP server exposing Prowlarr's API v1 (REST) as tools, so an LLM can manage your indexers, applications, download clients, indexer proxies, notifications, tags, and custom filters — plus run cross-indexer searches and issue system commands. The full API surface is covered, read and write.
Built with FastMCP.
Enabling the API on your Prowlarr server
Generate an API key in Prowlarr Settings > General (Authentication section).
Every /api/v1 endpoint requires it, sent as the X-Api-Key header.
Related MCP server: profilarr-mcp
Install
Download a wheel from the latest release
and install it as a uv tool (no repo checkout needed):
uv tool install prowlarr_mcp-*.whlThis puts a prowlarr-mcp command on your PATH. Register it with Claude Code:
claude mcp add prowlarr \
--env PROWLARR_URL=http://localhost:9696 \
--env PROWLARR_API_KEY=<key> \
-- prowlarr-mcpFrom source
uv sync
cp .env.example .env # fill in PROWLARR_URL and PROWLARR_API_KEYclaude mcp add prowlarr \
--env PROWLARR_URL=http://localhost:9696 \
--env PROWLARR_API_KEY=<key> \
-- uv run --directory /path/to/prowlarr-mcp prowlarr-mcpConfig
Env var | Required | Default |
| yes | - |
| yes* | none (no auth header sent if unset) |
* Every API endpoint requires auth; practically you must set it, but the server still starts without one so errors surface from the API rather than at startup.
Tools
10 resource-scoped tools, each covering multiple Prowlarr API v1
operations (116 total) via an operation parameter. Call a tool with
operation set to one of its listed operations and an arguments dict
matching that operation's parameters — the tool's own description
(visible to your MCP client) lists every operation, its signature, and a
one-line doc. This keeps the full API surface available while costing a
fraction of the context budget of registering all 116 operations as
separate tools.
Tool | Operations | Kind |
| 27 | reads + writes |
| 17 | reads + writes |
| 14 | reads + writes |
| 13 | reads + writes |
| 11 | reads + writes |
| 9 | reads + writes |
| 9 | reads + writes |
| 7 | reads + writes |
| 6 | reads + writes |
| 3 | read-only |
Example: prowlarr_indexers(operation="prowlarr_get_indexer", arguments={"id": 3}).
Operation-level naming (prowlarr_<verb>_<resource>) is preserved as the
operation value, so the full operation list is still discoverable from each
group tool's description at runtime.
Development
make help # list all commandsCommand | Does |
|
|
| Offline tests - one per endpoint, mocked HTTP |
| Tests against the live instance (needs |
| Build wheel + sdist into |
| Bump the version in |
| Remove build artifacts |
The release workflow (.github/workflows/release.yml) builds and publishes to
Releases whenever a v*
tag is pushed - so the usual flow is make bump-patch, commit, then tag and
push.
The integration suite is read-only by default (a plain make test-integration
never mutates your instance). Setting PROWLARR_ALLOW_WRITES=1 additionally
runs a scratch Tag create+delete round-trip.
Available Tools
10 toolsprowlarr_applicationsA
prowlarr applications operations on Prowlarr. Pass operation and an arguments dict matching that operation's parameters.
prowlarr_application_action(name, body) — Run a named action on an application (e.g. sync indexers). body is the ApplicationResource to act on.
prowlarr_bulk_delete_applications(body) — Bulk-delete applications. body is an ApplicationBulkResource with ids.
prowlarr_bulk_update_applications(body) — Bulk-edit applications. body is an ApplicationBulkResource with ids plus optional tags/applyTags/enable to apply to all of them.
prowlarr_create_app_profile(body) — Create an app profile. body is an AppProfileResource (name, appIds, and per-app settings).
prowlarr_create_application(body, force_save=None) — Create an application. Pass the full ApplicationResource as body (fetch prowlarr_list_application_schemas for available providers and fields). force_save bypasses validation.
prowlarr_delete_app_profile(id) — Delete an app profile by id.
prowlarr_delete_application(id) — Delete an application by id.
prowlarr_get_app_profile(id) — Get a single app profile by id.
prowlarr_get_application(id) — Get a single application by id.
prowlarr_list_app_profile_schemas() — List app profile schemas describing the structure of each app profile form section.
prowlarr_list_app_profiles() — List app profiles (named groups of applications, added in Prowlarr 1.19+).
prowlarr_list_application_schemas() — List application provider schemas (what each application implementation accepts). Read this before creating/updating an application.
prowlarr_list_applications() — List all configured applications (Lidarr/Radarr/Sonarr/Readarr etc.) that indexers are synced to.
prowlarr_test_all_applications() — Test every configured application.
prowlarr_test_application(body, force_test=None) — Test an application connection without saving it. body is the ApplicationResource to test. force_test skips the cached-test check.
prowlarr_update_app_profile(id, body) — Update an app profile by id.
prowlarr_update_application(id, body, force_save=None) — Update an application by id. body is the ApplicationResource to save.
Inputs: operation (required), arguments. Returns: result
prowlarr_configA
prowlarr config operations on Prowlarr. Pass operation and an arguments dict matching that operation's parameters.
prowlarr_create_custom_filter(body) — Create a custom filter. body is a CustomFilterResource with a name, label, type (e.g. release), and filters array.
prowlarr_delete_custom_filter(id) — Delete a custom filter by id.
prowlarr_get_custom_filter(id) — Get a single custom filter by id.
prowlarr_get_development_config() — Get the development config (debug/logging toggles).
prowlarr_get_download_client_config() — Get the download client config (which clients get grabs from indexers).
prowlarr_get_host_config() — Get the host configuration (binding, port, SSL, authentication, API key, proxy settings, update/backup settings).
prowlarr_get_ui_config() — Get the UI configuration (language, theme, first-day-of-week, etc.).
prowlarr_list_custom_filters() — List user-defined custom filters used to narrow indexer search results.
prowlarr_update_custom_filter(id, body) — Update a custom filter by id.
prowlarr_update_development_config(id, body) — Update the development config by id.
prowlarr_update_download_client_config(id, body) — Update the download client config by id.
prowlarr_update_host_config(id, body) — Update the host configuration by id. body is a HostConfigResource.
prowlarr_update_ui_config(id, body) — Update the UI configuration by id.
Inputs: operation (required), arguments. Returns: result
prowlarr_download_clientsA
prowlarr download clients operations on Prowlarr. Pass operation and an arguments dict matching that operation's parameters.
prowlarr_bulk_delete_download_clients(body) — Bulk-delete download clients. body is a DownloadClientBulkResource.
prowlarr_bulk_update_download_clients(body) — Bulk-edit download clients. body is a DownloadClientBulkResource with ids plus optional tags/applyTags/enable.
prowlarr_create_download_client(body, force_save=None) — Create a download client. body is a DownloadClientResource (fetch prowlarr_list_download_client_schemas for providers and fields). force_save bypasses validation.
prowlarr_delete_download_client(id) — Delete a download client by id.
prowlarr_download_client_action(name, body) — Run a named action on a download client (e.g. clear failed downloads).
prowlarr_get_download_client(id) — Get a single download client by id.
prowlarr_list_download_client_schemas() — List download client provider schemas. Read this before creating or updating a download client.
prowlarr_list_download_clients() — List all configured download clients.
prowlarr_test_all_download_clients() — Test every configured download client.
prowlarr_test_download_client(body, force_test=None) — Test a download client connection without saving it.
prowlarr_update_download_client(id, body, force_save=None) — Update a download client by id.
Inputs: operation (required), arguments. Returns: result
prowlarr_historyARead-only
prowlarr history operations on Prowlarr. Pass operation and an arguments dict matching that operation's parameters.
prowlarr_list_history(page=1, page_size=10, sort_key='', sort_direction='', event_type=None, successful=None, download_id='', indexer_ids=None) — Paged history of grabs and failures. event_type/indexer_ids are lists of ints (repeat the param for each). sort_direction is ascending|descending.
prowlarr_list_history_indexer(indexer_id=None, event_type='', limit=None) — History records for a single indexer, newest first, optionally limited.
prowlarr_list_history_since(date, event_type='') — History records since an ISO date. event_type is a HistoryEventType value (e.g. indexerQuery, indexerRss, indexerAuth, indexerInfo, indexerDownload).
Inputs: operation (required), arguments. Returns: result
prowlarr_indexer_proxiesA
prowlarr indexer proxies operations on Prowlarr. Pass operation and an arguments dict matching that operation's parameters.
prowlarr_create_indexer_proxy(body, force_save=None) — Create an indexer proxy. body is an IndexerProxyResource (fetch prowlarr_list_indexer_proxy_schemas for providers). force_save bypasses validation.
prowlarr_delete_indexer_proxy(id) — Delete an indexer proxy by id.
prowlarr_get_indexer_proxy(id) — Get a single indexer proxy by id.
prowlarr_indexer_proxy_action(name, body) — Run a named action on an indexer proxy (e.g. toggle its status).
prowlarr_list_indexer_proxies() — List all configured indexer proxies (HTTP/Socks5 for connecting to indexers).
prowlarr_list_indexer_proxy_schemas() — List indexer proxy provider schemas. Read this before creating or updating a proxy.
prowlarr_test_all_indexer_proxies() — Test every configured indexer proxy.
prowlarr_test_indexer_proxy(body, force_test=None) — Test an indexer proxy connection without saving it.
prowlarr_update_indexer_proxy(id, body, force_save=None) — Update an indexer proxy by id.
Inputs: operation (required), arguments. Returns: result
prowlarr_indexersA
prowlarr indexers operations on Prowlarr. Pass operation and an arguments dict matching that operation's parameters.
prowlarr_bulk_delete_indexers(body) — Bulk-delete indexers. body is an IndexerBulkResource with ids.
prowlarr_bulk_update_indexers(body) — Bulk-edit indexers. body is an IndexerBulkResource with ids plus optional tags/applyTags/enable/appProfileId to apply to all of them.
prowlarr_create_indexer(body, force_save=None) — Create an indexer. body is an IndexerResource (fetch prowlarr_list_indexer_schemas for the provider definition). force_save bypasses validation (e.g. for disabled indexers).
prowlarr_delete_indexer(id) — Delete an indexer by id.
prowlarr_get_indexer(id) — Get a single indexer by id.
prowlarr_get_indexer_stats(start_date='', end_date='', indexers='', protocols='', tags='') — Aggregated query/download statistics per indexer. start_date/end_date are ISO dates; indexers/protocols/tags are comma-separated filters (protocols: usenet|torrent).
prowlarr_indexer_action(name, body) — Run a named action on an indexer (e.g. reset indexer status).
prowlarr_list_indexer_categories() — List the default indexer categories (tv, movies, music, books, and subcategories) with their ids and parents.
prowlarr_list_indexer_schemas() — List indexer provider schemas (definitions of every supported indexer type and its fields). Read this before creating an indexer.
prowlarr_list_indexer_status() — List indexer status records (current failure/backoff state and most recent failure per indexer).
prowlarr_list_indexers() — List all configured indexers with their settings, status, and category mappings.
prowlarr_test_all_indexers() — Test every configured indexer.
prowlarr_test_indexer(body, force_test=None) — Test an indexer connection without saving it.
prowlarr_update_indexer(id, body, force_save=None) — Update an indexer by id.
Inputs: operation (required), arguments. Returns: result
prowlarr_notificationsA
prowlarr notifications operations on Prowlarr. Pass operation and an arguments dict matching that operation's parameters.
prowlarr_create_notification(body, force_save=None) — Create a notification. body is a NotificationResource (fetch prowlarr_list_notification_schemas for providers). force_save bypasses validation.
prowlarr_delete_notification(id) — Delete a notification by id.
prowlarr_get_notification(id) — Get a single notification by id.
prowlarr_list_notification_schemas() — List notification provider schemas. Read this before creating or updating a notification.
prowlarr_list_notifications() — List all configured notification connections (Discord, Telegram, etc.).
prowlarr_notification_action(name, body) — Run a named action on a notification (e.g. a custom provider action).
prowlarr_test_all_notifications() — Send a test message through every configured notification.
prowlarr_test_notification(body, force_test=None) — Send a test message through a notification connection without saving it.
prowlarr_update_notification(id, body, force_save=None) — Update a notification by id.
Inputs: operation (required), arguments. Returns: result
prowlarr_searchA
prowlarr search operations on Prowlarr. Pass operation and an arguments dict matching that operation's parameters.
prowlarr_bulk_push_releases(body) — Send multiple releases to the configured download clients at once. body is a list of ReleaseResource objects.
prowlarr_download_release(id, link='', file='') — Download a release (NZB/torrent) through an indexer. id is the indexer id; pass either the download link or the stored file name. Returns the file bytes base64-encoded as a string.
prowlarr_ping() — Liveness probe. Returns {"status": "OK"} when the server is reachable.
prowlarr_push_release(body) — Send a release to the configured download clients. body is a ReleaseResource (get one from a prowlarr_search_releases result).
prowlarr_search_newznab(id, t='', q='', cat='', imdbid='', tmdbid=None, tvdbid=None, rid=None, tvmazeid=None, traktid=None, doubanid=None, season=None, ep='', album='', artist='', label='', track='', year=None, genre='', author='', title='', publisher='', limit=None, offset=None, minage=None, maxage=None, minsize=None, maxsize=None, extended='', configured='', source='', host='', server='') — Query a single indexer in Newznab format and return the raw XML. id is the indexer id. t is the newznab request type (search|movie|tvsearch| music|book); q is the query term. Returns the XML response as a string.
prowlarr_search_releases(query='', type='', indexer_ids=None, categories=None, limit=None, offset=None) — Search every (or selected) indexers for releases and return matches. query is the search term; type is search|book|movie|audio|tv. indexer_ids and categories are lists of ints (repeat the param for each).
Inputs: operation (required), arguments. Returns: result
prowlarr_systemA
prowlarr system operations on Prowlarr. Pass operation and an arguments dict matching that operation's parameters.
prowlarr_cancel_command(id) — Cancel a queued or running task by id.
prowlarr_delete_backup(id) — Delete a backup file by id.
prowlarr_get_api_info() — Report the current API version, the API key hash (last 4 chars), and deprecated endpoints. Useful for confirming connectivity and version.
prowlarr_get_command(id) — Get a single task by id.
prowlarr_get_filesystem_type(path) — Report whether a filesystem path is a file or a directory.
prowlarr_get_localization() — Get the localization string table for the configured UI language.
prowlarr_get_log_file(filename) — Return the raw contents of an application log file.
prowlarr_get_task(id) — Get a single scheduled task by id.
prowlarr_get_update_log_file(filename) — Return the raw contents of an update log file.
prowlarr_list_backups() — List scheduled, manual, and update backups available on the server.
prowlarr_list_commands() — List all tasks currently queued or running.
prowlarr_list_filesystem(path='', include_files=None, allow_folders_without_trailing_slashes=None) — List a directory on the Prowlarr host. path is absolute; empty lists the root (drives/mounts). include_files adds files to the listing.
prowlarr_list_health() — List health checks: warnings/errors about indexers, applications, download clients, proxies, and system settings.
prowlarr_list_localization_options() — List the available UI languages and their cultures.
prowlarr_list_log_files() — List the application log files available for download.
prowlarr_list_logs(page=1, page_size=10, sort_key='', sort_direction='', level='') — Paged application log. level filters to debug|info|warn|error|fatal (default info+).
prowlarr_list_system_routes() — List the API routes the server exposes.
prowlarr_list_system_routes_duplicate() — List API routes with duplicate bindings (route conflict diagnostics).
prowlarr_list_tasks() — List all scheduled background tasks (indexer sync, RSS sync, health checks, backup) with their next run times.
prowlarr_list_update_log_files() — List the update log files available for download.
prowlarr_list_updates() — List recent releases/updates for Prowlarr (version, release date, changes).
prowlarr_restore_backup(id) — Restore a backup by id. Triggers a restore on the next restart.
prowlarr_restore_backup_upload(body) — Restore a user-uploaded backup file. body must be {"content": "", "filename": "backup.zip"}.
prowlarr_run_command(body) — Run a command. body is a CommandResource with a
name(e.g. ApplicationIndexerSync, IndexerRssSync, RefreshIndexerProxy, CheckForUpdate, Backup) plus optional command-specific fields.prowlarr_system_restart() — Restart the Prowlarr server. Destructive -- the server goes offline briefly.
prowlarr_system_shutdown() — Shut down the Prowlarr server. Destructive -- the server goes offline.
prowlarr_system_status() — Get system status: version, runtime (docker/os), start time, app data path, is-mono, migration version, and whether a branch update is pending.
Inputs: operation (required), arguments. Returns: result
prowlarr_tagsA
prowlarr tags operations on Prowlarr. Pass operation and an arguments dict matching that operation's parameters.
prowlarr_create_tag(body) — Create a tag. body is a TagResource with a
label(e.g. {"label": "hd"}).prowlarr_delete_tag(id) — Delete a tag by id. Fails if the tag is still in use.
prowlarr_get_tag(id) — Get a single tag by id.
prowlarr_get_tag_details(id) — Get tag details (with usage counts) for a single tag by id.
prowlarr_list_tag_details() — List tags with the count of indexers, applications, download clients, proxies, and notifications using each one.
prowlarr_list_tags() — List all tags, usable on indexers, applications, download clients, proxies, and notifications.
prowlarr_update_tag(id, body) — Update a tag by id.
Inputs: operation (required), arguments. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Many tools have narrowly specific purposes, but the presence of generic 'resource' tools (prowlarr_system, prowlarr_applications, etc.) that accept arbitrary operations creates overlap with the dedicated functions for each operation. Additionally, the sheer number of tools (over 100) makes it difficult to identify the correct one without careful reading.
Most tools follow a consistent verb_noun pattern (e.g., list_indexers, create_indexer, update_indexer), but the generic resource tools (prowlarr_system, prowlarr_applications, etc.) break this by being noun-only and requiring an operation parameter. Some minor deviations like 'restore_backup_upload' and 'download_release' are acceptable but add slight irregularity.
With approximately 115 tools, this server is massively oversized for its purpose. The tool count far exceeds the typical 3-15 range, making the surface overwhelming and difficult to navigate. Even though the stated count is 10, the actual list contains over a hundred tools, which is an extreme mismatch.
The tool set provides thorough coverage of the Prowlarr domain: system administration, applications, indexers, configuration, download clients, proxies, notifications, tags, search, and history. Each resource type has full CRUD operations plus test, bulk, and schema discovery tools, leaving no obvious gaps for core workflows.
Maintenance
Related MCP Connectors
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
MCP server for the Vulners.com API
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP registry & directory: search, find & install 31k+ MCP servers & tools. Catalog and marketplace.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server to manage your *ARR media stack (Radarr, Sonarr, Lidarr, Readarr, Prowlarr) for searching, adding, and managing movies, TV shows, music, books, and indexers.1ISC

profilarr-mcpofficial
AlicenseAqualityCmaintenanceMCP server exposing Profilarr's v1 REST API as tools, enabling an LLM to inspect and manage linked databases, connected Radarr/Sonarr instances, backups, jobs, announcements, and system status.20MIT- AlicenseBqualityCmaintenanceMCP server that exposes qui's JSON REST API as tools for monitoring and managing qBittorrent instances, torrents, automations, cross-seeding, RSS, backups, and related services.12MIT
- AlicenseCqualityCmaintenanceMCP server exposing Radarr's v3 REST API as tools, enabling LLMs to read and manage movies, downloads, history, indexers, and more.100MIT