Plex MCP Server (vladimir-tutin/plex-mcp-server) is an MCP server listed on the M8ven Trust Index. It scores 58 out of 100, grade D. It declares 55 tools. No publisher has claimed this listing.
MCP Server for Plex to allow LLMs to converse with Plex.
Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.
How we verified
Verified is a snapshot. Live keeps it current, and builds your track record.
⚡ Connect GitHub → continuous verification on every pushwhy connect →Who stands behind it
vladimir-tutin
Source: mcp.so · also listed on Glama
Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →
Install from
The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.
These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.
server_get_plex_logsGet Plex server logs. Args: num_lines: Number of log lines (or matches) to retrieve (default: 100) log_type: Type of log to retrieve (server, scanner, transcoder, updater) or specific filename/partial match start_line: Starting line number to retrieve (0-indexed). If None, retrieves last num_lines. …
server_get_infoGet detailed information about the Plex server. Returns: Dictionary containing server details including version, platform, etc.
server_get_bandwidthGet bandwidth statistics from the Plex server. Args: timespan: Time span for bandwidth data (months, weeks, days, hours, seconds) lan: Filter by local network (true/false) Returns: Dictionary containing bandwidth statistics
server_get_current_resourcesGet resource usage information from the Plex server. Returns: Dictionary containing resource usage statistics
server_get_butler_tasksGet information about Plex Butler tasks. Returns: Dictionary containing information about scheduled and running butler tasks
server_get_alertsGet real-time alerts from the Plex server by listening on a websocket. Args: timeout: Number of seconds to listen for alerts (default: 15) Returns: Dictionary containing server alerts and their details
server_run_butler_taskManually run a specific Plex Butler task now. Args: task_name: Name of the butler task to run Returns: Success or error message
server_empty_trashEmpty trash for a specific library or all libraries. This permanently deletes all items that have been marked for deletion. Args: library_name: Optional name of the library to empty trash for. If not provided, empties trash for all libraries. Returns: Success or error message
server_optimize_databaseOptimize the Plex database. This runs database optimization to improve performance and reduce database size. Returns: Success or error message
server_clean_bundlesClean unused media bundles. This removes unused media bundles (metadata, artwork) that are no longer associated with any media items. Returns: Success or error message
client_listList all available Plex clients including idle players. Uses myPlexAccount.resources() to discover all players (both active and idle), not just those with active sessions. Args: include_details: Whether to include detailed information about each client active_only: If True, only return clients that …
client_get_detailsGet detailed information about a specific Plex client. Args: client_name: Name or machineIdentifier of the client to get details for Returns: Dictionary containing client details
client_get_timelinesGet the current timeline information for a specific Plex client. Args: client_name: Name or machineIdentifier of the client to get timeline for Returns: Timeline information for the client
client_start_playbackStart playback of media on a specified client. Args: media_title: Title of the media to play (optional if rating_key is provided) client_name: Optional name of the client to play on (will prompt if not provided) offset: Optional time offset in milliseconds to start from library_name: Optional name o…
client_control_playbackControl playback on a specified client. Args: client_name: Name of the client to control (use machine identifier or title from client_list) action: Action to perform (play, pause, stop, skipNext, skipPrevious, stepForward, stepBack, seekTo, seekForward, seekBack, mute, unmute, setVolume) parameter: …
client_navigateNavigate a Plex client interface. Args: client_name: Name or machineIdentifier of the client to navigate action: Navigation action to perform (moveUp, moveDown, moveLeft, moveRight, select, back, home, contextMenu)
client_set_streamsSet audio, subtitle, or video streams for current playback on a client. Args: client_name: Name or machineIdentifier of the client to set streams for audio_stream_id: ID of the audio stream to switch to subtitle_stream_id: ID of the subtitle stream to switch to, use '0' to disable video_stream_id: I…
collection_listList all collections on the Plex server or in a specific library. Args: library_name: Optional name of the library to list collections from
collection_createCreate a new collection with specified items. Args: collection_title: Title for the new collection library_name: Name of the library to create the collection in item_titles: List of media titles to include in the collection (optional if item_ids is provided) item_ids: List of media IDs to include in…
collection_add_toAdd items to an existing collection. Args: collection_title: Title of the collection to add to (optional if collection_id is provided) collection_id: ID of the collection to add to (optional if collection_title is provided) library_name: Name of the library containing the collection (required if usi…
collection_remove_fromRemove items from a collection. Args: collection_title: Title of the collection to remove from (optional if collection_id is provided) collection_id: ID of the collection to remove from (optional if collection_title is provided) library_name: Name of the library containing the collection (required i…
collection_deleteDelete a collection. Args: collection_title: Title of the collection to delete (optional if collection_id is provided) collection_id: ID of the collection to delete (optional if collection_title is provided) library_name: Name of the library containing the collection (required if using collection_ti…
collection_editComprehensively edit a collection's attributes. Args: collection_title: Title of the collection to edit (optional if collection_id is provided) collection_id: ID of the collection to edit (optional if collection_title is provided) library_name: Name of the library containing the collection (required…
library_listList all available libraries on the Plex server.
library_get_statsGet statistics for a specific library. Args: library_name: Name of the library to get stats for
library_refreshRefresh a specific library or all libraries. Args: library_name: Optional name of the library to refresh (refreshes all if None)
library_scanScan a specific library or part of a library. Args: library_name: Name of the library to scan path: Optional specific path to scan within the library
library_get_detailsGet detailed information about a specific library, including folder paths and settings. Args: library_name: Name of the library to get details for
library_get_recently_addedGet recently added media across all libraries or in a specific library. Args: count: Number of items to return (default: 50) library_name: Optional library name to limit results to
library_get_contentsGet the filtered and paginated contents of a specific library. Args: library_name: Name of the library to get contents from unwatched: If True, only return unwatched items watched: If True, only return watched items sort: Sort order (e.g., 'addedAt:desc', 'title:asc') offset: Number of items to skip…
media_searchSearch for media across all libraries. Args: query: Search term to look for content_type: Optional content type to limit search to (movie, show, episode, track, album, artist or use comma-separated values for HTTP API like movies,music,tv)
media_get_detailsGet detailed information about a specific media item using PlexAPI's Media and Mixin functions. Args: media_title: Title of the media to get details for (optional if media_id is provided) media_id: Plex media ID/rating key to directly fetch the item (optional if media_title is provided) library_name…
media_edit_metadataEdit metadata for a specific media item. Args: media_title: Title of the media to edit library_name: Optional library name to limit search to new_title: New title for the item new_summary: New summary/description new_rating: New rating (0-10) new_release_date: New release date (YYYY-MM-DD) new_genre…
media_get_artworkGet images for a specific media item. Args: media_title: Title of the media to get images for (optional if media_id is provided) media_id: ID of the media to get images for (optional if media_title is provided) library_name: Optional library name to limit search to when using media_title image_types…
media_deleteDelete a media item from the Plex library. Args: media_title: Title of the media to delete (optional if media_id is provided) media_id: ID of the media to delete (optional if media_title is provided) library_name: Optional library name to limit search to when using media_title
media_set_artworkSet artwork for a specific media item. Args: media_title: Title of the media to set artwork for library_name: Optional library name to limit search to art_type: Type of artwork to set (poster, background/art, logo) filepath: Path to the local image file url: URL to the image file lock: Whether to lo…
media_list_available_artworkList all available artwork for a specific media item. Args: media_title: Title of the media to list artwork for (optional if media_id is provided) media_id: ID of the media to list artwork for (optional if media_title is provided) library_name: Optional library name to limit search to when using med…
playlist_listList all playlists on the Plex server. Args: library_name: Optional library name to filter playlists from content_type: Optional content type to filter playlists (audio, video, photo)
playlist_createCreate a new playlist with specified items. Args: playlist_title: Title for the new playlist item_titles: List of media titles to include in the playlist library_name: Optional library name to limit search to summary: Optional summary description for the playlist
playlist_editEdit a playlist's details such as title and summary. Args: playlist_title: Title of the playlist to edit (optional if playlist_id is provided) playlist_id: ID of the playlist to edit (optional if playlist_title is provided) new_title: Optional new title for the playlist new_summary: Optional new sum…
playlist_upload_posterUpload a poster image for a playlist. Args: playlist_title: Title of the playlist to set poster for (optional if playlist_id is provided) playlist_id: ID of the playlist to set poster for (optional if playlist_title is provided) poster_url: URL to an image to use as poster poster_filepath: Local fil…
playlist_copy_to_userCopy a playlist to another user account. Args: playlist_title: Title of the playlist to copy (optional if playlist_id is provided) playlist_id: ID of the playlist to copy (optional if playlist_title is provided) username: Username of the user to copy the playlist to
playlist_add_toAdd items to a playlist. Args: playlist_title: Title of the playlist to add to (optional if playlist_id is provided) playlist_id: ID of the playlist to add to (optional if playlist_title is provided) item_titles: List of media titles to add to the playlist (optional if item_ids is provided) item_ids…
playlist_remove_fromRemove items from a playlist. Args: playlist_title: Title of the playlist to remove from (optional if playlist_id is provided) playlist_id: ID of the playlist to remove from (optional if playlist_title is provided) item_titles: List of media titles to remove from the playlist
playlist_deleteDelete a playlist. Args: playlist_title: Title of the playlist to delete (optional if playlist_id is provided) playlist_id: ID of the playlist to delete (optional if playlist_title is provided)
playlist_get_contentsGet the contents of a playlist. Args: playlist_title: Title of the playlist to get contents of (optional if playlist_id is provided) playlist_id: ID of the playlist to get contents of (optional if playlist_title is provided) Returns: JSON object containing the playlist contents
sessions_get_activeGet information about current playback sessions, including IP addresses. Args: unused: Unused parameter to satisfy the function signature
sessions_get_media_playback_historyGet playback history for a specific media item. Args: media_title: Title of the media to get history for (optional if media_id is provided) library_name: Optional library name to limit search to media_id: Plex media ID/rating key to directly fetch the item (optional if media_title is provided)
user_search_usersSearch for users with names, usernames, or emails containing the search term, or list all users if no search term is provided. Args: search_term: Optional term to search for in user information
user_list_all_usersList all users (owner, home users, and shared users) with their IDs and types. This is useful for getting the correct user IDs to filter watch history, especially for home users.
user_get_infoGet detailed information about a specific Plex user. Args: username: Optional. Name of the user to get information for. Defaults to the authenticated owner.
user_get_on_deckGet on deck (in progress) media for a specific user. Args: username: Name of the user to get on-deck items for
user_get_continue_watchingGet items the user has partially watched and can continue. Unlike on_deck which shows the next unwatched episode in a series, continue_watching shows items that were started but not finished. Args: limit: Maximum number of items to return (default 10) Returns: List of partially-watched items with pr…
user_get_watch_historyGet recent watch history for a specific user. Args: username: Name of the user to get watch history for (ignored if user_id is provided) limit: Maximum number of recently watched items to show content_type: Optional filter for content type (movie, show, episode, etc) user_id: Optional user ID to fil…
user_get_statisticsGet statistics about user watch activity over different time periods. Args: time_period: Time period for statistics - options: "last_24_hours", "last_7_days", "last_30_days", "last_90_days", "last_year", "all_time" username: Optional. Filter statistics for a specific user. If not provided, returns s…
PLEX_URLPLEX_TOKENMCP_OAUTH_ENABLED1. Set =true in your environment.MCP_OAUTH_ISSUER2. Configure (e.g., your OAuth provider URL).MCP_SERVER_URL3. Set to your public-facing URL.MCP_OAUTH_JWKS_CACHE_TTLTool annotations
No tools have read-only/destructive annotations
Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.
All four hints declared on every tool
55/55 tools missing one or more hints — server_get_plex_logs (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); server_get_info (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); server_get_bandwidth (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +52 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.
For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.
Destructive tools are labelled
1 tool perform destructive updates without destructiveHint — server_get_plex_logs deletes at line 157 (os.remove(logs_path_or_data))
Add destructiveHint:true to any tool whose handler calls .delete(), .upsert(), .update(), unlink, rm, DELETE, DROP, REPLACE INTO, or any operation that overwrites existing data.
Descriptions match behaviour
2 tools describe read intent but their handlers mutate — server_get_plex_logs (line 157: os.remove(logs_path_or_data)); media_get_artwork (line 813: with open(file_path, 'wb') as f:)
Rename the tool, rewrite the description, or move the side-effect into a separate clearly-named tool.
License file
No license file
Add a LICENSE file (MIT, Apache-2.0, etc.).
Tests exist
No test files found
Add tests that exercise each declared tool.
Tool description accuracy
server_get_plex_logs: description implies read-only but handler writes/deletes/executes; media_get_artwork: description implies read-only but handler writes/deletes/executes
Update tool descriptions to accurately reflect all capabilities — especially write, delete, or execute operations.
Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.
[](https://m8ven.ai/mcp/vladimir-tutin/plex-mcp-server)?variant=verified from the URL.Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.
https://m8ven.ai/api/mcp/tool-check