
Seerr Mcp Server
io.github.cyanheads由 GitHub 账号 cyanheads 发布v0.2.0更新于 Oct 29, 2026
Search Jellyseerr/Overseerr, check availability, and create guarded media requests.
概览
把助手连接到 Jellyseerr/Overseerr 实例,用于搜索影视、查看可用性并提交带确认的媒体请求。
- 可以做什么
- 按标题搜索电影和剧集,返回带 TMDB ID 的排序结果与可用状态
- 按 TMDB ID 获取精确详情,剧集可看分季概览或某一季的剧集列表
- 按状态、类型和请求人筛选最近的请求列表
- 预览并提交媒体请求交由 Radarr 或 Sonarr 处理,写入前需确认
- 查询单个请求的状态、路由信息与下一步提示
- 汇总已配置的 Radarr/Sonarr 服务、质量配置与实例能力
- 适用场景
- 适合已自建 Jellyseerr 或 Overseerr 的用户,让助手在对话中查找片名、确认是否已可观看或已被请求,并直接提交请求。权限、配额与路由仍由 Seerr 实例自身控制。
- 运行要求
- 需要本地运行时:Node.js v24+(npx)或 Bun v1.4.0+。需要可访问的 Jellyseerr/Overseerr 实例及其 API 密钥,通过 SEERR_BASE_URL 和 SEERR_API_KEY 配置(以 X-Api-Key 请求头发送)。可选 HTTP 传输相关设置如 MCP_TRANSPORT_TYPE、MCP_HTTP_PORT 和 MCP_AUTH_MODE。
安装
在 SourceWeft 中
- 打开 控制台中的 Seerr Mcp Server,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
@cyanheads/seerr-mcp-server
Search Jellyseerr/Overseerr, check availability, and create guarded media requests via MCP. STDIO or Streamable HTTP.
Overview
Request movies and shows through Jellyseerr or Overseerr. Search titles, confirm the exact match, check availability and request status, and submit a request for Radarr or Sonarr to fulfill. Your Seerr instance keeps control of permissions, quotas, and routing.
Tools
Resources
All request data is also reachable via tools — request enumeration is the job of seerr_list_requests (the tool-only access path).
Skills
Capability reference
seerr_search_media tool
- Search titles with
mediaType: movie | tv | all; people are excluded.pageis 1–1000;limitis 1–20, default 10. - Returns TMDB matches and decoded
status/status4kfor tracked titles. Empty results return[]with a guidance notice. - Optional ISO 639-1
languageselects localized titles and overviews.
seerr_get_media tool
- Availability plus any existing open request for the title (avoids duplicate requests)
- TV: omit
seasonNumberfor a per-season summary, or pass one to fetch that season's episode list (season 0 is Specials) - A TMDB ID that doesn't resolve surfaces as a typed
media_not_foundwith a search-recovery hint (Jellyseerr's raw HTTP 500 is classified in the service layer)
seerr_list_requests tool
- Filter by lifecycle
filter,mediaType, andrequestedById; sort byaddedormodified, ascending or descending.takeis 1–100, default 20;skipselects the offset. - Returns decoded statuses, requester
{ id, displayName }, and an enrichment trailer with applied filters. includeTitles: truejoins media titles once per distinct title (default off); unresolved rows retain their data and are disclosed in the notice.
seerr_request_media tool
- Guarded write.
mode: preview(default) returns the resolved title and exactPOST /requestpayload without writing.mode: requestasks for confirmation bound to the same caller, title and payload; declined, cancelled or invalid answers returnrequest_cancelled. - TV requests require
seasons: "all"or a list such as[1, 2]; season 0 (Specials) requires special episodes to be enabled. Instance capability checks run before any POST; existing requests appear in output and duplicate rejections returnduplicate_request. - Optional routing overrides:
serverId,profileId,rootFolder,languageProfileId. Omit them to use Jellyseerr's defaults.
seerr_request_status tool
- Accepts
requestIdfromseerr_request_media'screated.requestIdorseerr_list_requests. A missing request returnsrequest_not_found. - Returns decoded
requestStatus,mediaStatus/mediaStatus4k, requester{ id, displayName }, routing (serverId,profileName,is4k), andstateGuidance. - Joins
titleon each call; it is absent when notmdbIdexists or the lookup fails.
seerr_service_options tool
- Returns instance version, media server, capability flags (
movie4kEnabled,series4kEnabled,partialRequestsEnabled,specialEpisodesEnabled), and service IDs, defaults and quality profiles. - Failed service legs retain the available results with a notice.
includePaths: trueexposes root-folder paths and free space; both are omitted by default.
seerr://request/{requestId} resource
- Accepts
requestIdfromseerr_request_mediaorseerr_list_requests; a missing request returnsrequest_not_found. - Mirrors
seerr_request_status, including redaction and a title join.titleis absent when notmdbIdexists or the lookup fails; resources take no per-read options.
Features
Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
HTTP requires stateful sessions for 2025-era confirmation rounds; explicit MCP_SESSION_MODE=stateless fails startup. Consent records expire after ten minutes and changed or replayed records ask again. Redemption excludes concurrent retries in one process; request creation makes one POST attempt without automatic retries. Cross-instance read-and-delete is not atomic: use shared strongly consistent filesystem, Supabase or Cloudflare D1 storage for routed retries, and account for duplicate-submission races; Cloudflare KV is unsuitable for consent records.
Seerr-specific:
- Read + guarded-request only — admin-scope endpoints (approve/decline, retry, edit/delete, media/file deletion, user/settings/sync) are excluded by design, not by API limitation
- PII/infra redaction centralized in one normalizer choke point — requesters project to
{ id, displayName }; operator email, Plex/Jellyfin tokens, andserviceUrlnever reach output; filesystem paths are opt-in viaincludePaths - Status decoding centralized in one helper — request and media statuses (including the separate 4K availability) decode to
{ raw, label }everywhere, forward-compatible with new Jellyseerr status codes - Capability validation against cached instance settings catches most bad requests before they reach the API
- A short-TTL settings cache avoids a round-trip on every preview
Agent-friendly output:
- Provenance and disclosure — searches echo the effective query; capped lists disclose truncation; a degraded service leg surfaces a notice instead of silently dropping data
- Typed, actionable errors —
media_not_found,request_not_found,seasons_required,four_k_not_enabled,duplicate_request, and more carry a recovery hint so callers can branch and retry without parsing prose
Getting started
Add the following to your MCP client configuration file, pointing SEERR_BASE_URL at your own Jellyseerr or Overseerr instance and supplying its API key.
Or with npx (no Bun required):
For Streamable HTTP, set the transport and start the server:
Prerequisites
- Bun v1.4.0 or higher (or Node.js v24+).
- A running Jellyseerr or Overseerr instance, and its API key (Settings → General → API Key).
Installation
- Clone the repository:
- Navigate into the directory:
- Install dependencies:
- Configure environment:
Configuration
All configuration is validated at startup via Zod schemas in src/config/server-config.ts. Key environment variables:
See .env.example for the full list of optional overrides.
Running the server
Local development
-
Build and run:
-
Run checks and tests:
Docker
The Dockerfile defaults to HTTP transport, stateful session mode, and logs to /var/log/seerr-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.
Project structure
Development guide
See CLAUDE.md/AGENTS.md for development guidelines and architectural rules. The short version:
- Handlers throw, framework catches — no
try/catchin tool logic - Use
ctx.logfor request-scoped logging,ctx.statefor tenant-scoped storage - Register new tools and resources via the barrels in
src/mcp-server/*/definitions/index.ts - Wrap the Jellyseerr API: validate raw → normalize and redact to a domain type → return the output schema; never fabricate missing fields, and never let operator PII or paths reach output
Contributing
Issues are welcome. Run checks and tests before submitting:
License
Apache-2.0 — see LICENSE for details.
来源:README.md,提交 ebf32a1
工具
0版本历史
4- v0.2.0最新Oct 29, 2026
- v0.1.5Oct 7, 2026
- v0.1.4Sep 21, 2026
- v0.1.3Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分