Plex MCP server Let your AI agent keep your Plex in order.

Your AI agent checks the Watchlist against your libraries, marks finished series watched, builds playlists and invites friends to the libraries you pick, with your OK before anyone is invited. Sign in to Plex once in your own Cloud Browser. No token to dig out and no server code to run.

  • Free 7-day trial, no card
  • Unofficial, not affiliated with Plex
Plex logo Plex Cloud Browser

14 tools Read and write

Watchlist to sharing

What can your AI agent do in Plex? The clicks in Plex Web.

  • Find a title in your libraries

  • Add and remove Watchlist titles

  • Mark a series watched

  • Build a themed playlist

  • See who can use your server

  • Invite a friend to chosen libraries

API yes, MCP no

Does Plex have an MCP server or an API? An API on your server, no official MCP.

Plex has a documented HTTP API for Plex Media Server and no official MCP server (checked 6 Nov 2026). The API needs an X-Plex-Token and your own code. Cotlet runs 14 Plex tools hosted, 6 of them writes, over MCP for agents and REST for scripts.

  • The Plex Media Server API covers libraries, search, playlists, collections, playback history and marking items played or unplayed. Its docs list no Watchlist and no library sharing category.
  • Plex webhooks send server events to a URL you give them. They need Plex Pass on the owner account and only send events out. Zapier has no Plex app and n8n has no Plex node; Make lists a Plex app with one trigger.
  • Community Plex MCP servers on GitHub exist, from 158 stars down to 0. You install one, hand it your server address and token, and keep it running.
The Plex server API, a community MCP server and Cotlet compared
What you need Plex server APICommunity MCP serverCotlet
Browse and search your libraries Yes, with your code Yes Yes
Mark items watched or unwatched Yes, with your code Yes Yes
Playlists and collections Yes, with your code Yes Yes
Add and remove Watchlist titles Not in the docs In some Yes
Invite someone to your libraries Not in the docs In one Yes, after your OK
What it takes to start Token and a developer Install, token, keep it running Your Plex login
Works inside the ChatGPT and Claude apps, always on No, code only If you put it online Yes, hosted

Checked 6 Nov 2026. Sources: Plex Developer: Plex Media Server API · Plex Support: Managing Library Access · Plex Support: Webhooks · GitHub: vladimir-tutin/plex-mcp-server · GitHub: dustinhansen/plex-mcp

Set up once

How does the Plex MCP server work? Your agent works in your own Plex account.

  1. 1Sign in to Plex

    Once, in a browser we host for you.

  2. 2Connect your AI agent

    Add one address to its settings.

  3. 3Ask in plain words

    It does the clicks, you OK any invite.

We never keep your Plex password, and no library invite goes out until you approve it. Who can see your session

Any MCP client

How to connect Plex to your AI agent

  1. 1

    Enable Plex for agents. Create a Cotlet account, sign in to Plex in its Cloud Browser, then press Enable for agents.

  2. 2

    Add the Cotlet address. Enter https://cotlet.dev/mcp/v1 in your agent as a remote MCP server or custom connector.

  3. 3

    Approve the link. Chat apps ask you to sign in to Cotlet once. Editors, n8n and scripts send an API key from the console.

https://cotlet.dev/mcp/v1 carries Plex next to your other apps. Library access tools work only when you sign in as the owner of the server; the Watchlist needs just your account. Refresh the connector after enabling Plex so the tools load.

Claude
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect

Claude Code:
claude mcp add --transport http cotlet-plex \
  https://cotlet.dev/mcp/v1 \
  --header "Authorization: Bearer $COTLET_API_KEY"
ChatGPT
Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth
Cursor
// ~/.cursor/mcp.json
{
  "mcpServers": {
    "cotlet-plex": {
      "url": "https://cotlet.dev/mcp/v1",
      "headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
    }
  }
}
Codex
# ~/.codex/config.toml
[mcp_servers.cotlet-plex]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY"
n8n
MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: plex_read
Make, Zapier
Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: plex_write
8 read, 6 write

All 14 Plex MCP tools

