Skip to main content
Glama

Arr Assistant MCP

MCP server for searching movies and TV shows and adding them to Radarr and Sonarr.

The server talks directly to the Radarr and Sonarr v3 APIs. Searches and status checks are read-only; the add_* tools and search_and_add_show(..., auto_add=True) create media entries and start searches in the configured Arr service.

Setup

Requires Python 3.12+ and uv for local development.

git clone https://github.com/omniwaifu/arr-assistant-mcp.git
cd arr-assistant-mcp
uv sync --group dev

Related MCP server: overseerr-mcp

Run From Source

Add this to your claude_desktop_config.json to run the checked-out project directly:

{
  "mcpServers": {
    "arr-assistant": {
      "command": "uv",
      "args": [
        "run",
        "--project",
        "/path/to/arr-assistant-mcp",
        "src/arr_assistant_mcp/main.py"
      ],
      "env": {
        "RADARR_URL": "https://radarr.example.com",
        "RADARR_API_KEY": "your-radarr-api-key",
        "SONARR_URL": "https://sonarr.example.com",
        "SONARR_API_KEY": "your-sonarr-api-key",
        "QUALITY_PROFILE_ID": "1",
        "RADARR_ROOT_FOLDER": "/storage/movies",
        "SONARR_ROOT_FOLDER": "/storage/shows"
      }
    }
  }
}

Trailing slashes in RADARR_URL and SONARR_URL are normalized automatically. API keys are required for the corresponding service. Never commit them; pass them through your MCP client or local environment. Prefer HTTPS because Arr API keys are sent with every request. Plain HTTP is safe for loopback URLs; for a trusted LAN or VPN where HTTPS is unavailable, the server allows plain HTTP but logs a warning identifying the service and destination.

Build An MCP Bundle

Packaged release artifacts should now use the .mcpb extension.

npm ci --prefix .github/mcpb-tooling --ignore-scripts
npm audit --prefix .github/mcpb-tooling --audit-level=moderate
npm exec --prefix .github/mcpb-tooling -- mcpb validate manifest.json
npm exec --prefix .github/mcpb-tooling -- mcpb pack . arr-assistant-mcp.mcpb

Open the resulting .mcpb file in Claude Desktop to install it.

Configuration Notes

  • Radarr/Sonarr API keys: Settings > General > Security > API Key

  • Quality profile: Use the numeric profile ID from your Radarr or Sonarr instance

  • Root folders: If omitted, the server auto-detects the first available root folder from each service

Tools

  • test_config() - Test configuration and connectivity for both Radarr and Sonarr

  • search_movies(title) - Search for movies by title

  • add_movie_by_id(tmdb_id, root_folder=None) - Add a movie to Radarr

  • search_and_add_show(description, auto_add=False) - Search for TV shows and optionally auto-add the only match to Sonarr; returns both the matches and an explicit auto_add_result

  • add_show_by_tvdb_id(tvdb_id, title, root_folder=None) - Add a show to Sonarr

  • get_server_status() - Check Radarr and Sonarr status

Usage

search_movies("The Matrix")
add_movie_by_id(603)

# A search is read-only unless auto_add is explicitly enabled.
search_and_add_show("Doctor Who", auto_add=False)

# Specify a custom root folder
add_show_by_tvdb_id(123456, "Attack on Titan", "/storage/anime")

Root folders are auto-detected from your Radarr and Sonarr configurations when not provided, but can still be overridden per request.

Development and Testing

Run the local checks with:

uv run ruff check src tests
uv run ruff format --check src tests
uv run pytest

The default suite never contacts a real Arr instance. An additional opt-in suite performs only read-only status and root-folder requests against locally configured services:

ARR_ASSISTANT_LIVE_TESTS=1 \
RADARR_URL=https://radarr.example.com \
RADARR_API_KEY=your-radarr-api-key \
SONARR_URL=https://sonarr.example.com \
SONARR_API_KEY=your-sonarr-api-key \
uv run pytest tests/test_live.py -v

Use environment variables or a local ignored .env file for credentials. Do not paste real API keys into source files, test fixtures, shell scripts, or commits.

Releases

Versions are kept in sync across pyproject.toml, manifest.json, and the package. Pushing a tag matching the project version (for example, v0.2.2) runs linting, tests, a dependency audit, and package validation before publishing the MCPB, wheel, and source distribution to a GitHub release.

Available Tools

6 tools
add_movie_by_idA

Add a specific movie to Radarr using its TMDb ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
tmdb_idYesThe Movie Database ID for the movie
root_folderNoOptional root folder path (e.g., "/storage/movies")

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageYes
successYes
media_idNo

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It only states 'Add' without mentioning potential side effects (e.g., failure if movie already exists), prerequisites, or behavior of the optional root_folder. This is a significant gap for a mutation tool.

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

