Skip to main content
Glama

sonarr-mcp

Part of the arr-mcps collection. MCP server exposing Sonarr's v3 REST API (OpenAPI 3.0.0) as tools, so an LLM can read and manage a Sonarr instance: series, episodes, episode files, the download queue, history, indexers, import lists, custom formats, tags, commands, system status, and more. Full surface — reads and writes, with destructive tools flagged.

Built with FastMCP.

Getting an API key

Generate one in Sonarr Settings > General > Security. Auth is the X-Api-Key header.

Related MCP server: Sonarr & Radarr MCP Server

Install

Download a wheel from the latest release and install it as a uv tool (no repo checkout needed):

uv tool install sonarr_mcp-*.whl

This puts a sonarr-mcp command on your PATH. Register it with Claude Code:

claude mcp add sonarr \
  --env SONARR_URL=http://your-sonarr-host:8989 \
  --env SONARR_API_KEY=<key> \
  -- sonarr-mcp

From source

uv sync
cp .env.example .env   # fill in SONARR_URL and SONARR_API_KEY
claude mcp add sonarr \
  --env SONARR_URL=http://your-sonarr-host:8989 \
  --env SONARR_API_KEY=<key> \
  -- uv run --directory /path/to/sonarr-mcp sonarr-mcp

Config

Env var

Required

Default

SONARR_URL

yes

-

SONARR_API_KEY

yes*