Libraries and search4

Search covers your libraries only; a title that sits just on your Watchlist shows up in list_watchlist instead.

  • list_libraries The libraries of your Plex server with their type and item count. read

    Returns every library you can see on the server you are signed in to, such as Movies, TV Shows or Music. Use library as the library parameter of the other tools. The count is the number of top-level items Plex Web shows for that library. It reads only; nothing changes in Plex.

    MCP callplex_read → list_libraries

    REST endpointGET https://cotlet.dev/api/v1/plex/libraries

    Parameters

    No parameters.

    Example response

    {
      "libraries": [
        {
          "library": "Movies",
          "type": "Movies",
          "items": 412
        },
        {
          "library": "TV Shows",
          "type": "TV Shows",
          "items": 87
        },
        {
          "library": "Music",
          "type": "Music",
          "items": 1560
        }
      ]
    }
  • list_library_items Items of one library with title, year, watched state and date added. read

    Lists the items of one library as Plex Web shows them, one page at a time. Pass next_cursor back as cursor for the next page. unwatched true keeps only titles you have not finished. item_id is the key for get_media_item, mark_watched and add_to_playlist. It reads only.

    MCP callplex_read → list_library_items

    REST endpointGET https://cotlet.dev/api/v1/plex/library-items

    Parameters

    Parameters: list_library_items
    NameTypeDescription
    library string required string Library name as list_libraries returns it, e.g. 'Movies'.
    unwatched boolean boolean True keeps only items you have not watched.
    limit integer integer Items per page.
    cursor string string Next page cursor from the previous call.

    Example input

    {
      "library": "Movies"
    }

    Example response

    {
      "items": [
        {
          "item_id": "48213",
          "title": "The Quiet Harbor",
          "year": 2024,
          "watched": false,
          "added": "2026-10-28"
        },
        {
          "item_id": "48190",
          "title": "Night Ferry",
          "year": 2023,
          "watched": true,
          "added": "2026-10-21"
        }
      ],
      "next_cursor": "2"
    }
  • search_media Search your libraries by title and see which library each match is in. read

    Searches the libraries of your server for a title, the way the search box in Plex Web does. Each match carries its library, type and watched state. Leave library out to search all of them. A title that is only on your Watchlist and not in a library does not appear here; list_watchlist shows those.

    MCP callplex_read → search_media

    REST endpointGET https://cotlet.dev/api/v1/plex/medias/search

    Parameters

    Parameters: search_media
    NameTypeDescription
    query string required string Title or part of a title.
    library string string Search only this library.

    Example input

    {
      "query": "query"
    }

    Example response

    {
      "results": [
        {
          "item_id": "48213",
          "title": "The Quiet Harbor",
          "type": "Movie",
          "year": 2024,
          "library": "Movies",
          "watched": false
        }
      ]
    }
  • get_media_item One movie, show, season or episode with summary, runtime and watched state. read

    Returns the details page of one item: summary, year, runtime, watched state and, for a show, its seasons and episodes with their own item_id. Use the episode ids with mark_watched. It reads only.

    MCP callplex_read → get_media_item

    REST endpointGET https://cotlet.dev/api/v1/plex/items/{item_id}/media-item

    Parameters

    Parameters: get_media_item
    NameTypeDescription
    item_id string required string Item id from search_media or list_library_items.

    Example input

    {
      "item_id": "item_8c41d2"
    }

    Example response

    {
      "item_id": "48290",
      "title": "Salt Road",
      "type": "Show",
      "year": 2022,
      "watched": false,
      "summary": "A courier crosses a desert coast road one delivery at a time.",
      "seasons": [
        {
          "item_id": "48291",
          "title": "Season 1",
          "episodes": 8,
          "watched_episodes": 8
        },
        {
          "item_id": "48299",
          "title": "Season 2",
          "episodes": 8,
          "watched_episodes": 5
        }
      ]
    }

Watchlist3