Conciseness5/5

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

The description is a single clear sentence with zero redundant words or restating of schema information. It earns high marks for conciseness.

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 is simple with 2 params and an output schema, so the brief description is partially sufficient. However, it lacks explicit usage context (e.g., that the movie must first be found via search_movies) and behavioral details, making it less complete than ideal for a mutation tool without annotations.

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 description coverage is 100%, so the schema already documents both parameters well. The description adds marginal meaning by reinforcing 'using its TMDb ID,' but it does not clarify the root_folder default semantics beyond the schema's own description.

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 uses the specific verb 'Add' with a clear resource ('a specific movie to Radarr') and method ('using its TMDb ID'). It distinguishes itself from sibling tools like 'add_show_by_tvdb_id' (TV shows) and 'search_movies' (searching).

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 when a TMDb ID is known, but it does not explicitly state when to use this tool versus alternatives like 'search_movies' to find the ID first, or 'add_show_by_tvdb_id' for shows. No exclusions are provided.

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

add_show_by_tvdb_idA

Add a specific TV show to Sonarr using its TVDB ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesThe title of the show
tvdb_idYesThe TV Database ID for the show
root_folderNoOptional root folder path (e.g., "/storage/anime")

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageYes
successYes
media_idNo

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It only states the core action, but doesn't disclose side effects (e.g., what happens if the show already exists), whether the root_folder is required if not provided, or any verification steps. Minimal behavioral disclosure.

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?

Single sentence, front-loaded with action and key parameter, no wasted words. Ideal length for the function's simplicity.

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?

For a simple 3-param tool with output schema, the description is adequate but minimal. It doesn't explain prerequisites like root_folder default behavior or duplicate handling, but given the schema covers all parameters and there's no annotation burden, a score of 3 reflects the minimum viable while leaving some gaps.

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 100%, so baseline is 3. The description mentions the TVDB ID and title but doesn't add meaning beyond the schema. The optional root_folder is not explained further. Description adds no extra semantic value beyond the 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 states the action (add), the resource (specific TV show to Sonarr), and the method (using its TVDB ID). It distinguishes from siblings like search_and_add_show by specifying direct ID-based addition.

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 for direct ID-based addition, but there is no explicit when/when-not guidance or mention of alternatives like search_and_add_show. The context is clear from the name, but the description doesn't formally distinguish it from sibling tools.

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

get_server_statusA

Check the status and connectivity of Radarr and Sonarr servers.

Returns: Status information for both servers

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description bears full burden. It discloses the action (checking connectivity) and return type (status information), but does not detail side effects, rate limits, or operational behavior. Adequate for a simple read-only tool.

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?

Two sentences, concise and front-loaded. The first sentence states the purpose, the second indicates return format. No unnecessary text.

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?

Given zero parameters and existence of an output schema, the description is complete. It sufficiently describes the tool's function and return value for a simple status check.

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 input schema has no parameters, so the description does not need to explain them. Baseline of 4 is appropriate since no additional parameter meaning is needed.

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 checks status and connectivity of Radarr and Sonarr servers, using specific verb 'Check' and specific resources, which distinguishes it from sibling tools like add_movie_by_id or search_movies.

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 for checking server status, but does not explicitly state when to use versus alternatives or provide exclusions. Context from sibling tool names helps, but the description itself is not explicit.

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

search_and_add_showA

Search for TV shows using natural language description and optionally add to Sonarr.

ParametersJSON Schema
NameRequiredDescriptionDefault
auto_addNoIf True and only one result found, automatically add to Sonarr
descriptionYesNatural language description of the TV show (e.g., "British time travel show with the Doctor")

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes
auto_add_resultNo
auto_add_requestedYes

TDQS

A3.7/5.0
Behavior2/5

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

There are no annotations, so the description carries the burden of disclosing side effects. It only says 'optionally add to Sonarr' without stating that auto_add defaults to false, only triggers on unique matches, or what write actions occur.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. It efficiently captures both the search and optional add behavior.

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 is simple and has full parameter schema plus an output schema, but the description lacks explicit behavior around the auto_add path and when not to use it. Given no annotations, the description is adequate but not fully 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?

Schema coverage is 100%, and the schema already describes both parameters well. The description adds only minimal mapping between 'natural language description' and the description parameter, so baseline 3 is appropriate.

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 searches for TV shows using natural language and optionally adds to Sonarr. This distinguishes it from siblings like search_movies and add_show_by_tvdb_id.

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 gives clear context: use for natural-language TV show lookup with an optional add step. It does not explicitly name alternatives or exclusions, but the phrasing implies this is not for movie search or TVDB ID-based adds.

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

