Skip to main content
Glama
djbriane
by djbriane

Plex MCP Server

This is a Python-based MCP server that integrates with the Plex Media Server API to search for movies and manage playlists. It uses the PlexAPI library for seamless interaction with your Plex server.

Screenshots

Here are some examples of how the Plex MCP server works:

1. Find Movies in Plex Library by Director

Search for movies in your Plex library by specifying a director's name. For example, searching for "Alfred Hitchcock" returns a list of his movies in your library.

Find movies by director


2. Find Missing Movies for a Director

Identify movies by a specific director that are missing from your Plex library. This helps you discover gaps in your collection.

Find missing movies


3. Create a Playlist in Your Plex Library

Create a new playlist in your Plex library using the movies found in a search. This allows you to organize your library efficiently.

Create a playlist

Related MCP server: moviefinder-mcp

Setup

Prerequisites

  • Python 3.8 or higher

  • uv package manager

  • A Plex Media Server with API access

Installation

Installing via Smithery

To install Plex Media Server Integration for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install @djbriane/plex-mcp --client claude

Installing Manually

  1. Clone this repository:

    git clone <repository-url>
    cd plex-mcp
  2. Install dependencies with uv:

    uv venv
    source .venv/bin/activate
    uv sync
  3. Configure environment variables for your Plex server:

Finding Your Plex Token

You can find your Plex token in this way:

  • Sign in to Plex Web App

  • Open Developer Tools

  • In Console tab, paste and run:

    window.localStorage.getItem('myPlexAccessToken')

Usage with Claude

Add the following configuration to your Claude app:

{
    "mcpServers": {
        "plex": {
            "command": "uv",
            "args": [
                "--directory",
                "FULL_PATH_TO_PROJECT",
                "run",
                "src/plex_mcp/plex_mcp.py"
            ],
            "env": {
                "PLEX_TOKEN": "YOUR_PLEX_TOKEN",
                "PLEX_SERVER_URL": "YOUR_PLEX_SERVER_URL"
            }
        }
    }
}

Available Commands

The Plex MCP server exposes these commands:

Command

Description

OpenAPI Reference

search_movies

Search for movies in your library by various filters (e.g., title, director, genre) with support for a limit parameter to control the number of results.

/library/sections/{sectionKey}/search

get_movie_details

Get detailed information about a specific movie.

/library/metadata/{ratingKey}

get_movie_genres

Get the genres for a specific movie.

/library/sections/{sectionKey}/genre

list_playlists

List all playlists on your Plex server.

/playlists

get_playlist_items

Get the items in a specific playlist.

/playlists/{playlistID}/items

create_playlist

Create a new playlist with specified movies.

/playlists

delete_playlist

Delete a playlist from your Plex server.

/playlists/{playlistID}

add_to_playlist

Add a movie to an existing playlist.

/playlists/{playlistID}/items

recent_movies

Get recently added movies from your library.

/library/recentlyAdded

Running Tests

This project includes both unit tests and integration tests. Use the following instructions to run each type of test:

Unit Tests

Unit tests use dummy data to verify the functionality of each module without requiring a live Plex server.

To run all unit tests:

uv run pytest

Integration Tests

Integration tests run against a live Plex server using environment variables defined in a .env file. First, create a .env file in your project root with your Plex configuration:

PLEX_SERVER_URL=https://your-plex-server-url:32400
PLEX_TOKEN=yourPlexTokenHere

Integration tests are marked with the integration marker. To run only the integration tests:

uv run pytest -m integration

If you are experiencing connection issues to your Plex server try running the integration tests to help troubleshoot.

Code Style and Conventions

  • Module Structure:
    Use clear section headers for imports, logging setup, utility functions, class definitions, global helpers, tool methods, and main execution (guarded by if __name__ == "__main__":).

  • Naming:
    Use CamelCase for classes and lower_snake_case for functions, variables, and fixtures. In tests, list built-in fixtures (e.g. monkeypatch) before custom ones.

  • Documentation & Comments:
    Include a concise docstring for every module, class, and function, with in-line comments for complex logic.

  • Error Handling & Logging:
    Use Python’s logging module with consistent error messages (prefix “ERROR:”) and explicit exception handling.

  • Asynchronous Patterns:
    Define I/O-bound functions as async and use asyncio.to_thread() to handle blocking operations.

Available Tools

9 tools
add_to_playlistC

Add a movie to an existing playlist.

Parameters: playlist_key: The key of the playlist. movie_key: The key of the movie to add.

Returns: A success message if the movie is added, or an error message.

