Plex MCP Server
Servidor Plex MCP
Este es un servidor MCP basado en Python que se integra con la API de Plex Media Server para buscar películas y administrar listas de reproducción. Utiliza la biblioteca PlexAPI para una interacción fluida con su servidor Plex.
Capturas de pantalla
A continuación se muestran algunos ejemplos de cómo funciona el servidor Plex MCP:
1. Encuentra películas en la biblioteca de Plex por director
Busca películas en tu biblioteca de Plex especificando el nombre del director. Por ejemplo, si buscas "Alfred Hitchcock", obtendrás una lista de sus películas en tu biblioteca.

2. Encuentra películas que faltan para un director
Identifica películas de un director específico que faltan en tu biblioteca de Plex. Esto te ayuda a descubrir qué falta en tu colección.

3. Crea una lista de reproducción en tu biblioteca de Plex
Crea una nueva lista de reproducción en tu biblioteca de Plex usando las películas encontradas en una búsqueda. Esto te permite organizar tu biblioteca eficientemente.

Related MCP server: moviefinder-mcp
Configuración
Prerrequisitos
Python 3.8 o superior
administrador de paquetes
uvUn servidor multimedia Plex con acceso API
Instalación
Instalación mediante herrería
Para instalar Plex Media Server Integration para Claude Desktop automáticamente a través de Smithery :
npx -y @smithery/cli install @djbriane/plex-mcp --client claudeInstalación manual
Clonar este repositorio:
git clone <repository-url> cd plex-mcpInstalar dependencias con
uv:uv venv source .venv/bin/activate uv syncConfigure las variables de entorno para su servidor Plex:
PLEX_TOKEN: Su token de autenticación de PlexPLEX_SERVER_URL: la URL de su servidor Plex (por ejemplo, http://192.168.1.100:32400 )
Cómo encontrar tu token Plex
Puedes encontrar tu token Plex de esta manera:
Iniciar sesión en la aplicación web de Plex
Herramientas abiertas para desarrolladores
En la pestaña Consola, pegue y ejecute:
window.localStorage.getItem('myPlexAccessToken')
Uso con Claude
Añade la siguiente configuración a tu aplicación Claude:
{
"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"
}
}
}
}Comandos disponibles
El servidor Plex MCP expone estos comandos:
Dominio | Descripción | Referencia de OpenAPI |
| Busque películas en su biblioteca mediante varios filtros (por ejemplo, título, director, género) con soporte para un parámetro |
|
| Obtenga información detallada sobre una película específica. |
|
| Obtenga los géneros de una película específica. |
|
| Enumere todas las listas de reproducción en su servidor Plex. |
|
| Obtenga los elementos de una lista de reproducción específica. |
|
| Crea una nueva lista de reproducción con películas específicas. |
|
| Eliminar una lista de reproducción de su servidor Plex. |
|
| Agregar una película a una lista de reproducción existente. |
|
| Obtén películas agregadas recientemente a tu biblioteca. |
|
Ejecución de pruebas
Este proyecto incluye pruebas unitarias y de integración. Utilice las siguientes instrucciones para ejecutar cada tipo de prueba:
Pruebas unitarias
Las pruebas unitarias utilizan datos ficticios para verificar la funcionalidad de cada módulo sin necesidad de un servidor Plex en vivo.
Para ejecutar todas las pruebas unitarias:
uv run pytestPruebas de integración
Las pruebas de integración se ejecutan en un servidor Plex activo utilizando variables de entorno definidas en un archivo .env. Primero, cree un archivo .env en la raíz del proyecto con su configuración de Plex:
PLEX_SERVER_URL=https://your-plex-server-url:32400
PLEX_TOKEN=yourPlexTokenHereLas pruebas de integración se marcan con el marcador de integración. Para ejecutar solo las pruebas de integración:
uv run pytest -m integrationSi tiene problemas de conexión con su servidor Plex, intente ejecutar las pruebas de integración para ayudar a solucionar el problema.
Estilo y convenciones del código
Estructura del módulo:
Utilice encabezados de sección claros para importaciones, configuración de registro, funciones de utilidad, definiciones de clase, ayudantes globales, métodos de herramientas y ejecución principal (protegidos porif __name__ == "__main__":).Nombre:
Use CamelCase para las clases y lower_snake_case para funciones, variables y accesorios. En las pruebas, enumere los accesorios integrados (p. ej.,monkeypatch) antes que los personalizados.Documentación y comentarios:
Incluya una cadena de documentación concisa para cada módulo, clase y función, con comentarios en línea para una lógica compleja.Manejo y registro de errores:
Utilice el módulologgingde Python con mensajes de error consistentes (prefijo “ERROR:”) y manejo explícito de excepciones.Patrones asincrónicos:
Defina funciones limitadas de E/S como asíncronas y utiliceasyncio.to_thread()para manejar operaciones de bloqueo.
Available Tools
9 toolsadd_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.
| Name | Required | Description | Default |
|---|---|---|---|
| playlist_key | Yes | ||
| movie_key | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| movie_keys | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| playlist_key | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| movie_key | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| movie_key | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| playlist_key | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| year | No | ||
| director | No | ||
| studio | No | ||
| genre | No | ||
| actor | No | ||
| rating | No | ||
| country | No | ||
| language | No | ||
| watched | No | ||
| min_duration | No | ||
| max_duration | No | ||
| limit | No |
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
- First observed
add_to_playlist - First observed
create_playlist - First observed
delete_playlist - First observed
get_movie_details - First observed
get_movie_genres - First observed
get_playlist_items - First observed
list_playlists - First observed
recent_movies - First observed
search_movies
TDQS
Scored across 9 tools
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.
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.
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.
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
Related MCP Connectors
Unlock a world of television with the TV Maze MCP server. Effortlessly search for shows by name or
Movies MCP — wraps iTunes Search API (movies, free, no auth) and TVmaze API (TV shows, free, no…
The official MCP Server for the Mux API
Your IMAP mailbox as an MCP server: read, search and (if you allow it) organize mail. Open source.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceLets MCP clients browse and search your Plex media libraries.26 npmMIT
- FlicenseAqualityDmaintenanceAn 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-
- AlicenseAqualityCmaintenanceMCP server for Plex Media Server, focused on media discovery, search, library management, and playback control.25MIT
- AlicenseAqualityDmaintenanceMCP server for managing a media server stack (Plex, Radarr, Overseerr, Bazarr, Prowlarr, Trakt.tv) using natural language to browse, request, and discover content.12MIT