Plex keeps movies and shows on the Watchlist, not single seasons or episodes. in_library says whether a title also sits on your server.

  • list_watchlist Titles on your Plex Watchlist, with type, year and whether they are in your libraries. read

    Lists the movies and shows on the Watchlist of the signed-in account. Plex keeps movies and shows on it, not single seasons or episodes. in_library is true when a title also sits in a library of your server. It reads only.

    MCP callplex_read → list_watchlist

    REST endpointGET https://cotlet.dev/api/v1/plex/watchlists

    Parameters

    Parameters: list_watchlist
    NameTypeDescription
    type enum enum movie or show. Default: both.

    Example response

    {
      "watchlist": [
        {
          "title": "Paper Lanterns",
          "type": "Movie",
          "year": 2025,
          "in_library": false
        },
        {
          "title": "Low Tide",
          "type": "Show",
          "year": 2024,
          "in_library": true
        }
      ]
    }
  • add_to_watchlist Put a movie or show on your Plex Watchlist. write

    Adds one movie or show to the Watchlist of the signed-in account. Plex accepts movies and shows, not single seasons or episodes. A title already on the list is left alone. It reaches no one and is undone with remove_from_watchlist, so it does not wait for your OK.

    MCP callplex_write → add_to_watchlist

    REST endpointPOST https://cotlet.dev/api/v1/plex/watchlists

    Parameters

    Parameters: add_to_watchlist
    NameTypeDescription
    title string required string Title to add, e.g. 'Paper Lanterns'.
    year integer integer Year of release, to pick the right title when two share a name.

    Example input

    {
      "title": "Paper Lanterns"
    }

    Example response

    {
      "title": "Paper Lanterns",
      "type": "Movie",
      "on_watchlist": true
    }
  • remove_from_watchlist Take a title off your Plex Watchlist. write

    Removes one movie or show from the Watchlist of the signed-in account. If the title is not on it, nothing changes. It reaches no one and is undone with add_to_watchlist, so it does not wait for your OK.

    MCP callplex_write → remove_from_watchlist

    REST endpointDELETE https://cotlet.dev/api/v1/plex/watchlists

    Parameters

    Parameters: remove_from_watchlist
    NameTypeDescription
    title string required string Title to remove.
    year integer integer Year of release, to pick the right title when two share a name.

    Example input

    {
      "title": "title"
    }

    Example response

    {
      "title": "Low Tide",
      "type": "Show",
      "on_watchlist": false
    }

Watched state, playlists and collections4

Smart playlists cannot be added to by hand, so add_to_playlist skips them. Give a season or show id to mark all its episodes at once.

  • mark_watched Mark a movie, episode, season or show as watched or unwatched. write

    Does what Mark as Watched and Mark as Unwatched do in Plex Web. Give a season or show id to change all its episodes at once. watched false marks it unwatched again. It changes only your own watched state and is undone with the same call, so it does not wait for your OK. Plex can drop a watched title from your Watchlist.

    MCP callplex_write → mark_watched

    REST endpointPOST https://cotlet.dev/api/v1/plex/items/{item_id}/watched/mark

    Parameters

    Parameters: mark_watched
    NameTypeDescription
    item_id string required string Item id from search_media, list_library_items or get_media_item.
    watched boolean required boolean True marks watched, false marks unwatched.

    Example input

    {
      "item_id": "item_8c41d2",
      "watched": true
    }

    Example response

    {
      "item_id": "48299",
      "title": "Salt Road, Season 2",
      "watched": true,
      "episodes_changed": 3
    }
  • list_playlists Your Plex playlists with item count and type. read

    Returns the playlists of the signed-in account with their name, the kind of media they hold and how many items they contain. A smart playlist is marked smart: true; Plex does not let you add items to those by hand, so add_to_playlist skips them. It reads only.

    MCP callplex_read → list_playlists

    REST endpointGET https://cotlet.dev/api/v1/plex/playlists

    Parameters

    No parameters.

    Example response

    {
      "playlists": [
        {
          "playlist": "Rainy Sunday",
          "type": "video",
          "items": 9,
          "smart": false
        },
        {
          "playlist": "Recently added",
          "type": "video",
          "items": 24,
          "smart": true
        }
      ]
    }
  • add_to_playlist Add items to one of your playlists, or create it with the first items. write

    Adds the items to the end of the playlist you name and creates the playlist if it does not exist. Plex does not allow adding by hand to a smart playlist, so the call fails with the playlist name. Items of different media types end up in separate playlists of the same name. A playlist is yours and reaches no one, so this call does not wait for your OK.

    MCP callplex_write → add_to_playlist

    REST endpointPOST https://cotlet.dev/api/v1/plex/playlists

    Parameters

    Parameters: add_to_playlist
    NameTypeDescription
    playlist string required string Playlist name.
    item_ids array required array Item ids from search_media or list_library_items.

    Example input

    {
      "playlist": "playlist",
      "item_ids": "item ids"
    }

    Example response

    {
      "playlist": "Rainy Sunday",
      "added": 3,
      "total_items": 12,
      "created": false
    }
  • list_collections Collections of a library with their items. read

    Returns the collections of one library, each with the titles it holds. Collections belong to the library and are visible to the people who share it. It reads only.

    MCP callplex_read → list_collections

    REST endpointGET https://cotlet.dev/api/v1/plex/collections

    Parameters

    Parameters: list_collections
    NameTypeDescription
    library string required string Library name as list_libraries returns it.

    Example input

    {
      "library": "library"
    }

    Example response

    {
      "collections": [
        {
          "collection": "Desert Road Movies",
          "items": 6
        },
        {
          "collection": "Slow Cinema",
          "items": 11
        }
      ]
    }

