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 "Install 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-mcpsearch 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: mcp-arrstack
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.
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It reveals important behaviors like force_save bypasses validation, force_test skips cached-test check, bulk update applies tags to all, and app profiles were added in Prowlarr 1.19+. Destructive operations are named as 'delete' but reversibility or permissions are not explicitly stated, which prevents a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a well-structured bullet list with each operation on one line, front-loaded with an overall usage instruction. Every sentence provides value—no filler or repetition. The length is appropriate for the number of operations covered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the dispatcher design and the presence of an output schema, the description covers all necessary aspects: what each operation does, what arguments it takes, and important nuances (schema fetches, force flags, version availability). It is complete for an AI agent to select and invoke the correct operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only shows operation (enum) and a generic arguments object (0% coverage). The description compensates fully by listing each operation's exact parameters and expected types (e.g., 'body is an ApplicationResource', 'id' for delete). It even directs users to fetch schemas for provider fields, which is essential for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this is for Prowlarr applications operations and enumerates 17 specific operations with verbs (create, delete, list, test, update, etc.). This distinguishes it from sibling tools like prowlarr_indexers or prowlarr_download_clients by resource domain and operation scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear general usage instruction ('Pass operation and an arguments dict') and explains each sub-operation with its purpose (e.g., 'Read this before creating/updating an application'). It doesn't explicitly mention when not to use this tool vs alternatives, but the sibling tools are clearly different resources, so the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full transparency responsibility. It does reveal mutation vs. read operations via verbs (create/update/delete vs. get/list) and describes some parameter shapes. However, it omits side effects, permission requirements, error behavior, or irreversibility details—important for operations that alter Prowlarr configuration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a well-organized bullet list with a brief introductory instruction. Each line is informative and necessary, covering all operations without redundancy. It is front-loaded with the invocation pattern and then enumerates operations concisely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (13 operations), an output schema exists, but the description still needs to clarify how to pass arguments for each operation. It does so for custom filters, but leaves some operations underspecified (e.g., update_download_client_config body). This creates ambiguity for correct invocation of some operations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It gives detailed parameter info for custom filter operations (e.g., 'body is a CustomFilterResource with a name, label, type...'), but for update operations like update_development_config and update_download_client_config, it only names the body parameter without describing its fields, leaving gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's domain as 'prowlarr config operations' and enumerates 13 specific sub-operations with clear verbs (get, list, create, update, delete). This distinguishes it from sibling tools like prowlarr_indexers or prowlarr_system by scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit invocation guidance: 'Pass operation and an arguments dict matching that operation's parameters.' The operation list effectively tells an agent which operation to use for a given config task. However, it doesn't explicitly state when to prefer this tool over sibling tools, though the domain naming makes this clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses each operation's action (delete, create, list, test) and adds behavioral details such as 'force_save bypasses validation' and 'Read this before creating or updating a download client'. It stops short of covering permissions, error handling, or reversibility, but the per-operation behavior is well conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description uses a scannable list format with each operation on its own line, providing the signature and a one-line effect. Every entry adds value, and the opening lines establish the overall usage pattern without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All 11 operations are documented with their parameters and prerequisites, and an output schema exists to cover return formats. The description does not delve into argument object internals, but the references to DownloadClientResource and schemas cover the essentials, making it sufficiently complete for a dispatcher tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the input schema only has generic operation/arguments fields. The description compensates by listing each operation's signature with parameter names and types (body, id, force_save), and refers to prowlarr_list_download_client_schemas for body structure. This gives the agent meaningful guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states this tool handles 'download clients operations on Prowlarr' and then lists every operation with a specific verb and resource (e.g., 'Bulk-delete download clients', 'Create a download client'). This fully differentiates it from sibling tools focused on indexers, applications, system, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening line explains how to invoke the tool (pass an operation and arguments dict), and there are helpful hints like reading schemas before creating/updating and force_save bypassing validation. However, it does not explicitly state when to prefer this tool over alternatives or when not to use it, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds useful behavioral context by describing the nature of the operations (history queries) and specific parameter quirks (e.g., lists of ints, event_type enums). It does not contradict the read-only hint and avoids any misleading side-effect language.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured as a list of operations, with each line containing complete, non-redundant parameter information. Every sentence earns its place; there is no fluff, and the most critical instruction (pass operation and arguments) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this tool dispatches multiple operations, the description covers all three operations with sufficient parameter detail for correct invocation. The presence of an output schema means return values need not be described. The description is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is generic (operation + free-form arguments) with 0% schema description coverage. The description compensates fully by listing each operation's exact parameter names, types, defaults, and example enum values (e.g., event_type='indexerQuery'). This is essential for correctly constructing the arguments dict and goes far beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly names 'history operations on Prowlarr' and lists three concrete operations (prowlarr_list_history, prowlarr_list_history_indexer, prowlarr_list_history_since), clearly distinguishing this tool from sibling admin tools like prowlarr_search or prowlarr_indexers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage guidance by requiring an `operation` and an `arguments` dict, and details each operation's parameters. It doesn't explicitly contrast with sibling tools, but the domain is so distinct that the when-to-use is implied. Specific conditions for choosing among the three history operations are conveyed through their parameter lists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses some behavioral traits: 'force_save bypasses validation', test operations run 'without saving', and actions can 'toggle status'. However, it omits side effects like whether delete is irreversible, any permission requirements, or rate limits, leaving partial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a well-structured bullet list with each operation on its own line, making it easy to scan. It is longer than a single-sentence description, but the length is justified by the need to document nine distinct operations and their parameters. No superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 operations) and minimal input schema, the description does a solid job covering all operations, their parameters, and ordering hints like fetching schemas first. It does not provide example argument dictionaries, but the operation signatures are sufficient for a competent agent. The presence of an output schema reduces the need to describe return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only defines 'operation' and a free-form 'arguments' object, so parameter semantics are entirely reliant on the description. The description provides detailed signatures for each operation, including required parameters (e.g., 'body is an IndexerProxyResource'), optional parameters (force_save=None), and cross-references to schema-fetching operations, adding meaningful guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'prowlarr indexer proxies operations on Prowlarr' and then enumerates all supported operations with specific verbs (create, delete, get, list, test, update). This makes the tool's purpose clear and distinguishes it from sibling indexer tools, though the opening phrase is generic rather than a concise verb+resource statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states this tool is for indexer proxy operations and even provides operational guidance, such as 'Read this before creating or updating a proxy' and noting that test operations do not save. It does not explicitly contrast with sibling tools, but the context is clear enough that an agent can infer when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses each operation's behavior, side effects (delete, test, update), and special semantics (force_save bypasses validation). It could add more detail on error handling or auth requirements, but it covers the main behavioral aspects well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but perfectly structured as a bulleted list of operations with syntax signatures and per-operation notes. Every line adds unique value; there is no fluff or redundancy. The front-loading explains the required dispatcher pattern immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 14 operations, minimal schema (only operation + arguments), and no annotations, this description is exceptionally complete. It names every operation, its expected arguments, and provides prerequisite guidance ('Read this before creating an indexer'). An output schema exists, so return-value details are not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 0%, so the description fully compensates. It defines the enum values via operation names and explains the contents of the 'arguments' dict for each operation (e.g., 'start_date/end_date are ISO dates; indexers/protocols/tags are comma-separated filters'). This converts an opaque 'object' into actionable parameter knowledge.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool handles 'prowlarr indexers operations' and enumerates all 14 available sub-operations with specific verbs (bulk-delete, create, delete, list, test, update). This distinguishes it from sibling tools covering other Prowlarr domains (search, system, config, etc.).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the dispatcher pattern ('Pass operation and an arguments dict') and gives practical usage hints per operation (e.g., 'Read this before creating an indexer' for schemas, force_save bypasses validation). It does not explicitly mention when to avoid this tool in favor of a sibling, but the scope is clear from the operation list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does well by noting that force_save 'bypasses validation', that test_notification sends a test 'without saving it', and that test_all_notifications sends through 'every configured notification'. It does not mention side effects like permanence of delete or auth requirements, but given the range of operations, the provided details add meaningful behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long due to the number of operations, but every line is informative and there is no fluff. The structure is consistent with a clear formatting pattern, and the initial summary makes the tool's purpose immediately clear. It could be slightly more compact, but the density of useful information justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the multi-operation dispatcher nature, the description covers the main function of each operation and key parameter variations. It references an output schema and points to related operations (e.g., schemas for creation). It doesn't detail error handling or return structures, but the presence of an output schema mitigates that gap. Overall, it is adequately complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has generic 'arguments' with 0% coverage, but the description compensates significantly by listing each operation's signature and parameter purposes, e.g., 'body is a NotificationResource (fetch prowlarr_list_notification_schemas for providers)' and 'force_save bypasses validation'. While it doesn't define the exact structure of the body dictionary, it directs to a schema, which is sufficient for an agent to proceed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool handles 'prowlarr notifications operations' and enumerates nine specific operations with precise verbs (create, delete, get, list, test, update). It distinguishes from sibling tools by focusing exclusively on notifications, and the operation list leaves no ambiguity about the tool's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for using the tool and even intra-tool guidance, such as 'Read this before creating or updating a notification' for prowlarr_list_notification_schemas. It doesn't explicitly contrast with sibling tools, but the name and scope make the appropriate use case obvious. It could explicitly state when not to use this tool, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses important behavioral details: return types (base64 string, XML string, status JSON), side effects (sending to download clients), and prerequisites (e.g., 'get one from a prowlarr_search_releases result'). It does not cover auth or rate limits, but provides solid operational transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but highly structured with a bullet list, each line containing the operation signature and a concise explanation. There is no filler; every sentence adds value. The opening instructions on how to pass `operation` and `arguments` are front-loaded and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all six operations listed in the enum, their parameters, and their return values. It also clarifies how to construct the arguments dict. Given the complexity and lack of schema detail, this is fully complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates fully by giving a complete signature for every operation and explaining key parameters (e.g., 'id is the indexer id', 'query is the search term', 'repeat the param for each'). This is far beyond baseline and makes invocation reliable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool handles Prowlarr search operations and enumerates all six sub-operations with specific verbs (e.g., 'Search every indexer', 'Download a release', 'Send a release'). It distinguishes from sibling tools by focusing on search and related release operations, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sub-operation descriptions provide clear context for when to use each (e.g., 'Query a single indexer' vs 'Search every indexer'), and the tool name implies its role relative to sibling categories. However, it does not explicitly discuss alternatives or exclusions, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly marks `system_restart` and `system_shutdown` as 'Destructive -- the server goes offline' and notes that `restore_backup` triggers on next restart. It also explains side effects like `run_command` requiring a `CommandResource` name. Since annotations are absent, the description carries the burden and does so well, though not every operation gets deep behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact bullet list with each operation on one line, front-loaded with the invocation pattern. It's long of necessity (27 sub-operations) but avoids filler; only minor redundancy is the repeated 'prowlarr_' prefix in every bullet.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and a generic schema, the description covers all 27 operations with signatures, defaults, and edge cases (e.g., empty path lists root; level filter values). It also marks destructive operations and gives body examples. For a high-complexity dispatcher, this is a thorough and self-contained reference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only defines a generic `arguments` dict, but the description lists exact signatures for each operation, e.g., `prowlarr_list_filesystem(path='', include_files=None, ...)` with path semantics, and `prowlarr_list_logs` with `level` filter values. For `restore_backup_upload`, it gives the exact body structure. This fully compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'prowlarr system operations on Prowlarr' and then enumerates 27 specific system operations (backups, logs, tasks, filesystem, status, routes), each with a verb-object form. This clearly distinguishes it from sibling tools like prowlarr_indexers or prowlarr_applications, which focus on specific resource domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The list of operations covers system administration (backups, logs, tasks, server restart/shutdown), and several entries include guidance such as get_api_info 'useful for confirming connectivity and version' and list_filesystem path semantics. It doesn't explicitly exclude other tools, but the operation scope makes the intended domain clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that delete fails if the tag is still in use, that get_tag_details returns usage counts, and that list_tag_details counts usages across specific entity types. These are meaningful behavioral details beyond the raw operation names, though it does not cover auth/rate limits or full side-effect details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a tight bulleted list with a one-line introductory instruction. Every line is necessary and directly maps an operation to its purpose. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's broad dispatcher nature and the existence of an output schema, the description covers every operation variant and includes practical caveats (delete failure when in use, usage-count details). It is sufficiently complete for an agent to select and invoke the correct tag operation, though it could additionally describe return shapes or update semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only provides a generic 'arguments' object with 0% coverage, so the description must add semantic meaning. It does so by listing each operation with its parameter signature, e.g., 'prowlarr_create_tag(body) — Create a tag. body is a TagResource with a `label`', including a concrete example. It does not exhaustively document all TagResource fields, but it compensates well for the generic schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'prowlarr tags operations on Prowlarr' and enumerates seven specific operations (create, delete, get, get details, list details, list, update). It clearly identifies the resource (tags) and the verbs, and the sibling tools show these are distinct from other Prowlarr resource categories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to pass an 'operation' and an 'arguments' dict matching that operation's parameters, which is clear usage guidance for this dispatcher-style tool. It does not explicitly state when not to use this tool, but the sibling list makes it evident that tags are a distinct resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
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
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
A basic MCP server to operate on the Postman API.
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
Related MCP Servers
- FlicenseAqualityAmaintenanceMCP server to manage your *ARR media stack (Radarr, Sonarr, Lidarr, Readarr, Prowlarr) for searching, adding, and managing movies, TV shows, music, books, and indexers.1
- AlicenseNot gradedqualityCmaintenanceMCP server that enables local LLMs to manage a home media stack including Radarr, Sonarr, Prowlarr, and others.MIT

profilarr-mcpofficial
AlicenseAqualityAmaintenanceMCP 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- AlicenseCqualityAmaintenanceMCP 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
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/arr-mcps/prowlarr-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server