Search Jellyseerr/Overseerr, check availability, and create guarded media requests.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Search Jellyseerr/Overseerr, check availability, and create guarded media requests via MCP. STDIO or Streamable HTTP.
A workflow MCP server over a self-hosted Jellyseerr / Overseerr instance β the request layer that fronts Jellyfin/Plex/Emby plus Radarr and Sonarr. The unit of work is not "download a movie"; it is search β resolve the exact TMDB-backed title β check availability and request state β create a guarded request that Radarr/Sonarr act on. Jellyseerr owns permissions, quotas, routing, and status; this server never touches Radarr/Sonarr directly.
Two properties make it safe to hand an agent:
seerr_request_media) defaults to mode: preview β it resolves the title and returns the exact payload that would be submitted without writing anything. The real request fires only on mode: request, which asks for an explicit confirmation and submits only once that confirmation comes back accepted.src/services/seerr/normalizers.ts) that allow-lists the fields it emits, so operator email, Plex/Jellyfin tokens and media-server IDs, and internal serviceUrl hosts never reach the model β requesters are projected to { id, displayName }. Redaction is always on; filesystem paths are the single opt-in, behind includePaths.Six tools covering the request workflow β discover (search) β confirm (get) β understand routing (service_options) β request (request_media) β track (request_status / list_requests):
| Tool | Description |
|---|---|
seerr_search_media | Search movies and TV by title; returns ranked matches with TMDB ID, year, overview, and decoded availability when Jellyseerr already tracks the title. The required first step before requesting. |
seerr_get_media | Fetch exact movie/show details by TMDB ID + media type to confirm the title before a write; for TV, a per-season summary or one season's episode list. |
seerr_list_requests | List recent requests with status/type/requester filters; echoes the applied filters and decodes every numeric status. Titles are opt-in via includeTitles. |
seerr_request_media | Guarded write. Previews the request payload by default (mode: preview); creates the request only on mode: request, and only after an accepted confirmation. |
seerr_request_status | Fetch one request by ID β title, decoded request + media availability (incl. 4K), requester, routing summary, and a state-tuned next-step hint. |
seerr_service_options | Summarize configured Radarr/Sonarr services, default quality profiles, and instance capability flags (4K, partial requests, specials, media server). Filesystem paths redacted unless includePaths. |
Every status field is decoded to { raw, label } β both the numeric code Jellyseerr returns and a human label β so an agent never has to hardcode the enum mapping.
seerr_search_mediaTitle disambiguation entry point. Wraps GET /search, filters to movies and TV (people are always excluded), and decodes availability when the title is tracked.
movie / tv / all media-type filterstatus, plus status4k when 4K is enabled) for tracked titles onlylimit to cap output sizelanguage for localized titles/overviews[] with a guidance notice, not an errorseerr_get_mediaConfirm the exact title before a write. Wraps GET /movie/{id} or GET /tv/{id}, optionally a season's episodes.
seasonNumber for a per-season summary, or pass one to fetch that season's episode list (season 0 is Specials)media_not_found with a search-recovery hint (Jellyseerr's raw HTTP 500 is classified in the service layer)seerr_list_requestsReview recent requests and their lifecycle. Wraps GET /request.
filter (pending, processing, available, failed, β¦), mediaType, and requestedById filtersadded) or last-changed (modified), ascending or descendingtake / skip pagination; the enrichment trailer echoes the filter set the server applied{ id, displayName }includeTitles: true joins them from the media records β one lookup per distinct title on the page, so a 4K and a non-4K request for one film cost one call. Default is off, keeping the call to a single upstream read. Rows that can't be resolved keep every other field and are disclosed in the noticeseerr_request_mediaThe only mutation in the surface, and it is triple-guarded:
mode: preview (default) resolves the title and returns the exact POST /request payload that would be submitted β no write. A sloppy call shows the payload and changes nothing.mode: request asks for an explicit confirmation and submits only once it comes back accepted. Declining, cancelling, or answering with anything the confirmation schema rejects cancels before submission (request_cancelled) β there is no branch that proceeds without an acceptance, so a client that never answers leaves the write un-run.destructiveHint: true surfaces the risk in client-side approval flows.Over HTTP this needs MCP_SESSION_MODE to resolve to stateful (the default auto does): 2025-era clients answer the confirmation over a live session, which stateless has no way to hold open.
seasons: "all" or an explicit list (e.g. [1, 2]); Specials are excluded unless the instance enables themserverId, profileId, rootFolder, languageProfileId) β omit to use Jellyseerr's defaults (recommended)duplicate_request pointing back at itseerr_service_optionsLets an agent reason about request capability and routing without a separate status tool. Fans out service + settings + version reads with Promise.allSettled, so one failed leg degrades to a disclosed notice rather than failing the call.
movie4kEnabled / series4kEnabled / partialRequestsEnabled / specialEpisodesEnabled flagsincludePaths: true| Type | Name | Description |
|---|---|---|
| Resource | seerr://request/{requestId} | Read-once summary of one request β title, decoded status + media availability + routing. Mirrors seerr_request_status. |
All request data is also reachable via tools β request enumeration is the job of seerr_list_requests (filterable, the tool-only access path), so the collection is intentionally not exposed as a resource. There are no prompts; the guarded-write workflow lives in the tool, not a prompt template.
Built on @cyanheads/mcp-ts-core:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/seerr-mcp-server)<a href="https://allmcps.com/mcp/seerr-mcp-server"><img src="https://allmcps.com/api/badge/seerr-mcp-server?style=directory" alt="Seerr MCP Server on AllMCPs" /></a>