Library access3

Only the owner of a server can see and change who has access. Other accounts get APP_PERMISSION_DENIED.

  • list_library_access Plex accounts with access to your server and the libraries each can see. read

    Reads the Manage Library Access page: every account you shared your server with, the libraries it can use and whether an invite is still waiting. Only the server owner can open that page; other accounts get APP_PERMISSION_DENIED. It reads only.

    MCP callplex_read → list_library_access

    REST endpointGET https://cotlet.dev/api/v1/plex/library-access

    Parameters

    No parameters.

    Example response

    {
      "accounts": [
        {
          "name": "sam",
          "status": "accepted",
          "libraries": [
            "Movies"
          ]
        },
        {
          "name": "lena@example.com",
          "status": "invited",
          "libraries": [
            "Movies",
            "TV Shows"
          ]
        }
      ]
    }
  • grant_library_access Invite a Plex account to use chosen libraries of your server. writeasks first

    Runs the Grant Library Access wizard under Settings > Manage Library Access: you give the username or email, pick libraries and Plex sends the invite. Only the server owner can do this, and only for a server they own. Leave libraries out to share all of them. By default you confirm each call; you can switch that off for this tool.

    MCP callplex_write → grant_library_access

    REST endpointPOST https://cotlet.dev/api/v1/plex/library-access/grant

    Parameters

    Parameters: grant_library_access
    NameTypeDescription
    account string required string Plex username or email of the person to invite.
    libraries array array Library names to share. Default: all libraries.

    Example input

    {
      "account": "sam@example.com",
      "libraries": [
        "Movies"
      ]
    }

    Example response

    {
      "account": "sam@example.com",
      "status": "invited",
      "libraries": [
        "Movies"
      ]
    }
  • revoke_library_access Remove a Plex account's access to your server. writeasks first

    Does what the X next to a name does on Manage Library Access: the account loses access to your libraries. Only the server owner can do this. The person can be invited again with grant_library_access. By default you confirm each call; you can switch that off for this tool.

    MCP callplex_write → revoke_library_access

    REST endpointPOST https://cotlet.dev/api/v1/plex/library-access/revoke

    Parameters

    Parameters: revoke_library_access
    NameTypeDescription
    account string required string Username or email as list_library_access returns it.

    Example input

    {
      "account": "account"
    }

    Example response

    {
      "account": "lena@example.com",
      "status": "removed"
    }
Encrypted, revocable