ParametersJSON Schema
NameRequiredDescriptionDefault
playlist_keyYes
movie_keyYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral disclosure. It states the tool adds a movie and mentions success/error messages, but doesn't address permissions, rate limits, whether duplicates are allowed, or what happens if the playlist/movie doesn't exist. For a mutation tool with zero annotation coverage, this is inadequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized with clear sections (purpose, parameters, returns). The first sentence states the core function, followed by structured details. No wasted words, though the 'Returns' section could be more specific.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 2 parameters, 0% schema coverage, no annotations, and no output schema, the description is insufficient. It covers basic purpose and parameters but lacks crucial context about error conditions, prerequisites, behavioral details, and relationships with sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description explicitly lists both parameters with brief explanations ('key of the playlist', 'key of the movie'). This adds meaningful semantics beyond the bare schema, though it doesn't explain what constitutes a valid key format or where to obtain these keys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Add a movie') and target resource ('to an existing playlist'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'create_playlist' or 'get_playlist_items' beyond the obvious functional difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., playlist must exist), exclusions, or clarify relationships with sibling tools like 'create_playlist' or 'get_playlist_items'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_playlistB

Create a new playlist with specified movies.

Parameters: name: The desired name for the new playlist. movie_keys: A comma-separated string of movie keys to include.

Returns: A success message with playlist details or an error message.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
movie_keysYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the tool creates a playlist and returns a success/error message, but lacks critical behavioral details: it doesn't specify required permissions, whether movie keys must be valid or exist, if there are rate limits, if the playlist is private/public by default, or what happens on duplicate names. This is a significant gap for a mutation tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded with the core purpose in the first sentence. The parameter and return sections are structured clearly, with no redundant information. However, the return statement could be more concise (e.g., 'Returns success or error details').

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a mutation with 2 parameters), no annotations, and no output schema, the description is incomplete. It covers basic purpose and parameters but lacks behavioral context (e.g., permissions, error conditions), usage guidelines, and detailed return value explanation. This is inadequate for a tool that creates resources.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics: it explains that 'name' is the desired name for the playlist and 'movie_keys' is a comma-separated string of movie keys to include. This clarifies the format and purpose beyond the schema's basic titles, though it doesn't detail constraints like length limits or key validation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create a new playlist') and the resource ('playlist'), specifying it includes movies. It distinguishes from siblings like 'add_to_playlist' (which modifies existing playlists) and 'list_playlists' (which reads playlists). However, it doesn't explicitly differentiate from all siblings (e.g., 'delete_playlist' is clearly different).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing valid movie keys), exclusions (e.g., not for updating existing playlists), or direct alternatives like 'add_to_playlist' for modifying playlists. Usage is implied only by the tool's name and basic purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_playlistB

Delete a playlist from the Plex server.

Parameters: playlist_key: The key of the playlist to delete.

Returns: A success message if deletion is successful, or an error message.

ParametersJSON Schema
NameRequiredDescriptionDefault
playlist_keyYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool deletes a playlist and mentions success/error messages, but lacks details on permissions required, whether deletion is irreversible, rate limits, or side effects (e.g., impact on associated items). This is a significant gap for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, starting with the core action. The parameter and return sections are structured but could be more integrated; overall, it avoids unnecessary verbosity while covering essential points efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (destructive operation with no annotations and no output schema), the description is incomplete. It lacks critical context such as authentication needs, error handling specifics, or behavioral nuances, making it inadequate for safe and effective use by an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaning by explaining that 'playlist_key' identifies the playlist to delete, which clarifies the parameter's purpose beyond the schema's title ('Playlist Key'). However, it does not provide format examples or constraints, leaving some ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Delete') and resource ('a playlist from the Plex server'), distinguishing it from sibling tools like 'create_playlist' or 'list_playlists'. It directly addresses what the tool does without being tautological.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites (e.g., needing an existing playlist), exclusions, or compare it to related tools like 'add_to_playlist' or 'get_playlist_items', leaving usage context unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_movie_detailsC

Get detailed information about a specific movie.

Parameters: movie_key: The key identifying the movie.

Returns: A formatted string with movie details or an error message.

ParametersJSON Schema
NameRequiredDescriptionDefault
movie_keyYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the tool returns a 'formatted string with movie details or an error message', which adds some context about output format and error handling. However, it lacks details on permissions, rate limits, or whether it's a read-only operation, which are important for a tool with no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, starting with the core purpose followed by parameter and return details. It uses clear sections ('Parameters:', 'Returns:') for structure, with no wasted sentences, making it efficient and easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no annotations, no output schema, and low schema coverage, the description is minimally adequate. It covers the basic purpose, parameter, and return format, but lacks depth in usage guidelines, behavioral traits, and parameter details, which are needed for a tool with such sparse structured data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It lists the parameter 'movie_key' and explains it as 'The key identifying the movie', adding basic meaning beyond the schema's title 'Movie Key'. However, it doesn't provide examples, format details, or constraints, leaving gaps in understanding how to use the parameter effectively.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('detailed information about a specific movie'), making it easy to understand what it does. However, it doesn't explicitly differentiate from sibling tools like 'get_movie_genres' or 'search_movies', which might provide overlapping or related functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, such as needing a valid movie_key, or compare it to siblings like 'search_movies' for finding movies or 'get_movie_genres' for genre-specific details, leaving the agent to infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_movie_genresC

