Skip to main content
Glama

seerr-mcp

Part of the arr-mcps collection. MCP server exposing Seerr's v1 REST API (OpenAPI 3.0.2) as tools, so an LLM can read and manage a Seerr instance: search and discovery, media requests and their approval workflow, users, issues, watchlists and blocklists, Plex/Jellyfin/Emby and Sonarr/Radarr integration settings, notification agents, scheduled jobs, and more. Full surface — reads and writes, with destructive tools flagged.

Built with FastMCP.

Getting an API key

Generate one in Seerr Settings > General. Auth is the X-Api-Key header. An optional X-API-User header can impersonate a specific user id (defaults to user 1, the admin account the key belongs to).

Related MCP server: nas-mcp-server

Install

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

uv tool install seerr_mcp-*.whl

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

claude mcp add seerr \
  --env SEERR_URL=http://your-seerr-host \
  --env SEERR_API_KEY=<key> \
  -- seerr-mcp

From source

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

Config

Env var

Required

Default

SEERR_URL

yes

-

SEERR_API_KEY

yes*

none (no X-Api-Key header sent if unset)

SEERR_API_USER

no

none (no X-API-User header; API key acts as user 1)

* 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 Seerr v1 endpoints (208 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 208 endpoints as separate tools. Seerr is settings-heavy, so its grouping is its own (not shared with the radarr/sonarr/bookshelf taxonomy).

Tool

Operations

Kind

seerr_settings_general

51

reads + writes

seerr_settings_notifications

31

reads + writes

seerr_users

30

reads + writes

seerr_discover

28

read-only

seerr_media_titles

13

read-only

seerr_auth

10

reads + writes

seerr_issues

10

reads + writes

seerr_requests

8

reads + writes

seerr_blocklist

6

reads + writes

seerr_media_records

5

reads + writes

seerr_service_arr

5

read-only

seerr_override_rules

4

reads + writes

seerr_search

3

read-only

seerr_system_status

2

read-only

seerr_watchlist

2

reads + writes

Example: seerr_requests(operation="seerr_get_request", arguments={"request_id": "42"}). Endpoint-level naming (seerr_<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 SEERR_URL/SEERR_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 SEERR_WRITE_TESTS=1, as a safe create→delete cycle against a scratch blocklist entry that is cleaned up afterwards.

Available Tools

15 tools
seerr_authA

seerr auth operations on Seerr. Pass operation and an arguments dict matching that operation's parameters.

  • seerr_authenticate_jellyfin_quickconnect(body={}) — Authenticate with Quick Connect WRITE: this modifies your Seerr instance.

  • seerr_check_jellyfin_quickconnect(secret) — Check Quick Connect authorization status

  • seerr_get_me() — Get logged-in user

  • seerr_initiate_jellyfin_quickconnect() — Initiate Jellyfin Quick Connect WRITE: this modifies your Seerr instance.

  • seerr_login_jellyfin(body={}) — Sign in using a Jellyfin username and password WRITE: this modifies your Seerr instance.

  • seerr_login_local(body={}) — Sign in using a local account WRITE: this modifies your Seerr instance.

  • seerr_login_plex(body={}) — Sign in using a Plex token WRITE: this modifies your Seerr instance.

  • seerr_logout() — Sign out and clear session cookie WRITE: this modifies your Seerr instance.

  • seerr_request_password_reset(body={}) — Send a reset password email WRITE: this modifies your Seerr instance.

  • seerr_reset_password(guid, body={}) — Reset the password for a user WRITE: this modifies your Seerr 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?

No annotations are provided, so the description carries the burden. It does flag several operations as 'WRITE: this modifies your Seerr instance', which is important behavioral disclosure. However, it lacks other details like prerequisites, session behavior, or error conditions for read operations, making the transparency 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-organized as a bulleted list with a clear general instruction up front. It is somewhat lengthy but each bullet serves to name an operation and its effect. The repeated 'WRITE: this modifies your Seerr instance' is redundant, but overall structure is efficient.

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?

While an output schema exists, the tool has 10 distinct operations with varying parameters. The description gives only a one-line summary for each, lacking enough detail for an agent to construct correct arguments (e.g., the JSON body for login or password reset). It is insufficient for confident invocation without external API knowledge.

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% for the arguments object, but the description adds value by listing operation-specific parameter signatures (e.g., body={}, secret, guid). It does not explain the internal structure of 'body' or what fields are required, so semantics remain incomplete.

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 'seerr auth operations on Seerr' and then enumerates each operation with a specific verb and target (e.g., 'Authenticate with Quick Connect', 'Get logged-in user'). This clearly distinguishes the tool from sibling tools focused on settings, users, or media.

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 provides a general instruction to 'Pass operation and an arguments dict matching that operation's parameters', and lists the available operations. However, it does not offer guidance on when to choose one operation over another (e.g., Jellyfin vs. Plex login) or when to use this tool instead of another sibling. Usage is implied but not explicit.

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

seerr_blocklistA

seerr blocklist operations on Seerr. Pass operation and an arguments dict matching that operation's parameters.

  • seerr_create_blocklist(body={}) — Add media to blocklist WRITE: this modifies your Seerr instance.

  • seerr_create_blocklist_collection(collection_id, body={}) — Add collection to blocklist WRITE: this modifies your Seerr instance.

  • seerr_delete_blocklist(tmdb_id, media_type) — Remove media from blocklist DESTRUCTIVE: this deletes data.

  • seerr_delete_blocklist_collection(collection_id) — Remove collection from blocklist DESTRUCTIVE: this deletes data.

  • seerr_get_blocklist(tmdb_id, media_type) — Get media from blocklist

  • seerr_list_blocklist(take=None, skip=None, search=None, filter='manual') — Returns blocklisted items

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?

No annotations are provided, so the description carries the burden. It explicitly labels write operations as 'modifies your Seerr instance' and destructive operations as 'deletes data', which is key behavioral context beyond the basic operation listing. However, it does not mention auth requirements or potential side effects beyond modification/deletion.

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 well-structured: a single introductory sentence explaining the dispatcher nature, followed by a compact bullet list where each operation has a signature and a brief note. Every line adds value, and there is no redundant prose.

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 description covers all six operations and their parameters, which is essential for a dispatcher tool with a generic arguments schema. The presence of an output schema means return values need not be explained. However, it lacks an explicit example of how to build the arguments dict, and the behavior of each operation beyond the write/destructive labels is minimal.

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?

With 0% schema description coverage, the description compensates by listing each operation's parameters and defaults (e.g., tmdb_id, media_type, take, skip, search, filter). Parameter names are self-explanatory, but the description does not explain value formats or provide an example of the arguments dict structure, leaving some ambiguity.

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 this tool handles Seerr blocklist operations and enumerates all six specific operations with distinct verbs (create, delete, get, list) and resources (media, collection). This distinguishes it from sibling tools focused on other Seerr domains.

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 usage context is implied by the blocklist operation list, but there are no explicit alternatives or when-not-to-use instructions. The description does provide how-to guidance (pass operation and arguments dict), but not when to choose this tool over sibling tools.

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

seerr_discoverA
Read-only

seerr discover operations on Seerr. Pass operation and an arguments dict matching that operation's parameters.

  • seerr_get_discover_keyword_movies(keyword_id, page=1, language=None) — Get movies from keyword

  • seerr_get_discover_movies_genre(genre_id, page=1, language=None) — Discover movies by genre

  • seerr_get_discover_movies_language(language, page=1, language_q=None) — Discover movies by original language

  • seerr_get_discover_movies_studio(studio_id, page=1, language=None) — Discover movies by studio

  • seerr_get_discover_tv_genre(genre_id, page=1, language=None) — Discover TV shows by genre

  • seerr_get_discover_tv_language(language, page=1, language_q=None) — Discover TV shows by original language

  • seerr_get_discover_tv_network(network_id, page=1, language=None) — Discover TV shows by network

  • seerr_get_keyword(keyword_id) — Get keyword

  • seerr_get_network(network_id) — Get TV network details

  • seerr_get_studio(studio_id) — Get movie studio details

  • seerr_list_backdrops() — Get backdrops of trending items

  • seerr_list_certifications_movie() — Get movie certifications

  • seerr_list_certifications_tv() — Get TV certifications

  • seerr_list_discover_genreslider_movie(language=None) — Get genre slider data for movies

  • seerr_list_discover_genreslider_tv(language=None) — Get genre slider data for TV series

  • seerr_list_discover_movies(page=1, language=None, genre=None, studio=None, keywords=None, exclude_keywords=None, sort_by=None, primary_release_date_gte=None, primary_release_date_lte=None, with_runtime_gte=None, with_runtime_lte=None, vote_average_gte=None, vote_average_lte=None, vote_count_gte=None, vote_count_lte=None, watch_region=None, watch_providers=None, certification=None, certification_gte=None, certification_lte=None, certification_country=None, certification_mode=None) — Discover movies

  • seerr_list_discover_movies_upcoming(page=1, language=None) — Upcoming movies

  • seerr_list_discover_trending(page=1, language=None, media_type='all', time_window='day') — Trending movies and TV

  • seerr_list_discover_tv(page=1, language=None, genre=None, network=None, keywords=None, exclude_keywords=None, sort_by=None, first_air_date_gte=None, first_air_date_lte=None, with_runtime_gte=None, with_runtime_lte=None, vote_average_gte=None, vote_average_lte=None, vote_count_gte=None, vote_count_lte=None, watch_region=None, watch_providers=None, status=None, certification=None, certification_gte=None, certification_lte=None, certification_country=None, certification_mode=None) — Discover TV shows

  • seerr_list_discover_tv_upcoming(page=1, language=None) — Discover Upcoming TV shows

  • seerr_list_discover_watchlist(page=1) — Get the Plex watchlist.

  • seerr_list_genres_movie(language=None) — Get list of official TMDB movie genres

  • seerr_list_genres_tv(language=None) — Get list of official TMDB movie genres

  • seerr_list_languages() — Languages supported by TMDB

  • seerr_list_regions() — Regions supported by TMDB

  • seerr_list_watchproviders_movies(watch_region) — Get watch provider movies

  • seerr_list_watchproviders_regions() — Get watch provider regions

  • seerr_list_watchproviders_tv(watch_region) — Get watch provider series

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 covers the fact that these are read-only operations, so the bar for additional behavioral disclosure is lower. The description does add some context by noting that some operations reference TMDB data (e.g., 'Languages supported by TMDB'), but it does not disclose other behavioral traits such as pagination expectations, rate limits, or output structure beyond what the output schema supplies. No contradictions found.

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 lengthy but highly structured, with a clear intro line followed by a compact bulleted list of operations. Every line conveys new, necessary information for a 28-operation dispatcher. It avoids unnecessary prose, though the repeated 'seerr_' prefix adds some redundancy. Overall, the structure earns its place.

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 (28 operations) and the presence of an output schema, the description is largely complete: it covers all operation names, parameters, and one-line semantics. The main gap is that it does not explicitly explain which parameters are required for each operation (implied by omission of defaults) or how to structure the arguments dict beyond 'matching that operation's parameters'. This is a minor deficiency for an otherwise strong catalog.

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 only defines a generic 'operation' enum and an untyped 'arguments' object, with 0% schema description coverage. The description compensates by listing exact parameter signatures for every operation, including defaults (e.g., page=1, language=None). However, it does not provide types or allowed values for parameters like sort_by or certification_mode, so it falls short of fully explicating argument semantics.

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 this tool handles Seerr discover operations and provides an exhaustive list of 28 sub-operations, each with a concise one-line purpose (e.g., 'Get movies from keyword', 'Discover TV shows by network'). The operation names and descriptions distinguish this tool from sibling tools like seerr_search and seerr_media_titles, making its scope unambiguous.

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?

The description gives no explicit guidance on when to use this dispatcher versus alternative tools like seerr_search or seerr_media_titles. It does not mention prerequisites, exclusions, or selection criteria. The operation list implies usage for discovery/browsing, but the agent is left to infer that search-related queries belong elsewhere.

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

seerr_issuesB

seerr issues operations on Seerr. Pass operation and an arguments dict matching that operation's parameters.

  • seerr_create_issue(body={}) — Create new issue WRITE: this modifies your Seerr instance.

  • seerr_create_issue_comment(issue_id, body={}) — Create a comment WRITE: this modifies your Seerr instance.

  • seerr_delete_issue(issue_id) — Delete issue DESTRUCTIVE: this deletes data.

  • seerr_delete_issuecomment(comment_id) — Delete issue comment DESTRUCTIVE: this deletes data.

  • seerr_get_issue(issue_id) — Get issue

  • seerr_get_issuecomment(comment_id) — Get issue comment

  • seerr_list_issue(take=None, skip=None, sort='added', filter='open', requested_by=None) — Get all issues

  • seerr_list_issue_count() — Gets issue counts

  • seerr_set_issue_status(issue_id, status) — Update an issue's status WRITE: this modifies your Seerr instance.

  • seerr_update_issuecomment(comment_id, body={}) — Update issue comment WRITE: this modifies your Seerr instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior4/5

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

Since no annotations exist, the description carries the full burden and explicitly labels write operations with 'WRITE: this modifies your Seerr instance' and destructive operations with 'DESTRUCTIVE: this deletes data'. This is valuable safety information, though it does not cover other behavioral aspects like rate limits or error conditions.

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 bullet list is compact and each line includes the operation signature and a safety flag, earning its place. The opening sentence is slightly awkward, but overall the structure is clear and efficient for a dispatcher tool with ten 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?

For a tool with ten operations and a generic schema, the description enumerates all operations and their parameters, and the output schema covers return values. However, it omits detailed parameter semantics and fails to explain the `arguments` dict pattern, leaving gaps that prevent fully reliable 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?

The description lists parameter names and defaults (e.g., `body={}`, `take=None`, `filter='open'`) but fails to explain types, allowed values, or meaning of key parameters like `body`, `status`, and `filter`. With schema description coverage at 0%, the agent lacks sufficient detail to correctly construct the `arguments` dict.

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 it handles 'seerr issues operations' and then enumerates all ten sub-operations (create, delete, get, list, update) for issues and comments. While the opening phrase is awkward and doesn't explicitly contrast with siblings, the enumeration makes the tool's 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 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 instead of siblings like seerr_requests or seerr_media_records. The only instruction is to 'Pass operation and an arguments dict', but no when/when-not context or alternative references are provided.

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

seerr_media_recordsA

seerr media records operations on Seerr. Pass operation and an arguments dict matching that operation's parameters.

  • seerr_delete_media(media_id) — Delete media item DESTRUCTIVE: this deletes data.

  • seerr_delete_media_file(media_id, is4k=None) — Delete media file DESTRUCTIVE: this deletes data.

  • seerr_get_media_watch_data(media_id) — Get watch data

  • seerr_list_media(take=None, skip=None, filter=None, sort='added') — Get media

  • seerr_set_media_status(media_id, status, body={}) — Update media status WRITE: this modifies your Seerr 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, the description carries the full disclosure burden. It explicitly labels delete operations as 'DESTRUCTIVE: this deletes data' and the status update as 'WRITE: this modifies your Seerr instance', providing critical risk awareness. It stops short of detailing other side effects like auth requirements or reversibility, but the provided flags are above average.

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 succinct and well-structured: a single opening instruction followed by a bulleted list of operation signatures. Every line delivers necessary information without redundancy or fluff, making it easy to scan.

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 five operations and their parameters, but it lacks examples, return-value descriptions, and deeper explanations of parameter values. While an output schema presumably covers returns, the description alone is insufficient for an agent to fully understand nuances like filter syntax or body schema, making it adequate but not comprehensive.

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 only defines 'operation' and 'arguments' with 0% description coverage, so the description must compensate. It does list each operation's parameters with defaults (e.g., sort='added', take=None), which is helpful, but it omits semantics for ambiguous parameters like 'filter', 'status', and 'body', leaving gaps in understanding.

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 this as a dispatcher for Seerr media record operations and enumerates five specific sub-operations with their signatures. It effectively communicates the tool's scope and differentiates it from siblings like seerr_search, though it does not explicitly name alternative 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 provides usage instructions (pass operation and arguments dict) and lists each operation's parameters, implying when to use each sub-operation. However, it does not offer explicit when-to-use or when-not-to-use guidance relative to sibling tools, leaving some ambiguity for an agent.

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

seerr_media_titlesA
Read-only

seerr media titles operations on Seerr. Pass operation and an arguments dict matching that operation's parameters.

  • seerr_get_collection(collection_id, language=None) — Get collection details

  • seerr_get_movie(movie_id, language=None) — Get movie details

  • seerr_get_movie_ratings(movie_id) — Get movie ratings

  • seerr_get_movie_ratingscombined(movie_id) — Get RT and IMDB movie ratings combined

  • seerr_get_movie_recommendations(movie_id, page=1, language=None) — Get recommended movies

  • seerr_get_movie_similar(movie_id, page=1, language=None) — Get similar movies

  • seerr_get_person(person_id, language=None) — Get person details

  • seerr_get_person_combined_credits(person_id, language=None) — Get combined credits

  • seerr_get_tv(tv_id, language=None) — Get TV details

  • seerr_get_tv_ratings(tv_id) — Get TV ratings

  • seerr_get_tv_recommendations(tv_id, page=1, language=None) — Get recommended TV series

  • seerr_get_tv_season(tv_id, season_number, language=None) — Get season details and episode list

  • seerr_get_tv_similar(tv_id, page=1, language=None) — Get similar TV series

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 readOnlyHint=true already present, the description adds value by detailing the operation signatures and parameters, but it doesn't disclose additional behavioral traits such as authentication requirements, rate limits, or output shape. It stays within the safe read-only context without going beyond the annotation.

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 well-organized bulleted list, front-loaded with the core instruction 'Pass operation and an arguments dict.' Every line communicates a distinct operation and its parameters, with no redundancy or fluff.

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 covers all operations and their parameters comprehensively. It lacks some contextual notes (like common use cases or error behavior), but it is adequately complete for a read-only tool with schema-backed outputs.

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 is minimal (only 'operation' and 'arguments'), so the description's per-operation parameter lists with defaults (e.g., page=1, language=None) significantly fill the gap. It clarifies what arguments each operation accepts, though it doesn't specify types or formats for those 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 states it handles 'seerr media titles operations' and enumerates 13 specific get operations for movies, TV, people, and collections. This distinguishes it from sibling tools that focus on search, requests, or settings, though it doesn't explicitly contrast with those alternatives.

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 sibling tools like seerr_search or seerr_discover. The description implies usage through the operation list (you need an ID), but it doesn't state 'use this for retrieving known media IDs' or mention any exclusions or prerequisites.

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

seerr_override_rulesA

seerr override rules operations on Seerr. Pass operation and an arguments dict matching that operation's parameters.

  • seerr_create_overriderule() — Create override rule WRITE: this modifies your Seerr instance.

  • seerr_delete_overriderule(rule_id) — Delete override rule by ID DESTRUCTIVE: this deletes data.

  • seerr_list_overriderule() — Get override rules

  • seerr_update_overriderule(rule_id) — Update override rule WRITE: this modifies your Seerr instance.

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 carries the full burden of disclosing behavior. It explicitly labels create and update as 'WRITE: this modifies your Seerr instance' and delete as 'DESTRUCTIVE: this deletes data,' while list is a read operation. This communicates side effects and safety clearly, though it does not mention return values or error behavior.

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 concise bulleted list, with the opening line stating the tool's purpose. Each operation is described in one line with its behavioral flag. No redundant or filler content; every sentence adds value.

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 dispatcher tool with four operations and an open arguments dict, the description covers operation names and side effects but omits detailed parameter schemas for create and update. Since an output schema exists, return values are presumably covered, but the missing parameter guidance and lack of prerequisites or error handling leave the description incomplete for complex use.

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 0%, so the description must compensate. It does add meaning by naming operation-specific parameters (e.g., rule_id for delete and update) and instructing that arguments must match the operation. However, it does not enumerate parameters for create or list, leaving the arguments dict largely unspecified. It partially helps but leaves gaps.

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 handles 'seerr override rules operations on Seerr' and enumerates four specific operations (create, delete, list, update) with distinct verbs and the resource 'override rule'. This distinguishes it from sibling tools that focus on other domains like users, media, or settings.

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 direct usage guidance: 'Pass operation and an arguments dict matching that operation's parameters.' It also lists the required argument for delete and update (rule_id), giving enough context to know how to invoke each operation. It does not explicitly mention when to choose this tool over alternatives, but the operation list and resource focus make the use case clear.

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

seerr_requestsA

seerr requests operations on Seerr. Pass operation and an arguments dict matching that operation's parameters.

  • seerr_create_request(body={}) — Create new request WRITE: this modifies your Seerr instance.

  • seerr_delete_request(request_id) — Delete request DESTRUCTIVE: this deletes data.

  • seerr_get_request(request_id) — Get MediaRequest

  • seerr_list_request(take=None, skip=None, filter=None, sort='added', sort_direction='desc', requested_by=None, media_type='all') — Get all requests

  • seerr_list_request_count() — Gets request counts

  • seerr_retry_request(request_id) — Retry failed request WRITE: this modifies your Seerr instance.

  • seerr_set_request_status(request_id, status) — Update a request's status WRITE: this modifies your Seerr instance.

  • seerr_update_request(request_id, body={}) — Update MediaRequest WRITE: this modifies your Seerr 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?

No annotations were provided, so the description carries the full burden. It does mark write operations as 'WRITE: this modifies your Seerr instance' and delete as 'DESTRUCTIVE: this deletes data', which is valuable safety information. Yet it misses other behavioral details like authentication requirements, side effects of retry, or whether deletions are reversible. It covers the main hazards but not comprehensively.

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 concise bullet list of operations, each on a single line with parameters and safety flags. It avoids heavy prose and is easy to scan. The format could benefit from grouping or headings, but it is appropriately sized for the number of operations and does not waste words.

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?

With 8 sub-operations and no annotations, the description provides a functional overview but leaves gaps. It does not explain return values (despite an output schema existing), accepted status values for 'set_request_status', or filter/sort options for list operations. Given the tool's complexity, a bit more detail on data types and constraints would improve completeness without bloating the description.

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 provides only generic 'operation' and 'arguments' fields with no descriptions (0% coverage), leaving the description to compensate. It does so by listing each operation with its expected arguments (e.g., 'seerr_create_request(body={})', 'seerr_list_request(take=None, skip=None, ...)'), which clarifies what parameters each operation accepts. However, it does not explain the meaning of ambiguous parameters like 'filter' or 'status' values, so it is helpful but not exhaustive.

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 this as the tool for Seerr request operations, listing all supported sub-operations (create, delete, get, list, count, retry, set status, update). This distinguishes it from sibling tools focused on other domains like users or discover. However, it lacks a single concise verb+resource statement, relying on a list instead.

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 ('Pass operation and an arguments dict') and enumerates operations with their parameters, which tells the agent which sub-operation to use for what. However, it does not explicitly state when to choose this tool over siblings or mention any exclusions or prerequisites. Usage context is implied but not spelled out.

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

seerr_service_arrA
Read-only

seerr service arr operations on Seerr. Pass operation and an arguments dict matching that operation's parameters.

  • seerr_get_service_radarr(radarr_id) — Get Radarr server quality profiles and root folders

  • seerr_get_service_sonarr(sonarr_id) — Get Sonarr server quality profiles and root folders

  • seerr_get_service_sonarr_lookup(tmdb_id) — Get series from Sonarr

  • seerr_list_service_radarr() — Get non-sensitive Radarr server list

  • seerr_list_service_sonarr() — Get non-sensitive Sonarr server list

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

The annotations declare `readOnlyHint: true`, which the description supports through the get/list operation names. The description adds some context beyond annotations, such as that list operations return 'non-sensitive' data and that get operations fetch specific details like quality profiles and root folders. However, it doesn't disclose additional behavior (e.g., error handling, rate limits) that would push it higher.

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 well-structured: a brief introductory sentence followed by a bulleted list of operations. Every line is informative and necessary, with no fluff. The format makes it easy to scan and understand quickly.

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?

For a dispatcher tool with an output schema, the description adequately covers the operations and their inputs. It doesn't explain return values, but the output schema fills that gap. It could provide a concrete example of the `arguments` dict, but the instruction 'matching that operation's parameters' is sufficient given the listed parameters.

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 provides only an enum for `operation` and a generic `arguments` object with 0% description coverage. The description compensates fully by specifying each operation's expected argument (e.g., `radarr_id`, `sonarr_id`, `tmdb_id`) and clarifying that `arguments` is a dict matching those parameters. This is critical for correct usage.

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 that this tool handles Seerr service ARR operations and enumerates five specific operations with their parameters. It distinguishes itself from sibling tools by focusing exclusively on Radarr/Sonarr service operations, 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 provides clear guidance on how to invoke the tool: pass an `operation` and an `arguments` dict matching that operation's parameters. While it doesn't explicitly state when not to use it or name alternatives among siblings, the general context and operation list imply this is the tool for service-related tasks.

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

seerr_settings_generalA

seerr settings general operations on Seerr. Pass operation and an arguments dict matching that operation's parameters.

  • seerr_add_discover_slider(body={}) — Add a new slider WRITE: this modifies your Seerr instance.

  • seerr_cancel_job(job_id) — Cancel a specific job WRITE: this modifies your Seerr instance.

  • seerr_create_settings_jellyfin(body={}) — Update Jellyfin settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_jellyfin_sync(body={}) — Start full Jellyfin library sync WRITE: this modifies your Seerr instance.

  • seerr_create_settings_main(body={}) — Update main settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_metadatas_test(body={}) — Test Provider configuration WRITE: this modifies your Seerr instance.

  • seerr_create_settings_network(body={}) — Update network settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_plex(body={}) — Update Plex settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_plex_sync(body={}) — Start full Plex library scan WRITE: this modifies your Seerr instance.

  • seerr_create_settings_radarr(body={}) — Create Radarr instance WRITE: this modifies your Seerr instance.

  • seerr_create_settings_radarr_test(body={}) — Test Radarr configuration WRITE: this modifies your Seerr instance.

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

  • seerr_create_settings_sonarr_test(body={}) — Test Sonarr configuration WRITE: this modifies your Seerr instance.

  • seerr_create_settings_tautulli(body={}) — Update Tautulli settings WRITE: this modifies your Seerr instance.

  • seerr_delete_discover_slider(slider_id) — Delete slider by ID DESTRUCTIVE: this deletes data.

  • seerr_delete_settings_radarr(radarr_id) — Delete Radarr instance DESTRUCTIVE: this deletes data.

  • seerr_delete_settings_sonarr(sonarr_id) — Delete Sonarr instance DESTRUCTIVE: this deletes data.

  • seerr_flush_cache(cache_id) — Flush a specific cache WRITE: this modifies your Seerr instance.

  • seerr_flush_dns_cache(dns_entry) — Flush a specific DNS cache entry WRITE: this modifies your Seerr instance.

  • seerr_get_settings_radarr_profiles(radarr_id) — Get available Radarr profiles

  • seerr_initialize_app() — Initialize application WRITE: this modifies your Seerr instance.

  • seerr_list_discover_sliders() — Get all discover sliders

  • seerr_list_settings_about() — Get server stats

  • seerr_list_settings_cache() — Get a list of active caches

  • seerr_list_settings_jellyfin() — Get Jellyfin settings

  • seerr_list_settings_jellyfin_library(sync=None, enable=None) — Get Jellyfin libraries

  • seerr_list_settings_jellyfin_sync() — Get status of full Jellyfin library sync

  • seerr_list_settings_jellyfin_users() — Get Jellyfin Users

  • seerr_list_settings_jobs() — Get scheduled jobs

  • seerr_list_settings_logs(take=None, skip=None, filter='debug', search=None) — Returns logs

  • seerr_list_settings_main() — Get main settings

  • seerr_list_settings_metadatas() — Get Metadata settings

  • seerr_list_settings_network() — Get network settings

  • seerr_list_settings_plex() — Get Plex settings

  • seerr_list_settings_plex_devices_servers() — Gets the user's available Plex servers

  • seerr_list_settings_plex_library(sync=None, enable=None) — Get Plex libraries

  • seerr_list_settings_plex_sync() — Get status of full Plex library scan

  • seerr_list_settings_plex_users() — Get Plex users

  • seerr_list_settings_public() — Get public settings

  • seerr_list_settings_radarr() — Get Radarr settings

  • seerr_list_settings_sonarr() — Get Sonarr settings

  • seerr_list_settings_tautulli() — Get Tautulli settings

  • seerr_regenerate_api_key() — Get main settings with newly-generated API key WRITE: this modifies your Seerr instance.

  • seerr_reset_discover_sliders() — Reset all discover sliders (WRITE — a GET that mutates state)

  • seerr_run_job(job_id) — Invoke a specific job WRITE: this modifies your Seerr instance.

  • seerr_schedule_job(job_id, body={}) — Modify job schedule WRITE: this modifies your Seerr instance.

  • seerr_update_discover_slider(slider_id, body={}) — Update a single slider WRITE: this modifies your Seerr instance.

  • seerr_update_discover_sliders(body=[]) — Batch update all sliders. WRITE: this modifies your Seerr instance.

  • seerr_update_settings_metadatas(body={}) — Update Metadata settings WRITE: this modifies your Seerr instance.

  • seerr_update_settings_radarr(radarr_id, body={}) — Update Radarr instance WRITE: this modifies your Seerr instance.

  • seerr_update_settings_sonarr(sonarr_id, body={}) — Update Sonarr instance WRITE: this modifies your Seerr instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations, the description takes on the role of disclosing side effects: it labels every mutating sub-operation as 'WRITE: this modifies your Seerr instance' and deletions as 'DESTRUCTIVE: this deletes data.' It even flags the unusual seerr_reset_discover_sliders as 'WRITE — a GET that mutates state,' showing good behavioral transparency, though it does not cover auth or rate limits.

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

Conciseness3/5

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

The description front-loads the core instruction and uses a structured bullet list, which is appropriate for a 52-operation dispatcher. But the repeated suffix 'WRITE: this modifies your Seerr instance' appears on many lines and could be stated once, making the description longer than necessary.

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 tool's complexity, the description is a fairly complete catalog of all sub-operations and their side effects, and an output schema exists so return values need not be described. Yet it omits detailed argument semantics and any relation to sibling settings tools, so agents can select an operation but may still struggle to construct valid body arguments.

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 only specifies operation and a generic arguments dict (0% schema coverage), so the inline signatures like seerr_add_discover_slider(body={}) and seerr_cancel_job(job_id) add parameter names and defaults beyond the schema. However, it does not explain what body should contain or the meaning of each parameter, leaving substantial ambiguity for nested body 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 opens by defining the tool as 'seerr settings general operations on Seerr' and then enumerates all supported sub-operations, making clear this is a dispatcher for Seerr settings. It is specific about the resource and action, but it does not explicitly differentiate from the sibling seerr_settings_notifications tool, relying on the operation list to imply scope.

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?

It provides a direct invocation instruction: 'Pass operation and an arguments dict matching that operation's parameters,' which tells the agent how to call the tool. However, it does not give when-to-use guidance versus sibling tools like seerr_settings_notifications or any explicit exclusions, so usage context is only implied by the operation list.

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

seerr_settings_notificationsA

seerr settings notifications operations on Seerr. Pass operation and an arguments dict matching that operation's parameters.

  • seerr_create_settings_notifications_discord(body={}) — Update Discord notification settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_discord_test(body={}) — Test Discord settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_email(body={}) — Update email notification settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_email_test(body={}) — Test email settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_gotify(body={}) — Update Gotify notification settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_gotify_test(body={}) — Test Gotify settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_ntfy(body={}) — Update ntfy.sh notification settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_ntfy_test(body={}) — Test ntfy.sh settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_pushbullet(body={}) — Update Pushbullet notification settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_pushbullet_test(body={}) — Test Pushbullet settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_pushover(body={}) — Update Pushover notification settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_pushover_test(body={}) — Test Pushover settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_slack(body={}) — Update Slack notification settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_slack_test(body={}) — Test Slack settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_telegram(body={}) — Update Telegram notification settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_telegram_test(body={}) — Test Telegram settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_webhook(body={}) — Update webhook notification settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_webhook_test(body={}) — Test webhook settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_webpush(body={}) — Update Web Push notification settings WRITE: this modifies your Seerr instance.

  • seerr_create_settings_notifications_webpush_test(body={}) — Test Web Push settings WRITE: this modifies your Seerr instance.

  • seerr_list_pushover_sounds(token) — Get Pushover sounds

  • seerr_list_settings_notifications_discord() — Get Discord notification settings

  • seerr_list_settings_notifications_email() — Get email notification settings

  • seerr_list_settings_notifications_gotify() — Get Gotify notification settings

  • seerr_list_settings_notifications_ntfy() — Get ntfy.sh notification settings

  • seerr_list_settings_notifications_pushbullet() — Get Pushbullet notification settings

  • seerr_list_settings_notifications_pushover() — Get Pushover notification settings

  • seerr_list_settings_notifications_slack() — Get Slack notification settings

  • seerr_list_settings_notifications_telegram() — Get Telegram notification settings

  • seerr_list_settings_notifications_webhook() — Get webhook notification settings

  • seerr_list_settings_notifications_webpush() — Get Web Push notification settings

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

The description flags each create/test operation as 'WRITE: this modifies your Seerr instance,' disclosing mutating behavior. Since no annotations are provided, this is valuable transparency. However, it omits other behavioral details such as auth requirements, side effects of test operations, or error behavior, so transparency is 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 front-loaded with a concise usage instruction and then provides an exhaustive list of operations, which is necessary for a router tool. But the repeated 'WRITE: this modifies your Seerr instance.' is verbose and could be consolidated, though it does ensure each write operation is flagged.

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 complex tool with 31 operations, the description enumerates all operations and indicates their input parameters at a high level. It relies on the output schema for return values. However, it lacks examples, error handling notes, and details about how `arguments` should map to each operation, making it slightly incomplete.

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?

With schema coverage at 0%, the description compensates by listing operation signatures (e.g., `body={}`, `token`) that imply what the `arguments` dict should contain. Nevertheless, it does not specify the exact shape of `body` or fields for each operation, leaving the agent to infer parameter structure from names alone.

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 a dispatcher for Seerr notification settings operations, listing all 31 possible operations with their names and brief purpose. It distinguishes from sibling tools like seerr_settings_general by focusing specifically on notification settings. The phrase 'operations on Seerr' is generic but accompanied by exhaustive enumeration.

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 explicit usage instructions: 'Pass `operation` and an `arguments` dict matching that operation's parameters.' This tells the agent how to invoke the tool. However, it does not state when to prefer this tool over siblings or mention alternatives, though the operation list implies coverage of all notification settings operations.

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

seerr_system_statusA
Read-only

seerr system status operations on Seerr. Pass operation and an arguments dict matching that operation's parameters.

  • seerr_list_status(check_update_available=None) — Get Seerr status

  • seerr_list_status_appdata() — Get application data volume status

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

The readOnlyHint annotation already declares the tool as read-only, so the safety profile is covered. The description adds human-readable details about the two read operations, but does not disclose any additional behavioral aspects such as authentication requirements, rate limits, or side effects. It adds minimal value beyond the annotation.

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 compact and efficiently organized as a short introductory sentence followed by a bulleted list of the two operations. Every sentence provides useful information, with no fluff or repetition. It is appropriately front-loaded with the tool's purpose.

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 relatively simple, with an existing output schema and an enum-based operation parameter. However, the description does not fully explain the 'arguments' dict parameters, which is a meaningful gap for correct invocation. It is complete enough for a basic status check but leaves room for ambiguity about argument formats.

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 was expected to compensate. It does explain the 'operation' and 'arguments' structure and lists a single parameter (check_update_available) for one operation. However, it does not document what should go inside the 'arguments' dict for either operation, leaving the most ambiguous parameter undefined. This is insufficient compensation for the low schema coverage.

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 this tool handles 'seerr system status operations' and enumerates two specific sub-operations: 'Get Seerr status' and 'Get application data volume status'. Each sub-operation uses the verb 'Get' with a specific resource, effectively distinguishing this tool from sibling tools like seerr_settings or seerr_users.

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 this tool is for checking system status, which gives clear context for when to use it. It doesn't explicitly exclude alternatives or name sibling tools, but the context is clear enough that an agent would know to use this for status operations rather than settings or user management.

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

seerr_usersA

seerr users operations on Seerr. Pass operation and an arguments dict matching that operation's parameters.

  • seerr_batch_update_users(body={}) — Update batch of users WRITE: this modifies your Seerr instance.

  • seerr_create_user(body={}) — Create new user WRITE: this modifies your Seerr instance.

  • seerr_create_user_settings_linked_accounts_jellyfin(user_id, body={}) — Link the provided Jellyfin account to the current user WRITE: this modifies your Seerr instance.

  • seerr_create_user_settings_linked_accounts_jellyfin_quickconnect(user_id, body={}) — Link Jellyfin/Emby account with Quick Connect WRITE: this modifies your Seerr instance.

  • seerr_create_user_settings_linked_accounts_plex(user_id, body={}) — Link the provided Plex account to the current user WRITE: this modifies your Seerr instance.

  • seerr_create_user_settings_main(user_id, body={}) — Update general settings for a user WRITE: this modifies your Seerr instance.

  • seerr_create_user_settings_notifications(user_id, body={}) — Update notification settings for a user WRITE: this modifies your Seerr instance.

  • seerr_create_user_settings_password(user_id, body={}) — Update password for a user WRITE: this modifies your Seerr instance.

  • seerr_create_user_settings_permissions(user_id, body={}) — Update permission settings for a user WRITE: this modifies your Seerr instance.

  • seerr_delete_user(user_id) — Delete user by ID DESTRUCTIVE: this deletes data.

  • seerr_delete_user_push_subscription(user_id, endpoint) — Delete user push subscription by key DESTRUCTIVE: this deletes data.

  • seerr_delete_user_settings_linked_accounts_jellyfin(user_id) — Remove the linked Jellyfin account for a user DESTRUCTIVE: this deletes data.

  • seerr_delete_user_settings_linked_accounts_plex(user_id) — Remove the linked Plex account for a user DESTRUCTIVE: this deletes data.

  • seerr_get_user(user_id) — Get user by ID

  • seerr_get_user_jellyfin(jellyfin_user_id) — Get user by Jellyfin user ID

  • seerr_get_user_push_subscription(user_id, endpoint) — Get web push notification settings for a user

  • seerr_get_user_quota(user_id) — Get quotas for a specific user

  • seerr_get_user_requests(user_id, take=None, skip=None) — Get requests for a specific user

  • seerr_get_user_settings_main(user_id) — Get general settings for a user

  • seerr_get_user_settings_notifications(user_id) — Get notification settings for a user

  • seerr_get_user_settings_password(user_id) — Get password page informatiom

  • seerr_get_user_settings_permissions(user_id) — Get permission settings for a user

  • seerr_get_user_watch_data(user_id) — Get watch data

  • seerr_get_user_watchlist(user_id, page=1) — Get the Plex watchlist for a specific user

  • seerr_import_jellyfin_users(body={}) — Import all users from Jellyfin WRITE: this modifies your Seerr instance.

  • seerr_import_plex_users(body={}) — Import all users from Plex WRITE: this modifies your Seerr instance.

  • seerr_list_user(take=None, skip=None, sort='created', sort_direction=None, q=None, include_ids=None) — Get all users

  • seerr_list_user_push_subscriptions(user_id) — Get all web push notification settings for a user

  • seerr_register_push_subscription(body={}) — Register a web push /user/registerPushSubscription WRITE: this modifies your Seerr instance.

  • seerr_update_user(user_id, body={}) — Update a user by user ID WRITE: this modifies your Seerr 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?

The description prominently labels each mutating operation with 'WRITE: this modifies your Seerr instance' and each destructive operation with 'DESTRUCTIVE: this deletes data.' This is significant behavioral disclosure, especially since no annotations are provided. It also clarifies which operations are read-only by omission. The description does not cover auth requirements or rate limits, but the key safety-relevant behavior is well-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 a long list of 30 operations, but this is necessary given the tool's dispatcher design. It is well-structured with one operation per line, front-loaded with usage instructions. The repeated WRITE/DESTRUCTIVE phrases add clarity but are somewhat verbose; nevertheless, each sentence serves a purpose and there is no extraneous filler.

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?

For a tool covering 30 operations, the description is quite complete: it names every operation, lists its parameters, and flags mutating/destructive behavior. It also notes the presence of an output schema elsewhere. Minor typos ('informatiom') and lack of detail about body contents are small gaps, but overall the description gives an agent enough information 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.

Parameters3/5

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

The input schema only defines 'operation' and a generic 'arguments' dict, so the description carries the full burden for parameter semantics. It lists parameter names for each operation (e.g., user_id, take, skip) and even default values in some cases, which is valuable. However, body parameters are simply shown as 'body={}' with no explanation of their structure, leaving significant ambiguity for operations that require request bodies.

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 a dispatcher for Seerr user operations, with an explicit instruction to pass 'operation' and 'arguments'. The list of 30 sub-operations provides concrete details about available actions, making the purpose clear and specific. However, the initial phrasing 'seerr users operations' is somewhat generic and relies on the list to fully convey the scope.

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 implicitly guides usage by enumerating every operation with its parameters, and the tool name indicates it covers user-related tasks. However, it does not explicitly state when to prefer this tool over sibling tools (e.g., seerr_requests) or mention any exclusions. Usage context is implied rather than explicitly articulated.

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

seerr_watchlistA

seerr watchlist operations on Seerr. Pass operation and an arguments dict matching that operation's parameters.

  • seerr_create_watchlist(body={}) — Add media to watchlist WRITE: this modifies your Seerr instance.

  • seerr_delete_watchlist(tmdb_id, media_type) — Delete watchlist item DESTRUCTIVE: this deletes data.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
operationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/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 disclosing behavioral traits. It explicitly marks seerr_create_watchlist as 'WRITE: this modifies your Seerr instance' and seerr_delete_watchlist as 'DESTRUCTIVE: this deletes data,' which effectively communicates the safety profile and side effects of each operation.

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 compact and front-loaded with the core purpose. The two bullet points are direct and informative without unnecessary detail. Both write and destructive flags are integrated cleanly. Every sentence contributes to understanding.

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 that an output schema exists, the description doesn't need to explain return values. It covers the dispatch pattern (operation + arguments), lists both supported operations with their parameter signatures, and includes safety flags. Minor gaps remain around expected parameter formats, but the core usage is well covered for a two-operation dispatcher.

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 provides only generic operation and arguments fields with 0% schema description coverage. The description compensates by listing operation signatures (e.g., seerr_create_watchlist(body={}) and seerr_delete_watchlist(tmdb_id, media_type)), which names the parameters. However, it does not explain what values these parameters should take or their format, leaving significant gaps.

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 that this tool handles 'seerr watchlist operations' and explicitly lists the two operations: create and delete watchlist items. Each operation has a specific verb and resource, making it easy to distinguish from sibling tools like seerr_requests or seerr_discover.

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?

The description does not explicitly state when to use this tool versus alternatives such as seerr_requests or seerr_discover. It implies usage through the operation names, but there is no guidance on scenarios where the watchlist tool is the appropriate choice compared to other media-management tools.

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

TDQS

B3.3/5.0
Disambiguation2/5

Many tools have overlapping purposes and similar names, e.g., `seerr_create_settings_jellyfin` updates settings while `seerr_create_settings_radarr` creates an instance, and there are numerous `seerr_list_settings_*` and `seerr_update_settings_*` tools with subtle differences. The inconsistent use of 'create' for both create and update operations creates ambiguity.

Naming Consistency2/5

The naming convention is inconsistent: some tools use `list_`, some use `get_`, some use `create_` for updates, and there are oddities like `seerr_get_issuecomment` vs `seerr_get_issue`. CamelCase is used in some sub-parts, and singular/plural is mixed (e.g., `seerr_list_user` vs `seerr_list_issue`).

Tool Count1/5

The server exposes an extremely large number of tools (well over 100), far exceeding the stated count of 15. This makes the tool set unwieldy and difficult for an agent to navigate efficiently.

Completeness5/5

The tool set covers the major domains of a media management system: settings, users, discover, media titles, auth, issues, search, requests, blocklist, watchlist, and system status. CRUD operations are available for most resources, and there are no obvious missing operations that would hinder core workflows.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    FastMCP server to interact with the Overseerr API for movie and TV show requests management, enabling users to request media, search, and manage libraries via natural language.
    8
    1
    MIT
  • 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.
  • F
    license
    A
    quality
    C
    maintenance
    MCP server for Overseerr media request management. Enables AI assistants to search for media, view requests, and manage media requests through the Model Context Protocol.
    12

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/seerr-mcp'

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