Unified MCP server for Plex, Sonarr, Radarr, and Trakt — 45 AI tools for managing your media library with personalized recommendations (54 with write
Plex MCP server exists for a simple reason — assistants are far more useful when they can act on Plex directly instead of describing what you should do. Unified MCP server for Plex, Sonarr, Radarr, and Trakt — 45 AI tools for managing your media library with personalized recommendations (54 with write operations.
A Model Context Protocol (MCP) server that provides AI assistants with comprehensive access to your Plex Media Server, Sonarr, Radarr, and Trakt.tv — all from a single unified server.
This MCP server transforms your Plex Media Server into an AI-queryable database. Ask your AI assistant questions like:
Once Plex is connected, these are the calls the assistant has available:
Function — Descriptionget_libraries — List all Plex librariesget_library_items — List items in a library with paginationexport_library — Export a full library to JSON (under ./exports)search_media — Search media globally or within one libraryget_recently_added — Recently added contentget_on_deck — Continue watching listget_media_details — Detailed media infoget_editable_fields — Show editable fields and available tags for an itemget_playlists — List all Plex playlistsget_playlist_items — List items in a playlistget_watchlist — Get current Plex watchlistplex-mcp-server on npm is all you need. Most clients run it directly, so configuration is a few lines and a restart.
You will need 8 environment variables: PLEX_URL, PLEX_TOKEN, SONARR_URL, SONARR_API_KEY, RADARR_URL, RADARR_API_KEY, TRAKT_CLIENT_ID, TRAKT_CLIENT_SECRET. The server will not start without them, which is usually why the tools fail to appear on a first run. Keep credentials in your client's env block or a secrets manager rather than in a file you might commit.
Plenty of developer tooling servers cover similar ground. The differences that matter in practice are scope of access and how much setup stands between you and a working tool call. Plex's toolset — Function, get_libraries, get_library_items and 11 more — is a fair guide to whether it matches your workflow. It is maintained by niavasha; worth a glance at recent repository activity before you build anything load-bearing on it.
We check each listing at SyncDev against the project's documentation before it goes live — if something here drifts out of date, it is a bug worth reporting.
| Tool | What it does |
|---|---|
| Function | Description |
| get_libraries | List all Plex libraries |
| get_library_items | List items in a library with pagination |
| export_library | Export a full library to JSON (under ./exports) |
| search_media | Search media globally or within one library |
| get_recently_added | Recently added content |
| get_on_deck | Continue watching list |
| get_media_details | Detailed media info |
| get_editable_fields | Show editable fields and available tags for an item |
| get_playlists | List all Plex playlists |
| get_playlist_items | List items in a playlist |
| get_watchlist | Get current Plex watchlist |
| get_recently_watched | Recently watched content |
| get_watch_history | Detailed watch sessions |
{
"mcpServers": {
"plex": {
"command": "node",
"args": ["/path/to/plex-mcp-server/build/plex-mcp-server.js"],
"env": {
"PLEX_URL": "http://localhost:32400",
"PLEX_TOKEN": "your_plex_token_here",
"SONARR_URL": "http://localhost:8989",
"SONARR_API_KEY": "optional_sonarr_api_key",
"RADARR_URL": "http://localhost:7878",
"RADARR_API_KEY": "optional_radarr_api_key",
"TRAKT_CLIENT_ID": "optional_trakt_client_id",
"TRAKT_CLIENT_SECRET": "optional_trakt_client_secret"
}
}
}
}Configuration as documented by the project. Restart the client after saving.
| Variable | Description | Required |
|---|---|---|
| PLEX_URL | Endpoint or connection string the server talks to. | Yes |
| PLEX_TOKEN | Credential the server authenticates with. | Yes |
| SONARR_URL | Endpoint or connection string the server talks to. | Yes |
| SONARR_API_KEY | Credential the server authenticates with. | Yes |
| RADARR_URL | Endpoint or connection string the server talks to. | Yes |
| RADARR_API_KEY | Credential the server authenticates with. | Yes |
| TRAKT_CLIENT_ID | Configuration value read at startup. | Optional |
| TRAKT_CLIENT_SECRET | Credential the server authenticates with. | Yes |
Kill hallucinated APIs — version-accurate, up-to-date library documentation injected straight into context.
Microsoft's official browser automation server — drive a real browser through the accessibility tree, no screenshots needed.
GitHub's official server — repos, issues, pull requests, Actions and code security, straight from your assistant.
Issue tracking at the speed of conversation — Linear's official hosted server with OAuth and zero install.
Local repository surgery — status, diffs, commits, branches and history for any repo on disk.
Timezone sanity for AI — current time anywhere and correct conversions, without the model doing date math.