Who can see my Plex session, and how do I revoke it?

  • What we store

    Your signed-in Plex browser profile, AES-256-GCM encrypted, in Finland. No password.

  • What your agent gets

    The 14 Plex tools. Never the session cookie or your X-Plex-Token.

  • What the session sees

    What your account sees in Plex Web: libraries, Watchlist, playlists, access list.

  • What no tool touches

    Plex Pass billing, password, two-factor, deleting media and playing video.

  • If Plex signs you out

    Your agent gets a link to sign in again. You type the password, we never do.

  • How to cut access

    Disable for agents, reset the browser, or sign out your devices in Plex.

Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results). There is no SOC 2 report or third-party pentest yet.

Tested every 12 h

What happens when Plex changes? We repair the tool; your prompts stay the same.

between tests of the Plex tools
12 h
for a call to a Plex tool paused for repair
$0

When Plex moves a button or renames a field in Plex Web, the fix happens on our side and your prompts keep working. status.cotlet.dev checks the site, console and API every 3 minutes.

2 tools ask first

Approvals, undo and mistakes Nobody is invited until you say so.

  1. 01 Reads your libraries list_libraries shows the names the invite can use.
  2. 02 Prepares the invite Account and chosen libraries, nothing sent yet.
  3. 03 Waits for your OK The invite shows up in your Cotlet console first.
  4. 04 Reports the result Account, status invited, libraries shared.
Which Plex actions can be undone
ActionUndo
Add to Watchlistremove_from_watchlist
Remove from Watchlistadd_to_watchlist
Mark watchedThe same call with watched false; Plex can drop a watched title from your Watchlist
Add to a playlistRemove the items in Plex
Grant library accessrevoke_library_access; the invite Plex sent is out
Revoke library accessgrant_library_access invites the person again

2 of 14 tools ask first: grant_library_access and revoke_library_access, the two that change who can use your server. Watchlist, watched state and playlists are yours alone, so they run at once. Switch the wait off per tool for a scheduled run.

Library access is the owner's job: sign in as the owner of the server, or these two tools answer permission denied and cost nothing.

MCP call
{
  "name": "grant_library_access",
  "arguments": {
    "account": "sam@example.com",
    "libraries": [
      "Movies"
    ]
  }
}
REST
curl -X POST https://cotlet.dev/api/v1/plex/library-access/grant \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"account":"sam@example.com","libraries":["Movies"]}'
Response
{
  "account": "sam@example.com",
  "status": "invited",
  "libraries": [
    "Movies"
  ]
}

A script or a nightly job calls the same tools over REST at /api/v1/plex, with one key and one price, and no X-Plex-Token of your own. The tools table gives the REST path of each tool.

Pay per call

How much does the Plex MCP server cost?

About $13 a monthfor one server owner with a weekly Watchlist routine, 2,230 credits. Your Plex plan is billed by Plex as before.

A month of Plex jobs for one server owner, in credits
JobCallsCredits
Check the Watchlist against libraries, weekly3 × 4120
Add 5 recommended titles to the Watchlist, weekly5 × 4200
Mark a finished series watched4 × 6240
Build a themed playlist3 × 390
Review who can use the server, weekly1 × 440
Invite a friend to chosen libraries2 × 240
Cloud Browser, 30 days1,500
Total2,230
  • Free 7-day trial, no card
  • 10 credits per successful call, MCP or REST
  • 50 credits a day for the Cloud Browser
  • No X-Plex-Token or server code to manage

Plex publishes no figure for a typical account, so the month is our example: a home server with 3 libraries, a weekly Watchlist check and a few invites. Plex Pass is $6.99 a month or $69.99 a year, billed by Plex (6 Nov 2026). Dollars at the $29 pack rate.

Cotlet credit packs: price, credits and calls at 10 credits each
Credits Price, one time Calls at 10 credits Per 1,000 credits
5,000 $29 500 $5.80
15,000 $79 1,500 $5.27
32,000 $149 3,200 $4.66
60,000 $249 6,000 $4.15

Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.

Other options

Plex MCP server: the server API, GitHub or hosted Community servers do the library part well.

