Plex MCP Server
The Plex MCP Server provides AI assistants with comprehensive access to your Plex Media Server through 12 tools, enabling natural language queries for library management, viewing statistics, and media analysis.
Core Capabilities:
Library Management - Browse all Plex libraries, search across movies, TV shows, episodes, music (artists, albums, tracks), and retrieve detailed metadata for any media item
Content Discovery - View recently added media, access "On Deck" (continue watching) queue, find recently watched and fully watched content with flexible filtering
Watch History & Analytics - Track comprehensive watch history with session details, viewing patterns, and customizable time ranges (default 30 days)
Tautulli-Style Statistics - Access detailed analytics including watch statistics (plays, duration), user activity insights, library usage metrics, popular content rankings, and platform breakdowns
Advanced Filtering - Filter by media type, library sections, specific users, and configurable result limits
Optional Integrations:
Sonarr/Radarr (via plex-arr-server) - Search, add, and manage series/movies using TVDB/TMDB IDs, view download queues and missing items, trigger searches, and monitor service status
Trakt.tv Sync (via plex-trakt-server) - Authenticate and sync Plex watch history, access enhanced statistics, search the Trakt database, and enable real-time scrobbling
Natural Language Interface - Query your media ecosystem with commands like "What movies did I watch last week?", "Show me my most popular TV shows", or "Find action movies in my library" through AI assistants.
Provides comprehensive access to a Plex Media Server, allowing querying of libraries, viewing statistics, user activity tracking, media searching, and content management through natural language interactions.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Plex MCP Serverwhat movies did I watch last week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Plex MCP Server
A Model Context Protocol (MCP) server that provides AI assistants with comprehensive access to your Plex Media Server, Sonarr, Radarr, and Trakt.tv — all from a single unified server.
What is this?
This MCP server transforms your Plex Media Server into an AI-queryable database. Ask your AI assistant questions like:
"What movies have I watched recently?"
"Show me my viewing statistics for the past month"
"What's the most popular content on my server?"
"Find action movies in my library"
"What's on my continue watching list?"
"Add that new show to Sonarr"
"What's in my download queue?"
"Sync my watch history to Trakt"
"Recommend me some movies I haven't seen"
Related MCP server: YARR Media Stack MCP Server
Features
46 tools out of the box (58 with write operations enabled):
Plex Library Management — Browse libraries, search media, get detailed metadata, list playlists and watchlist
Tautulli-Style Analytics — Viewing statistics, user activity, popular content, watch history
Personalized Recommendations — AI-powered movie suggestions based on your watch history, genres, directors, and actors. Supports per-user profiles for multi-user Plex servers.
Sonarr/Radarr Integration — Browse, search, add series/movies, view queues, trigger downloads
Trakt.tv Sync — OAuth authentication, watch history sync, enhanced statistics, scrobbling. When configured, Trakt data enriches recommendations by catching movies watched outside Plex.
Write Operations (opt-in) — Create/edit playlists, update metadata, manage watchlist, rate media, and mark media watched or unwatched
One server, all tools. Trakt and Sonarr/Radarr credentials are optional — tools that need them return a helpful setup message if the key is missing. You don't need to configure everything upfront.
Quick Start
Prerequisites
Node.js 20+
Plex Media Server (any recent version)
Plex Token (How to get your token)
MCP-compatible client (Claude Desktop, etc.)
Installation
# Clone the repository
git clone https://github.com/niavasha/plex-mcp-server.git
cd plex-mcp-server
# Install dependencies
npm install
# Build the project
npm run buildOr install directly from npm:
npx plex-mcp-serverConfiguration
Get your Plex token (see instructions below)
Configure your MCP client (e.g., Claude Desktop):
{
"mcpServers": {
"plex": {
"command": "node",
"args": ["/path/to/plex-mcp-server/build/plex-mcp-server.js"],
"env": {
"PLEX_URL": "http://localhost:32400",
"PLEX_TOKEN": "your_plex_token_here",
"SONARR_URL": "http://localhost:8989",
"SONARR_API_KEY": "optional_sonarr_api_key",
"RADARR_URL": "http://localhost:7878",
"RADARR_API_KEY": "optional_radarr_api_key",
"TRAKT_CLIENT_ID": "optional_trakt_client_id",
"TRAKT_CLIENT_SECRET": "optional_trakt_client_secret"
}
}
}
}Only
PLEX_TOKENis required. All other credentials are optional — tools for unconfigured services return a clear error message explaining how to set them up, rather than crashing the server.
Sonarr/Radarr API keys can be found at Settings > General > API Key in each app's web UI.
Trakt.tv setup requires a Trakt OAuth application. Create one with redirect URI
urn:ietf:wg:oauth:2.0:oob, then add the Client ID and Secret to your config. Once the server is running, ask your AI assistant to "authenticate with Trakt" — it will guide you through the OAuth flow. See the Trakt setup guide for detailed instructions.
Compact Responses (optional)
Tools answer with JSON by default. Setting PLEX_OUTPUT_FORMAT=toon switches
them to TOON, which writes an array of records once as
a header and then as rows instead of repeating every field name on every record:
results[3]{ratingKey,title,year}:
1001,Arrival,2016
1002,Sicario,2015
1003,Dune,2021That is the same data your assistant would have received, in fewer tokens —
around a third fewer across a spread of tool responses, and 40–60% fewer on the
list-shaped ones like search_media, get_library_items and radarr_get_movies.
The saving is only worth having on long lists, so each response is emitted as
TOON only when TOON is actually shorter, and as JSON otherwise; enabling this
cannot make a response larger than it is today.
"env": {
"PLEX_TOKEN": "your_plex_token_here",
"PLEX_OUTPUT_FORMAT": "toon"
}Leave the variable unset — the default — and responses are byte-for-byte the JSON they have always been.
In v1.0.x there were three separate server binaries (build/index.js, build/plex-trakt-server.js, build/plex-arr-server.js). In v1.1.0+ these are replaced by a single unified binary: build/plex-mcp-server.js.
The old binaries still work but emit a deprecation warning. Update your MCP config to point to build/plex-mcp-server.js and remove any duplicate server entries.
See the migration guide for full details.
Usage
Once configured, you can ask your AI assistant:
"What movies did I watch last week?"
"Show me my most popular TV shows this month"
"Give me viewing statistics for the past 30 days"
"Search for Night of the Living Dead in my library"
"What's on my continue watching list?"
"List all my Plex libraries"
"Add that new show to Sonarr"
"What's in my Radarr download queue?"
"Sync my Plex history to Trakt"Recommended Workflows
Sync Plex watch history to Trakt:
Set up Trakt credentials (see above)
Ask: "Authenticate with Trakt" — follow the OAuth flow
Ask: "Do a dry run sync of my Plex history to Trakt" — preview what would sync
Ask: "Sync my Plex watch history to Trakt" — run the actual sync
Find and add new content:
Ask: "Search Sonarr for The Beverly Hillbillies" — find the TVDB ID
Ask: "Add The Beverly Hillbillies to Sonarr" — it auto-detects quality profiles and root folders
Ask: "What's in my Sonarr download queue?" — monitor progress
Get personalized recommendations:
Ask: "Recommend me some movies from my library"
The engine analyzes your watch history — genres, directors, actors, ratings
Scores every unwatched movie and returns the top matches with reasons
For multi-user servers, specify the user: "Recommend movies for Titus"
If Trakt is configured, it automatically uses your Trakt history too — catching movies you watched outside Plex (other platforms, before tracking was set up)
Cross-platform viewing analytics:
Ask: "Show me my Plex viewing stats for the last 30 days"
Ask: "What are my Trakt stats?" — see lifetime stats (movies watched, hours, milestones)
Ask: "What are my most popular movies this month?"
Available Functions
46 tools out of the box (58 with write operations enabled).
Plex Tools (20 tools)
Function | Description |
| List all Plex libraries |
| List items in a library with pagination |
| Export a full library to JSON (under |
| Search media globally or within one library |
| Recently added content |
| Continue watching list |
| Detailed media info |
| Show editable fields and available tags for an item |
| List all Plex playlists |
| List items in a playlist |
| Get the current account Watchlist from Plex Discover |
| Recently watched content |
| Detailed watch sessions |
| Fully watched movies/shows |
| Comprehensive viewing statistics |
| User activity statistics |
| Library usage metrics |
| Most popular content analysis |
| Personalized movie recommendations based on your watch history |
| Currently active Plex streams — who is watching what, player state, transcoding |
Write Operations (12 tools, opt-in)
Set PLEX_ENABLE_MUTATIVE_OPS=true to enable these tools. They allow your AI assistant to make changes to your Plex server. Use with care — while we test these tools, there are no guarantees. Review changes your assistant proposes before confirming.
Function | Description |
| Update metadata fields and editable tags for a media item |
| Apply a metadata JSON payload using best-effort field mapping |
| Create a new smart or static playlist |
| Add a media item to a playlist |
| Remove an item from a playlist |
| Preview and optionally clear all items from a playlist ( |
| Delete a playlist without deleting the underlying media |
| Add a matched local movie or show to the account Watchlist |
| Remove an account Watchlist item by its global Plex GUID or local rating key |
| Set the user's rating for a media item from 0 to 10 |
| Mark a media item as watched |
| Mark a media item as unwatched |
Sonarr Tools (8 tools)
Function | Description |
| List series with optional title filter |
| Search TheTVDB for new series |
| Add series by TVDB ID |
| Missing/wanted episodes |
| Download queue |
| Upcoming episodes |
| Quality profiles and root folders |
| Trigger missing episode search |
Radarr Tools (8 tools)
Function | Description |
| List movies with optional title filter |
| Search TMDB for new movies |
| Add movie by TMDB ID |
| Missing/wanted movies |
| Download queue |
| Upcoming movies |
| Quality profiles and root folders |
| Trigger missing movie search |
Cross-Service Tools (1 tool)
Function | Description |
| Check Sonarr/Radarr connection status |
Trakt Tools (9 tools)
Function | Description |
| Start Trakt.tv OAuth flow |
| Complete authentication |
| Check auth status |
| Sync Plex history to Trakt |
| Get Trakt data for comparison |
| Enhanced stats from Trakt |
| Search Trakt database |
| Real-time scrobbling |
| Check sync operation status |
Getting Your Plex Token
Open Plex Web App in your browser
Navigate to Settings > Account > Privacy
Click "Show Advanced" at the bottom
Copy your Plex Token
Alternative method:
Visit:
http://YOUR_PLEX_IP:32400/web/index.html#!/settings/accountLook for the "Plex Token" field
Project Structure
plex-mcp-server/
├── src/
│ ├── plex-mcp-server.ts # Unified server entry point (44+ tools)
│ ├── index.ts # Deprecated shim → plex-mcp-server
│ ├── plex-arr-server.ts # Deprecated shim → plex-mcp-server
│ ├── plex-trakt-server.ts # Deprecated shim → plex-mcp-server
│ ├── plex/ # Shared Plex module
│ │ ├── client.ts # Plex API client
│ │ ├── tools.ts # Plex tool implementations
│ │ ├── tool-registry.ts # Map-based tool dispatch
│ │ ├── tool-schemas.ts # MCP tool schema definitions
│ │ ├── constants.ts # Configuration defaults
│ │ └── types.ts # TypeScript type definitions
│ ├── arr/ # Sonarr/Radarr module
│ │ ├── client.ts # Base ArrClient + Sonarr/Radarr subclasses
│ │ ├── mcp-functions.ts # Tool implementations (17 tools)
│ │ ├── tool-registry.ts # Map-based tool dispatch
│ │ ├── tool-schemas.ts # MCP tool schema definitions
│ │ ├── constants.ts # Configuration defaults
│ │ └── types.ts # TypeScript type definitions
│ ├── trakt/ # Trakt.tv module
│ │ ├── client.ts # Trakt API client + OAuth
│ │ ├── sync.ts # Plex-to-Trakt sync engine
│ │ ├── mapper.ts # Plex-to-Trakt data mapping
│ │ ├── mcp-functions.ts # Tool implementations (9 tools)
│ │ ├── tool-registry.ts # Map-based tool dispatch
│ │ └── tool-schemas.ts # MCP tool schema definitions
│ ├── shared/ # Shared utilities
│ │ └── utils.ts # truncate, sleep, chunkArray
│ └── __tests__/ # Test suite (94 tests)
├── build/ # Compiled JavaScript output
├── docs/ # Documentation
├── package.json
├── tsconfig.json
├── vitest.config.ts
├── .env.example # Environment variables template
└── README.mdDevelopment
Scripts
# Development mode with auto-reload
npm run dev
# Build for production
npm run build
# Start production server
npm start
# Run tests
npm test
npm run test:watchBuilding from Source
git clone https://github.com/niavasha/plex-mcp-server.git
cd plex-mcp-server
npm install
npm run devContributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
Merged contributors are credited in CONTRIBUTORS.md. Please use Conventional Commits — releases and the changelog are generated from them, see docs/RELEASING.md.
Development Guidelines
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
Troubleshooting
Common Issues
Connection refused:
Verify your Plex server is running
Check the
PLEX_URLin your environment configEnsure the port (usually 32400) is correct
Host unreachable (EHOSTUNREACH / connect errors) on macOS:
On macOS Sequoia, Sonoma, or later, connections to local IP addresses (like
10.0.0.10or192.168.1.50) may be blocked by Local Network Privacy settings.Workaround 1: Try connecting using the local hostname (e.g.,
plex.localor your Plex server name) rather than the direct IP address. Alternatively, use a Plex*.plex.directdomain.Workaround 2: Go to System Settings -> Privacy & Security -> Local Network on your Mac and ensure that the MCP client (e.g., Claude Desktop, Terminal, or VS Code) is enabled and has permission to access the local network.
Authentication errors:
Verify your Plex token is correct
Check token permissions in Plex settings
Ensure token hasn't expired
Empty responses:
Some features require Plex Pass
Check if your libraries are accessible
Verify media has been scanned and is available
Sonarr/Radarr connection issues:
Verify Sonarr/Radarr is running and accessible from the MCP server host
Check that the API key is correct (Settings > General > API Key)
Sonarr uses API v3 at
/api/v3/— ensure your URL doesn't include a trailing pathFor large Radarr libraries (20k+ movies), the initial
radarr_get_moviescall may take up to 30 seconds
Trakt authentication issues:
Ensure
TRAKT_CLIENT_IDandTRAKT_CLIENT_SECRETare both setUse the
trakt_authenticatetool to start the OAuth flowComplete authentication with
trakt_complete_authusing the code from Trakt
MCP client issues:
Ensure the path is set to
build/plex-mcp-server.js(the unified server)Check that Node.js is in your system PATH
Verify environment variables are set in client config
Getting Help
Check existing discussions
Review the MCP documentation
Requirements
Node.js 20.0.0 or higher
Plex Media Server (any recent version)
Network access between MCP server and Plex server
Valid Plex token with appropriate permissions
Security Notes
Keep your Plex token secure - never commit it to version control
Use environment variables for sensitive configuration
Run on trusted networks - the server communicates directly with Plex
Regular token rotation - consider refreshing tokens periodically
Write operations are disabled by default — enable only if you trust your AI assistant's judgment
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
Everyone who has contributed code — this project is not a solo effort
Anthropic for the Model Context Protocol
Plex for the amazing media server
Tautulli for analytics inspiration
The open-source community for various libraries and tools
Related Projects
Model Context Protocol - The standard this server implements
Claude Desktop - Popular MCP client
Tautulli - Plex monitoring and analytics
PlexAPI - Python Plex API library
Built with love for the Plex and AI community
Available Tools
58 toolsadd_to_playlistA
Add a media item to a playlist (requires PLEX_ENABLE_MUTATIVE_OPS=true)
| Name | Required | Description | Default |
|---|---|---|---|
| ratingKey | Yes | Media rating key to add | |
| playlistId | Yes | Playlist rating key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, so the mutating nature is known. The description adds the configuration requirement, which is useful context beyond the annotations, but lacks details about side effects or behavior if the flag is false. With annotations present, a 3 is fair.
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?
Single sentence, front-loaded with the core action, no waste. Perfectly concise.
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 simple mutative tool with 2 parameters and no output schema, the description covers the action and prerequisite. It could mention return values or error behavior, but the provided context is largely sufficient.
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 coverage is 100% with both parameters described (media rating key, playlist rating key). The description does not add further parameter details, so the baseline of 3 applies.
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 'Add a media item to a playlist' uses a specific verb and resource, clearly distinguishing it from siblings like remove_from_playlist and create_playlist. The action is immediately understandable.
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 includes an explicit prerequisite (PLEX_ENABLE_MUTATIVE_OPS=true), which tells the agent when the tool can be used. However, it does not mention alternatives or when not to use it, so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_to_watchlistA
Add a local Plex movie or show to the account watchlist (requires PLEX_ENABLE_MUTATIVE_OPS=true)
| Name | Required | Description | Default |
|---|---|---|---|
| ratingKey | Yes | Local Plex rating key for a matched movie or show |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint=false and destructiveHint=false, so the mutation is expected; the description usefully adds that the operation is gated behind PLEX_ENABLE_MUTATIVE_OPS=true, which is a beyond-schema operational constraint. It does not disclose what happens when the flag is off, whether the operation is idempotent for items already on the watchlist, or any side effects, so it contains only modest enrichment on top of the 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 whole definition is a single sentence that is action-first and does not waste a word: verb + resource + destination + the one enabling requirement in a parenthetical. Every element carries meaning, with no paraphrase of the schema available.
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 one-parameter tool with no output schema, the description covers what the operation does, where it writes, and the necessary environment gate, which is enough to select and invoke it. The remaining gaps — what happens if PLEX_ENABLE_MUTATIVE_OPS is false or if the item is already in the watchlist — are minor for a simple, non-destructive mutation with a fully documented schema.
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 100%, and the schema already explains ratingKey as a 'local Plex rating key for a matched movie or show' with a clear description. The tool description echo (the 'local' term) matches the schema but doesn't add new meaning, such as how to obtain the ratingKey or what 'matched' means, so the baseline 3 is appropriate.
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 names a specific verb ('Add'), a specific resource ('a local Plex movie or show'), and a specific target ('the account watchlist'), so an agent knows immediately what the tool does. The 'local' qualifier and the watchlist target distinguish it from siblings such as remove_from_watchlist, get_watchlist, and add_to_playlist without needing to open other schemas.
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 states an explicit precondition ('requires PLEX_ENABLE_MUTATIVE_OPS=true'), which is a reasonable gateway for deciding whether invocation is even possible. It does not, however, name the alternatives for the same intent (e.g., get_watchlist to read, remove_from_watchlist to undo, trakt_sync_to_trakt for the Trakt watchlist) or give any when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
arr_get_statusARead-only
Check connection status of Sonarr and Radarr services
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds no new behavioral context. It doesn't mention what happens if a service is unreachable or what the response contains, but the read-only nature is covered by 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 a single sentence that is clear and direct, containing no unnecessary words or repetition.
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 simple status-check tool with no parameters and no output schema, the description is adequate. It covers what the tool does, though it could mention return format or typical use cases, but these are not essential.
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 no parameters, and schema coverage is 100% (empty schema). The description does not need to elaborate on parameters, so a baseline of 4 is appropriate.
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 checks connection status of Sonarr and Radarr services, using a specific verb (check) and resource (connection status). This distinguishes it from sibling tools that manage library items or trigger searches.
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, such as verifying connectivity before performing other operations. It only states the action without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_playlistADestructive
Clear all items from a playlist (preview unless confirm=true; requires PLEX_ENABLE_MUTATIVE_OPS=true)
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Set true to execute clear after preview | |
| playlistId | Yes | Playlist rating key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and non-read-only behavior. The description adds meaningful context: the preview/confirm flow and the environment variable gate that must be enabled for mutations. This goes beyond what annotations and schema provide, helping the agent understand operational requirements and safety.
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 a single, efficient sentence with a parenthetical for the two key execution details. It is front-loaded with the core action and contains no filler. Every part earns its place.
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 simple two-parameter destructive tool, the description covers the action, the preview/confirm safety mechanism, and the environment prerequisite. It doesn't describe return values or preview output, but the absence of an output schema and the simplicity of the operation make this acceptable. The destructive nature is well-handled with the gate mention.
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 coverage is 100%, with both parameters described. The description reiterates the confirm behavior ('preview unless confirm=true') but adds no new parameter-specific meaning. The playlistId is straightforward as 'rating key' in the schema. Since the schema carries the parameter semantics, a baseline score of 3 is appropriate.
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 uses a specific verb ('Clear') with a clear resource ('all items from a playlist'), which precisely distinguishes it from siblings like remove_from_playlist (removes specific items) and delete_playlist (deletes the whole playlist). The parenthetical adds key execution details (preview/confirm, env var) without muddying the core purpose.
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 clearly implies when to use it (to empty a playlist entirely) and provides critical usage context: the preview mode unless confirm=true and the required environment variable PLEX_ENABLE_MUTATIVE_OPS=true. It doesn't explicitly name alternatives, but the sibling names and the phrase 'clear all items' make the distinction obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_playlistA
Create a new Plex playlist (requires PLEX_ENABLE_MUTATIVE_OPS=true). For regular playlists, ratingKeys is required — Plex does not support creating empty playlists. For smart playlists, set smart=true and provide librarySectionId (and optionally libtype / smartFilter).
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Playlist type (video, audio, photo) or media type (movie, show, episode, artist, album, track) | |
| smart | No | Create a smart playlist filtered from a library section (default: false) | |
| title | Yes | Playlist title | |
| libtype | No | Smart playlists only: content type to filter for. Defaults based on playlist type (audio->track, video->movie, photo->photo). | |
| ratingKeys | No | Rating keys to seed the playlist with. REQUIRED for non-smart playlists (>=1). All items are sent in a single POST, comma-joined in the playlist URI. Mutually exclusive with smart=true. | |
| smartFilter | No | Smart playlists only: raw Plex filter query string, e.g. 'genre=Drama&year>=2020&sort=titleSort:asc&limit=100'. Appended to the section URI. | |
| librarySectionId | No | Smart playlists only: library section ID to filter (e.g. '1'). REQUIRED when smart=true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the annotations: it discloses the PLEX_ENABLE_MUTATIVE_OPS requirement and notes that Plex does not support creating empty playlists. These are not captured by the readOnlyHint/destructiveHint flags and help the agent understand true preconditions.
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 only two sentences, front-loaded with the primary action, and efficiently packs all critical usage constraints without redundancy. Every sentence earns its place.
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 7-parameter schema with full descriptions and non-mutative annotations, the description covers the core usage patterns and prerequisites. It does not mention return values, but since no output schema exists, this is a minor gap for a creation tool where the primary outcome is self-evident.
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 already provides 100% description coverage for all 7 parameters, including required conditions and mutual exclusivity. The description restates key patterns (e.g., ratingKeys required for regular, librarySectionId for smart) but does not add new semantic information beyond what the schema offers. Baseline 3 is appropriate.
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 opens with 'Create a new Plex playlist', using a specific verb and resource. It clearly distinguishes this from sibling tools like get_playlists, add_to_playlist, and delete_playlist by focusing on the creation action.
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 clear context on when to use this tool: it requires PLEX_ENABLE_MUTATIVE_OPS=true, and it explains the two distinct usage paths (regular vs. smart playlists) with their required parameters. It does not explicitly name alternatives, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_playlistADestructive
Delete a Plex playlist without deleting the underlying media (requires PLEX_ENABLE_MUTATIVE_OPS=true)
| Name | Required | Description | Default |
|---|---|---|---|
| playlistId | Yes | Playlist rating key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is known. The description adds valuable behavioral context by specifying that the underlying media is not deleted and the environment variable requirement, which is beyond what annotations provide. It does not mention reversibility, but the deletion implication is clear.
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 a single sentence that front-loads the main action and includes the critical safety and configuration notes. Every phrase earns its place, with no redundant or filler content. It is concise and well-structured for quick parsing by an agent.
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 simple one-parameter mutation tool with no output schema, the description covers the essential context: what it does, that it preserves media, and the required environment variable. It does not mention permanence or potential side effects, but given the simplicity and the destructive annotation, the provided information is largely sufficient. It could be more complete with an explicit 'permanent' note, but it is above the minimum viable level.
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 coverage is 100%: the single parameter playlistId is described as 'Playlist rating key'. The description itself adds no extra meaning for the parameter beyond the schema, which already clearly identifies it. With full schema coverage, a baseline score of 3 is appropriate, and the description does not need to compensate.
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: 'Delete a Plex playlist' with a specific resource and verb. It also adds the important distinction that it does not delete underlying media, which differentiates it from related tools like clear_playlist or remove_from_playlist. This is a specific and unambiguous purpose.
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 gives clear context for when to use this tool (deleting a playlist) and includes a critical prerequisite (requires PLEX_ENABLE_MUTATIVE_OPS=true). However, it does not explicitly name alternative tools or state when not to use it, such as when you only want to clear or remove items rather than delete the entire playlist. The exclusion is implied by the safety note but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_libraryA
Export a full library to a JSON file (within ./exports)
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Media type (movie, show, episode, artist, album, track) | |
| pageSize | No | Items per page for export (default: 500) | |
| libraryKey | Yes | Library section key | |
| outputPath | No | Optional relative path under ./exports (default: library_{key}_{timestamp}.json) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the useful context that output is written to './exports'. Annotations already indicate non-read-only and non-destructive behavior, which is consistent with the description. However, it doesn't mention return values, overwrite behavior, or naming conventions, so transparency is partial.
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 a single sentence that is front-loaded and contains zero filler. It efficiently conveys the core purpose and output location without unnecessary detail.
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?
With four parameters and no output schema, the description is too terse to be complete. It doesn't clarify the relationship between 'full library' and the 'type' or 'libraryKey' parameters, what the tool returns, or the default filename pattern. This leaves significant gaps for the agent to use the tool correctly.
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?
All four parameters have descriptions in the schema (100% coverage), so the baseline is 3. The description itself adds no extra meaning beyond the schema, leaving parameter semantics entirely to the schema definitions.
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 exports a full library to a JSON file in './exports'. The verb 'export' is specific, and the resource (library) and output format are unambiguous. This distinguishes it from sibling tools that retrieve, search, or manage media.
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 implies the tool is used when you need to export a library to a JSON file. Although it doesn't explicitly list alternatives or exclusions, the context is clear because no sibling tool offers export functionality. This provides sufficient guidance for when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_active_sessionsARead-only
Get currently active Plex streams — who is watching what right now, including player state, session location, transcode decisions and media quality
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description adds value by disclosing the specific behavioral aspects of the return data: player state, session location, transcode decisions, and media quality. This goes beyond the annotations without contradicting them.
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 a single, well-structured sentence. It front-loads the core action and then lists specific included data elements. No filler or redundancy; every word contributes.
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?
This is a simple read-only tool with no parameters and no output schema. The description adequately conveys what the tool does, the scope (currently active), and the kind of information returned. Given the low complexity and rich annotations, the description is 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 tool has zero parameters, and the input schema is empty with 100% coverage (vacuously). Per the rubric, a 0-parameter tool gets a baseline of 4. The description adds no parameter details because none exist, and none are needed.
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'), resource ('active Plex streams'), and further elaborates with 'who is watching what right now'. It distinguishes itself from sibling tools like get_watch_history or get_libraries by focusing on current real-time streams.
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 implies the usage context: use this tool when you need to know what is currently playing, as opposed to historical or library-wide tools. However, it does not explicitly name alternatives or provide exclusion criteria, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_editable_fieldsBRead-only
Get editable fields and available tags for a media item
| Name | Required | Description | Default |
|---|---|---|---|
| ratingKey | Yes | The rating key of the media item |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description simply restates the tool's purpose without adding behavioral context. It does not disclose return format, pagination, permissions, or what 'available tags' means beyond the basic read-only nature.
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 a single, concise sentence with no filler. It front-loads the action ('Get') and the resource ('editable fields and available tags'), making it easy to parse quickly.
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 param, no output schema) and presence of annotations, the description is minimally acceptable. However, it leaves ambiguity about what 'editable fields' refers to (field definitions vs. current values) and whether 'available tags' are library-level or item-specific, which could affect correct invocation and output interpretation.
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 100% with ratingKey described as 'The rating key of the media item.' The tool description adds no further parameter details, so it relies fully on the schema—baseline 3 is appropriate.
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 gets 'editable fields and available tags' for a media item, which is a specific resource and action. It distinguishes from siblings like get_media_details by specifying 'editable fields' rather than general details, though it does not explicitly name alternative tools.
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 related tools like update_metadata or get_media_details. There are no stated exclusions, prerequisites, or typical scenarios, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fully_watchedARead-only
Get all fully watched movies and shows from a library
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of items to return (default: 500) | |
| mediaType | No | Filter by media type (movie, show, all) | all |
| libraryKey | No | Library section key (optional, searches all if not provided) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds no behavioral context beyond the purpose, such as pagination behavior, return format, or the meaning of the 'all' word given the default limit.
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 a single concise sentence, front-loaded with the action and object, 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 simple read-only nature, full schema documentation, and annotations, the description is adequate. It misses a note about the default limit potentially truncating 'all', which would be useful, but the schema covers it, so it's not a major gap.
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 100%, with clear descriptions for limit, mediaType, and libraryKey. The description slightly correlates with mediaType and libraryKey but adds no new meaning beyond what the schema already provides, so baseline 3 applies.
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 uses the specific verb 'Get' with the resource 'fully watched movies and shows' and scopes it to 'a library'. This clearly distinguishes it from sibling tools like get_recently_added, get_on_deck, and get_watch_history, which address different filters.
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?
Usage is implied by the description: use when you need fully watched items. However, it does not explicitly state when to prefer this over alternatives like get_watch_history or get_library_items, nor mention exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_librariesARead-only
Get all Plex libraries
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds no additional behavioral details beyond the core operation, such as the return format or any external access implications. This is adequate but not rich.
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 a single, direct sentence with no filler. Every word serves to communicate the tool's purpose.
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 no-parameter, read-only list operation, the description is minimally sufficient. However, it does not specify what the return payload contains (e.g., library names, IDs, metadata) or provide any guidance relative to sibling tools, so it is not fully complete for an agent unfamiliar with Plex's structure.
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 zero parameters, so the baseline is 4 per the rubric. The empty schema fully covers the input surface, and the description does not need to explain any parameter semantics.
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 uses a specific verb 'get' and clearly identifies the resource as 'all Plex libraries', which distinguishes it from sibling tools like get_library_items or get_recently_added. It unambiguously states the tool's scope.
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 usage context, exclusions, or references to alternative tools. It does not say when to use get_libraries versus get_library_items or export_library, leaving the agent to infer from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_library_itemsARead-only
List items in a library with pagination (useful for large libraries)
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort order (optional, e.g., titleSort:asc) | |
| type | No | Media type (movie, show, episode, artist, album, track) | |
| limit | No | Number of items to return (default: 1000) | |
| offset | No | Zero-based offset for pagination (default: 0) | |
| libraryKey | Yes | Library section key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the pagination behavior ('with pagination') and its relevance to large libraries, but no other behavioral details like rate limits or response format. With annotations present, this is adequate but not rich.
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 a single sentence that is front-loaded with the action ('List items in a library') and efficiently conveys the key behavioral aspect (pagination) and a practical use case (large libraries). No waste or redundancy.
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 read-only list tool with 5 parameters and no output schema, the description is mostly complete. It states the primary action and the pagination feature. However, it does not explicitly describe the return format or list any alternatives, leaving a small gap for a brand-new 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 input schema covers all 5 parameters with descriptions (100% coverage). The description only reinforces the concept of pagination, which the schema already details via limit/offset. No additional semantics are provided, so the baseline score of 3 is appropriate.
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 the resource 'items in a library', with pagination as a distinguishing behavior. While it does not explicitly differentiate from siblings like get_playlist_items, the resource is specific enough. Lacks explicit sibling contrast, hence not a 5.
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 phrase 'useful for large libraries' provides a clear context for when to use this tool, implying it handles large result sets efficiently. However, it does not mention when not to use it or name any alternative tools, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_library_statsCRead-only
Get library-specific statistics
| Name | Required | Description | Default |
|---|---|---|---|
| libraryKey | No | Library section key (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds only a scope qualifier ('library-specific') but no additional behavioral context such as return format, aggregations, or behavior when libraryKey is omitted. This falls short of enriching the agent's understanding beyond the 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 a single, tightly worded phrase with no filler or redundancy. It is appropriately concise for a simple tool, though it sacrifices detail for brevity.
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?
With no output schema and a terse description, the tool's return value is not explained. The agent is left guessing what statistics are provided, how they are structured, and how the optional libraryKey affects results. For a tool with only one parameter and no explicit output format, the description should provide more context.
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 coverage is 100% with libraryKey described as 'Library section key (optional)', so the schema fully documents the parameter. The description offers no additional semantic value beyond what the schema already provides, earning the baseline score of 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 a specific verb ('Get') and resource ('library-specific statistics'), which distinguishes it from sibling tools like get_libraries (which lists libraries) and get_library_items (which lists items). However, it lacks detail on what 'statistics' encompasses, making it clear but not fully specific.
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 such as get_watch_stats or get_user_stats. There is no mention of prerequisites, context, or exclusions, leaving the agent to infer appropriate usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_media_detailsARead-only
Get detailed information about a specific media item
| Name | Required | Description | Default |
|---|---|---|---|
| ratingKey | Yes | The rating key of the media item |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, and the description does not contradict this. It adds only the word 'detailed' without explaining what that includes (e.g., metadata fields, streaming URLs). Since annotations cover safety, the bar is lower, but the description still provides no extra behavioral context.
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?
A single, clear sentence with no unnecessary words or repetition. It is appropriately concise and front-loaded with the main purpose.
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?
The tool is simple with one well-documented parameter and safety annotations, so the description is largely sufficient. However, the phrase 'detailed information' is vague and no output schema exists, leaving some uncertainty about the exact return payload. Given the low complexity, this is a minor gap.
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 coverage is 100% with the ratingKey parameter described as 'The rating key of the media item.' The description does not add additional meaning beyond 'specific media item,' so it meets the baseline for high schema coverage.
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 'get' and the resource 'detailed information about a specific media item,' which distinguishes it from sibling list/search tools like get_library_items and search_media by focusing on a single item identified by a rating key.
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?
Usage is implied: use this when you have a ratingKey and need detailed information. However, the description does not explicitly state when to use this tool vs alternatives or provide exclusions, leaving the agent to infer from the tool name and parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_on_deckARead-only
Get on deck (continue watching) items
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds the clarification that 'on deck' means 'continue watching,' which is useful, but it does not disclose ordering, pagination, or scope limitations (e.g., whether fully watched items are excluded).
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 nearly as short as possible while still being informative: 'Get on deck (continue watching) items.' The parenthetical adds value without unnecessary words, and the key verb is front-loaded.
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 zero-parameter tool with no output schema, the description provides the basic purpose but is not fully complete. It does not explain exactly what qualifies as 'on deck' (e.g., progress percentage, whether started items are included) or how it differs from similar sibling tools. The lack of linkage to alternatives reduces completeness.
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 zero parameters, so there is no parameter semantics burden on the description. Baseline of 4 is appropriate because the description does not need to explain what each parameter means.
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 ('Get') and the resource ('on deck items'), with the parenthetical '(continue watching)' disambiguating the meaning of 'on deck.' This directly distinguishes it from sibling tools like get_recently_watched or get_watch_history.
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. For example, it does not say 'use this for in-progress items, while get_recently_watched is for anything recently viewed.' This leaves the agent without context for selecting among many similar retrieval tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlist_itemsBRead-only
Get items in a Plex playlist
| Name | Required | Description | Default |
|---|---|---|---|
| playlistId | Yes | Playlist rating key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. However, the description adds no extra behavioral context—no mention of return format, pagination, error handling, or whether the playlist must exist. The description merely restates the obvious action.
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 a single, front-loaded sentence with no wasted words. It clearly conveys the action and the target resource.
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?
With no output schema, the description should explain what the returned 'items' look like (e.g., media IDs, metadata, or just counts). The vague phrase 'items in a Plex playlist' leaves the response format ambiguous, which is a significant gap for a simple tool.
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 100%—playlistId is documented as 'Playlist rating key'. The tool description adds no additional parameter meaning, so the baseline score of 3 applies.
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 uses the specific verb 'Get' with the resource 'items in a Plex playlist', clearly stating the tool's function. It distinguishes from sibling tools like get_playlists (which lists playlists) and add_to_playlist (which modifies).
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. The description only states what it does without mentioning use cases, exclusions, or relationships to sibling tools such as get_playlists or search_media.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlistsARead-only
Get all Plex playlists
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral details beyond the annotations. Annotations already indicate a safe read operation (readOnlyHint=true, destructiveHint=false), but the description does not disclose return format, whether it includes playlist contents, or any additional context such as authentication requirements. It essentially restates the tool's name.
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 a single concise sentence that directly communicates the tool's function. It contains no filler and is front-loaded with the action ('Get') and target ('all Plex playlists').
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 simple read-only tool with no parameters and no output schema, the description is sufficiently complete. It tells the agent exactly what the tool returns (all playlists), and annotations cover the safety aspects. The lack of details about return structure is acceptable given the tool's simplicity.
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 input schema has zero parameters, and schema description coverage is vacuously 100%. With no parameters to explain, the baseline of 4 is appropriate; the description does not need to elaborate on parameter behavior.
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 'Get all Plex playlists' uses a specific verb ('Get'), identifies the resource ('Plex playlists'), and specifies the scope ('all'). This clearly distinguishes it from sibling tools like get_playlist_items, which focuses on items within a playlist, and create_playlist, which is for creation.
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 implies the use case—anytime you need a complete list of Plex playlists—but it does not explicitly state when to use this tool over alternatives. No exclusions or alternative references are provided, so guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_popular_contentBRead-only
Get most popular content by plays or duration
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of items to return (default: 50) | |
| metric | No | Sort by plays or total duration | plays |
| mediaType | No | Filter by media type | all |
| timeRange | No | Time range in days (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. However, the description adds no behavioral context beyond what annotations and schema already provide—'by plays or duration' simply restates the metric parameter. No additional traits like pagination, defaults interpretation, or return format are disclosed.
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 a single, front-loaded sentence with no wasted words. It efficiently communicates the tool's primary purpose, making it appropriately concise.
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?
The tool has a rich schema and annotations, and the description gives the essential idea. However, it lacks guidance on when to use this tool versus related ones, and with no output schema, it could benefit from hinting at the return format. It is minimally viable but not fully contextual.
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 100%, so the baseline is 3. The description mentions 'plays or duration' which maps to the metric parameter, but it adds no new meaning beyond the schema's own descriptions.
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 'Get' and the resource 'content', and indicates the sorting options 'by plays or duration'. It does not explicitly differentiate from sibling tools like get_recommendations or get_recently_added, but the core purpose is clear.
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 exclusions, prerequisites, or context where another tool would be preferred, leaving the agent without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recently_addedCRead-only
Get recently added media
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of items to return (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description merely restates the tool name, adding no behavioral detail beyond what the annotations (readOnlyHint=true, destructiveHint=false) already convey. It does not explain the meaning of 'recently added' (e.g., time frame, media type) or what the response contains.
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 extremely brief, consisting of only three words, but it is redundant with the tool name. It does not earn its place by providing any new information or context.
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?
The tool is simple, but the description leaves ambiguity about what 'recently added' refers to and lacks any explanation of the return value, which is especially problematic given there is no output schema. Sibling tools with similar purposes make the lack of context more significant.
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 input schema fully documents the single 'limit' parameter with type and default. The description adds no additional meaning or usage hints beyond the schema, so it meets the baseline for this dimension.
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 uses a specific verb ('Get') and resource ('recently added media'), making the primary function clear. However, it does not distinguish this from sibling tools like get_recently_watched or get_on_deck, which could also return recently added items in different contexts.
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 information is provided about when to use this tool versus alternatives such as get_library_items or get_recently_watched. The description lacks any contextual or exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recently_watchedBRead-only
Get recently watched movies and shows
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of items to return (default: 100) | |
| mediaType | No | Filter by media type (movie, show, episode, all) | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and destructiveHint, so the safety profile is known. The description adds no additional behavioral context such as ordering, pagination, or list return behavior, which would be useful beyond what annotations provide.
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 a single, concise sentence that front-loads the action and resource. Every word earns its place, with no filler or redundancy.
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?
The tool is simple with two well-documented parameters, but no output schema exists and the description does not mention return format or that mediaType supports 'all' and 'episode.' Given the number of sibling tools, more context would help differentiate this from get_watch_history.
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 100% for both parameters, with defaults and enums clearly documented. The description adds no parameter information beyond the schema, matching the baseline expectation when the schema is comprehensive.
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 retrieves recently watched movies and shows, using a specific verb and resource. However, it does not explicitly distinguish it from sibling tools like get_watch_history, and it omits that episodes are also supported via the mediaType parameter.
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 such as get_watch_history or get_recently_added. The usage context is only implied by the name 'recently watched,' but there are no explicit exclusions or references to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recommendationsARead-only
Get personalized movie recommendations from your Plex library based on watch history. Analyzes genres, directors, and actors you've watched to score unwatched films. Supports per-user recommendations for multi-user Plex servers. If Trakt is configured, uses your rating profile to further refine scores.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of recommendations to return (default: 10) | |
| userId | No | Plex account ID for per-user recommendations. Omit to use the server owner. Use get_user_stats to find user IDs. | |
| libraryKey | Yes | Library section key (required — use get_libraries to find it) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds behavioral context about the scoring algorithm (analyzes genres, directors, actors) and conditional Trakt rating profile usage, which goes beyond what annotations provide.
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 composed of four short sentences, each adding substantive detail about the tool's purpose, algorithm, per-user capability, and Trakt integration. It is front-loaded with the core purpose and contains no filler, though it is slightly more verbose than the minimal two-sentence ideal.
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 read-only recommendation tool, the description covers what it does, how it works, and when user-specific behavior applies. It omits explicit return format details, but that is not critical given the simple list output implied by 'recommendations' and the absence of an output schema.
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 coverage is 100% with each parameter individually described, so the description adds minimal parameter-specific meaning. The 'per-user' mention aligns with the userId parameter but doesn't offer new syntax or formatting details 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 function: retrieving personalized movie recommendations from the user's Plex library. It distinguishes itself from siblings like search_media or get_recently_watched by specifying the recommendation logic (watch history, genres, directors, actors) and per-user support.
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 implies usage for personalized recommendation requests, referencing watch history and optional Trakt integration for rating refinement. It does not explicitly name alternatives or exclusion criteria, but the context is unambiguous and no conflicting use cases are suggested.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_statsCRead-only
Get user-specific watch statistics
| Name | Required | Description | Default |
|---|---|---|---|
| timeRange | No | Time range in days (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly and non-destructive behavior. The description adds no additional behavioral context such as what statistics are included, whether external authentication is needed, or any limitations. With annotations present, the description provides minimal value beyond them.
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 a single concise sentence with no fluff or redundancy. It is appropriately brief for a simple getter tool, though it sacrifices informational richness.
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?
With no output schema, the description should convey what statistics are returned, but it only says 'watch statistics' without specifics. The tool's context among many similar sibling tools is not addressed, and no usage context is provided.
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 provides full coverage for the only parameter (timeRange) with a description. The tool description adds no additional parameter semantics beyond the schema, so baseline 3 is appropriate.
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 retrieves user-specific watch statistics with a specific verb and resource. However, it does not explicitly distinguish it from sibling tools like get_watch_stats or trakt_get_user_stats, which could have overlapping scope.
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. The description only states the function without context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_watch_historyBRead-only
Get detailed watch history with session information
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of sessions to return (default: 500) | |
| userId | No | Filter by specific user ID (optional) | |
| mediaType | No | Filter by media type | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe, read-only operation, and the description adds 'session information' as a behavioral detail about the response content. It does not mention pagination, limits, or ordering, but with annotations covering safety, the added context is sufficient for a 3.
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 a single, front-loaded sentence with no wasted words. It efficiently communicates the core function, though 'detailed' is slightly vague.
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 three optional parameters and good annotations, the description is minimally adequate, but it lacks details on output shape or how it differs from related tools like get_recently_watched. The absence of an output schema and sibling differentiation makes the description less complete for an agent making tool-selection decisions.
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 input schema provides descriptions for all three parameters (limit, userId, mediaType), so schema coverage is 100%. The description does not add any parameter semantics beyond what the schema already states, placing it at the baseline of 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 retrieves watch history and includes session information, using a specific verb and resource. However, it does not differentiate from sibling tools like get_recently_watched or get_fully_watched, so it earns a 4 rather than 5.
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 about when to use this tool versus alternative watch-history tools such as get_recently_watched or get_watch_stats. The description only states what the tool does, leaving the agent to infer its scope. This is a significant gap given the number of similar sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_watchlistARead-only
Get the user's Plex watchlist
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and destructiveHint annotations already disclose the safety profile, and the description is consistent (non-destructive read). It adds minimal extra context by specifying 'user's' (implying the authenticated user), but does not disclose return format, ordering, or pagination behavior.
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 a single, focused sentence with no redundant words. It immediately communicates the tool's purpose without filler.
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 zero-parameter, read-only tool, the description is sufficiently complete. It does not explain the return structure, but given the simplicity and the absence of an output schema, the description covers the essential context. Slightly more detail about what is returned could push it to 5.
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 zero parameters, so the schema coverage is trivially 100%. With no parameters to describe, the baseline of 4 applies, and the description adds no parametric 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 a specific verb ('Get') and a specific resource ('the user's Plex watchlist'), making the tool's function unambiguous and distinct from sibling tools like get_watch_history or get_playlists.
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 explicit guidance is provided on when to use this tool versus alternatives like get_watch_history or get_recently_watched. The description simply states what the tool does without contextualizing its use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_watch_statsBRead-only
Get comprehensive watch statistics (Tautulli-style analytics)
| Name | Required | Description | Default |
|---|---|---|---|
| statType | No | Type of statistics to retrieve | plays |
| timeRange | No | Time range in days (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is clear. The description adds only 'comprehensive' and 'Tautulli-style', which give a hint of output style but no substantive behavioral detail beyond the 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 a single, front-loaded sentence that conveys the core purpose without wasted words. Every word earns its place.
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?
The description, combined with schema and annotations, gives a moderate picture. However, without an output schema, 'comprehensive watch statistics' is vague, and the absence of detail on what analytics are returned leaves the agent guessing about the output shape.
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 100%, with both parameters described. The description adds no additional parameter semantics, so the baseline of 3 applies.
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 states the verb 'Get' and resource 'watch statistics', making the tool's basic purpose clear. However, it does not differentiate from sibling tools like 'get_user_stats' or 'get_library_stats', so it lacks sibling discrimination.
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. The description mentions 'Tautulli-style analytics' but does not explain what scenarios it suits or when to choose other stats tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_unwatchedA
Mark a Plex media item as unwatched (requires PLEX_ENABLE_MUTATIVE_OPS=true)
| Name | Required | Description | Default |
|---|---|---|---|
| ratingKey | Yes | The local Plex rating key of the media item |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint=false and destructiveHint=false, the description discloses an operational gate with the environment variable requirement, which is important behavioral context because the tool likely fails without it. It does not detail side effects or return behavior, but the mutability and prerequisite are clear.
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 one sentence, action-first, and includes the key prerequisite in a parenthetical with zero wasted words. It avoids restating the title or repeating information already present in annotations.
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 simple single-parameter mutation with no nested objects and no output schema, this description covers the action, the required parameter, and the key prerequisite. The only minor gap is not describing the expected successful response or failure behavior, which is not critical for deciding how to invoke it.
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 already documents the only parameter, ratingKey, with a meaningful description and 100% coverage. The tool description adds no extra parameter-level detail beyond reinforcing that the item is a Plex media item, so no compensation is needed.
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 names a specific action ('Mark'), a specific resource ('a Plex media item'), and the resulting state ('unwatched'). It is also semantically distinguishable from the sibling tool mark_watched without needing to open the schema.
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 intention is self-evident and the required environment gate is stated, so an agent can infer when to use it. However, it does not explicitly mention alternatives such as mark_watched or state when the opposite tool should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_watchedA
Mark a Plex media item as watched (requires PLEX_ENABLE_MUTATIVE_OPS=true)
| Name | Required | Description | Default |
|---|---|---|---|
| ratingKey | Yes | The local Plex rating key of the media item |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is not a read-only operation. The description adds useful behavioral context by explicitly calling out the PLEX_ENABLE_MUTATIVE_OPS requirement, which is key environmental information beyond the basic mutation flag. It does not contradict any 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 a single efficient sentence that communicates the operation and the crucial prerequisite in very few words. The information is front-loaded and there is no unnecessary filler.
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 simple one-parameter tool with clear annotations and a complete input schema, the description is sufficient to explain the key action and the required environment flag. It could be more complete about expected return behavior or idempotency, but those are less critical given the tool's low complexity.
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 only parameter is fully documented in the schema (ratingKey is described as 'The local Plex rating key of the media item'). Since schema description coverage is 100%, the tool description need not repeat or enrich this parameter. The baseline score of 3 is appropriate.
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 specifies a clear verb 'Mark' with a clear resource 'Plex media item' and the target state 'watched'. Although it does not name alternatives, its wording meaningfully differentiates it from the sibling mark_unwatched and other media operations.
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 includes a configuration prerequisite (PLEX_ENABLE_MUTATIVE_OPS=true) but provides no guidance on when this tool should be preferred over related tools like mark_unwatched, rate_media, or update_metadata. The intended selection criteria are largely left to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_add_movieB
Add a new movie to Radarr by TMDB ID
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Movie title | |
| tmdbId | Yes | The Movie Database (TMDB) ID | |
| monitored | No | Whether to monitor the movie (default: true) | |
| rootFolderPath | No | Root folder path (auto-detected if omitted) | |
| searchForMovie | No | Search for the movie after adding (default: true) | |
| qualityProfileId | No | Quality profile ID (auto-detected if omitted) | |
| minimumAvailability | No | When the movie is considered available | released |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is minimal and does not disclose significant behavioral traits. Annotations indicate it is a write operation (readOnlyHint=false) and not destructive, but the description does not mention potential side effects such as automatically searching for the movie (searchForMovie defaults to true) or that it may download metadata. This lack of behavioral context is a notable gap for a mutation tool.
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 a single, clear sentence that is front-loaded and free of any fluff. It efficiently conveys the tool's purpose without unnecessary 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 (7 parameters, no output schema) and its side effects, the description is too sparse. It does not explain what happens after adding (e.g., whether the movie is monitored, searched for, or what a successful response contains). This incompleteness leaves the agent without important runtime context.
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 input schema provides 100% coverage of all 7 parameters with clear descriptions, defaults, and enums. The description adds no extra parameter information beyond what the schema already offers, so it meets the baseline of 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 adds a new movie to Radarr using TMDB ID, with a specific verb ('Add'), resource ('movie to Radarr'), and method ('by TMDB ID'). This distinguishes it from sibling tools like radarr_search and radarr_get_movies.
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 implies its usage (adding movies to Radarr) but provides no explicit guidance on when to use it versus alternatives, nor any prerequisites or exclusions. The tool name and sibling list offer some implied context, but no direct comparison or when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_get_calendarBRead-only
Get upcoming movies from the Radarr calendar
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default: 200) | |
| endDate | No | End date (YYYY-MM-DD, default: 30 days from now) | |
| startDate | No | Start date (YYYY-MM-DD, default: 7 days ago) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read nature is covered. The description adds no additional behavioral context such as date-range behavior, return format, or any side effects. It simply restates the purpose without enriching the agent's understanding beyond the 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 a single, well-structured sentence that front-loads the main purpose. It is appropriately concise with no filler or redundant wording, making it easy to parse quickly.
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?
The tool is a simple read-only calendar listing with good schema coverage and safe annotations. However, with no output schema, the description could clarify what the response contains (e.g., list of movies with dates). It also relies on the schema for date default behavior, leaving some gaps. Overall, it is adequate 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 input schema provides 100% parameter coverage with descriptions for limit, startDate, and endDate, including defaults. The description adds no extra parameter semantics, but since the schema is complete, a baseline score of 3 is appropriate.
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 'Get upcoming movies from the Radarr calendar' clearly states a specific verb (get), resource (Radarr calendar), and scope (upcoming movies). It differentiates from siblings like radarr_get_movies (which likely lists all movies) and sonarr_get_calendar (for TV series), though it doesn't explicitly name alternatives.
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. There are no explicit contexts, exclusions, or alternative tool mentions. The description is purely declarative and offers no conditional advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_get_missingARead-only
Get missing/wanted movies from Radarr
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| pageSize | No | Items per page (default: 200) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows it is a safe read operation. The description adds minimal extra context about the data being 'missing/wanted' movies but does not elaborate on response format, pagination behavior, or any other runtime nuances. It meets the baseline but provides no additional behavioral disclosure beyond what the annotations and name imply.
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 a single, seven-word sentence that is front-loaded with the action verb and directly states the tool's purpose. There is no redundant information, fluff, or repetition of schema details, making it maximally concise and well-structured.
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 simple read-only pagination tool with good annotations and self-explanatory parameters, the description is nearly complete. It clearly states the resource type (missing/wanted movies) and source (Radarr). While it lacks an explicit alternative reference or deeper behavior description, the simplicity and existing schema coverage make it sufficient for most use cases.
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 input schema provides complete descriptions for both parameters (page and pageSize) with defaults, achieving 100% schema description coverage. The tool description does not add any additional parameter semantics, so the baseline score of 3 is appropriate.
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 'Get missing/wanted movies from Radarr' uses a specific verb (Get) and identifies the resource (missing/wanted movies) and source system (Radarr). This clearly distinguishes it from sibling tools like radarr_get_movies (which likely returns all movies) and sonarr_get_missing (which targets TV series), making the purpose unambiguous.
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 implies that the tool is used to retrieve missing/wanted movies but provides no explicit guidance on when to use it over alternatives such as radarr_get_queue or radarr_search. There is no 'Use this when...' or mention of exclusions, leaving the usage context to be inferred from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_get_moviesARead-only
List all movies in Radarr with optional title filter
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default: 200) | |
| filter | No | Optional title substring filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only the scope ('all movies') and optional filter, which adds minimal behavioral context beyond what annotations and schema provide. No return format, pagination behavior, or edge cases are disclosed.
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 a single, front-loaded sentence that conveys the core purpose without extraneous details. Every word earns its place.
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 simple read-only list tool with two well-documented parameters and strong annotations, the description is adequate. It doesn't explain return values, but no output schema exists, and the tool's purpose is straightforward. A 4 is appropriate given the completeness relative to complexity.
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 coverage is 100% because both 'limit' and 'filter' have descriptions. The description's mention of 'optional title filter' aligns with the 'filter' parameter but does not add additional meaning beyond the schema. Baseline 3 is appropriate when the schema carries the parameter documentation.
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 lists all movies in Radarr with an optional title filter. The verb 'list' and resource 'movies' are specific, and 'all movies' differentiates it from tools like radarr_get_missing or radarr_get_queue.
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 implies usage for retrieving the full movie library but does not explicitly contrast with siblings like radarr_search (for discovering new movies) or radarr_get_missing. No exclusions or alternate tool mentions are provided, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_get_profilesARead-only
Get Radarr quality profiles and root folders (needed before adding movies)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'Get', which is consistent with the readOnlyHint and destructiveHint annotations. However, it adds no additional behavioral context beyond what annotations already provide, such as return format, rate limits, or prerequisites. With annotations covering the safety profile, this is acceptable but not enriched.
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 a single sentence, front-loaded with the main action and resource, and includes a useful parenthetical about usage. Every word earns its place; there is no fluff.
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 (no parameters, no output schema) and strong annotations, the description fully covers what the tool does and when to use it. It explains the returned items (quality profiles and root folders) and the prerequisite context for adding movies.
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 zero parameters, so the baseline is 4. The description doesn't need to explain any parameter details. It correctly focuses on the output and purpose.
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 function with a specific verb and resource: 'Get Radarr quality profiles and root folders'. It distinguishes itself from the sibling tool 'sonarr_get_profiles' by explicitly naming Radarr, and adds context by noting it's needed before adding movies.
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?
It provides clear context for when to use the tool: 'needed before adding movies'. This implies the appropriate usage time without explicitly naming alternatives or exclusions. While it doesn't say 'use this instead of X', the context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_get_queueARead-only
Get the current Radarr download queue
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default: 200) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds minimal extra context ('current') beyond the annotations, but it does not disclose additional behavioral traits such as permissions or rate limits. It is consistent with the annotations, so no contradiction.
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 a single, front-loaded sentence: 'Get the current Radarr download queue'. Every word earns its place, with no unnecessary detail or repetition. It is optimally concise and well-structured.
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 optional parameter, no output schema, and clear annotations), the description adequately covers the essentials. It does not explain the return format or queue contents, but for a well-known domain like Radarr, this is sufficient. The absence of an output schema is offset by the clarity of the tool's purpose.
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 provides a full description for the only parameter 'limit' (Max results to return, default: 200), giving 100% coverage. The tool description does not add further meaning or context about how the parameter interacts with the queue, but the baseline of 3 applies because the schema already handles the semantics.
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 uses the specific verb 'Get' and identifies an exact resource: 'the current Radarr download queue'. This clearly distinguishes it from sibling tools like sonarr_get_queue (for Sonarr) and radarr_get_movies (for movies), leaving no ambiguity about its function.
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 clear context by specifying 'current', indicating this returns the live download queue rather than historical data. It does not name alternatives, but the target use is self-evident for an agent familiar with Radarr. No explicit exclusions are mentioned, but none are necessary for such a straightforward getter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_searchARead-only
Search TMDB for new movies to add to Radarr
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default: 200) | |
| query | Yes | Search query (movie title) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds the behavioral nuance that the search targets TMDB (an external source) rather than the local Radarr library. This is useful context not present in annotations, though it is not highly detailed.
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 a single, focused sentence that immediately states the action and purpose. No filler or redundant phrases.
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 simple read-only search tool with two well-documented parameters and no output schema, the description is sufficient overall. The meaning of 'new movies' could be slightly ambiguous (new releases vs. not-yet-in-library), but this does not prevent correct 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?
Schema description coverage is 100%: both 'query' and 'limit' have clear descriptions. The tool description does not add extra parameter meaning beyond what the schema already provides, aligning with the baseline for full coverage.
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 it 'Search TMDB for new movies to add to Radarr', identifying the specific action (search), resource (TMDB), and intent (new movies to add). This distinguishes it from sibling tools like radarr_get_movies (listing existing movies) and radarr_trigger_search (triggering searches).
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 implies usage as a discovery step before adding movies to Radarr ('to add to Radarr'), providing clear context. However, it does not explicitly name alternatives or define when-not-to-use, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
radarr_trigger_searchB
Trigger a search for missing movies, optionally for a specific movie
| Name | Required | Description | Default |
|---|---|---|---|
| movieId | No | Radarr movie ID (omit to search all missing) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description adds no behavioral context beyond the action itself. It does not mention that triggering a search may initiate asynchronous processing, interact with external indexers, or affect queue state. The description adds minimal value over the 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 a single concise sentence that is front-loaded with the core action and resource. Every word adds value, with no redundancy.
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 simple one-parameter tool and annotations, the description is minimally adequate but lacks guidance on expected outcomes or integration with other Radarr workflows. It does not explain what happens after triggering the search or how to verify results, so it is 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 schema already fully documents the single parameter (movieId) with a description that includes the 'omit to search all missing' detail. The tool description adds no additional parameter semantics, so the baseline score of 3 is appropriate.
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 'Trigger' and the specific resource 'search for missing movies', with optional movie ID. This distinguishes it from sibling tools like radarr_search, which likely searches for movies to add, and sonarr_trigger_search, which is for TV series.
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 such as radarr_search or radarr_get_missing. The description only states what it does, without any context on selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rate_mediaA
Set the user's Plex rating for a media item (requires PLEX_ENABLE_MUTATIVE_OPS=true)
| Name | Required | Description | Default |
|---|---|---|---|
| rating | Yes | User rating from 0 to 10 | |
| ratingKey | Yes | The local Plex rating key of the media item |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=false and destructiveHint=false, so the mutating behavior is covered. The description adds the operational requirement PLEX_ENABLE_MUTATIVE_OPS=true, which is beyond the annotations and helpful. However, it does not disclose side effects such as whether the rating overwrites an existing one, and no contradiction with annotations exists.
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?
A single, genuinely informative sentence that includes the core action and the critical prerequisite without filler. Every word earns its place, and the important operational condition is neatly parenthesized.
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 simple setter with only two fully-described parameters and no output schema, the description and schema together are sufficient. It captures the purpose, the operation type, and the necessary configuration flag. Missing only minor behavioral nuance like return values or confirmation, which is not essential here.
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 100%, and both parameters have clear descriptions (rating range 0 to 10, ratingKey as local Plex rating key). The description does not add further parameter meaning beyond the schema, so baseline 3 is appropriate.
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 states a specific verb and resource: 'Set the user's Plex rating for a media item.' This clearly identifies what the tool does. It also distinguishes itself from sibling tools like update_metadata or mark_watched, as none of those specifically target user ratings.
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 does not state when to use this tool versus alternatives, nor does it mention any exclusions. It only includes a prerequisite environment variable, which is a technical requirement, not usage guidance. There is no comparison to sibling tools or conditions like 'use this when you need to change a rating.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_from_playlistA
Remove an item from a playlist (requires PLEX_ENABLE_MUTATIVE_OPS=true)
| Name | Required | Description | Default |
|---|---|---|---|
| playlistId | Yes | Playlist rating key | |
| playlistItemId | Yes | Playlist item ID to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=false, destructiveHint=false, and openWorldHint=true. The description adds valuable context by noting the mutative ops flag requirement, which is not present in the annotations. It does not elaborate on side effects or return values, but given the annotation coverage, this is more than adequate.
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 a single sentence, front-loaded with the action and requirement. Every word earns its place; there is no fluff or repetition.
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 simple 2-parameter mutation tool with no output schema, the description covers the critical prerequisite (mutative ops flag) and the core action. It doesn't explain error behavior or return format, but these are not essential given the simplicity and the presence of sibling tools for context.
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 100%, with clear descriptions for both playlistId and playlistItemId. The tool description adds no additional parameter semantics beyond schema, so the baseline of 3 applies—the schema does the heavy lifting.
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 uses a specific verb 'Remove' and resource 'item from a playlist', clearly distinguishing from siblings like add_to_playlist, clear_playlist, and delete_playlist. It also includes an essential prerequisite (PLEX_ENABLE_MUTATIVE_OPS=true) that adds operational clarity.
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 explicitly states the requirement for PLEX_ENABLE_MUTATIVE_OPS=true, which is a key condition for using this tool. It implies use when removing a single item from a playlist, but does not explicitly name alternatives like clear_playlist for bulk removal or delete_playlist for whole-playlist deletion, though sibling names signal these distinctions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_from_watchlistA
Remove a movie or show from the account watchlist by global Plex GUID or local rating key (requires PLEX_ENABLE_MUTATIVE_OPS=true)
| Name | Required | Description | Default |
|---|---|---|---|
| plexGuid | No | Global Plex GUID returned by get_watchlist, such as plex://movie/abc123 | |
| ratingKey | No | Local numeric Plex rating key; resolved to a global GUID before removal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating tool (readOnlyHint=false), so the description does not need to relabel that. It does add a useful operational prerequisite, the PLEX_ENABLE_MUTATIVE_OPS=true requirement, but it does not mention idempotency, failure behavior, or what happens if the item is not on the watchlist.
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 a single front-loaded sentence that states the action, target, and supported keys with no filler. The minimal helpful qualification about PLEX_ENABLE_MUTATIVE_OPS is included without bloat.
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 simple two-parameter mutation, the description plus schema is almost sufficient. The one notable omission is what the tool returns or whether removal is idempotent, but the input mechanics and prerequisite are well covered.
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 100%, so the parameter docs already explain plexGuid and ratingKey. The description reinforces the two-identification-modes idea but does not add significant meaning beyond what the schema already provides.
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 uses a specific verb ('Remove'), a specific resource ('movie or show'), and a specific target ('account watchlist'), and it names both allowed identifier types. This makes it unambiguous and distinct from siblings like remove_from_playlist.
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 clearly says the tool is for removing watchlist entries and even states the required PLEX_ENABLE_MUTATIVE_OPS=true prerequisite. It does not explicitly contrast with alternatives or state when-not-to-use, but the operation and context are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_mediaCRead-only
Search for media in Plex libraries
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Media type (movie, show, episode, artist, album, track) | |
| limit | No | Number of items to return (default: 500) | |
| query | Yes | Search query | |
| offset | No | Zero-based offset for pagination (default: 0) | |
| libraryKey | No | Library section key to restrict search (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only the 'Plex libraries' scope but does not mention pagination behavior, match semantics, or what happens when no results are found, adding minimal value beyond the 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 only one sentence, which is concise, but it is under-specified rather than efficiently compact. It omits critical usage and behavioral details, making it too minimal to earn a higher score for structure.
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?
With no output schema, the description should clarify return format or result behavior but does neither. It also fails to position the tool relative to its many search-related siblings, leaving an incomplete picture for a tool with five parameters.
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 100% with descriptive text for all five parameters, including defaults and enum values. The description itself adds no parameter-specific information, so the baseline score of 3 is appropriate due to the schema's completeness.
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 (search) and resource (media in Plex libraries), making the basic purpose understandable. However, it does not differentiate from sibling search tools like radarr_search or sonarr_search, nor does it clarify whether it searches across all libraries or only within a specific library.
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 such as radarr_search, sonarr_search, or get_library_items. There are no explicit context clues or exclusions to help an agent choose correctly among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_add_seriesB
Add a new series to Sonarr by TVDB ID
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Series title | |
| tvdbId | Yes | TheTVDB ID of the series | |
| monitored | No | Whether to monitor the series (default: true) | |
| monitorType | No | Which episodes to monitor | all |
| seasonFolder | No | Use season folders (default: true) | |
| rootFolderPath | No | Root folder path (auto-detected if omitted) | |
| qualityProfileId | No | Quality profile ID (auto-detected if omitted) | |
| searchForMissingEpisodes | No | Search for missing episodes after adding (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, but the description adds no behavioral context beyond the primary action. It fails to disclose potential side effects such as searchForMissingEpisodes defaulting to true (which may trigger downloads) or that the series must not already exist.
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 a single, clear sentence that immediately conveys the tool's purpose without any wasted words. It is perfectly sized for the information it provides.
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?
This tool has 8 parameters and no output schema, yet the description is extremely brief. It does not explain expected behaviors like auto-detection of rootFolderPath/qualityProfileId, or what the return value indicates on success. Given the complexity and side-effect potential, the description is insufficient.
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 already documents all 8 parameters with descriptions, and context signals show 100% coverage. The description adds little beyond highlighting TVDB ID as the key identifier, so it does not meaningfully enhance parameter understanding. Baseline 3 is appropriate.
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), the resource (a new series to Sonarr), and the key identifier (by TVDB ID). It distinguishes this tool from siblings like sonarr_search or sonarr_get_series by focusing on the creation use case.
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 gives no explicit guidance on when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. It is implied that this is for adding new series, but there's no mention of checking existing series or using related tools like sonarr_get_profiles to obtain required IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_get_calendarARead-only
Get upcoming episodes from the Sonarr calendar
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default: 200) | |
| endDate | No | End date (YYYY-MM-DD, default: 30 days from now) | |
| startDate | No | Start date (YYYY-MM-DD, default: 7 days ago) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds temporal scoping ('upcoming') but does not disclose pagination, return format, or other behavioral nuances. Matches the baseline for annotation-covered tools.
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?
A single, front-loaded sentence with zero filler. It efficiently states the action and resource without unnecessary words, making it easy to parse quickly.
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 (3 optional parameters, no output schema, safe read annotations), the description sufficiently conveys the basic function. It does not detail return values, but the phrase 'upcoming episodes' implies the output, which is adequate for a low-complexity tool.
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 100%, so all three parameters (limit, startDate, endDate) are already documented in the schema. The description adds no additional parameter semantics beyond implying date-range behavior, so the baseline of 3 applies.
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 uses a specific verb ('Get'), identifies the resource ('upcoming episodes'), and scopes it to 'Sonarr calendar'. This clearly distinguishes it from sibling tools like sonarr_get_series (series list) and sonarr_get_missing (missing episodes).
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 phrase 'upcoming episodes' provides clear context for when the tool is appropriate (calendar/schedule queries), but it does not explicitly mention alternatives or exclusion cases. The context is clear enough for a simple read-only tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_get_missingARead-only
Get missing/wanted episodes from Sonarr
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| pageSize | No | Items per page (default: 200) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only (readOnlyHint=true) and non-destructive (destructiveHint=false). The description adds no extra behavioral context, such as pagination behavior or return format. It is consistent with annotations but does not disclose anything beyond them.
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 a single, front-loaded sentence with a clear verb, resource, and system scope. No filler or redundancy. It is concise and well-structured.
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 simple read-only tool with optional pagination parameters, the description is adequate. The schema covers the parameters, and the purpose is clear. It does not specify the return structure, but this is not required for such a straightforward operation.
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 input schema fully documents both parameters (page and pageSize) with descriptions and defaults. The description does not mention them, but with 100% schema coverage, the schema carries the burden. The description adds no additional parameter meaning beyond what is already provided.
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 ('Get'), the resource ('missing/wanted episodes'), and the system ('from Sonarr'). It distinguishes itself from sibling tools like sonarr_get_series (series info) and radarr_get_missing (Radarr, not Sonarr).
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 implies when to use this tool (when you need missing/wanted episodes from Sonarr) but does not explicitly mention alternatives or exclusion conditions. The context is clear but lacks explicit guidance beyond the obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_get_profilesARead-only
Get Sonarr quality profiles and root folders (needed before adding series)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations by specifying that the tool returns both quality profiles and root folders, which is relevant for the 'add series' workflow.
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 a single, tightly worded sentence that leads with the action ('Get'), names the resources, and adds a parenthetical usage hint. No wasted words, and every phrase contributes meaning.
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 zero-parameter, read-only lookup tool, the description fully captures what the tool does, what it returns, and why it matters in the broader workflow. With no output schema or complex behavior, nothing essential is missing.
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?
There are zero parameters, so the schema already fully documents that no inputs are needed. The description does not need to add parameter details; the baseline of 4 applies because there is nothing to compensate for.
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 uses a specific verb ('Get') and names the exact resources ('Sonarr quality profiles and root folders'). It also distinguishes itself from sibling tools like sonarr_get_series by explicitly framing itself as a prerequisite for adding series.
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 clearly indicates when to use this tool: 'needed before adding series' (e.g., before sonarr_add_series). It does not explicitly list alternatives or exclusions, but the context is strong enough for an agent to infer the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_get_queueARead-only
Get the current Sonarr download queue
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default: 200) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only and non-destructive. The description adds the temporal qualifier 'current' (i.e., live snapshot rather than historical), but otherwise provides no additional behavioral detail such as result ordering or queue item composition. No contradiction exists.
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 entire description is one short, front-loaded sentence. Every word contributes to identifying the tool's purpose; there is no filler or redundant detail.
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 low complexity (one optional parameter, no output schema) and strong annotation coverage, this description is sufficient to understand what the tool returns at a high level. It doesn't explain queue item fields, but that is not required since no output schema exists and the tool is a simple read-only fetch.
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 single parameter 'limit' is fully described in the schema (including default), so description needs little added parameter context. With 100% schema coverage, baseline 3 is appropriate; description adds no extra parameter semantics.
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 uses the specific verb 'Get' and identifies the exact resource ('current Sonarr download queue'), which clearly distinguishes it from sibling tools like radarr_get_queue or sonarr_get_series.
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 when-to-use or alternative guidance is provided. It doesn't mention that Radarr has its own queue tool or when a queue view is preferred over search/missing tools. Context must be inferred entirely from the tool name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_get_seriesARead-only
List all series in Sonarr with optional title filter
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default: 200) | |
| filter | No | Optional title substring filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the operation returns 'all series' by default and supports an optional title filter, which is slightly beyond annotations but largely repeats the schema. No mention of pagination or return format, so a mid score is appropriate.
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 a single sentence with no filler or redundant detail. Every word contributes meaning, and it is front-loaded with the primary action ('List all series').
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?
The tool is simple, with two well-documented parameters and annotations that clarify safety. The description conveys the core operation and filter capability. While it doesn't explicitly state the return shape, the lack of an output schema and the simplicity of the tool make this adequate, though slightly more detail on return fields would push it to 5.
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 coverage is 100% with clear descriptions for both 'limit' and 'filter'. The description only restates the 'filter' parameter as 'optional title filter', adding no new semantic value. Baseline 3 is correct since the schema already carries full parameter documentation.
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 'List all series in Sonarr with optional title filter' uses a specific verb ('List') and identifies the exact resource ('series in Sonarr'), clearly distinguishing it from sibling tools like sonarr_get_missing or sonarr_search. The optional filter is also mentioned, making the purpose fully transparent.
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 clearly implies when to use this tool (when you need a list of all series) and the sibling context makes alternatives obvious. However, there is no explicit when-not-to-use or comparison with alternatives like sonarr_search, so it falls short of the highest bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_searchARead-only
Search TheTVDB for new series to add to Sonarr
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default: 200) | |
| query | Yes | Search query (series title) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds the context that the search targets TheTVDB, but does not disclose any additional behavioral traits such as network dependencies, rate limits, or result filtering. It neither contradicts annotations nor enriches them significantly.
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 a single, concise sentence that front-loads the action and purpose. Every word earns its place, with no fluff or redundancy.
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?
The tool is a simple search with complete annotations and a fully described schema. The description adequately covers the high-level use case, though it does not describe the output format or any preconditions. Given the low complexity, it is nearly 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?
Schema description coverage is 100% (both 'query' and 'limit' have descriptions). The description does not add parameter-level detail, but the schema already handles this, so the baseline of 3 applies.
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 ('Search'), the resource ('TheTVDB'), and the intent ('new series to add to Sonarr'). This distinguishes it from sibling tools like radarr_search (movies) and sonarr_get_series (existing series).
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 implies usage for discovering new series to add, but it does not explicitly contrast with alternatives like sonarr_get_series or radarr_search. No when-not-to-use guidance is provided, so usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sonarr_trigger_searchA
Trigger a search for missing episodes, optionally for a specific series
| Name | Required | Description | Default |
|---|---|---|---|
| seriesId | No | Sonarr series ID (omit to search all missing) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, destructiveHint=false, and openWorldHint=true, but the description adds no behavioral context beyond the core action. It does not disclose that triggering a search may start downloads, that the operation is asynchronous, or what side effects may occur. The description carries some burden because annotations are sparse, yet it fails to elaborate.
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 a single, direct sentence that front-loads the action and includes the key optional parameter. Every word earns its place; no wasted or redundant content.
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 optional parameter, no output schema), the description is sufficient for an agent to select and invoke it correctly. It covers the action and the optional series scoping. A slight deduction for not mentioning side effects or expected return behavior, but overall it is complete for a trigger-style tool.
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 100%, so the schema already explains seriesId as 'Sonarr series ID (omit to search all missing)'. The description's phrase 'optionally for a specific series' adds minimal semantic value beyond the schema. With full schema coverage, a baseline of 3 is appropriate.
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 uses a specific verb ('Trigger') and resource ('search for missing episodes') with an optional scope ('optionally for a specific series'). It clearly distinguishes this from sibling tools like sonarr_get_missing (which lists missing) and sonarr_search (which may search broadly), making the purpose unmistakable.
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 implies usage: trigger a search for missing episodes, optionally scoped to one series. However, it does not explicitly mention when to use this versus alternatives like sonarr_get_missing (to just view missing) or sonarr_search (to search based on other criteria). No exclusions or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trakt_authenticateB
Start Trakt.tv OAuth authentication process
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Optional state parameter for OAuth flow |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it is not read-only and has external effects (openWorldHint=true, readOnlyHint=false). The description adds that it 'starts' the OAuth process, which implies user involvement, but does not explain the flow, whether it returns a URL, or how it connects to complete_auth.
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 a single, focused sentence that states the core purpose without any wasted words. It is front-loaded and easily parseable, embodying concise structure.
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 tool in a multi-step OAuth flow with no output schema and external effects, the description is too sparse. It lacks critical context such as expected next steps, return value, or any prerequisite conditions, making it incomplete for an agent to use correctly.
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 only parameter 'state' has a schema description ('Optional state parameter for OAuth flow'), so schema coverage is 100%. The description does not add additional parameter context, resulting in the baseline score for high coverage.
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 action ('Start Trakt.tv OAuth authentication process') with a specific verb and resource. It distinguishes from siblings like trakt_complete_auth and trakt_get_auth_status by implying this is the initial step, though it does not explicitly name alternatives.
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 trakt_complete_auth or trakt_get_auth_status. It does not mention that this should be called first in the OAuth flow or what the next steps are.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trakt_complete_authB
Complete Trakt.tv authentication with authorization code
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Authorization code from Trakt OAuth callback |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, and the description adds no further behavioral context. There is no mention of what happens on invalid/expired codes, whether tokens are stored, or if prior steps are required, leaving the agent to guess the side effects beyond the 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 a single, well-structured sentence that front-loads the action ('Complete') and resource ('Trakt.tv authentication') with the required input ('authorization code'). 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?
For a one-parameter tool with no output schema, the description is minimally sufficient. However, it misses the broader OAuth flow context, such as the need to call trakt_authenticate first and what constitutes success or failure, which would help the agent understand the tool's place among siblings.
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 provides 100% coverage for the single 'code' parameter with a clear description ('Authorization code from Trakt OAuth callback'). The tool description merely repeats the phrase 'authorization code' without adding syntax, format, or lifecycle details, so the schema carries the meaning.
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 completes Trakt.tv authentication using an authorization code, which is a specific verb+resource+means construction. It distinguishes from siblings like trakt_authenticate by indicating this is the completion step, though it doesn't explicitly name the counterpart.
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?
Usage is implied—the agent can infer this tool is used when an authorization code is available, likely after an initial authentication request. However, the description does not explicitly mention when to use it versus alternatives like trakt_authenticate or trakt_get_auth_status, nor any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trakt_get_auth_statusARead-only
Check Trakt.tv authentication status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with annotations (readOnlyHint=true, destructiveHint=false) but adds no additional behavioral context such as return format, latency, or caveats. With annotations covering the safety profile, the description provides minimal extra value, but nothing contradicts.
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 a single, front-loaded sentence with no filler or unnecessary words. It efficiently communicates the tool's purpose without redundancy.
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 zero-parameter, read-only status check, the description is adequate. It states the action and resource, and the absence of an output schema is mitigated by the simple nature of the tool. However, it does not describe what the response contains (e.g., boolean vs. object), which could be inferred from the name.
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 zero parameters, so the description has no need to explain parameter semantics. Baseline is 4 as per rubric, and the description does not interfere with clear understanding.
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 uses the specific verb 'Check' with resource 'Trakt.tv authentication status', clearly identifying what the tool does. It distinguishes itself from sibling tools like trakt_authenticate and trakt_complete_auth, which handle the authentication flow, and trakt_get_sync_status, which concerns sync status.
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 implies usage by stating its function, but it does not explicitly state when to use this tool versus alternatives. The sibling tool names provide context (e.g., using this after authentication), but the description itself offers no direct guidance or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trakt_get_sync_statusBRead-only
Check status of ongoing sync operations
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds the scope of 'ongoing sync operations' but does not disclose additional behavioral traits such as what the return value looks like, what happens when no syncs are in progress, or whether the operation is blocking. This is similar to the calibration example where annotations carry safety and the description adds a scope constraint.
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 a single, concise sentence with no unnecessary words. It earns its place by stating the core function clearly, and there is no fluff or repetition.
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?
The tool is simple (no parameters, read-only) and annotations cover safety, so the description is mostly sufficient. However, there is no output schema, and the description does not explain what the 'status' response contains or how to interpret it. For a status-check tool, this omission leaves some ambiguity, making it slightly less than 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 tool has zero parameters, so the description is not required to explain parameter semantics. The schema coverage is trivially 100% and there is nothing for the description to add. The baseline score of 4 for zero-parameter tools applies here.
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 ('check') and the resource ('status of ongoing sync operations'), which is a specific verb+resource pair. It differentiates from sibling tools like trakt_get_auth_status by explicitly focusing on sync operations. However, it could be more explicit about what 'sync operations' encompasses, so it does not fully achieve the top 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 gives no guidance on when to use this tool versus alternatives. It does not mention any exclusions or alternatives, such as trakt_sync_to_trakt or trakt_get_auth_status, nor does it explain when a status check would be appropriate. The context is entirely implied by the word 'ongoing'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trakt_get_user_statsCRead-only
Get enhanced viewing statistics from Trakt.tv
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | Optional Plex user ID for correlation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and non-destructive behavior, so the description adds no extra safety context. It also fails to disclose any behavioral details such as required authentication, output format, or what 'enhanced' entails, offering no value beyond the 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 a single, front-loaded sentence with no fluff. Every word earns its place, making it extremely concise and well-structured, even if minimal.
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?
The description is insufficient for an agent to understand what 'enhanced viewing statistics' means or what output to expect, especially since there is no output schema. It also fails to clarify how this tool relates to other Trakt stats tools or when to use it, leaving significant gaps.
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 100%, and the 'userId' parameter already has a meaningful explanation. The tool description adds no parameter-specific meaning, so the baseline score of 3 is appropriate.
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 uses verb 'Get' with resource 'viewing statistics from Trakt.tv', indicating a retrieval operation. However, 'enhanced' is vague and does not distinguish this tool from sibling get_user_stats or other stat tools, so differentiation is weak.
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 scenarios, exclusions, or alternative tools, leaving the agent to guess based on the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trakt_searchCRead-only
Search for movies and shows on Trakt.tv
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Optional media type filter | |
| year | No | Optional year filter | |
| limit | No | Max results to return (default: 100) | |
| query | Yes | Search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint: true, destructiveHint: false) already cover safety, but the description adds no behavioral context beyond the basic search action. It does not mention authentication needs, result format, rate limits, or any side effects. The description is not contradictory, but it provides no extra transparency.
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 a single, concise sentence with zero wasted words. It is front-loaded with the action ('Search') and resource, making it easy to parse quickly.
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?
With no output schema, the description should explain what the tool returns or how results are presented, but it does not. It also fails to provide context about when to choose this over sibling search tools. The description is too minimal to be fully complete for a tool with four parameters and no output schema.
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 100%, with all four parameters (query, type, year, limit) having descriptions. The description itself adds no parameter information, so the baseline of 3 applies given the high schema coverage.
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 states a specific verb ('search') and resource ('movies and shows on Trakt.tv'), clearly identifying the tool's function. It does not explicitly distinguish from sibling search tools like radarr_search or sonarr_search, but the mention of 'Trakt.tv' provides a platform-specific differentiator.
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 state that this is the preferred tool for searching Trakt content, nor does it mention any exclusions or conditions. The agent is left to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trakt_start_scrobblingB
Enable real-time scrobbling to Trakt.tv
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Media type | |
| title | Yes | Media title | |
| duration | No | Total duration in milliseconds | |
| progress | Yes | Current progress percentage (0-100) | |
| ratingKey | Yes | Plex media rating key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal that this is a non-read-only, non-destructive, open-world operation. The description adds the specific behavior of 'real-time scrobbling' but does not disclose details like whether authentication is required, if it creates a session that must be stopped, or how it interacts with the Plex playback element. It adds some context but not rich behavioral detail.
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 a single, front-loaded sentence that conveys the core action without any fluff. Every word serves a purpose, making it concise and easy to parse.
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?
Despite the annotations and full schema coverage, the description is too minimal for a side-effectful tool. It does not mention authentication prerequisites, return value, or that this is for starting a scrobble session during active playback. With 5 parameters and a family of trakt_* tools, more context is needed for correct invocation.
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 input schema covers 100% of parameters with descriptions, so the baseline is 3. The description itself adds no parameter-level meaning beyond what the schema provides, so it neither helps nor hurts.
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 uses a specific verb ('Enable') and resource ('real-time scrobbling to Trakt.tv'), clearly distinguishing it from sibling tools like trakt_sync_to_trakt or trakt_authenticate. However, it does not explicitly mention that this applies to currently playing media, which would fully clarify the scope.
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 vs alternatives, nor does it mention prerequisites such as prior authentication via trakt_authenticate. There is no indication of when not to use it or how it differs from trakt_sync_to_trakt.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trakt_sync_from_traktB
Get watch history from Trakt.tv for comparison
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'Get', implying a read-only operation, but the annotation readOnlyHint=false contradicts this. The tool may have side effects, yet the description provides no warning or explanation, creating an annotation contradiction.
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 a single, concise sentence that front-loads the action. Every word is useful, with no fluff.
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 lack of an output schema and the annotation contradiction, the description is incomplete. It doesn't explain return values, side effects, or what 'comparison' entails, making the tool's behavior uncertain.
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 zero parameters, so the schema already fully covers parameter semantics. The description adds nothing about parameters, but with no parameters, the baseline is 4.
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 ('Get watch history') and resource ('Trakt.tv'), with a purpose ('for comparison'). It distinguishes itself from sibling tools like get_watch_history (local history) and trakt_sync_to_trakt (reverse sync).
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?
There is no explicit guidance about when to use this tool versus alternatives. The phrase 'for comparison' hints at its use, but it does not mention alternatives or exclusions, leaving the agent without clear selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trakt_sync_to_traktA
Sync Plex watch history to Trakt.tv
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | Preview sync without making changes | |
| batchSize | No | Number of items to sync per batch | |
| includeProgress | No | Include watch progress information |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false (write operation) and destructiveHint=false. The description adds no additional behavioral context such as authentication requirements, rate limits, side effects, or what happens to existing Trakt data. It merely restates the action without elaborating on consequences or prerequisites.
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 a single, front-loaded sentence that fully conveys the core purpose without any wasted words. It is an example of efficient, minimal writing that earns its place.
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 sync tool with no output schema and annotations that are not rich (only readOnlyHint/destructiveHint/openWorldHint), the description is too sparse. It does not explain the sync process, whether authentication is required, what a 'sync' entails (e.g., one-time vs. continuous, full vs. incremental), or what the expected outcome/return is. This leaves significant gaps for an agent invoking the tool.
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 100%, with each parameter (dryRun, batchSize, includeProgress) clearly described. The description does not add any parameter-specific meaning beyond what the schema already provides, so a baseline score of 3 is appropriate.
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 'Sync Plex watch history to Trakt.tv' uses a specific verb ('Sync') and explicitly names the source (Plex) and destination (Trakt.tv), clearly distinguishing it from the sibling tool trakt_sync_from_trakt which syncs in the opposite direction.
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 directional phrasing 'Plex to Trakt.tv' makes the intended use clear and implicitly contrasts with trakt_sync_from_trakt. However, it does not explicitly state when to use this tool over alternatives or mention exclusions, though the sibling context provides sufficient differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_metadataA
Update metadata fields for a media item (requires PLEX_ENABLE_MUTATIVE_OPS=true)
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | New year (optional) | |
| roles | No | Replace roles/actors with these tags (optional) | |
| title | No | New title (optional) | |
| genres | No | Replace genres with these tags (optional) | |
| rating | No | New user rating (optional) | |
| studio | No | New studio (optional) | |
| summary | No | New summary/description (optional) | |
| tagline | No | New tagline (optional) | |
| directors | No | Replace directors with these tags (optional) | |
| ratingKey | Yes | The rating key of the media item to update | |
| sortTitle | No | New sort title (optional) | |
| collections | No | Replace collections with these tags (optional) | |
| contentRating | No | New content rating (optional) | |
| originalTitle | No | New original title (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint=false and destructiveHint=false, so the mutating nature is known. The description adds the environment variable requirement, which is useful extra context. However, it doesn't disclose any other behavior, such as the fact that several fields 'replace' existing values (though that is in the schema).
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?
One concise sentence that states the core purpose and the key requirement. Every word is useful, and the structure is front-loaded with the action. There is no wasted text.
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?
The tool has many parameters but the schema covers them exhaustively. The description provides the critical mutative-ops prerequisite and the annotations cover safety profile. It could mention that all fields are optional (except ratingKey) or that some fields replace existing data, but these are already in the schema, so the context is fairly 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 input schema has 100% description coverage for all 14 parameters, so the schema fully documents each field. The description adds no parameter-specific information, so it relies entirely on the schema. This meets the baseline for high coverage.
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?
It clearly states the action ('Update metadata fields') and the target ('a media item'), which distinguishes it from the many read-only sibling tools. However, it doesn't explicitly differentiate from the similarly named 'update_metadata_from_json' tool, so it's not a perfect 5.
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 includes a key prerequisite: 'requires PLEX_ENABLE_MUTATIVE_OPS=true'. This gives clear context about when the tool is usable (only if the env var is set). It doesn't explicitly say when not to use it or mention alternatives, but the prerequisite provides strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_metadata_from_jsonA
Update metadata from a JSON payload (requires PLEX_ENABLE_MUTATIVE_OPS=true)
| Name | Required | Description | Default |
|---|---|---|---|
| metadata | Yes | Metadata payload to apply | |
| ratingKey | Yes | The rating key of the media item to update | |
| setPosterFromUrl | No | Attempt to set poster from metadata.images.posters[0].url |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the operational requirement of the PLEX_ENABLE_MUTATIVE_OPS environment variable, which is useful beyond the annotations. However, it does not clarify whether the metadata update merges with existing fields or replaces them, nor does it describe failure behavior. Since annotations already indicate mutation, this is a moderate addition.
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 a single well-structured sentence that conveys the core purpose and a critical requirement without any filler. Every word adds value.
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?
The tool has a nested metadata object, a mutative action, and no output schema. The description provides the key context (purpose and permission flag), and the schema covers parameter details. It is mostly complete but would benefit from stating the return value or update semantics (merge vs replace), so it is not a perfect 5.
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 input schema provides descriptions for all three parameters with 100% coverage, so the description adds no additional parameter-specific meaning. The baseline of 3 is appropriate because the schema already does the heavy lifting.
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 uses a specific verb ('Update') with a clear resource ('metadata from a JSON payload'). The qualifier 'from a JSON payload' distinguishes this from sibling tool 'update_metadata', making its unique purpose immediately evident.
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 an explicit prerequisite ('requires PLEX_ENABLE_MUTATIVE_OPS=true') and implies the use case (applying a JSON payload). However, it does not explicitly contrast with the sibling 'update_metadata' or state when not to use it, leaving some room for ambiguity.
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.
5 tool updates
v1.5.0- Changed
add_to_watchlist1 field changed- changed
Input schema / properties / ratingKey / descriptionPrevious value: -"The rating key of the media item"New value: +"Local Plex rating key for a matched movie or show"
- Added
mark_unwatched - Added
mark_watched - Added
rate_media - Changed
remove_from_watchlist4 fields changed- added
Input schema / oneOfAdded value: +[ + { + "not": { + "required": [ + "ratingKey" + ] + }, + "required": [ + "plexGuid" + ] + }, + { + "not": { + "required": [ + "plexGuid" + ] + }, + "required": [ + "ratingKey" + ] + } +] - added
Input schema / properties / plexGuidAdded value: +{ + "description": "Global Plex GUID returned by get_watchlist, such as plex://movie/abc123", + "type": "string" +} - changed
Input schema / properties / ratingKey / descriptionPrevious value: -"The rating key of the media item"New value: +"Local numeric Plex rating key; resolved to a global GUID before removal" - removed
Input schema / requiredRemoved value: -[ - "ratingKey" -]
10 tool updates
v1.3.1- Added
add_to_playlist - Added
add_to_watchlist - Added
clear_playlist - Added
create_playlist - Added
delete_playlist - Added
get_active_sessions - Added
remove_from_playlist - Added
remove_from_watchlist - Added
update_metadata - Added
update_metadata_from_json
39 tool updates
v1.2.0- Added
arr_get_status - Added
export_library - Added
get_editable_fields - Changed
get_fully_watched2 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -100New value: +500 - changed
Input schema / properties / limit / descriptionPrevious value: -"Number of items to return (default: 100)"New value: +"Number of items to return (default: 500)"
- Added
get_library_items - Added
get_playlist_items - Added
get_playlists - Changed
get_popular_content2 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -10New value: +50 - changed
Input schema / properties / limit / descriptionPrevious value: -"Number of items to return (default: 10)"New value: +"Number of items to return (default: 50)"
- Changed
get_recently_added2 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -10New value: +50 - changed
Input schema / properties / limit / descriptionPrevious value: -"Number of items to return (default: 10)"New value: +"Number of items to return (default: 50)"
- Changed
get_recently_watched2 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -25New value: +100 - changed
Input schema / properties / limit / descriptionPrevious value: -"Number of items to return (default: 25)"New value: +"Number of items to return (default: 100)"
- Added
get_recommendations - Changed
get_watch_history2 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -50New value: +500 - changed
Input schema / properties / limit / descriptionPrevious value: -"Number of sessions to return (default: 50)"New value: +"Number of sessions to return (default: 500)"
- Added
get_watchlist - Added
radarr_add_movie - Added
radarr_get_calendar - Added
radarr_get_missing - Added
radarr_get_movies - Added
radarr_get_profiles - Added
radarr_get_queue - Added
radarr_search - Added
radarr_trigger_search - Changed
search_media3 fields changed- added
Input schema / properties / libraryKeyAdded value: +{ + "description": "Library section key to restrict search (optional)", + "type": "string" +} - added
Input schema / properties / limitAdded value: +{ + "default": 500, + "description": "Number of items to return (default: 500)", + "type": "number" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Zero-based offset for pagination (default: 0)", + "type": "number" +}
- Added
sonarr_add_series - Added
sonarr_get_calendar - Added
sonarr_get_missing - Added
sonarr_get_profiles - Added
sonarr_get_queue - Added
sonarr_get_series - Added
sonarr_search - Added
sonarr_trigger_search - Added
trakt_authenticate - Added
trakt_complete_auth - Added
trakt_get_auth_status - Added
trakt_get_sync_status - Added
trakt_get_user_stats - Added
trakt_search - Added
trakt_start_scrobbling - Added
trakt_sync_from_trakt - Added
trakt_sync_to_trakt
12 tool updates
v1.0.0- First observed
get_fully_watched - First observed
get_libraries - First observed
get_library_stats - First observed
get_media_details - First observed
get_on_deck - First observed
get_popular_content - First observed
get_recently_added - First observed
get_recently_watched - First observed
get_user_stats - First observed
get_watch_history - First observed
get_watch_stats - First observed
search_media
TDQS
Tools are mostly clearly distinct, with domain prefixes for Radarr/Sonarr/Trakt separating them from Plex tools. Some potential confusion exists between get_recently_watched/get_watch_history/get_watch_stats and get_user_stats/get_watch_stats/get_library_stats, but descriptions clarify these differences.
Naming conventions are mixed: Plex tools mostly use 'get_'/'create_'/'add_to_' while Radarr/Sonarr/Trakt tools use domain prefixes like 'radarr_search' and 'sonarr_get_series'. The 'arr_get_status' tool is an anomaly that breaks the naming pattern.
55 tools is excessive, even for an integration spanning Plex, Radarr, Sonarr, and Trakt. The tool set feels over-scoped and may overwhelm agents, though the count is not extreme given the multi-service scope.
Core workflows are covered: Plex library browsing, playback sessions, playlists, watchlist, recommendations, and statistics; Radarr/Sonarr add/list/search/missing/queue/calendar; Trakt auth and sync. Gaps include lack of delete/update operations for Radarr/Sonarr items and no Plex media deletion or server info tools.
Maintenance
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
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
The Cortex MCP server provides read-only access to real-time engineering context from the Cortex developer portal, allowing AI coding assistants to answer natural language questions about your organization's catalog (microservices, libraries, domains, teams, infrastructure), scorecards (engineering standards and best practices), initiatives (goals and deadlines), and Engineering Intelligence metrics. It includes tools for querying documentation, tracking personal entities, and accessing AI-assisted insights across the entire Cortex ecosystem.
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceA Python-based Model Context Protocol server that allows AI assistants like Claude to access and query your movie and TV show collection via Radarr and Sonarr APIs.47-
- AlicenseNot gradedqualityAmaintenanceA comprehensive Model Context Protocol server that bridges LLMs with self-hosted media services, enabling natural language control of TV shows, movies, downloads, and notifications while maintaining traditional API access.7AGPL 3.0
- AlicenseBqualityFmaintenanceA Model Context Protocol server that enables AI assistants to query Prometheus metrics, discover available data, and analyze system performance through natural language interactions.585MIT
- AlicenseNot gradedqualityDmaintenanceEnables users to manage and control their Plex media library through natural language commands in MCP-compatible AI clients. It supports searching content, managing playlists, tracking library statistics, and monitoring live viewing sessions.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/niavasha/plex-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server