none (no X-Api-Key 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

15 resource-scoped tools, each covering multiple Sonarr v3 endpoints (223 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 REST surface available while costing a fraction of the context budget of registering all 223 endpoints as separate tools.

Tool

Operations

Kind

sonarr_profiles_formats

49

reads + writes

sonarr_config

26

reads + writes

sonarr_media_library

26

reads + writes

sonarr_system_commands

20

reads + writes

sonarr_import_lists

18

reads + writes

sonarr_notifications_metadata

18

reads + writes

sonarr_download_clients

16

reads + writes

sonarr_indexers

11

reads + writes

sonarr_storage

8

reads + writes

sonarr_history_blocklist

7

reads + writes

sonarr_queue

7

reads + writes

sonarr_tags

7

reads + writes

sonarr_release_search

4

reads + writes

sonarr_wanted

4

read-only

sonarr_calendar

2

read-only

Example: sonarr_queue(operation="sonarr_delete_queue", arguments={"id": 42}). Endpoint-level naming (sonarr_<verb>_<resource>) is preserved as the operation value, so the full endpoint list is still discoverable from each group tool's description at runtime.

Development

make help  # list all commands

Command

Does

make sync

uv sync

make test

Offline tests - one per endpoint, mocked HTTP

make test-integration

Tests against the live instance (needs SONARR_URL/SONARR_API_KEY)

make build

Build wheel + sdist into dist/

make bump-patch / bump-minor / bump-major

Bump the version in pyproject.toml + uv.lock

make clean

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 offline suite covers every endpoint (mocked HTTP). The integration suite exercises GET endpoints against your live instance; POST/PUT/DELETE only run when SONARR_WRITE_TESTS=1, as a safe create→update→delete cycle against a scratch tag that is cleaned up afterwards.

Available Tools

15 tools
sonarr_calendarA
Read-only

sonarr calendar operations on Sonarr. Pass operation and an arguments dict matching that operation's parameters.

  • sonarr_get_calendar(id) — Fetch a single upcoming episode calendar by id.

  • sonarr_list_calendar(start='', end='', unmonitored=False, include_series=False, include_episode_file=False, include_episode_images=False, tags='') — List upcoming episode calendar. Query params: start, end, tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

The readOnlyHint annotation already indicates this is a safe read operation. The description adds minimal behavioral context beyond listing what each operation does ('Fetch a single upcoming episode calendar' and 'List upcoming episode calendar'), which is consistent with the annotation. No additional side effects or edge cases are disclosed, but with the annotation present, the bar is lower.

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 extremely concise, with a clear introductory line followed by bullet-style operation signatures. Every sentence earns its place, and the structure makes the two operations easy to scan. No unnecessary filler or repetition.

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?

Given the dispatcher pattern and the presence of an output schema, the description provides sufficient coverage by enumerating both operations and their parameters. It does not explain return formats, but the output schema likely covers that. It could add date format hints or examples, but overall it is complete for a read-only tool with clear operation signatures.

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?

The schema has no description coverage for parameters (coverage 0%), so the description carries the burden. It lists all parameters for each operation, including defaults for sonarr_list_calendar (start, end, unmonitored, etc.), which adds significant meaning beyond the generic 'arguments' object in the schema. However, it does not explain parameter formats or detailed semantics, so it stops short of a 5.

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 identifies the tool as handling Sonarr calendar operations and enumerates two specific operations: sonarr_get_calendar and sonarr_list_calendar. While it distinguishes between fetching a single calendar entry and listing calendar items, it does not explicitly differentiate this tool from sibling tools, but the domain is clear.

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 by providing operation names and their parameters, but it does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions or context for choosing between the two operations. It is clear enough for basic selection but lacks explicit guidance.

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

sonarr_configC

sonarr config operations on Sonarr. Pass operation and an arguments dict matching that operation's parameters.

  • sonarr_get_config_downloadclient() — List download client config.

  • sonarr_get_config_downloadclient_by_id(id) — Fetch a single download client config by id.

  • sonarr_get_config_host() — List host config.

  • sonarr_get_config_host_by_id(id) — Fetch a single host config by id.

  • sonarr_get_config_importlist() — List import list config.

  • sonarr_get_config_importlist_by_id(id) — Fetch a single import list config by id.

  • sonarr_get_config_indexer() — List indexer config.

  • sonarr_get_config_indexer_by_id(id) — Fetch a single indexer config by id.

  • sonarr_get_config_mediamanagement() — List media management config.

  • sonarr_get_config_mediamanagement_by_id(id) — Fetch a single media management config by id.

  • sonarr_get_config_naming() — List naming.

  • sonarr_get_config_naming_by_id(id) — Fetch a single naming by id.

  • sonarr_get_config_ui() — List UI config.

  • sonarr_get_config_ui_by_id(id) — Fetch a single UI config by id.

  • sonarr_get_localization(id) — Fetch a single localization strings by id.

  • sonarr_get_localization_language() — List localization languages.

  • sonarr_list_config_naming_examples(rename_episodes=None, replace_illegal_characters=None, colon_replacement_format=None, custom_colon_replacement_format='', multi_episode_style=None, standard_episode_format='', daily_episode_format='', anime_episode_format='', series_folder_format='', season_folder_format='', specials_folder_format='', id=None, resource_name='') — List naming examples. Query params: custom_colon_replacement_format, standard_episode_format, daily_episode_format, anime_episode_format, series_folder_format, season_folder_format, specials_folder_format, resource_name.

  • sonarr_list_localization() — List localization strings.

  • sonarr_list_update() — List available updates.

  • sonarr_update_config_downloadclient(id, body={}) — Update download client config. WRITE: this modifies your Sonarr instance.

  • sonarr_update_config_host(id, body={}) — Update host config. WRITE: this modifies your Sonarr instance.

  • sonarr_update_config_importlist(id, body={}) — Update import list config. WRITE: this modifies your Sonarr instance.

  • sonarr_update_config_indexer(id, body={}) — Update indexer config. WRITE: this modifies your Sonarr instance.

  • sonarr_update_config_mediamanagement(id, body={}) — Update media management config. WRITE: this modifies your Sonarr instance.

  • sonarr_update_config_naming(id, body={}) — Update naming. WRITE: this modifies your Sonarr instance.

  • sonarr_update_config_ui(id, body={}) — Update UI config. WRITE: this modifies your Sonarr instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations provided, the description must carry the full burden. It does disclose that update operations are writes ('WRITE: this modifies your Sonarr instance'), which is useful. However, it does not mention read-only semantics, return value behavior, potential side effects, authorization needs, or error conditions for other operations, leaving significant gaps.

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 well-structured bullet list with a clear opening instruction. It avoids unnecessary prose and each line is a discrete operation with its parameters. The format is efficient for a dispatcher tool, though it is long due to the number of operations.

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?

The tool has an output schema, so return values need not be described in detail. The description explains the invocation pattern (operation plus arguments) and lists all operations, which is adequate for a complex dispatcher. However, it lacks context about error handling, whether operations are grouped in any way, and how this relates to other Sonarr tools, making it only partially complete.

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

Parameters3/5

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

The schema has no descriptions for parameters, and coverage is 0%, so the description is the only source. It lists operation-specific parameters (e.g., id, body, rename_episodes) and sometimes defaults, which adds some meaning beyond the bare schema. However, it does not explain the semantic purpose of each parameter or the structure of the 'arguments' dict beyond matching operation parameters, so it only partially compensates.

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

Purpose3/5

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

The description states it is for 'sonarr config operations' and enumerates specific operations, making the general purpose clear. However, the tool name and description are somewhat tautological ('sonarr config operations on Sonarr'), and it does not clearly differentiate from sibling tools that may also handle similar config tasks like download clients or indexers.

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 explicit guidance is provided on when to use this tool versus alternatives, and no exclusions or prerequisites are mentioned. The operation list implies usage based on the operation names, but there is no explicit statement about comparing with sibling tools or when not to use this dispatcher.

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

sonarr_download_clientsA

sonarr download clients operations on Sonarr. Pass operation and an arguments dict matching that operation's parameters.

  • sonarr_create_downloadclient(force_save=False, body={}) — Create download clients. WRITE: this modifies your Sonarr instance.

  • sonarr_create_downloadclient_action(name, body={}) — Create downloadclient action. WRITE: this modifies your Sonarr instance.

  • sonarr_create_downloadclient_test(force_test=False, body={}) — Create downloadclient test. WRITE: this modifies your Sonarr instance.

  • sonarr_create_downloadclient_testall() — Create downloadclient testall. WRITE: this modifies your Sonarr instance.

  • sonarr_create_remotepathmapping(body={}) — Create remote path mappings. WRITE: this modifies your Sonarr instance.

  • sonarr_delete_downloadclient(id) — Delete download clients. DESTRUCTIVE: this deletes data.

  • sonarr_delete_downloadclient_bulk(body={}) — Delete downloadclient bulk. DESTRUCTIVE: this deletes data.

  • sonarr_delete_remotepathmapping(id) — Delete remote path mappings. DESTRUCTIVE: this deletes data.

  • sonarr_get_downloadclient(id) — Fetch a single download clients by id.

  • sonarr_get_remotepathmapping(id) — Fetch a single remote path mappings by id.

  • sonarr_list_downloadclient() — List download clients.

  • sonarr_list_downloadclient_schema() — Return the download clients schema (available fields/options).

  • sonarr_list_remotepathmapping() — List remote path mappings.

  • sonarr_update_downloadclient(id, force_save=False, body={}) — Update download clients. WRITE: this modifies your Sonarr instance.

  • sonarr_update_downloadclient_bulk(body={}) — Update downloadclient bulk. WRITE: this modifies your Sonarr instance.

  • sonarr_update_remotepathmapping(id, body={}) — Update remote path mappings. WRITE: this modifies your Sonarr instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of disclosing side effects. It does so explicitly, labeling all create/update operations as 'WRITE: this modifies your Sonarr instance' and delete operations as 'DESTRUCTIVE: this deletes data.' This effectively communicates the core behavioral traits, though it omits details like permission requirements or failure modes.

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 long bulleted list, but each entry is a compact function signature with a purpose and side-effect label, making it scannable. The intro is minimal. The repetitive side-effect phrasing is slightly wasteful but aids quick reading. Overall, it conveys a large amount of information efficiently.

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?

The description provides a comprehensive list of operations and their side effects, and an output schema exists to cover return values. However, the lack of parameter semantics is a major completeness gap for a complex dispatcher, and it does not mention authentication or operation-specific prerequisites. It is adequate for selecting an operation but not for full safe invocation.

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 compensate by explaining parameters. It lists parameter names and defaults (e.g., force_save=False, body={}, id), but does not explain their meaning or how to structure the `arguments` dict. For a tool that requires operation-specific arguments, this is a significant gap that leaves callers guessing.

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 'sonarr download clients operations on Sonarr' and enumerates specific operations with function signatures, making the tool's purpose evident. However, it also includes remote path mapping operations under a 'download_clients' name, slightly muddying the scope and preventing a perfect score.

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

Usage Guidelines4/5

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

The description gives explicit usage instruction: 'Pass `operation` and an `arguments` dict matching that operation's parameters.' It also lists all operations with their parameters, providing a clear how-to. It does not explicitly differentiate from sibling tools, but the operation list itself makes the tool's coverage clear.

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

sonarr_history_blocklistA

sonarr history blocklist operations on Sonarr. Pass operation and an arguments dict matching that operation's parameters.

  • sonarr_bulk_delete_blocklist(body={}) — Delete blocklist bulk. DESTRUCTIVE: this deletes data.

  • sonarr_delete_blocklist(id) — Delete blocklisted releases. DESTRUCTIVE: this deletes data.

  • sonarr_list_blocklist(page=1, page_size=10, sort_key='', sort_direction='', series_ids=None, protocols=None) — List blocklisted releases. Query params: sort_key, sort_direction.

  • sonarr_list_history(page=1, page_size=10, sort_key='', sort_direction='', include_series=None, include_episode=None, event_type=None, episode_id=None, download_id='', series_ids=None, languages=None, quality=None) — List download/import history. Query params: sort_key, sort_direction, download_id.

  • sonarr_list_history_series(series_id=None, season_number=None, event_type='', include_series=False, include_episode=False) — List series history. Query params: event_type.

  • sonarr_list_history_since(date='', event_type='', include_series=False, include_episode=False) — List history since a date. Query params: date, event_type.

  • sonarr_mark_history_item_failed(id) — Mark a history item as failed (blocklists the release by default). WRITE: this modifies your Sonarr instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well by flagging destructive operations with 'DESTRUCTIVE: this deletes data.' and write operations with 'WRITE: this modifies your Sonarr instance.' It also adds nuance like 'blocklists the release by default' for the mark-failed operation. However, it could disclose more details (e.g., irreversibility, permissions), so it is not a perfect 5.

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 efficiently structured with a brief general instruction followed by a bullet list of operations. Each bullet is a single concise line containing the operation name, parameters, and safety label. No word is wasted, and the format makes scanning and selecting operations easy.

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?

Given the complexity of 7 sub-operations and no annotations, the description is quite thorough: it covers all operations, their signatures, and flags destructive/write behavior. An output schema exists, so return-value documentation is not required. However, it doesn't mention potential exceptions, authentication requirements, or how the arguments dict should be structured beyond listing parameters, leaving minor gaps.

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?

The schema only provides operation and arguments as a free-form object, but the description compensates by listing each operation's parameter signature with defaults (e.g., `page=1, page_size=10`). This adds substantial meaning beyond the schema. It could go further by explaining each parameter's semantics, but the coverage is strong for a dispatcher-style 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 explicitly states it handles 'sonarr history blocklist operations' and enumerates seven specific operations with clear verbs (delete, list, mark). This distinguishes it from sibling tools focused on other Sonarr aspects like profiles, config, or media library. The resource and scope are unambiguous.

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?

There is no explicit when-to-use guidance or comparison with sibling tools. Usage is implied by the tool name and the listed operations, but the description does not state when to choose this over other Sonarr tools or any exclusions. The per-operation notes give some context, but global usage guidance is absent.

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

sonarr_import_listsA

sonarr import lists operations on Sonarr. Pass operation and an arguments dict matching that operation's parameters.

  • sonarr_create_importlist(force_save=False, body={}) — Create import lists. WRITE: this modifies your Sonarr instance.

  • sonarr_create_importlist_action(name, body={}) — Create importlist action. WRITE: this modifies your Sonarr instance.

  • sonarr_create_importlist_test(force_test=False, body={}) — Create importlist test. WRITE: this modifies your Sonarr instance.

  • sonarr_create_importlist_testall() — Create importlist testall. WRITE: this modifies your Sonarr instance.

  • sonarr_create_importlistexclusion(body={}) — Create import list exclusions. WRITE: this modifies your Sonarr instance.

  • sonarr_delete_importlist(id) — Delete import lists. DESTRUCTIVE: this deletes data.

  • sonarr_delete_importlist_bulk(body={}) — Delete importlist bulk. DESTRUCTIVE: this deletes data.

  • sonarr_delete_importlistexclusion(id) — Delete import list exclusions. DESTRUCTIVE: this deletes data.

  • sonarr_delete_importlistexclusion_bulk(body={}) — Delete importlistexclusion bulk. DESTRUCTIVE: this deletes data.

  • sonarr_get_importlist(id) — Fetch a single import lists by id.

  • sonarr_get_importlistexclusion(id) — Fetch a single import list exclusions by id.

  • sonarr_list_importlist() — List import lists.

  • sonarr_list_importlist_schema() — Return the import lists schema (available fields/options).

  • sonarr_list_importlistexclusion() — List import list exclusions.

  • sonarr_list_importlistexclusion_paged(page=1, page_size=10, sort_key='', sort_direction='') — List importlistexclusion paged. Query params: sort_key, sort_direction.

  • sonarr_update_importlist(id, force_save=False, body={}) — Update import lists. WRITE: this modifies your Sonarr instance.

  • sonarr_update_importlist_bulk(body={}) — Update importlist bulk. WRITE: this modifies your Sonarr instance.

  • sonarr_update_importlistexclusion(id, body={}) — Update import list exclusions. WRITE: this modifies your Sonarr instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

The description manually marks write operations with 'WRITE: this modifies your Sonarr instance' and destructive operations with 'DESTRUCTIVE: this deletes data.' This is valuable behavioral disclosure beyond the schema. However, it does not cover other behavioral aspects like authentication, rate limits, or side effects, and no annotations are provided to offset this.

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 well-structured bullet list where each line is concise and focused on a single operation. No empty phrases; every line provides operation-specific information. While long, the length is justified by the 18 operations it covers.

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?

Given the tool's complexity (18 distinct operations), the description covers all operations, notes query parameters for the paged operation, and the presence of an output schema helps clarify return values. It is sufficiently complete for a dispatcher-style tool, though it could add more context on parameter semantics and operation selection.

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

Parameters3/5

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

The input schema is generic (only `operation` and `arguments`), with 0% schema description coverage. The description compensates by listing per-operation parameter names and defaults (e.g., `force_save=False`, `page=1`, `sort_key=''`), but does not explain the types or meanings of these parameters. This adds moderate value but is not exhaustive.

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 enumerates each operation with a specific verb+resource (e.g., 'Create import lists', 'Delete import list exclusions', 'Fetch a single import lists by id'), making the purpose of each sub-operation clear. The tool's overall role as a dispatcher for Sonarr import list operations is evident from the list.

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?

There is no guidance on when to use this tool versus its siblings, nor any explanation of how to select between the numerous operations beyond their names. The description does not provide context like 'use this for managing import lists' or alternative tool recommendations.

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

sonarr_indexersA

sonarr indexers operations on Sonarr. Pass operation and an arguments dict matching that operation's parameters.

  • sonarr_create_indexer(force_save=False, body={}) — Create indexers. WRITE: this modifies your Sonarr instance.

  • sonarr_create_indexer_action(name, body={}) — Create indexer action. WRITE: this modifies your Sonarr instance.

  • sonarr_create_indexer_test(force_test=False, body={}) — Create indexer test. WRITE: this modifies your Sonarr instance.

  • sonarr_create_indexer_testall() — Create indexer testall. WRITE: this modifies your Sonarr instance.

  • sonarr_delete_indexer(id) — Delete indexers. DESTRUCTIVE: this deletes data.

  • sonarr_delete_indexer_bulk(body={}) — Delete indexer bulk. DESTRUCTIVE: this deletes data.

  • sonarr_get_indexer(id) — Fetch a single indexers by id.

  • sonarr_list_indexer() — List indexers.

  • sonarr_list_indexer_schema() — Return the indexers schema (available fields/options).

  • sonarr_update_indexer(id, force_save=False, body={}) — Update indexers. WRITE: this modifies your Sonarr instance.

  • sonarr_update_indexer_bulk(body={}) — Update indexer bulk. WRITE: this modifies your Sonarr instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly labels write operations as 'WRITE: this modifies your Sonarr instance' and deletes as 'DESTRUCTIVE: this deletes data', which is important context. It does not cover all possible side effects or errors, but it addresses the most critical mutating behaviors.

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 appropriately structured as a bullet list of operations, each concisely described with its parameters and side effects. While it is long due to 11 operations, every line adds necessary information and the list format makes it scannable.

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 tool is complex with 11 sub-operations, and the description covers all of them, their parameters, and side effects. It also references an output schema, so return value details are not needed. Minor gaps include lack of details on argument dict structure and error handling, but the overall coverage is strong.

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

Parameters3/5

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

The schema has only operation and arguments with 0% description coverage, so the description must compensate. It lists signatures for each operation (e.g., sonarr_delete_indexer(id)) and parameter names, which helps, but it does not explain what 'body' should contain or the structure of the arguments dict beyond suggesting it matches operation parameters. This is partial compensation.

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 states it performs 'sonarr indexers operations on Sonarr' and enumerates 11 specific operations with clear verbs (create, delete, list, update, etc.), which identifies the resource and action. However, it doesn't explicitly distinguish this tool from sibling Sonarr tools, though the focus on indexers makes it apparent.

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 by listing operations and instructing to pass an operation and arguments, but it does not provide explicit when-to-use guidance or contrast with alternative tools. There are no exclusions or specific scenarios, leaving usage to be inferred.

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

sonarr_media_libraryA

sonarr media library operations on Sonarr. Pass operation and an arguments dict matching that operation's parameters.

  • sonarr_add_series(body={}) — Add a series to Sonarr (body is a SeriesResource). WRITE: this modifies your Sonarr instance.

  • sonarr_bulk_delete_episodefile(body={}) — Delete episodefile bulk. DESTRUCTIVE: this deletes data.

  • sonarr_bulk_delete_series(body={}) — Delete series editor. DESTRUCTIVE: this deletes data.

  • sonarr_bulk_edit_episodefiles(body={}) — Update episodefile editor. WRITE: this modifies your Sonarr instance.

  • sonarr_bulk_update_episodefile(body=[]) — Update episodefile bulk. WRITE: this modifies your Sonarr instance.

  • sonarr_bulk_update_series(body={}) — Update series editor. WRITE: this modifies your Sonarr instance.

  • sonarr_commit_manual_import(body=[]) — Commit a manual import (body is a list of manual import items). WRITE: this modifies your Sonarr instance.

  • sonarr_delete_episodefile(id) — Delete episode files. DESTRUCTIVE: this deletes data.

  • sonarr_delete_series(id, delete_files=False, add_import_list_exclusion=False) — Delete series. DESTRUCTIVE: this deletes data.

  • sonarr_get_episode(id) — Fetch a single episodes by id.

  • sonarr_get_episodefile(id) — Fetch a single episode files by id.

  • sonarr_get_parse(title='', path='') — List title parsing results. Query params: title, path.

  • sonarr_get_rename(series_id=None, season_number=None) — List rename.

  • sonarr_get_series(id, include_season_images=False) — Fetch a single series by id.

  • sonarr_get_series_folder(id) — Fetch a single series by id.

  • sonarr_import_series(body=[]) — Import series (body is a list of series resources). WRITE: this modifies your Sonarr instance.

  • sonarr_list_episode(series_id=None, season_number=None, episode_ids=None, episode_file_id=None, include_series=False, include_episode_file=False, include_images=False) — List episodes.

  • sonarr_list_episodefile(series_id=None, episode_file_ids=None) — List episode files.

  • sonarr_list_manualimport(folder='', download_id='', series_id=None, season_number=None, filter_existing_files=True) — List manual import candidates. Query params: folder, download_id.

  • sonarr_list_series(tvdb_id=None, include_season_images=False) — List series.

  • sonarr_lookup_series(term='') — Search for a series by title (term), returning metadata candidates from TVDB.

  • sonarr_monitor_episode(include_images=False, body={}) — Monitor or unmonitor episodes (body is an EpisodeResource[] of id/monitored pairs). WRITE: this modifies your Sonarr instance.

  • sonarr_update_episode(id, body={}) — Update episodes. WRITE: this modifies your Sonarr instance.

  • sonarr_update_episodefile(id, body={}) — Update episode files. WRITE: this modifies your Sonarr instance.

  • sonarr_update_season_pass(body={}) — Apply season pass monitoring settings (body is a SeasonPassResource). WRITE: this modifies your Sonarr instance.

  • sonarr_update_series(id, move_files=False, body={}) — Update series. WRITE: this modifies your Sonarr instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full transparency burden. It marks every mutating operation with 'WRITE: this modifies your Sonarr instance' and every destructive action with 'DESTRUCTIVE: this deletes data', clearly disclosing side effects. This goes well beyond what a typical tool description provides.

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 long out of necessity—25 operations require enumeration—and is well-structured as a bulleted list. The opening line is slightly redundant ('on Sonarr' is implied by the tool name), and WRITE/DESTRUCTIVE tags are repeated verbatim, creating some noise. Still, every line earns its place and the signatures are formatted efficiently.

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?

Given the large operation count and the minimal schema, the description covers all operation names, parameter signatures, defaults, and side-effect labels. It does not include a concrete usage example of the `arguments` dict, nor does it explain the `body` resource types in detail. However, it does state that arguments must match the operation's parameters, which is sufficient for an agent familiar with Sonarr conventions.

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

Parameters5/5

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

The input schema only defines a generic `arguments` object with no property descriptions (0% schema coverage). The description compensates fully by listing each operation's parameter names and defaults (e.g., `sonarr_list_episode(series_id=None, season_number=None, ...)`). This gives the agent precise key names for the arguments dict, which is essential for correct invocation.

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 identifies this as a dispatcher for Sonarr media library operations, then enumerates 25 specific operation signatures covering series, episodes, and files. This is a specific verb+resource scope that distinguishes it from sibling tools like sonarr_calendar or sonarr_release_search, despite not explicitly naming them.

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 by listing the exact operations available and instructing the agent to pass `operation` and `arguments`. However, it provides no explicit guidance about when to use this tool versus sibling Sonarr tools, nor does it mention exclusions or alternative tools for overlapping functionality.

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

sonarr_notifications_metadataA

sonarr notifications metadata operations on Sonarr. Pass operation and an arguments dict matching that operation's parameters.

  • sonarr_create_metadata(force_save=False, body={}) — Create metadata providers. WRITE: this modifies your Sonarr instance.

  • sonarr_create_metadata_action(name, body={}) — Create metadata action. WRITE: this modifies your Sonarr instance.

  • sonarr_create_metadata_test(force_test=False, body={}) — Create metadata test. WRITE: this modifies your Sonarr instance.

  • sonarr_create_metadata_testall() — Create metadata testall. WRITE: this modifies your Sonarr instance.

  • sonarr_create_notification(force_save=False, body={}) — Create notification providers. WRITE: this modifies your Sonarr instance.

  • sonarr_create_notification_action(name, body={}) — Create notification action. WRITE: this modifies your Sonarr instance.

  • sonarr_create_notification_test(force_test=False, body={}) — Create notification test. WRITE: this modifies your Sonarr instance.

  • sonarr_create_notification_testall() — Create notification testall. WRITE: this modifies your Sonarr instance.

  • sonarr_delete_metadata(id) — Delete metadata providers. DESTRUCTIVE: this deletes data.

  • sonarr_delete_notification(id) — Delete notification providers. DESTRUCTIVE: this deletes data.

  • sonarr_get_metadata(id) — Fetch a single metadata providers by id.

  • sonarr_get_notification(id) — Fetch a single notification providers by id.

  • sonarr_list_metadata() — List metadata providers.

  • sonarr_list_metadata_schema() — Return the metadata providers schema (available fields/options).

  • sonarr_list_notification() — List notification providers.

  • sonarr_list_notification_schema() — Return the notification providers schema (available fields/options).

  • sonarr_update_metadata(id, force_save=False, body={}) — Update metadata providers. WRITE: this modifies your Sonarr instance.

  • sonarr_update_notification(id, force_save=False, body={}) — Update notification providers. WRITE: this modifies your Sonarr instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It explicitly labels mutating operations as 'WRITE: this modifies your Sonarr instance' and destructive ones as 'DESTRUCTIVE: this deletes data', which is valuable. Read operations are left unlabeled, implying safety, though test operation semantics are not explained.

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 front-loaded with a brief usage hook, then follows a consistent bulleted list of all operations. Each line contains necessary operation-specific information with no redundancy, making it appropriately sized for a dispatcher tool.

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?

Given the dispatcher complexity, output schema presence, and lack of annotations, the description is largely complete: it enumerates all operations, their parameters, and safety status. It could note that `arguments` keys should exactly match parameter names, but this is inferable from the listed signatures.

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?

Schema coverage is 0%, so the description compensates by listing each operation's parameter signature (e.g., force_save, body, id). This adds meaning beyond the generic `arguments` object, but it does not detail the structure of `body` or types of parameters.

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 covers 'sonarr notifications metadata operations' and lists 18 specific operations with explicit verbs (create, delete, get, list, update) and resource targets (metadata, notification). This distinguishes it from sibling tools handling other Sonarr domains.

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

Usage Guidelines4/5

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

It provides clear instructions to pass an `operation` and an `arguments` dict matching that operation's parameters, which tells the agent exactly how to invoke it. It does not explicitly say when not to use it, but the operation list and domain scope make the usage context evident.

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

sonarr_profiles_formatsA

sonarr profiles formats operations on Sonarr. Pass operation and an arguments dict matching that operation's parameters.

  • sonarr_bulk_delete_customformat(body={}) — Delete customformat bulk. DESTRUCTIVE: this deletes data.

  • sonarr_bulk_update_customformat(body={}) — Update customformat bulk. WRITE: this modifies your Sonarr instance.

  • sonarr_create_autotagging(body={}) — Create auto tagging rules. WRITE: this modifies your Sonarr instance.

  • sonarr_create_customfilter(body={}) — Create custom filters. WRITE: this modifies your Sonarr instance.

  • sonarr_create_customformat(body={}) — Create custom formats. WRITE: this modifies your Sonarr instance.

  • sonarr_create_delayprofile(body={}) — Create delay profiles. WRITE: this modifies your Sonarr instance.

  • sonarr_create_languageprofile(body={}) — Create language profiles. WRITE: this modifies your Sonarr instance.

  • sonarr_create_qualityprofile(body={}) — Create quality profiles. WRITE: this modifies your Sonarr instance.

  • sonarr_create_releaseprofile(body={}) — Create release profiles. WRITE: this modifies your Sonarr instance.

  • sonarr_delete_autotagging(id) — Delete auto tagging rules. DESTRUCTIVE: this deletes data.

  • sonarr_delete_customfilter(id) — Delete custom filters. DESTRUCTIVE: this deletes data.

  • sonarr_delete_customformat(id) — Delete custom formats. DESTRUCTIVE: this deletes data.

  • sonarr_delete_delayprofile(id) — Delete delay profiles. DESTRUCTIVE: this deletes data.

  • sonarr_delete_languageprofile(id) — Delete language profiles. DESTRUCTIVE: this deletes data.

  • sonarr_delete_qualityprofile(id) — Delete quality profiles. DESTRUCTIVE: this deletes data.

  • sonarr_delete_releaseprofile(id) — Delete release profiles. DESTRUCTIVE: this deletes data.

  • sonarr_get_autotagging(id) — Fetch a single auto tagging rules by id.

  • sonarr_get_customfilter(id) — Fetch a single custom filters by id.

  • sonarr_get_customformat(id) — Fetch a single custom formats by id.

  • sonarr_get_delayprofile(id) — Fetch a single delay profiles by id.

  • sonarr_get_language(id) — Fetch a single languages by id.

  • sonarr_get_languageprofile(id) — Fetch a single language profiles by id.

  • sonarr_get_qualitydefinition(id) — Fetch a single quality definitions by id.

  • sonarr_get_qualitydefinition_limits() — List qualitydefinition limits.

  • sonarr_get_qualityprofile(id) — Fetch a single quality profiles by id.

  • sonarr_get_releaseprofile(id) — Fetch a single release profiles by id.

  • sonarr_list_autotagging() — List auto tagging rules.

  • sonarr_list_autotagging_schema() — Return the auto tagging rules schema (available fields/options).

  • sonarr_list_customfilter() — List custom filters.

  • sonarr_list_customformat() — List custom formats.

  • sonarr_list_customformat_schema() — Return the custom formats schema (available fields/options).

  • sonarr_list_delayprofile() — List delay profiles.

  • sonarr_list_language() — List languages.

  • sonarr_list_languageprofile() — List language profiles.

  • sonarr_list_languageprofile_schema() — Return the language profiles schema (available fields/options).

  • sonarr_list_qualitydefinition() — List quality definitions.

  • sonarr_list_qualityprofile() — List quality profiles.

  • sonarr_list_qualityprofile_schema() — Return the quality profiles schema (available fields/options).

  • sonarr_list_releaseprofile() — List release profiles.

  • sonarr_reorder_delayprofile(id, after=None) — Update delayprofile reorder. WRITE: this modifies your Sonarr instance.

  • sonarr_update_autotagging(id, body={}) — Update auto tagging rules. WRITE: this modifies your Sonarr instance.

  • sonarr_update_customfilter(id, body={}) — Update custom filters. WRITE: this modifies your Sonarr instance.

  • sonarr_update_customformat(id, body={}) — Update custom formats. WRITE: this modifies your Sonarr instance.

  • sonarr_update_delayprofile(id, body={}) — Update delay profiles. WRITE: this modifies your Sonarr instance.

  • sonarr_update_languageprofile(id, body={}) — Update language profiles. WRITE: this modifies your Sonarr instance.

  • sonarr_update_quality_definitions(body=[]) — Update qualitydefinition update. WRITE: this modifies your Sonarr instance.

  • sonarr_update_qualitydefinition(id, body={}) — Update quality definitions. WRITE: this modifies your Sonarr instance.

  • sonarr_update_qualityprofile(id, body={}) — Update quality profiles. WRITE: this modifies your Sonarr instance.

  • sonarr_update_releaseprofile(id, body={}) — Update release profiles. WRITE: this modifies your Sonarr instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It clearly labels operations as WRITE (modifies your Sonarr instance) or DESTRUCTIVE (deletes data), which is critical safety information. It also gives basic signatures and defaults (e.g., 'body={}', 'id'). However, it does not disclose potential side effects beyond deletion/modification, such as cascading effects or validation errors, but the core safety traits are well covered.

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 long but highly structured: an introductory sentence explaining how to use the tool followed by a line per operation with a terse summary. Every operation line earns its place because the tool is a dispatcher, and listing all operations is necessary. It could be more compact with grouping or a table, but the current format is scannable and front-loaded with the key usage instruction.

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 high number of operations and sparse schema, the description provides a comprehensive catalog with safety labels and signatures, which is substantial. However, it lacks guidance on when to choose this tool over sibling tools, detailed parameter semantics for each operation, and any indication of what the output schema contains or how errors surface. The presence of an output schema helps, but the description does not explain return values or edge cases, leaving gaps for a complex tool.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate. It provides call signatures for each operation, showing parameter names (e.g., 'id', 'body', 'after') and defaults, which adds value beyond the schema's generic 'arguments' object. However, it does not explain the expected structure or meaning of 'body' or how to format the arguments dict beyond 'matching that operation's parameters.' This is enough for basic understanding but lacks depth.

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 this tool handles 'sonarr profiles formats operations on Sonarr' and then enumerates all specific operations (create, delete, update, list, etc.) for profiles and formats. This distinguishes it from sibling tools that cover other Sonarr domains (e.g., tags, indexers) by naming the exact resources and actions. However, it is a multi-operation dispatcher rather than a single-verb tool, so it lacks the crisp specificity of a focused tool.

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 does not explicitly state when to use this tool versus sibling tools, but the operation list effectively implies usage: if you need one of these named operations (e.g., 'sonarr_create_qualityprofile'), you use this tool. There is no direct comparison to alternatives or exclusion guidance, so the agent must infer the boundaries from the operation names. The absence of explicit 'use this for X, not Y' guidance makes this only minimally adequate.

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

sonarr_queueA

sonarr queue operations on Sonarr. Pass operation and an arguments dict matching that operation's parameters.

  • sonarr_bulk_delete_queue(remove_from_client=True, blocklist=False, skip_redownload=False, change_category=False, body={}) — Delete queue bulk. DESTRUCTIVE: this deletes data.

  • sonarr_delete_queue(id, remove_from_client=True, blocklist=False, skip_redownload=False, change_category=False) — Delete download client queue items. DESTRUCTIVE: this deletes data.

  • sonarr_get_queue_details(series_id=None, episode_ids=None, include_series=False, include_episode=False) — List queue details.

  • sonarr_get_queue_status() — List queue status.

  • sonarr_grab_queue_bulk(body={}) — Grab multiple queued items now (body is a list of ids). WRITE: this modifies your Sonarr instance.

  • sonarr_grab_queue_item(id) — Grab the queued item now (forces the download client to fetch it). WRITE: this modifies your Sonarr instance.

  • sonarr_list_queue(page=1, page_size=10, sort_key='', sort_direction='', include_unknown_series_items=False, include_series=False, include_episode=False, series_ids=None, protocol='', languages=None, quality=None, status=None) — List download client queue items. Query params: sort_key, sort_direction, protocol.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description flags destructive operations (DESTRUCTIVE: this deletes data) and write operations (WRITE: this modifies your Sonarr instance), and clarifies effects like 'forces the download client to fetch it'. It does not cover prerequisites, permissions, or reversibility, but the most critical safety traits are disclosed.

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 long but well-structured as a bullet list, with each operation on its own line and a brief annotation. The redundant first sentence is the only waste; overall it is efficient for a multi-operation tool.

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?

Given the high complexity (7 sub-operations) and minimal schema, the description provides sufficient operational detail for each operation, including distinguishing read, write, and destructive actions. It relies on the output schema for return values, which is acceptable.

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?

Schema description coverage is 0%, so the description compensates by listing complete signatures with defaults for every operation. It also clarifies ambiguous parameters (e.g., 'body is a list of ids'). However, some parameter meanings like change_category remain unexplained.

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 enumerates all seven queue operations with specific verbs (delete, get, list, grab) and their targets, distinguishing this from sibling Sonarr category tools. The operation list provides concrete purpose despite a redundant opening phrase.

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 instruction 'Pass operation and an arguments dict matching that operation's parameters' explains invocation but does not provide explicit guidance on when to choose this tool over alternatives, nor any exclusions. Usage is implied by the operation names.

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

sonarr_storageC

sonarr storage operations on Sonarr. Pass operation and an arguments dict matching that operation's parameters.

  • sonarr_create_rootfolder(body={}) — Create root folders. WRITE: this modifies your Sonarr instance.

  • sonarr_delete_rootfolder(id) — Delete root folders. DESTRUCTIVE: this deletes data.

  • sonarr_get_diskspace() — List diskspace.

  • sonarr_get_rootfolder(id) — Fetch a single root folders by id.

  • sonarr_list_filesystem(path='', include_files=False, allow_folders_without_trailing_slashes=False) — List server filesystem. Query params: path.

  • sonarr_list_filesystem_mediafiles(path='') — List media files. Query params: path.

  • sonarr_list_filesystem_type(path='') — List filesystem types. Query params: path.

  • sonarr_list_rootfolder() — List root folders.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations, the description carries the burden for behavioral disclosure. It marks create_rootfolder as 'WRITE: this modifies your Sonarr instance' and delete_rootfolder as 'DESTRUCTIVE: this deletes data', which is useful. However, it omits other behavioral traits such as authentication requirements, reversibility, side effects on disk, or error behavior, so transparency is only partial.

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 well-structured as a bulleted list of operations with signatures and brief warnings. It front-loads the invocation instruction. Minor redundancy exists ('sonarr storage operations on Sonarr'), but overall each line earns its place and there is no substantive fluff.

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?

The tool is complex with eight operations, yet the description provides only one-line comments for each and lacks contextual details such as when to use specific operations, typical use cases, prerequisites, or failure modes. An output schema exists, which may cover return values, but the description does not round out the behavioral context adequately for reliable agent selection.

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 compensate. It lists parameter names and defaults (e.g., path='', include_files=False) and indicates that arguments should match operation parameters, but it fails to explain the meaning or valid values of key parameters. For example, sonarr_create_rootfolder(body={}) does not describe what fields 'body' should contain, leaving the agent without enough information to construct correct arguments.

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 identifies the tool as 'sonarr storage operations' and enumerates specific verbs and resources (create_rootfolder, delete_rootfolder, list_filesystem, etc.), making each operation's purpose understandable. However, it does not explicitly differentiate this tool from sibling tools, relying on the tool name and operation list for context.

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?

There is no explicit guidance on when to use this tool versus alternatives, and no prerequisites or exclusions are mentioned. The only usage instruction is syntactic ('Pass operation and an arguments dict'), which does not help the agent decide when to call this tool instead of siblings like sonarr_media_library.

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

sonarr_system_commandsA

sonarr system commands operations on Sonarr. Pass operation and an arguments dict matching that operation's parameters.

  • sonarr_delete_command(id) — Delete queued/running commands. DESTRUCTIVE: this deletes data.

  • sonarr_delete_system_backup(id) — Delete system backups. DESTRUCTIVE: this deletes data.

  • sonarr_get_command(id) — Fetch a single queued/running commands by id.

  • sonarr_get_health() — List health.

  • sonarr_get_system_routes() — List registered API routes.

  • sonarr_get_system_routes_duplicate() — List duplicate registered API routes.

  • sonarr_get_system_status() — List system status.

  • sonarr_get_system_task() — List scheduled tasks.

  • sonarr_get_system_task_by_id(id) — Fetch a single scheduled tasks by id.

  • sonarr_list_command() — List queued/running commands.

  • sonarr_list_log(page=1, page_size=10, sort_key='', sort_direction='', level='') — List server logs. Query params: sort_key, sort_direction, level.

  • sonarr_list_log_file() — List log files.

  • sonarr_list_log_file_update() — List update log files.

  • sonarr_list_system_backup() — List system backups.

  • sonarr_ping() — Ping the server to verify it is reachable and authenticated.

  • sonarr_restart_sonarr() — Restart the Sonarr service. WRITE: this modifies your Sonarr instance.

  • sonarr_restore_backup(id) — Restore Sonarr from a backup. WRITE: this modifies your Sonarr instance.

  • sonarr_restore_backup_upload() — Restore Sonarr from an uploaded backup file (multipart upload - limited support). WRITE: this modifies your Sonarr instance.

  • sonarr_run_command(body={}) — Run a Sonarr command (body is a CommandResource with a name, e.g. RefreshSeries, SeriesSearch, DownloadedEpisodesScan). WRITE: this modifies your Sonarr instance.

  • sonarr_shutdown_sonarr() — Shut down the Sonarr service. WRITE: this modifies your Sonarr instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description takes full responsibility for behavioral disclosure. It explicitly flags destructive operations with 'DESTRUCTIVE: this deletes data' and write operations with 'WRITE: this modifies your Sonarr instance.' It also notes 'limited support' for multipart upload and states that ping verifies reachability and authentication.

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 front-loaded with an overview and usage instruction, followed by a well-structured bullet list of all operations. Each line is concise and informative, covering 20 operations without unnecessary verbosity. Every sentence earns its place by adding needed operation semantics or safety warnings.

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

Completeness5/5

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

Despite having 20 operations, the description is comprehensive. It covers all operation types, provides safety annotations, explains the arguments dict, and gives specific parameter details for complex operations. The presence of an output schema means return values need not be described. The description is sufficient for an agent to select and invoke operations correctly.

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

Parameters5/5

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

The schema provides only an operation enum and a generic arguments object with no descriptions. The description compensates by explaining each operation's purpose and providing parameter hints, e.g., 'sonarr_list_log(page=1, page_size=10, sort_key='', sort_direction='', level='')' lists query params, and run_command specifies that body is a CommandResource with a `name`. This adds meaning well beyond the bare schema.

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 identifies the tool as handling 'sonarr system commands operations on Sonarr' and then enumerates 20 specific operations. Each operation has a verb and resource (e.g., 'sonarr_get_health() — List health'), distinguishing this dispatcher tool from sibling tools like sonarr_config or sonarr_history_blocklist.

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

Usage Guidelines4/5

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

The description provides a clear usage pattern: 'Pass `operation` and an `arguments` dict matching that operation's parameters.' It also gives operation-specific details (e.g., query params for list_log, body example for run_command). However, it does not explicitly state when to use this tool over alternatives, nor does it mention any exclusions or when-not-to-use scenarios.

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

sonarr_tagsA

sonarr tags operations on Sonarr. Pass operation and an arguments dict matching that operation's parameters.

  • sonarr_create_tag(body={}) — Create tags. WRITE: this modifies your Sonarr instance.

  • sonarr_delete_tag(id) — Delete tags. DESTRUCTIVE: this deletes data.

  • sonarr_get_tag(id) — Fetch a single tags by id.

  • sonarr_get_tag_detail(id) — Fetch a single tag details by id.

  • sonarr_list_tag() — List tags.

  • sonarr_list_tag_detail() — List tag details.

  • sonarr_update_tag(id, body={}) — Update tags. WRITE: this modifies your Sonarr instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the burden and does disclose side effects for write and delete operations ('WRITE: this modifies your Sonarr instance' and 'DESTRUCTIVE: this deletes data') and uses fetch/list for reads. It does not cover other behavioral nuances like auth requirements, error behavior, or rate limits, so it is only partially transparent.

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 well-structured with a summary sentence followed by a compact bullet list of operations. It is appropriately sized for seven sub-operations, though it redundantly repeats 'sonarr_' and 'tags' in each line, which is unnecessary but not harmful.

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?

The description covers all operation names and side effect hints, but the presence of an output schema does not eliminate the need for parameter detail. For a multi-operation tool with complex body arguments, it lacks examples or field explanations, making it only partially complete for the complexity involved.

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?

The schema only defines operation and a generic arguments object with no property descriptions. The description compensates by showing the required parameters for each operation (e.g., body={} for create/update, id for delete/get/get_detail), adding meaning beyond the schema. Yet it does not describe the inner structure of 'body', so it's not a 5.

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 this tool handles Sonarr tag operations and enumerates all supported sub-operations (create, delete, get, get_detail, list, list_detail, update). It distinguishes the resource 'tags' from sibling tools by naming the resource explicitly, though the primary verb 'operations' is generic.

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 explains the mechanism for using the tool (pass operation and arguments dict) and flags write/destructive operations. However, it does not explicitly compare with sibling tools or state when to use this tool versus alternatives, leaving usage context implied.

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

sonarr_wantedA
Read-only

sonarr wanted operations on Sonarr. Pass operation and an arguments dict matching that operation's parameters.

  • sonarr_get_wanted_cutoff(id) — Fetch a single cutoff by id.

  • sonarr_get_wanted_missing(id) — Fetch a single missing by id.

  • sonarr_list_wanted_cutoff(page=1, page_size=10, sort_key='', sort_direction='', include_series=False, include_episode_file=False, include_images=False, monitored=True) — List cutoff. Query params: sort_key, sort_direction.

  • sonarr_list_wanted_missing(page=1, page_size=10, sort_key='', sort_direction='', include_series=False, include_images=False, monitored=True) — List missing. Query params: sort_key, sort_direction.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

The annotation readOnlyHint=true already indicates a safe read operation, so the description does not need to repeat safety info. It adds contextual behavior by documenting pagination parameters and query params (e.g., page, page_size, sort_key), but does not describe edge cases or response details (which are covered by the output schema).

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 well-structured: an intro sentence explains the dispatch pattern, followed by a concise bulleted list of operations with signatures and defaults. It is easy to scan and does not contain unnecessary elaboration.

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?

Given the generic schema (only operation and arguments) and multiple operations, the description covers all four operations and their parameters sufficiently. The output schema exists to handle return-value documentation, so the description need not explain that. It lacks deeper context about the 'wanted' concept, but overall is adequate for invoking the tool.

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?

Schema description coverage is 0%, so the description carries the full burden for parameter meanings. It provides complete operation signatures with defaults for list operations (e.g., page=1, page_size=10, monitored=True), making the generic 'arguments' dict understandable. However, it does not explain each parameter's domain-specific meaning (e.g., what include_images affects).

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 tool's scope as 'sonarr wanted operations' and enumerates four specific operations (get/list for cutoff and missing). It differentiates from siblings by focusing on wanted items, but does not explicitly contrast with other Sonarr tools.

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 explains the dispatch pattern by requiring an 'operation' and 'arguments' dict, and lists operation signatures, which implies how to invoke it. However, it does not explicitly state when to use this tool versus sibling tools like sonarr_release_search or sonarr_queue, nor does it provide any exclusion/alternative guidance.

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

TDQS

B3.1/5.0
Disambiguation2/5

Multiple generic dispatcher tools (like sonarr_profiles_formats, sonarr_config) overlap with the many specific CRUD tools, causing ambiguous selection. Additionally, singular/plural inconsistencies such as sonarr_update_qualitydefinition vs sonarr_update_quality_definitions blur the boundaries further.

Naming Consistency2/5

The convention is mostly sonarr_<resource>_<action> but verbs vary widely (list, get, create, update, delete, bulk_update, mark, grab, reorder, push, search, commit, restart, shutdown, ping) and resource names mix singular and plural forms (e.g., qualitydefinition vs quality_definitions). Generic tools like sonarr_config lack any verb entirely.

Tool Count1/5

The server lists well over 100 individual tools, far exceeding the typical 3-15 tool sweet spot and even the 50+ threshold for an extreme mismatch. This enormous surface makes it impractical for an agent to navigate effectively.

Completeness5/5

The tool set is remarkably comprehensive, covering essentially every Sonarr API endpoint: series, episodes, files, quality profiles, indexers, download clients, import lists, notifications, metadata, queue, history, blocklist, tags, calendar, and system commands. It supports full CRUD and additional operations for most resources, leaving no obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to manage TV series collections through Sonarr's API using natural language interactions. Supports searching, adding, updating, and deleting TV series with detailed control over quality profiles, season monitoring, and episode downloads.
    9
  • A
    license
    C
    quality
    A
    maintenance
    MCP server exposing Radarr's v3 REST API as tools, enabling LLMs to read and manage movies, downloads, history, indexers, and more.
    100
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    MCP server exposing Seerr's full v1 REST API as tools, enabling LLMs to search and discover media, manage requests and approvals, users, issues, watchlists, and integration settings for Plex/Jellyfin/Emby and Sonarr/Radarr, including reads and writes with destructive operations flagged.
    15
    MIT

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/arr-mcps/sonarr-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server