Skip to content

Releases: cyanheads/seerr-mcp-server

v0.1.2: Opt-in and unconditional title hydration

Choose a tag to compare

@cyanheads cyanheads released this 02 Aug 14:58
v0.1.2
fd843f8

Opt-in and unconditional title hydration

  • seerr_list_requests: new opt-in includeTitles input (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-call maxRetries override; 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/biome 2.5.5 → 2.5.6, @types/node 26.1.1 → 26.1.2

CHANGELOG v0.1.2

v0.1.1: Query encoding, 4K guidance, and Specials fixes

Choose a tag to compare

@cyanheads cyanheads released this 02 Aug 14:06
v0.1.1
9aee0cd

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 from mediaStatus4k on 4K requests; seerr_list_requests surfaces it too (#2)
  • seerr_request_media accepts 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

CHANGELOG v0.1.1

v0.1.0: Initial release — Jellyseerr/Overseerr media-request workflow

Choose a tag to compare

@cyanheads cyanheads released this 14 Jun 10:17
db60138

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.