plex-director-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SSH_USER | No | SSH username used to connect to remote Ubuntu hosts. Optional. | |
| BACKUP_DIR | Yes | Directory path used for cluster backup operations (e.g. ./backups). | |
| RADARR_URL | Yes | Base URL of your Radarr instance (e.g. http://radarr:7878) | |
| SONARR_URL | No | Base URL of your Sonarr instance (e.g. http://sonarr:8989). Optional. | |
| SABNZBD_URL | Yes | Base URL of your SABnzbd instance (e.g. http://sabnzbd:8080) | |
| PROWLARR_URL | Yes | Base URL of your Prowlarr instance (e.g. http://prowlarr:9696) | |
| SSH_KEY_PATH | No | Path to the SSH private key file (e.g. /path/to/id_ed25519). Optional. | |
| TAUTULLI_URL | Yes | Base URL of your Tautulli instance (e.g. http://tautulli:8181) | |
| TMDB_API_KEY | Yes | API key for The Movie Database (TMDb) | |
| UBUNTU_HOSTS | No | Comma-separated list of remote Ubuntu hosts to monitor, e.g. '192.168.1.10,192.168.1.11'. Optional. | |
| RADARR_API_KEY | Yes | API key for Radarr | |
| SONARR_API_KEY | No | API key for Sonarr. Optional. | |
| QBITTORRENT_URL | No | Base URL of your qBittorrent instance (e.g. http://qbittorrent:8080). Optional. | |
| SABNZBD_API_KEY | Yes | API key for SABnzbd | |
| PROWLARR_API_KEY | Yes | API key for Prowlarr | |
| QBITTORRENT_PASS | No | Password for qBittorrent. Optional. | |
| QBITTORRENT_USER | No | Username for qBittorrent. Optional. | |
| TAUTULLI_API_KEY | Yes | API key for Tautulli | |
| DISCORD_WEBHOOK_URL | No | Discord webhook URL for notifications. Optional. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| check_movie_statusA | Checks if a specific movie exists in the Radarr library on the Ubuntu cluster and returns its monitoring status with artwork. |
| diagnose_missing_mediaA | Traces a movie through Radarr metadata, history, and active download client queues to pinpoint why it is missing. |
| search_plex_libraryA | Searches the movies and TV shows actually in the user's Plex library (across all movie and show libraries, including 4K) by genre, actor, title, release year, and/or library. Filters can be combined, e.g. genre 'Horror' with year 1982, or genre 'Horror' with library '4k'. Pass mediaType 'movie' when the user asks about movies/films, 'show' for TV/series/shows, and leave it out (any) when the question is about titles in general, e.g. everything with an actor; a show in several libraries is one result, with its season and episode counts. Some libraries (such as Sports) may be left out unless named in the library filter. Use this to answer what the user owns or can watch; use check_movie_status for Radarr/download status of one specific movie. Watch state: use watched 'unwatched' (never played), 'inProgress' (started but not finished - this is the complete list of unfinished titles, unlike get_on_deck's short recent list) or 'watched' (finished), and notWatchedInYears for 'haven't watched in N years' (a never-watched title counts from when it was added); they are for the Plex account the app is connected with. sort orders by recentlyAdded, lastWatched or leastRecentlyWatched instead of by title. Also filter by network (or movie studio), contentRating (TV-MA, R...), minRating (audience rating 0-10), yearFrom/yearTo (a decade is 1990 to 1999) and addedWithinDays ('what showed up this week?'). Plex does not know whether a show is continuing or ended; use Sonarr tools for that. Always express a narrowing the user asks for (4K, a genre, a year, unwatched...) as a filter here rather than filtering results yourself, because the results table shown to the user contains exactly the rows this returns. The default limit is small: when the user wants everything ('all', 'every', 'list them'), pass limit 500; if the reply says more matches remain, call again with the offset it gives. |
| get_on_deckA | Answers 'what should I watch next?' from Plex's On Deck ('Continue Watching'): the movies the user has partly played and, for each show they are following, the episode to watch next (or the one they are part way through), most recently active first, with how far through each one is. A movie held in HD and 4K is one entry. Use title for 'which episode is next for ?' and mediaType 'show' for 'which episode is next in each show?'. IMPORTANT: On Deck is only Plex's short recent list (at most 50 items across everything), not every unfinished title, so for 'which movies did I start but not finish?', 'what haven't I finished?' or any complete list use search_plex_library with watched 'inProgress' instead. The watch state is for the Plex account the app is connected with. |
| search_episodesA | Finds individual TV episodes in the user's Plex library: 'the episode of where ...', 'which episode is called ...', episodes that aired in a date range, a show's season premieres or finales. IMPORTANT: Plex cannot search episode plots across the whole library. To search PLOTS (summaries) you must name the show (the show argument); the words then match the episode title and its plot. Without a show, only episode TITLES (and air dates) can be searched. When the user describes an episode by its plot and no show is known, ask which show or say only titles can be searched. Use season and episode for a specific one, airedFrom/airedTo (YYYY-MM-DD) for 'aired in March 2026', and episodeType 'premiere' or (with a show) 'finale'. Each result shows the show, season and episode numbers, air date and watch state. |
| find_series_by_qualityA | Finds TV shows by the video quality Sonarr downloaded: 'which shows do I only have in 720p?' (bestAtMost 720), 'which shows have 1080p or better?' (bestAtLeast 1080), 'which shows mix qualities?' (mixedOnly, useful as upgrade candidates). Lists the shows with the lowest best quality first, each with how many files are at each resolution, and opens with how many shows are at each level. It only sees what Sonarr downloaded, so a 4K copy in a separate Plex 4K library that Sonarr does not manage is not counted: for 4K use search_plex_library with library '4k'. Use folder to narrow to a kind of show by its Sonarr folder ('kids', 'anime', 'sports'). The first call reads every show's files (about 15 seconds) and is then cached for 5 minutes. Read-only. |
| resolve_actor_filmographyA | Resolves an actor's name to their official TMDb filmography (movies and TV shows), filtering out talk shows, news, self-appearances, and uncredited roles. When Plex is configured, marks which of those titles the user already has in their Plex library and which they don't. Use this to answer which of an actor's movies or shows the user is missing. Pass mediaType 'movie' when the user asks about movies/films, 'show' for TV/series, and leave it out (any) when the question is about the actor's work in general; keep the same mediaType on follow-ups. |
| check_series_completenessA | Answers 'do I have every episode of ?' from Sonarr's episode list: how many aired episodes are downloaded, which seasons and episodes are missing, what has not aired yet, and whether Sonarr is monitoring the show (so will fetch the rest). Use this for one specific TV show; use find_series_gaps to see which shows have gaps. It does not check what Plex has scanned. |
| find_series_gapsA | Lists the TV shows in Sonarr that are missing aired episodes, most missing first, with how many are downloaded, whether Sonarr is monitoring each show, and whether it is actively looking for the rest. Use it for 'which of my shows have gaps?', 'what am I missing?' or 'which shows are only missing a few episodes?'. Use monitored 'searching' for 'what is Sonarr still looking for?'. Express any narrowing as a filter (monitored, minMissing, maxMissing, hideEmpty) rather than filtering the result yourself, because the table shown to the user is exactly the rows returned. Most gaps are in shows that are deliberately not monitored or only partly kept; 'hideEmpty' drops shows with nothing downloaded and 'maxMissing' finds near-complete ones. For one show use check_series_completeness. |
| check_series_statusA | The TV counterpart of check_movie_status: what Sonarr knows about one show - whether it is monitored, its quality profile and location, when the next episode airs, when something was last downloaded, what is in the download queue, and how many aired episodes are downloaded. Use it for 'is monitored?', 'what quality is ?', 'when does come back?'. For which episodes are missing use check_series_completeness; for why one is missing use diagnose_missing_episodes. |
| diagnose_missing_episodesA | Explains WHY aired episodes of a show have no file, the TV counterpart of diagnose_missing_media: from Sonarr's history and download queue it says, per group of episodes, whether they were never grabbed, were grabbed but never imported, had a download fail (and why), had their file removed, are stuck in the queue, or are simply not monitored so Sonarr never looks for them. Read-only: it changes nothing. Give season (and episode) to look at just those; without them it groups every missing episode of the show. Use check_series_completeness first to see which episodes are missing. |
| get_upcoming_episodesA | What TV episodes are coming, from Sonarr's calendar. With no title it answers 'what's on this week?': every episode airing in the next few days (default 7, up to 60) from the shows Sonarr monitors, by day, with season premieres and finales flagged and episodes already downloaded marked. With a title it answers 'when does come back?': that show's next episodes, or that none is scheduled yet (or that it has ended). Only shows Sonarr monitors are listed by default and the number left out is reported; use monitored 'unmonitored' when the user asks about shows they do not monitor, or 'any' for everything (express that as the filter, because the table shown to the user is exactly the rows returned). Dates are the network's own air dates. |
| get_plex_activityA | Fetches real-time playback streaming analytics from Plex via Tautulli to monitor user context and transcoding strain. |
| get_library_analyticsA | Queries historical statistics regarding most watched movies, total user count, and overall watch metrics. |
| get_background_jobsA | Retrieves active, pending, or completed persistent media processing jobs running on the server cluster. |
| update_job_statusA | Updates the operational state of an active or pending background batch job. |
| plan_media_upgradeC | Evaluates and safely schedules a controlled batch upgrade for specified media classes while enforcing storage policies. |
| execute_next_job_stepA | Processes a single sequential block item from an active background batch queue entry to prevent API flooding. (Jobs that have been started are also advanced automatically, one item per minute, by the job runner.) |
| check_indexer_healthA | Audits all Usenet indexers and torrent trackers configured in Prowlarr to flag connection failures or bans, and reports Prowlarr's own system health warnings. |
| search_and_select_moviesA | Searches TMDb for matching movies and renders a structured Markdown multi-choice grid interface for confirmation. |
| confirm_selected_choicesA | Adds the user's numbered choices from the last search_and_select_movies grid to Radarr as monitored movies and starts a download search for each. Movies already in Radarr are reported, not added twice. Uses the quality profile you name, otherwise the default set on the Settings page, otherwise Radarr's first quality profile; and Radarr's first root folder unless told otherwise. |
| run_cluster_backupA | Asks each configured Servarr app (Radarr, Sonarr, Prowlarr) to create its built-in database backup, waits for each to finish, and confirms a new backup file appeared, reporting the file's name, size and time. The backups stay in each app's own backup folder; nothing is copied. |
| manage_stalled_downloadsA | Lists qBittorrent downloads that are stalled or slower than a threshold (AUDIT), and deletes chosen ones with their downloaded files (PURGE_STALLED). PURGE_STALLED only deletes the torrents whose hashes you pass, taken from an AUDIT the user has seen and agreed to; it never deletes anything else, and Radarr and Sonarr are not told. |
| get_cluster_infrastructure_healthA | Collects real-time CPU utilization, RAM usage, and active Docker container counts across all configured Ubuntu hosts. |
| trust_new_host_keyA | Forgets the remembered SSH key of a monitored host so the next check trusts the key it presents now. Only for a host the user rebuilt or reinstalled: an unexpected key change can mean another machine is impersonating it. Confirm with the user first. |
| get_cluster_hardware_analyticsA | Fetches real-time CPU load and memory allocation for every configured cluster host over SSH, as a Markdown table. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 26 tools
Most tools are clearly separated by their descriptions, especially across Plex discovery, Sonarr episode diagnostics, Radarr movie status, and job control. However, get_cluster_infrastructure_health and get_cluster_hardware_analytics overlap heavily, and the background job tools require careful reading to distinguish retrieval, update, and step execution.
All tool names use snake_case and overwhelmingly follow predictable verb_noun or verb_noun_phrase patterns such as check_*, get_*, find_*, diagnose_*, and search_*. Minor outliers like get_on_deck and search_and_select_movies remain readable and do not break the overall convention.
At 26 tools, the surface is heavy and sits just above the rubric's 25+ 'too many' threshold. The broad server scope across Plex, Radarr, Sonarr, Prowlarr, qBittorrent, cluster infrastructure, and background jobs justifies many tools, but some consolidation—especially around cluster metrics and job control—would improve scoping.
The server covers diagnostics, status checks, search, backups, and movie-addition workflows well, but there are notable lifecycle gaps. There is no tool to add or monitor TV series, no general update/delete capability for Radarr/Sonarr/Plex items, and no media removal beyond stalled torrents.