Get genres for a specific movie.

Parameters: movie_key: The key of the movie.

Returns: A formatted string of movie genres or an error message.

ParametersJSON Schema
NameRequiredDescriptionDefault
movie_keyYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool returns 'A formatted string of movie genres or an error message,' which hints at output behavior but lacks details on error conditions, rate limits, authentication needs, or side effects. For a tool with zero annotation coverage, this is insufficient to fully inform the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with a clear purpose statement followed by parameter and return sections. It uses minimal words without redundancy, making it easy to parse. However, it could be more front-loaded by integrating the return info into the main sentence for better flow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one parameter, no output schema, no annotations), the description is somewhat complete but has gaps. It covers the basic purpose and output format but lacks usage guidelines, detailed behavioral context, and full parameter semantics. It is adequate as a minimum viable description but not fully comprehensive for optimal agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds minimal parameter semantics: it mentions 'movie_key' as 'The key of the movie,' which provides basic meaning. However, with 0% schema description coverage and only one parameter, the baseline is 4 for zero parameters, but here it compensates slightly. It does not explain what a 'movie_key' is (e.g., an ID, title, or other identifier), so it adds limited value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get genres for a specific movie.' It specifies the verb ('Get') and resource ('genres for a specific movie'), making the intent unambiguous. However, it does not explicitly differentiate from sibling tools like 'get_movie_details' or 'search_movies', which might also involve movie data retrieval, so it falls short of a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention sibling tools like 'get_movie_details' (which might include genres) or 'search_movies', nor does it specify prerequisites or exclusions. This lack of contextual usage information limits its effectiveness for an AI agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_playlist_itemsC

Get the items in a specific playlist.

Parameters: playlist_key: The key of the playlist to retrieve items from.

Returns: A formatted string of playlist items or an error message.

ParametersJSON Schema
NameRequiredDescriptionDefault
playlist_keyYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves items and returns a formatted string or error, but lacks details on permissions, rate limits, pagination, or what the formatted string includes (e.g., item names, IDs). For a read operation without annotations, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, starting with the core purpose followed by parameter and return details. It avoids unnecessary fluff, though the structure could be slightly improved by integrating the parameter explanation more seamlessly rather than as a separate section.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema, no annotations), the description is incomplete. It doesn't cover behavioral aspects like error conditions or output format details, and with no sibling differentiation, it falls short of providing full context for effective use by an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds minimal semantics beyond the input schema, which has 0% description coverage. It explains that 'playlist_key' identifies the playlist to retrieve items from, but doesn't clarify the key's format (e.g., numeric ID, string name) or provide examples. With one parameter, the baseline is 4, but the lack of detail reduces it to 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('items in a specific playlist'), making it easy to understand what it does. However, it doesn't explicitly differentiate from sibling tools like 'list_playlists' (which might list playlists themselves rather than items within one), leaving room for potential confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention siblings like 'list_playlists' for listing playlists or 'add_to_playlist' for modifying playlists, nor does it specify prerequisites such as needing an existing playlist key. This lack of context could lead to misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_playlistsB

List all playlists in the Plex server.

Returns: A formatted string of playlists or an error message.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the return format ('formatted string of playlists or an error message'), which is helpful, but lacks critical details like whether this requires authentication, how many playlists might be returned (pagination?), or if there are rate limits. For a read operation with zero annotation coverage, this leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded with the core action ('List all playlists in the Plex server'), followed by a concise note on returns. Both sentences are necessary—the first defines the purpose, and the second clarifies output format—with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is adequate but minimal. It covers the basic purpose and output format, which might suffice for a straightforward list operation, but lacks context about authentication, performance, or sibling tool differentiation that could help an agent use it effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and the input schema has 100% description coverage (though empty). The description doesn't need to explain any parameters, so it appropriately focuses on the action and output. A baseline of 4 is justified since there are no parameters to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('List') and resource ('all playlists in the Plex server'), making the purpose immediately understandable. However, it doesn't differentiate this from sibling tools like 'get_playlist_items' or 'create_playlist', which would require more specific scope definition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'get_playlist_items' (which presumably retrieves items within a specific playlist) or 'search_movies' (which might find content across playlists). The description only states what it does, not when it's appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recent_moviesB

Get recently added movies from the Plex library.

Parameters: count: The maximum number of recent movies to return.

