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.