Other Plex options, checked 6 Nov 2026
OptionWhat it doesWhere it stops
Plex Media Server APIOfficial REST on your server: libraries, search, playlists, collections, history, mark played.Token and your own code. No Watchlist or sharing category in the docs.
Plex webhooksYour server calls a URL when something plays or is added.Plex Pass on the owner account. Events out only, nothing changes in Plex.
vladimir-tutin/plex-mcp-serverPython MCP server: libraries, media, collections, playlists, clients, users. 158 stars, MIT, last commit 13 Oct 2026.You host it with your server address and token; Claude.ai and ChatGPT need it on public HTTPS.
niavasha/plex-mcp-server54 tools, 66 with writes on, plus Sonarr, Radarr and Trakt. 57 stars, MIT, last commit 2 Nov 2026.You host it. Writes are opt-in; its README lists no library sharing.
dustinhansen/plex-mcpLibraries, every household member's history, playlists, collections, ratings and the Watchlist. 0 stars, MIT, last commit 3 Nov 2026.Local stdio on your computer, started 16 Oct 2026.
rollecode/plex-mcpLists 405 operations, including plex.tv sharing and the Watchlist. 0 stars, MIT, last commit 3 Oct 2026.One person's project, started 15 Sep 2026; you host it.

If you like running your own tools, a community server is free and covers the library side well. The Plex API suits a developer who wants full control of one server. When you want Plex inside ChatGPT or Claude, always on, with the Watchlist and library invites included and no token on your own computer, that is the part Cotlet covers.

EU company, since 2019

Who runs Cotlet A company you can look up.

Take Group sp. z o.o. builds and runs Cotlet. It is a software company registered in Poland, EU (VAT PL6342984273), operating since 2019 and founded by Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Questions about the Plex tools go to contact@cotlet.dev.

Plex MCP server: questions

How do I connect Plex to ChatGPT or Claude?

Sign up at cotlet.dev, log in to Plex once in its Cloud Browser and add Cotlet to ChatGPT or Claude, following the steps in your console. No API key is needed. ChatGPT and Claude then work in your Plex account through Cotlet, in their phone apps too.

What can ChatGPT do in Plex?

With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Plex: check my Watchlist against my libraries; add recommended titles to the Watchlist; mark a finished series as watched. You ask in plain words, and anything that reaches other people waits for your OK first.

How do I get access?

Sign up free at https://cotlet.dev, open Plex under Integrations in the console and sign in to Plex in its Cloud Browser. The trial starts with your first app, and no card is asked.

Does my Plex server need to be reachable from the internet?

Yes, the way it must be when you open Plex Web away from home. Plex says Remote Access reaches your server from outside your local network, and that Relay is on by default as a fallback when the app cannot connect directly. The server also has to be online. The Watchlist works without a server.

Does it stream or play my media?

No. The tools browse, search and manage; nothing plays video. Plex requires a Remote Watch Pass or Plex Pass, or an admin with Plex Pass, to stream personal video remotely since 29 Apr 2025. That rule is about playback, so it does not apply to these tools.

Who can invite people to my libraries?

Only the server owner, and only for a server they own: Plex does not let you re-share a server shared with you. Restrictions on an invited account need a Plex Pass, and these tools do not set them.

Does Plex have webhooks?

Yes. Plex webhooks call a URL you set when your server sees an event, and Plex says they need an active Plex Pass on the server owner account. They only send events out. To change something in Plex from an agent, use the tools above.

Is there an official Plex API?

Yes, for your Plex Media Server: developer.plex.tv/pms documents libraries, search, playlists, collections, playback history and marking items played. It needs an X-Plex-Token and your own code, and its docs list no Watchlist or library sharing category (checked 6 Nov 2026).

Is the MCP server different from the REST API?

Only in how it is called. Both carry the same 14 tools, inputs and answers, with one API key and one price. Agents use MCP; scripts and HTTP steps use REST.

Is Cotlet affiliated with Plex?

No. Cotlet is independent and not affiliated with Plex, Inc.

Give your agent access to Plex.

Free 7-day trial with 2,000 credits, no card needed.