search_moviesA

Search for movies by title using Radarr's built-in lookup.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesMovie title only (e.g., "The Matrix" or "Primer")

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the transparency burden. It clearly indicates a search operation, implying a non-destructive read, but does not explicitly state safety or side effects. Since it is a search, a reasonable assumption is made, but explicit disclosure would improve transparency.

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

Conciseness5/5

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

The description is a single, concise sentence with no unnecessary words. It directly conveys the purpose and method without redundancy, achieving high efficiency.

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?

With a simple one-parameter schema and a clear description, the tool is fully contextualized. Since an output schema is present, return value details are not required in the description, and the given information is sufficient for a user to understand its use.

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 parameter 'title' has a descriptive annotation specifying 'Movie title only' with examples, which clarifies the expected input format and distinguishes it from other identifiers. This adds significant meaning beyond the schema's type definition.

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 action (search for movies) and the resource (by title using Radarr's built-in lookup). It distinguishes from sibling tools like search_and_add_show (for shows) and add_movie_by_id (for adding by ID), making the purpose unambiguous.

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 implies when to use this tool (searching movies by title) and indirectly differentiates from siblings (e.g., search_and_add_show for shows). However, it does not explicitly state when not to use it or alternative cases, but the implied context is sufficiently clear.

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

test_configA

Test the current configuration and API connectivity.

Returns: Configuration status and basic connectivity tests

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description should disclose behavioral traits. It mentions returns (configuration status and connectivity tests) but omits side effects, auth requirements, or safety implications. Since it's a test tool, it likely has no side effects, but this is not stated.

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 concise with two sentences, front-loading the purpose. No unnecessary words. Every part provides value.

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?

Given the tool's simplicity (no parameters, no annotations, but has output schema), the description adequately covers its purpose and return value. Complete for its complexity.

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?

There are no parameters, so the description does not need to add parameter semantics. Schema coverage is 100%. The baseline for 0 parameters is 4, and no extra info is required.

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 name 'test_config' and description 'Test the current configuration and API connectivity' clearly specify the tool's function. It is distinct from siblings like 'add_movie_by_id' and 'get_server_status', which have different purposes.

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 the tool is for testing configuration and connectivity, but does not explicitly state when to use it versus alternatives or when not to use it. No exclusions or alternative tool references are provided.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.2.2
    • Changedadd_movie_by_id2 fields changed
      • addedInput schema / properties / root_folder / description
        Added value: +"Optional root folder path (e.g., \"/storage/movies\")"
      • addedInput schema / properties / tmdb_id / description
        Added value: +"The Movie Database ID for the movie"
    • Changedadd_show_by_tvdb_id3 fields changed
      • addedInput schema / properties / root_folder / description
        Added value: +"Optional root folder path (e.g., \"/storage/anime\")"
      • addedInput schema / properties / title / description
        Added value: +"The title of the show"
      • addedInput schema / properties / tvdb_id / description
        Added value: +"The TV Database ID for the show"
    • Changedsearch_and_add_show8 fields changed
      • addedInput schema / properties / auto_add / description
        Added value: +"If True and only one result found, automatically add to Sonarr"
      • addedInput schema / properties / description / description
        Added value: +"Natural language description of the TV show\n(e.g., \"British time travel show with the Doctor\")"
      • addedOutput schema / properties / auto_add_requested
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / auto_add_result
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "media_id": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "success": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "success",
        +        "message"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "items": {
        -    "properties": {
        -      "media_type": {
        -        "type": "string"
        -      },
        -      "overview": {
        -        "type": "string"
        -      },
        -      "poster_path": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "title": {
        -        "type": "string"
        -      },
        -      "tmdb_id": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "tvdb_id": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "year": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      }
        -    },
        -    "required": [
        -      "title",
        -      "overview",
        -      "media_type"
        -    ],
        -    "type": "object"
        -  },
        -  "type": "array"
        -}
      • addedOutput schema / properties / results
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "media_type": {
        +        "type": "string"
        +      },
        +      "overview": {
        +        "type": "string"
        +      },
        +      "poster_path": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "title": {
        +        "type": "string"
        +      },
        +      "tmdb_id": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "tvdb_id": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "year": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      }
        +    },
        +    "required": [
        +      "title",
        +      "overview",
        +      "media_type"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "results",
        +  "auto_add_requested"
        +]
      • removedOutput schema / x-fastmcp-wrap-result
        Removed value: -true
    • Changedsearch_movies1 field changed
      • addedInput schema / properties / title / description
        Added value: +"Movie title only (e.g., \"The Matrix\" or \"Primer\")"
  2. 6 tool updatesv0.1.1
    • Changedadd_movie_by_id7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / root_folder / title
        Removed value: -"Root Folder"
      • removedInput schema / properties / tmdb_id / title
        Removed value: -"Tmdb Id"
      • removedOutput schema / properties / media_id / title
        Removed value: -"Media Id"
      • removedOutput schema / properties / message / title
        Removed value: -"Message"
      • removedOutput schema / properties / success / title
        Removed value: -"Success"
      • removedOutput schema / title
        Removed value: -"AddMediaResponse"
    • Changedadd_show_by_tvdb_id8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / root_folder / title
        Removed value: -"Root Folder"
      • removedInput schema / properties / title / title
        Removed value: -"Title"
      • removedInput schema / properties / tvdb_id / title
        Removed value: -"Tvdb Id"
      • removedOutput schema / properties / media_id / title
        Removed value: -"Media Id"
      • removedOutput schema / properties / message / title
        Removed value: -"Message"
      • removedOutput schema / properties / success / title
        Removed value: -"Success"
      • removedOutput schema / title
        Removed value: -"AddMediaResponse"
    • Changedget_server_status1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedsearch_and_add_show10 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / auto_add / title
        Removed value: -"Auto Add"
      • removedInput schema / properties / description / title
        Removed value: -"Description"
      • removedOutput schema / $defs
        Removed value: -{
        -  "MediaSearchResult": {
        -    "properties": {
        -      "media_type": {
        -        "title": "Media Type",
        -        "type": "string"
        -      },
        -      "overview": {
        -        "title": "Overview",
        -        "type": "string"
        -      },
        -      "poster_path": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Poster Path"
        -      },
        -      "title": {
        -        "title": "Title",
        -        "type": "string"
        -      },
        -      "tmdb_id": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Tmdb Id"
        -      },
        -      "tvdb_id": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Tvdb Id"
        -      },
        -      "year": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Year"
        -      }
        -    },
        -    "required": [
        -      "title",
        -      "overview",
        -      "media_type"
        -    ],
        -    "title": "MediaSearchResult",
        -    "type": "object"
        -  }
        -}
      • removedOutput schema / properties / result / items / $ref
        Removed value: -"#/$defs/MediaSearchResult"
      • addedOutput schema / properties / result / items / properties
        Added value: +{
        +  "media_type": {
        +    "type": "string"
        +  },
        +  "overview": {
        +    "type": "string"
        +  },
        +  "poster_path": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "title": {
        +    "type": "string"
        +  },
        +  "tmdb_id": {
        +    "anyOf": [
        +      {
        +        "type": "integer"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "tvdb_id": {
        +    "anyOf": [
        +      {
        +        "type": "integer"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "year": {
        +    "anyOf": [
        +      {
        +        "type": "integer"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  }
        +}
      • addedOutput schema / properties / result / items / required
        Added value: +[
        +  "title",
        +  "overview",
        +  "media_type"
        +]
      • addedOutput schema / properties / result / items / type
        Added value: +"object"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedsearch_movies2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / title / title
        Removed value: -"Title"
    • Changedtest_config1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
  3. 6 tool updates
    • First observedadd_movie_by_id
    • First observedadd_show_by_tvdb_id
    • First observedget_server_status
    • First observedsearch_and_add_show
    • First observedsearch_movies
    • First observedtest_config

TDQS

A3.8/5.0

Scored across 6 tools

Disambiguation4/5

Tools are mostly distinct with clear movie vs. show separation, but 'test_config' and 'get_server_status' both check connectivity and configuration, creating potential confusion. The search and add tools for movies and shows are clearly differentiated by domain.

Naming Consistency4/5

The naming generally follows a verb_noun pattern in snake_case, but 'search_and_add_show' uses a compound verb and 'add_show_by_tvdb_id' specifies the ID type differently than 'add_movie_by_id'. These minor deviations prevent a perfect score.

Tool Count5/5

With 6 tools, the server is well-scoped for managing both Radarr and Sonarr. Each tool serves a core function (search, add, status), and the count is within the ideal 3-15 range.

Completeness3/5

The server covers search and add workflows but lacks delete, update, or listing operations for existing movies/shows. This is a notable gap for a media management assistant, though the core add flow is functional.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP server for managing a media server stack (Plex, Radarr, Overseerr, Bazarr, Prowlarr, Trakt.tv) using natural language to browse, request, and discover content.
    12
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server for Overseerr that enables searching, requesting, and managing media (movies and TV shows) through natural language, with integration to Radarr/Sonarr for automated downloads.
    -