Search Jellyseerr/Overseerr, check availability, and create guarded media requests via MCP. STDIO or Streamable HTTP.
Five tools with complete schemas, strong descriptions (avg 180 chars), and clear verb-noun naming. All parameters typed and described. Tool annotations (readOnlyHint/destructiveHint) present. Key strength: seerr_request_media implements Multi Round-Trip Requests (mode:preview → mode:request) for guarded writes, matching pattern:confirmation-request. Weaknesses: output schemas not formally documented; error handling guidance minimal; no batch operations despite list_requests accepting pagination.
Fetch exact movie or show details by TMDB ID and media type to confirm the right title before any write. Returns availability and any existing open request. For TV, omit seasonNumber for a per-season summary, or pass a seasonNumber to fetch that season's episode list. Get the tmdbId from seerr_search_media first.
List recent media requests with their lifecycle status. Filter by status, media type, and requester; echoes the applied filters and decodes every numeric status. Pass a requestId from the results to seerr_request_status for full detail. Titles are not on request objects — set includeTitles to resolve them, or fetch one with seerr_get_media.
Create a Seerr media request — the guarded write. Defaults to mode:preview, which resolves the exact title and returns the request payload that WOULD be submitted WITHOUT creating anything; pass mode:request to actually submit, which asks for an explicit confirmation and submits only once that confirmation comes back accepted. Treat "download X" as "create a Seerr request for X". Always preview first unless the title is already confirmed.
Fetch one media request by ID and return its decoded request status, decoded media availability (including 4K), requester, a routing summary, and a next-step hint tuned to the current state. Get the requestId from seerr_request_media (created.requestId) or seerr_list_requests.
Output schemas not formally documented. Tool descriptions explain what is returned (e.g., 'decoded request status, decoded media availability, requester, routing summary') but JSON Schema output types are not visible in source. LLMs cannot plan downstream tool calls without knowing response field names and types.
Error handling lacks recovery guidance. Tool descriptions do not specify what errors are retryable, user-fixable, or fatal. E.g., seerr_request_media does not document what happens if the tmdbId is invalid or if the Seerr instance rejects the 4K request.
seerr_list_requests accepts pagination (take, skip) but no batch operation for common multi-request workflows. Agents must loop to fetch multiple requests sequentially, wasting tokens and latency.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2026-07-28+ | v2 |
Search movies and TV shows by title and return ranked matches with TMDB ID, year, overview, and decoded availability status when Seerr already tracks the title. People are always excluded. This is the required first step before requesting media — use the returned tmdbId with seerr_get_media or seerr_request_media.
seerr_get_media seasonNumber parameter is optional for TV but description does not clarify what the default behavior returns (per-season summary vs. all episodes). Ambiguous defaults invite misuse.
seerr_request_media seasons parameter uses union[literal|array] type. Description says 'all' or explicit list, but does not specify: can seasons be empty array? What if agent passes [0] on an instance that rejects specials? Error messages needed.