Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Beschreibung vom Entwickler (englisches Original)
Full-library Plex access for AI agents: watched state, all-user watch history, safe curation writes.
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
PLEX_URL, PLEX_TOKEN, PLEX_ALLOW_PLAYBACK, PLEX_READ_ONLY, TAUTULLI_URL, TAUTULLI_API_KEYAls geheim markierte Werte sind Schlüssel zu deinem Konto. Gib sie nie weiter und füge sie nie in einen Chat ein.
Du brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"plex": {
"command": "npx",
"args": [
"-y",
"@dustinhansen/plex-mcp"
],
"env": {
"PLEX_URL": "your-value",
"PLEX_TOKEN": "your-value",
"PLEX_ALLOW_PLAYBACK": "your-value",
"PLEX_READ_ONLY": "your-value",
"TAUTULLI_URL": "your-value",
"TAUTULLI_API_KEY": "your-value"
}
}
}
}Führe das in deinem Terminal aus
claude mcp add plex --env PLEX_URL=your-value --env PLEX_TOKEN=your-value --env PLEX_ALLOW_PLAYBACK=your-value --env PLEX_READ_ONLY=your-value --env TAUTULLI_URL=your-value --env TAUTULLI_API_KEY=your-value -- npx -y @dustinhansen/plex-mcpTrag die leeren Werte ein, bevor du ihn startest.
In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"plex": {
"command": "npx",
"args": [
"-y",
"@dustinhansen/plex-mcp"
],
"env": {
"PLEX_URL": "your-value",
"PLEX_TOKEN": "your-value",
"PLEX_ALLOW_PLAYBACK": "your-value",
"PLEX_READ_ONLY": "your-value",
"TAUTULLI_URL": "your-value",
"TAUTULLI_API_KEY": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"plex": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@dustinhansen/plex-mcp"
],
"env": {
"PLEX_URL": "your-value",
"PLEX_TOKEN": "your-value",
"PLEX_ALLOW_PLAYBACK": "your-value",
"PLEX_READ_ONLY": "your-value",
"TAUTULLI_URL": "your-value",
"TAUTULLI_API_KEY": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
PLEX_ALLOW_PLAYBACK envPLEX_READ_ONLY envTAUTULLI_URL envDiese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 7. Nov. 2026
Der Registry-Name wurde mit dem GitHub-Konto dustinhansen bestätigt, dem das Repo gehört
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Das musst du eintragen: PLEX_URL, PLEX_TOKEN, TAUTULLI_API_KEY
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.9.1) kam vor 4 Tagen in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Node.js, Docker auf deinem Computer.
In derselben Kategorie: Spec Driven Development, Remote Desktop Commander, Detailing Manager
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Connect your auto detailing studio's tasks, cars, clients and revenue to Claude or ChatGPT.
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
An MCP server that gives your AI assistant a complete picture of your Plex Media Server: every library, watched and unwatched, every household member's watch history, plus safe curation writes (playlists, collections, watched state, ratings, the plex.tv watchlist).
It talks to Plex's HTTP API directly (no client library, 2 runtime dependencies), ships as an npm package and a Docker image, and is tested offline.
Nothing in this server can delete, move, or modify media files or metadata.
Requires Node 22+ and a Plex Media Server you own.
1. Sign in and get your credentials (plex.tv PIN flow, no token hunting):
npx @dustinhansen/plex-mcp login
It prints a link, waits for you to approve it in the browser, then prints PLEX_URL=… and PLEX_TOKEN=…. Add --write to append both lines to a file as well. The file holds your token, so on macOS and Linux a new one is created readable by you only. An existing file keeps its permissions. --write refuses a file name that starts with -, so pass it as ./-name. (Prefer the manual route? Plex Web → play any item → ⋮ → Get Info → View XML → X-Plex-Token in the URL.)
2. Add it to your client. Any MCP client that can launch a local (stdio) server works. Most of them take the server as a command, its arguments and an environment. Here are 2 CLIs, for example:
# Claude Code
claude mcp add plex -e PLEX_URL=http:// :32400 -e PLEX_TOKEN= -- npx -y @dustinhansen/plex-mcp
codex mcp add plex --env PLEX_URL=http:// :32400 --env PLEX_TOKEN= -- npx -y @dustinhansen/plex-mcp
Clients configured with a JSON file (Claude Desktop, Cursor, and any client that reads a .mcp.json) mostly use this shape. Your client's docs say where the file lives and whether it names the top-level key differently:
{
"mcpServers": { "plex": { "command": "npx", "args": ["-y", "@dustinhansen/plex-mcp"], "env": { "PLEX_URL": "http:// :32400", "PLEX_TOKEN": " " } } } }
Assistants that run in a browser or on a phone (claude.ai, ChatGPT) can't launch a local process. They need the server in HTTP mode, reachable from the vendor's cloud. See HTTP mode and Docker and docs/remote-access.md.
Use the server owner's admin token if you want every user's watch history.
The server registers 22 tools by default, and the optional ones below add up to 4 more. Each tool declares a title and all 4 MCP annotations (read-only, destructive, idempotent, open-world). The spec tells clients to treat annotations as hints, so the Safety model rests on what the server registers.
| tool | what it does |
|---|---|
list_libraries | All sections with libraryType (Movies / TV Shows / Music / Photos / Other Videos), scanner type, agent, and whether a scan is running. |
list_media | Any library, any kind (movie/show/season/episode/artist/album/track/collection). Filters: watched, rated, genre, year, decade, contentRating, collection, country, studio, label, maxDurationMin, addedSince, lastViewedBefore, lastViewedAfter. The last-viewed filters take an ISO date or a relative value like -3y. A never-watched item counts as last viewed before any date, so pair lastViewedBefore with watched: "watched" to leave those out. Sorts: title, year, rating, audienceRating, userRating, addedAt, lastViewedAt, viewCount, duration, random. A filters object names what each genre, collection, country, studio or label filter matched, so you can see when a name matched a longer one. collection with no kind lists the kind the collection holds, so an episode collection in a TV library lists episodes. A smart collection with no tag is an error naming the ratingKey to pass to get_children. Paginated (offset/limit/nextOffset). fields projects each record to the keys you need. detail: true adds fields such as cast, crew and a summary to each record, and caps limit at 25. |
search | Global search across libraries incl. people, collections, playlists. externalId (imdb:tt0113277, tmdb:949, tvdb:12345) looks a movie or show up by the id Plex holds for it instead. |
get_item | Full metadata + file info (paths, codecs, sizes, every version) by ratingKey. labels names the item's Plex labels, and is an empty array when it has none. |
get_children | Children of a show (seasons), season (episodes), artist (albums), album (tracks), collection (items) or playlist (items, with playlist: true). A movie, episode or track has no children, and the call fails saying so. Paginated (offset/limit/nextOffset). fields projects each record to the keys you need. detail: true adds fields such as cast, crew and a summary to each record, and caps limit at 25. |
get_extras | Trailers, featurettes, behind-the-scenes for an item. |
person_credits | Filmography by director/actor/writer/composer, with watched filter. Paginated (offset/limit/nextOffset). fields projects each record to the keys you need. detail: true adds fields such as cast, crew and a summary to each record, and caps limit at 25. |
library_changes | What's new or updated since a cutoff (-7d or ISO date), as an added and an updated list, each capped by limit. detail: true adds fields such as cast, crew and a summary to each record, and caps limit at 25 for each list. |
library_stats | Totals watched and unwatched, with genre/decade/rating breakdowns and optional per-user play counts. |
| tool | what it does |
|---|---|
similar_items | Plex's "more like this" for an item, with a watched filter. |
random_pick | N random items matching any list_media filter set ("surprise me, unwatched, 80s, under 2h"). Each pick is the same record list_media returns. filters names what the tag filters matched, as in list_media, and collection with no kind picks the kind the collection holds. A smart collection with no tag is an error naming the ratingKey to pass to get_children. detail: true adds fields such as cast, crew and a summary to each record. user picks as a Plex Home user, so unwatched means unwatched by them. |
continue_watching | Plex's Continue Watching row: the next unwatched episode per in-progress show and any partially watched movie, with how far into each you are. detail: true returns full item records instead, and caps limit at 25. |
get_watchlist | The server owner's plex.tv watchlist, with whether each title is in a library here and its ratingKey if so. Paginated (offset/limit). |
There are also two MCP prompts, movie_night and whats_new, and a plex://libraries resource.
| tool | what it does |
|---|---|
watch_history | Who watched what, and when. Filter by user, library, time window, or item. |
now_playing / list_users | Live sessions and every account on the server. |
continue_watching, list_media, random_pick and library_stats accept a user argument to see the library as a Plex Home user (their watched state, their on-deck). Plex only allows this for Home (managed) users. For friends, watch_history is the view that works for everyone.
Registered unless PLEX_READ_ONLY=1.
| tool | what it does |
|---|---|
set_watched | Mark items watched/unwatched (explicit ratingKeys only). |
rate_item | Set or clear the server owner's star rating. |
manage_playlist / manage_collection | Create, add, remove, delete. Deleting removes only the grouping, never media. |
manage_watchlist | Add movies and shows in the library to the server owner's plex.tv watchlist, or remove them (explicit ratingKeys only). |
scan_library | Trigger "Scan Library Files" for a section, optionally one folder. |
manage_watchlist resolves each ratingKey to the Plex GUID plex.tv identifies the item by. It takes movies and shows only, the kinds a Plex watchlist offers, and refuses an item matched by a legacy agent (which has no Plex GUID). Both checks run before anything is sent.
Set PLEX_ALLOW_PLAYBACK=1 to register list_clients and play_item ("play this album on my phone"). Both tools use Plex's player-control API, so the target must be a player that advertises itself to the server. We have tested playback with Plexamp. Current Plex apps for TVs and desktops may not show up in list_clients at all: Plex for Apple TV and Plex for Mac did not, even with the app open. Off by default because it's the one thing here that touches the real world. PLEX_READ_ONLY=1 keeps them unregistered even when this is set.
Set TAUTULLI_URL and TAUTULLI_API_KEY to add tautulli_stats (home stats: most watched, most active users, popular items over a period) and tautulli_history (per-play records with platform, player, and percent watched). Plex's own history covers the basics. Tautulli adds the detail most admins already collect. They need Tautulli 2.18.0 or later, the first release that reads the API key from a request header.
kind that contradicts the library is refused before the write, and so is a library type that holds no collection kind the tool offers. Nothing operates on "all matches".PLEX_ALLOW_PLAYBACK says, so a client sees only reads. The Tautulli tools are reads and stay. The restriction wins over the opt-in because a server set up to change nothing should not start changing things when another variable is added. Any value other than 1, 0 or empty stops the server rather than starting it with writes... or ? could turn a read into one of those writes, even with PLEX_READ_ONLY=1. We refuse a bad id rather than encode it, because no real Plex id needs encoding.Nur der Anfang wird gezeigt; den Rest findest du im Repo