Releases: cyanheads/seerr-mcp-server
Releases · cyanheads/seerr-mcp-server
Release list
v0.1.2: Opt-in and unconditional title hydration
Opt-in and unconditional title hydration
seerr_list_requests: new opt-inincludeTitlesinput (default false) joins each row's title, deduplicated by (mediaType, tmdbId), capped by a 6-wide worker pool (#4)seerr_request_status/seerr://request/{requestId}: title now hydrates unconditionally, one extra read per call (#4)SeerrService.getMovie/getTv: per-callmaxRetriesoverride; the title join runs single-attempt so a failed lookup degrades instead of retrying (#4)- docs + deps: corrected a stale docs/design.md claim about the service's HTTP layer;
@biomejs/biome2.5.5 → 2.5.6,@types/node26.1.1 → 26.1.2
v0.1.1: Query encoding, 4K guidance, and Specials fixes
Query encoding, 4K guidance, and Specials fixes
- percent-encode search/list-request queries so titles with spaces or reserved characters no longer 400 (#5)
seerr_request_status/seerr://request/{requestId}now derive guidance frommediaStatus4kon 4K requests;seerr_list_requestssurfaces it too (#2)seerr_request_mediaaccepts season 0 (Specials) when the instance enables it (#3)- README PII/redaction prose consolidated (#1)
- framework/template maintenance: TypeScript 7, biome 2.5.5, Socket install scanner, skill/script resync, packaging template files
- deps:
@cyanheads/mcp-ts-core^0.10.6 → ^0.11.0
v0.1.0: Initial release — Jellyseerr/Overseerr media-request workflow
Initial release — Jellyseerr/Overseerr media-request workflow
A workflow MCP server over a self-hosted Jellyseerr/Overseerr instance: search → confirm the TMDB-backed title → check availability → create a guarded request that Radarr/Sonarr act on. Read + guarded-request only; admin-scope endpoints are excluded by design.
Added:
- 6 tools: seerr_search_media, seerr_get_media, seerr_list_requests, seerr_request_media, seerr_request_status, seerr_service_options
- seerr://request/{requestId} resource — read-once request summary mirroring seerr_request_status
- Guarded write — seerr_request_media defaults to mode:preview (resolve + validate, no POST); writes only on mode:request behind a ctx.elicit confirmation, with destructiveHint as the non-interactive fallback. 4K/seasons/partial validation runs locally against cached /settings/public before any POST
- Mandatory PII/infra redaction — a single normalizer choke point projects User objects to { id, displayName } and drops operator email, Plex/Jellyfin tokens, internal serviceUrl, and filesystem paths (gated behind includePaths) before any output
- Status decoding everywhere as { raw, label } — request (1-5) and media (1-7) statuses, including the separate status4k; unrecognized codes degrade rather than throw
- Error normalization — Seerr's HTTP 500 'Unable to retrieve movie.' maps to media_not_found; HTTP 404 'Request not found.' maps to request_not_found
Config:
- SEERR_BASE_URL (required), SEERR_API_KEY (required, X-Api-Key header), SEERR_REQUEST_TIMEOUT_MS (default 15000)
61 tests pass; bun run devcheck clean.