Mms
Security Notice
This extension includes AI agent skills that can modify AI assistant behavior. Review the skill files before installing.
Media management system — content discovery, deduplication, download protocol handling, LLM-powered file organization, and subtitle extraction
Organizer scene route places new shows deterministically (shows//sN) unless an existing dir looks like the same show; filler words no longer count in similar-dir matching; Ollama only health-checked when the LLM is needed; organizer test accepts scene parse items.
| Argument | Type | Description |
|---|---|---|
| query | string | Show name to search for |
| provider | enum | Source provider |
| resolution? | string | Resolution filter |
| preferGroup? | string | Preferred release group (e.g. MeGusta) |
| preferCodec? | string | Preferred codec (e.g. HEVC) |
| nyaaUser? | string | Nyaa uploader filter |
| nyaaQuery? | string | Override search query |
| eztvUrl? | string | Custom EZTV RSS URL |
| eztvImdbId? | string | IMDb ID (tt0239195): search EZTV's archival API instead of the rolling RSS feed |
| slug? | string | Canonical catalog slug, stamped on every item (dedup checks disk at /<slug>/s<N>) |
| onlyEpisodes? | array | Keep only these episodes, e.g. dedup's missing items; anything else is dropped |
| newznabUrl? | string | Newznab API base URL |
| newznabApiKey? | string | Newznab API key |
| newznabCat? | string | Newznab category ID |
Resources
Global Arguments
| Argument | Type | Description |
|---|---|---|
| transmissionUser? | string | Transmission RPC username |
| Argument | Type | Description |
|---|---|---|
| uri | string | Magnet URI or NZB URL |
Resources
Resources
| Argument | Type | Description |
|---|---|---|
| maxJobs? | number | |
| retryHours? | number | |
| name? | string |
| Argument | Type | Description |
|---|---|---|
| maxJobs? | number | Maximum pending jobs to plan |
| retryHours? | number | Re-plan a job left in staging after this long even if the rules haven't changed |
| scene? | array | @keeb/scenerules parse items for the pending files (see pending); enables the deterministic scene route |
| name? | string | Suffix for the plan-<name> resource |
| Argument | Type | Description |
|---|---|---|
| name? | string | Plan to apply |
| judgeModel? | string | Model whose evaluation-<key> resources hold the season_fits scores |
| threshold? | number | Hold LLM-placed files whose season_fits P(yes) is below this |
| Argument | Type | Description |
|---|---|---|
| cases | array | Filenames with the directory each belongs in |
| models | array | Ollama models to compare, e.g. ['qwen3:14b', 'gemma4:26b'] |
| llmOnly? | boolean | Send every case to the LLM (skip special cases and the fast path), to compare models rather than the pipeline |
| structured? | boolean | Constrain stage 1 with Ollama structured outputs (JSON Schema), as production does |
| catalogHints? | boolean | Tell stage 2 which existing catalog dirs look like the show, as production does |
| scene? | array | @keeb/scenerules parse items for the case filenames; enables the scene route (ignored with llmOnly) |
| name? | string | Suffix for the eval-<name> resource |
| Argument | Type | Description |
|---|---|---|
| filename | string | Filename to classify |
| scene? | array | @keeb/scenerules parse items (as plan takes them); enables the scene route |
Resources
| Argument | Type | Description |
|---|---|---|
| path | string | Path to the input MKV file |
| Argument | Type | Description |
|---|---|---|
| paths | array | Catalog directories to walk |
| recursive? | boolean | Walk subdirectories too |
Resources
| Argument | Type | Description |
|---|---|---|
| tz? | string | Timezone for schedule times |
Resources
Global Arguments
| Argument | Type | Description |
|---|---|---|
| apiKey | string | TMDB API key (v3) |
| Argument | Type | Description |
|---|---|---|
| query | string | TV show name to search for |
| limit? | number | Max results to return |
| Argument | Type | Description |
|---|---|---|
| tmdbId | number | TMDB TV id |
| Argument | Type | Description |
|---|---|---|
| query | string | Movie title to search for |
| year? | number | Optional release-year hint to disambiguate |
| limit? | number | Max results to return |
Resources
Global Arguments
| Argument | Type | Description |
|---|---|---|
| tmdbApiKey | string | TMDB API key (v3) |
| headless? | boolean | Run Playwright headless. |
| nodeModulesDir? | string | node_modules directory that already has playwright installed. When unset, the model installs a pinned playwright into $XDG_CACHE_HOME/swamp-mms/scraper (default ~/.cache) on first use, so no consumer-repo node_modules is needed. |
| Argument | Type | Description |
|---|---|---|
| sort | enum | Which Rotten Tomatoes TV browse list to scrape |
| loadMoreClicks? | number | How many times to click Load More before extracting (0 = first page only) |
| Argument | Type | Description |
|---|---|---|
| list? | enum | Which Rotten Tomatoes movie shelf to scrape. at_home = streaming/VOD (watchable now), in_theaters = theatrical, coming_soon = unreleased |
| sort? | enum | Sort order within the shelf. 'newest' is the only one RT honours reliably — the others often degrade to an alphabetical listing. |
| loadMoreClicks? | number | How many times to click Load More before extracting (0 = first page only) |
Resources
Global Arguments
| Argument | Type | Description |
|---|---|---|
| personaPath? | string | Default persona markdown path. Relative paths resolve under the consumer's repo root. If unset, the bundled `personas/host.md` is used. |
| Argument | Type | Description |
|---|---|---|
| browseSort | enum | Which RT browse list to evaluate (matches rottentomatoes browseSort tag). |
| limit? | number | Maximum number of shows to evaluate, taken by descending TMDB popularity. |
| minScore? | number | Blended RT score a lane-matching show must clear to earn Watch. Below this it is in-lane but under the bar. |
| catalogModel? | string | Model name to read the existing catalogue from, for the persona's 'new season of something I already watch' auto-include. Set empty to disable the lookup. |
| Argument | Type | Description |
|---|---|---|
| browseSort | enum | Which RT browse list to evaluate (matches rottentomatoes browseSort tag). |
| limit? | number | Maximum number of shows to package for evaluation. |
| personaPath? | string | Persona markdown path for this run. Overrides the model's personaPath global arg. Relative paths resolve under the consumer's repo root. |
| bundledPersona? | string | Name of a persona bundled with @keeb/mms (file in `personas/`, without the .md suffix). Use 'host' for the default. Wins over personaPath only when no path is given. |
| Argument | Type | Description |
|---|---|---|
| collectVersion? | number | Version of tv_recommender's `pack` resource to aggregate against. Defaults to latest. |
| Argument | Type | Description |
|---|---|---|
| browseSort | enum | Which RT browse list to evaluate (matches rottentomatoes browseSort tag). |
| limit? | number | Maximum number of shows to package, taken by descending TMDB popularity. |
| personaPath? | string | Persona markdown path for this run. Overrides the model's personaPath global arg. Relative paths resolve under the consumer's repo root. |
| catalogModel? | string | Model name to read the existing catalogue from. Shows already in it are auto-included and not sent for evaluation. Set empty to disable. |
| Argument | Type | Description |
|---|---|---|
| evaluatorModel? | string | Name of the @swamp/typesafe-ai instance whose ask_batch answered the pack's items. |
| minScore? | number | Blended RT score an in-lane show must clear to earn Watch — the same bar as evaluate. |
| Argument | Type | Description |
|---|---|---|
| library? | string | Catalogue library display name whose series become the calibration set — the same value passed to the catalogue model's `series` method. |
| catalogModel? | string | Model name holding the catalogue's `series` resources. |
| personaPath? | string | Persona markdown path whose rubric is being calibrated. Overrides the model's personaPath global arg. |
| Argument | Type | Description |
|---|---|---|
| evaluatorModel? | string | Name of the @swamp/typesafe-ai instance whose ask_batch answered the catalogue-pack. |
Resources
Summarize an add / add_from_source invocation — lists torrents/NZBs accepted and items that failed to add
Summarize dedup filter results: what's new vs what was skipped
Summarize discovered content from source searches
Show active downloads with name, progress, and state
Render the host's Watch/Skip verdicts for a tv_recommender.evaluate, aggregate_typesafe (or legacy aggregate) run — sorted by score within Watch, then Skip.
Modified 3 behaviors
Modified 3 behaviors
subtitles: extract_recent now writes a single run rollup resource per batch (window/cutoff, jobs considered, extracted/skipped/failed counts, plus per-file results and captured failures) instead of one extraction per .srt. Per-file failures no longer abort the batch.
organizer: One Piece special-case — 'One Piece - NNNN' files route to anime/completed/one-piece/s23 (current Elbaph arc) so Jellyfin resolves the correct arc name and art.
tmdb-lookup: new seasons method lists a show's seasons with cumulative absolute episode ranges, for computing episode->season breaks.
Modified 2 behaviors
Added 1 behaviors. Added 1 reports
Added 1 behaviors
Add extract_recent batch method to subtitles for organize-and-clean wiring
Modified 3 behaviors
Added 2, modified 4 behaviors. Added 1 reports
Added 1 behaviors
Added 1 skills
Modified 1 behaviors
Added 1 reports
- Has README or module doc2/2earned
- README has a code example1/1earned
- README is substantive1/1earned
- Most symbols documented0/1missing
- No slow types (deprecated)1/1earned
- Dependencies pass trust audit2/2earned
- Docs keep secrets in a vault1/1earned
- Has description1/1earned
- Platform support declared (or universal)2/2earned
- License1/2partial
no SPDX license declared
- Verified public repository2/2earned