Returns: A formatted string of recent movies or an error message.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the return format ('A formatted string of recent movies or an error message'), which adds some value, but fails to cover critical aspects like whether this is a read-only operation, potential rate limits, authentication needs, or error conditions beyond a generic mention. For a tool with zero annotation coverage, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections for purpose, parameters, and returns, using minimal sentences that each serve a purpose. It could be slightly more front-loaded by integrating parameter details into the main description, but overall it's efficient and easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one parameter, no output schema, no annotations), the description is adequate but has gaps. It covers the basic purpose and parameter semantics, but lacks usage guidelines and full behavioral transparency (e.g., no mention of read-only nature or error handling details), making it minimally viable but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaningful context for the single parameter 'count' by explaining it as 'The maximum number of recent movies to return', which clarifies its role beyond the schema's basic type and default. Since schema description coverage is 0% and there's only one parameter, this compensation is effective, though not exhaustive (e.g., no range or constraints mentioned).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('recently added movies from the Plex library'), making it easy to understand what it does. However, it doesn't explicitly differentiate itself from sibling tools like 'search_movies' or 'get_movie_details', which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'search_movies' or 'get_movie_details'. It lacks context about use cases, prerequisites, or exclusions, leaving the agent to infer usage based on the purpose alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_moviesA

Search for movies in your Plex library using optional filters.

Parameters: title: Optional title or substring to match. year: Optional release year to filter by. director: Optional director name to filter by. studio: Optional studio name to filter by. genre: Optional genre tag to filter by. actor: Optional actor name to filter by. rating: Optional rating (e.g., "PG-13") to filter by. country: Optional country of origin to filter by. language: Optional audio or subtitle language to filter by. watched: Optional boolean; True returns only watched movies, False only unwatched. min_duration: Optional minimum duration in minutes. max_duration: Optional maximum duration in minutes.

Returns: A formatted string of up to 5 matching movies (with a count of any additional results), or an error message if the search fails or no movies are found.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
yearNo
directorNo
studioNo
genreNo
actorNo
ratingNo
countryNo
languageNo
watchedNo
min_durationNo
max_durationNo
limitNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal that the tool returns 'a formatted string of up to 5 matching movies (with a count of any additional results)' and handles errors, which adds useful context about output format and limitations. However, it doesn't mention performance characteristics, authentication requirements, or whether this is a read-only operation (though 'search' implies it likely is).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections for purpose, parameters, and returns. It's appropriately sized for a tool with 13 parameters. However, the parameter explanations could be slightly more concise, and the purpose statement could be more front-loaded with key limitations (like the 5-result limit).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (13 parameters, no annotations, no output schema), the description does a good job of explaining what the tool does, what parameters mean, and what to expect in return. The main gap is the lack of usage guidance relative to sibling tools. The description compensates well for the missing schema descriptions and annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must fully compensate. It provides detailed semantic explanations for all 13 parameters, including examples like 'rating (e.g., "PG-13")' and clarifications like 'True returns only watched movies, False only unwatched.' This adds significant value beyond the basic parameter names in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Search for movies in your Plex library using optional filters.' This specifies the verb ('search'), resource ('movies'), and context ('Plex library'). However, it doesn't explicitly differentiate from sibling tools like 'recent_movies' or 'get_movie_details', which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'recent_movies' for recently added movies or 'get_movie_details' for detailed information about specific movies. There's no context about prerequisites, limitations, or when this search tool is most appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updates
    • First observedadd_to_playlist
    • First observedcreate_playlist
    • First observeddelete_playlist
    • First observedget_movie_details
    • First observedget_movie_genres
    • First observedget_playlist_items
    • First observedlist_playlists
    • First observedrecent_movies
    • First observedsearch_movies

TDQS

A3.5/5.0
Disambiguation5/5

Every tool has a clearly distinct purpose with no ambiguity. Tools are organized around specific resources (playlists, movies) and actions (create, get, list, search), making it easy for an agent to select the right tool without confusion.

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern throughout, such as 'create_playlist', 'get_movie_details', and 'list_playlists'. This predictability enhances readability and usability for agents.

Tool Count5/5

With 9 tools, the server is well-scoped for managing Plex playlists and movies. Each tool serves a clear, necessary function, covering core operations without being overwhelming or insufficient.

Completeness4/5

The tool set provides comprehensive coverage for playlist and movie management, including CRUD operations for playlists and detailed movie queries. A minor gap exists in missing update operations for playlists (e.g., rename or modify movies), but agents can work around this by deleting and recreating.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    An MCP server that wraps the TMDB API, enabling search of movies and TV shows, retrieval of details, trending titles, recommendations, and streaming provider information.
    8
    -
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for managing a media server stack (Plex, Radarr, Overseerr, Bazarr, Prowlarr, Trakt.tv) using natural language to browse, request, and discover content.
    12
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/djbriane/plex-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server