Plex MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PLEX_URL | Yes | The URL of your Plex Media Server (e.g., http://localhost:32400) | http://localhost:32400 |
| PLEX_TOKEN | Yes | Your Plex authentication token | |
| RADARR_URL | No | The URL of your Radarr instance (e.g., http://localhost:7878) | http://localhost:7878 |
| SONARR_URL | No | The URL of your Sonarr instance (e.g., http://localhost:8989) | http://localhost:8989 |
| RADARR_API_KEY | No | API Key for Radarr (optional at startup, required for Radarr tools) | |
| SONARR_API_KEY | No | API Key for Sonarr (optional at startup, required for Sonarr tools) | |
| TRAKT_CLIENT_ID | No | Your Trakt.tv API Client ID | |
| TRAKT_CLIENT_SECRET | No | Your Trakt.tv API Client Secret |
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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_librariesA | Get all Plex libraries |
| get_library_itemsA | List items in a library with pagination (useful for large libraries) |
| export_libraryA | Export a full library to a JSON file (within ./exports) |
| search_mediaC | Search for media in Plex libraries |
| get_recently_addedC | Get recently added media |
| get_on_deckA | Get on deck (continue watching) items |
| get_media_detailsA | Get detailed information about a specific media item |
| get_editable_fieldsB | Get editable fields and available tags for a media item |
| get_playlist_itemsB | Get items in a Plex playlist |
| get_playlistsA | Get all Plex playlists |
| get_watchlistA | Get the user's Plex watchlist |
| get_recently_watchedB | Get recently watched movies and shows |
| get_watch_historyB | Get detailed watch history with session information |
| get_active_sessionsA | Get currently active Plex streams — who is watching what right now, including player state, session location, transcode decisions and media quality |
| get_fully_watchedA | Get all fully watched movies and shows from a library |
| get_watch_statsB | Get comprehensive watch statistics (Tautulli-style analytics) |
| get_user_statsC | Get user-specific watch statistics |
| get_library_statsC | Get library-specific statistics |
| get_popular_contentB | Get most popular content by plays or duration |
| get_recommendationsA | Get personalized movie recommendations from your Plex library based on watch history. Analyzes genres, directors, and actors you've watched to score unwatched films. Supports per-user recommendations for multi-user Plex servers. If Trakt is configured, uses your rating profile to further refine scores. |
| update_metadataA | Update metadata fields for a media item (requires PLEX_ENABLE_MUTATIVE_OPS=true) |
| update_metadata_from_jsonA | Update metadata from a JSON payload (requires PLEX_ENABLE_MUTATIVE_OPS=true) |
| create_playlistA | Create a new Plex playlist (requires PLEX_ENABLE_MUTATIVE_OPS=true). For regular playlists, ratingKeys is required — Plex does not support creating empty playlists. For smart playlists, set smart=true and provide librarySectionId (and optionally libtype / smartFilter). |
| add_to_playlistA | Add a media item to a playlist (requires PLEX_ENABLE_MUTATIVE_OPS=true) |
| remove_from_playlistA | Remove an item from a playlist (requires PLEX_ENABLE_MUTATIVE_OPS=true) |
| clear_playlistA | Clear all items from a playlist (preview unless confirm=true; requires PLEX_ENABLE_MUTATIVE_OPS=true) |
| delete_playlistA | Delete a Plex playlist without deleting the underlying media (requires PLEX_ENABLE_MUTATIVE_OPS=true) |
| add_to_watchlistA | Add a local Plex movie or show to the account watchlist (requires PLEX_ENABLE_MUTATIVE_OPS=true) |
| remove_from_watchlistA | Remove a movie or show from the account watchlist by global Plex GUID or local rating key (requires PLEX_ENABLE_MUTATIVE_OPS=true) |
| rate_mediaA | Set the user's Plex rating for a media item (requires PLEX_ENABLE_MUTATIVE_OPS=true) |
| mark_watchedA | Mark a Plex media item as watched (requires PLEX_ENABLE_MUTATIVE_OPS=true) |
| mark_unwatchedA | Mark a Plex media item as unwatched (requires PLEX_ENABLE_MUTATIVE_OPS=true) |
| trakt_authenticateB | Start Trakt.tv OAuth authentication process |
| trakt_complete_authB | Complete Trakt.tv authentication with authorization code |
| trakt_get_auth_statusA | Check Trakt.tv authentication status |
| trakt_sync_to_traktA | Sync Plex watch history to Trakt.tv |
| trakt_sync_from_traktB | Get watch history from Trakt.tv for comparison |
| trakt_get_user_statsC | Get enhanced viewing statistics from Trakt.tv |
| trakt_start_scrobblingB | Enable real-time scrobbling to Trakt.tv |
| trakt_get_sync_statusB | Check status of ongoing sync operations |
| trakt_searchC | Search for movies and shows on Trakt.tv |
| sonarr_get_seriesA | List all series in Sonarr with optional title filter |
| sonarr_searchA | Search TheTVDB for new series to add to Sonarr |
| sonarr_add_seriesB | Add a new series to Sonarr by TVDB ID |
| sonarr_get_missingA | Get missing/wanted episodes from Sonarr |
| sonarr_get_queueA | Get the current Sonarr download queue |
| sonarr_get_calendarA | Get upcoming episodes from the Sonarr calendar |
| sonarr_get_profilesA | Get Sonarr quality profiles and root folders (needed before adding series) |
| sonarr_trigger_searchA | Trigger a search for missing episodes, optionally for a specific series |
| radarr_get_moviesA | List all movies in Radarr with optional title filter |
| radarr_searchA | Search TMDB for new movies to add to Radarr |
| radarr_add_movieB | Add a new movie to Radarr by TMDB ID |
| radarr_get_missingA | Get missing/wanted movies from Radarr |
| radarr_get_queueA | Get the current Radarr download queue |
| radarr_get_calendarB | Get upcoming movies from the Radarr calendar |
| radarr_get_profilesA | Get Radarr quality profiles and root folders (needed before adding movies) |
| radarr_trigger_searchB | Trigger a search for missing movies, optionally for a specific movie |
| arr_get_statusA | Check connection status of Sonarr and Radarr services |
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 58 tools
The tools are grouped by domain (Plex, Trakt, Sonarr, Radarr) with distinct prefixes, making most tools clearly distinguishable. However, there are some overlapping concepts within Plex stats (e.g., get_watch_history vs get_watch_stats vs get_user_stats vs get_library_stats) and update_metadata vs update_metadata_from_json, which could cause minor confusion in tool selection.
The naming pattern is mostly consistent, using verb_noun structure with domain prefixes (get_, update_, create_, etc., for Plex; trakt_*, sonarr_*, radarr_* for integrations). Minor deviations exist, such as arr_get_status instead of a per-integration prefix, and some tools like update_metadata_from_json are verbose but still follow the pattern.
With 58 tools, this server is quite heavy. While the integrations with Trakt, Sonarr, and Radarr expand the scope, the sheer number makes it overwhelming for an agent to parse and select the right tool, especially with many similar get_* functions. This exceeds the typical comfortable range and borders on being excessive for a single MCP server.
The tool surface covers the core workflows for Plex (browsing, metadata, playlists, watchlist, ratings, watch status) and integrations with Trakt (auth, sync, scrobbling) and Sonarr/Radarr (adding, searching, monitoring). Minor gaps exist, such as absence of update/delete operations for Sonarr/Radarr and no media deletion from Plex, but these are not critical for typical usage.