🎬 Plex MCP Server
A Model Context Protocol (MCP) server that enables AI assistants to interact with your Plex Media Server! 🚀
TL;DR
To use this server with an MCP client (like Cursor), add this configuration to your MCP settings:
{
"mcpServers": {
"plex-mcp": {
"command": "uvx",
"args": [
"plex-mcp",
"--baseurl",
"<PLEX_BASEURL>",
"--token",
"<PLEX_TOKEN>"
]
}
}
}
Replace <PLEX_BASEURL> / <PLEX_TOKEN> with your actual Plex server URL and authentication token.
✨ Features
🎥 Movies
- Search movies by title, genre, year, or rating
- Browse recently added movies
- Get detailed movie info including cast, directors, and ratings
- Filter by year ranges and rating criteria
🎵 Music
- Search music tracks and artists
- Create and manage playlists
- Get random tracks by decade for discovery
- Browse music library information
📺 TV Shows
- Search TV shows and episodes
- Browse episodes by season
- Get detailed episode information
- Find recently added shows
🎮 Client Control
- Control Plex clients remotely (play, pause, stop, seek)
- Navigate client interfaces (up, down, left, right, select, back)
- Set volume levels on connected clients
- Get playback state information
- Play media on specific clients
📚 Collections
- Create and manage collections of movies, shows, or music
- Add/remove items from collections
- Search collections by title or criteria
- Update collection metadata (title, summary)
- Delete collections when no longer needed
⚙️ Settings & Management
- View and modify server settings
- Get library section information
- Scan libraries for new media
- Empty trash to free up space
- Analyze libraries for metadata
- Get detailed server information
🚀 Quick Start
Prerequisites
- Python 3.12+
- A running Plex Media Server
- Plex authentication token
Installation
# Clone the repository
git clone https://github.com/knguyen1/plex-mcp.git
cd plex-mcp
# Install dependencies
uv venv && uv sync
Configuration
Set up your Plex server credentials:
export PLEX_BASEURL="http://localhost:32400" # Your Plex server URL
export PLEX_TOKEN="your-plex-token-here" # Your Plex token
Finding your Plex token:
- Go to your Plex server web interface
- Navigate to Settings → Network
- Look for "Plex Token" or use browser dev tools to find the
X-Plex-Tokenheader
Running the Server
uv run plex-mcp
🎯 Sample Use Cases
🎬 Movie Discovery
"Find all sci-fi movies from the 80s with ratings above 7.0"
"Show me recently added action movies"
"What are the highest rated movies in my library?"
🎵 Music Curation
"Create a playlist of random 90s rock songs"
"Find all tracks by The Beatles"
"Show me my most recently added music"
📺 TV Show Management
"List all episodes of Breaking Bad season 1"
"Find shows I haven't watched yet"
"What's the latest episode of The Office?"
🎮 Remote Control
"Play Inception on my living room TV"
"Pause the current show on my phone"
"Set volume to 50% on the bedroom client"
"Navigate up and select on the Apple TV"
📚 Collection Management
"Create a collection called 'Marvel Movies'"
"Add all Iron Man movies to the Marvel collection"
"Find collections with 'action' in the title"
"Update the description of my 'Holiday Movies' collection"
⚙️ Server Management
"Show me all server settings"
"Scan my Movies library for new content"
"Empty trash in the Music library"
"Get detailed information about my Plex server"
🔍 Smart Search
"Find movies similar to Inception"
"Show me horror movies from the last 5 years"
"Create a workout playlist with high-energy songs"
🛠️ Available Tools
Movies 🎥
search_movies- Search movies by titleget_movies_library- Get library informationget_movie_info- Detailed movie informationsearch_movies_by_genre- Filter by genresearch_movies_by_year- Filter by year/rangeget_recently_added_movies- Latest additionsget_movies_by_rating- Filter by rating
Music 🎵
search_music_tracks- Search music libraryget_music_library- Library informationcreate_music_playlist- Create playlistsget_random_tracks_by_decade- Random discoverysearch_tracks_by_artist- Artist-specific searchget_playlist_info- Playlist detailsdelete_playlist- Remove playlists
TV Shows 📺
search_tv_shows- Search TV libraryget_tv_shows_library- Library informationget_show_episodes- Episode listingsget_episode_info- Episode detailssearch_episodes_by_show- Show-specific episodesget_recently_added_shows- Latest additions
Client Control 🎮
list_clients- List all connected Plex clientsget_client_info- Get detailed client informationplay_media- Play media on a specific clientcontrol_playback- Control playback (play, pause, stop, seek)set_volume- Set volume on a clientnavigate_client- Navigate client interfaceget_playback_state- Get current playback state
Collections 📚
list_collections- List all collections in a libraryget_collection_info- Get detailed collection informationcreate_collection- Create a new collectionadd_to_collection- Add items to a collectionremove_from_collection- Remove items from a collectionupdate_collection- Update collection metadatadelete_collection- Delete a collectionsearch_collections- Search collections by title
Settings & Management ⚙️
get_server_settings- Get all server settingsget_setting- Get a specific server settingset_setting- Set a server setting valueget_library_sections- Get all library sectionsscan_library- Scan a library for new mediaempty_trash- Empty trash for a libraryanalyze_library- Analyze library for metadataget_server_info- Get detailed server information
🔧 Development
Setup Development Environment
# Install development dependencies
uv venv && uv sync
# Run linting
uv run ruff check --fix && uv run ruff format
# Run tests
pytest
Project Structure
src/plex_mcp/
├── client/ # Plex API client
├── sections/ # Media type handlers
│ ├── movies.py # Movie operations
│ ├── music.py # Music operations
│ ├── tv_shows.py # TV show operations
│ ├── client_control.py # Client control operations
│ ├── collections.py # Collection management
│ └── settings.py # Server settings & management
└── __init__.py # Main server entry point
🤝 Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
📝 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Built with FastMCP framework
- Uses PlexAPI for Plex integration
- Inspired by the Model Context Protocol specification
Happy streaming! 🎬🎵📺
Metadata
Release files for plex-mcp 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| plex_mcp-0.2.0.tar.gz | 328.3 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| plex_mcp-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 368.4 kB
Release files / plex_mcp-0.2.0.tar.gz
| Download URL | plex_mcp-0.2.0.tar.gz |
|---|---|
| Size | 328.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7eeb40c7bc24a6ae27f53e03c840840fa35b83d8c55181d40ab91105441c0cc2
|
|
BLAKE2b-256 checksum How to use checksums |
495ae82579d65aacdd5b84f631bd907e48cc5dc2c61565f520da0e119caeb26c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2025.
Transparency logRelease files / plex_mcp-0.2.0-py3-none-any.whl
| Download URL | plex_mcp-0.2.0-py3-none-any.whl |
|---|---|
| Size | 40.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
827d47762e4109866a0ba3b956544d0a62ed594996e7bd6762ee22ede11581a2
|
|
BLAKE2b-256 checksum How to use checksums |
14d19120e8da6007a0849443918dcf8d913313b6899c632aa2315fcda8396f22
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2025.
Transparency logSecurity for plex-mcp 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for plex_mcp-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2025.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.