Plex MCP server
Summary: This server exposes Plex to Claude — all 405 Plex API operations (353 on your media server, 52 on plex.tv) behind 28 tools, with the rest reachable by search-and-run.
Libraries — list library sections, browse a section's items (filter by genre, studio, year, resolution, unwatched), get collections and a collection's items
Metadata — fetch items by rating key/IDs, children of an item, similar items, with optional refreshes and field/element includes
Discovery — global recently added, continue watching, hub search across Plex
Sessions & history — who is streaming now, playback history filtered by account, device, library or item
Playlists — list playlists, read contents, create one, add items to one
Watched state & ratings — mark items played/unplayed (scrobble), rate items
Watchlist — read your watchlist, add or remove items
Maintenance — refresh a library section (optionally one path), get server identity
Everything else —
find_operationsearches all 405 operations by words;run_operationruns any of them by name (including butler tasks, transcoder, DVR, Live TV, settings, plex.tv sharing/devices/account)Large answers —
get_result_pagepages, filters by field text, narrows fields and picks which list to walk; nothing is re-fetchedTwo hosts, auto-routed — media-server calls go to your server, watchlist/sharing/device/account calls go to plex.tv
Remote access — can be hosted over HTTP with OAuth 2.1 sign-in or a fixed bearer token as a Claude.ai custom connector
Provides comprehensive integration with Plex, exposing all 405 Plex API operations as tools, covering both local media server management (libraries, playlists, transcoder, hubs, settings, DVRs, live TV, etc.) and plex.tv cloud services (watchlist, sharing, devices, account).
Click on "Deploy 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's currently playing on my Plex?"
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
Run Plex from Claude.ai, Claude Desktop and Claude Code. All 405 operations are reachable: 353 on your media server and 52 on the plex.tv cloud services, each routed to the right host automatically. 25 everyday ones are tools of their own; find_operation and run_operation reach the rest, so the tool list stays about 8 400 tokens.
Using this server with a paid AI service costs money. Tool definitions and results are billed as input tokens, and an agent can call tools repeatedly on its own. You are responsible for every charge, so set spending limits with your provider. The author accepts no liability for any costs. SeeDISCLAIMER.md.
Why not the other options
Measured against the community spec Plex's own SDKs are generated from, which has 344 paths and 405 operations:
Server | Plex tools | Coverage |
| ~40 | 10 % |
| libraries, playlists, clients | partial |
| viewing context and subtitles | partial |
This one | 405 | 100 % |
The existing servers cover libraries, playlists and what is playing. None of them reach the transcoder, the hub and discovery endpoints, butler tasks, server settings, sync, or the plex.tv side at all: watchlist, sharing, devices and account.
Related MCP server: Plex-MCP
How it stays complete
Plex publishes no OpenAPI document. LukeHagar/plex-api-spec is the community one Plex's own SDKs are generated from; scripts/convert_spec.py slims its 2.5 MB down to what the generator reads and records which host each operation belongs to:
curl -o plex-api-spec.yaml https://raw.githubusercontent.com/LukeHagar/plex-api-spec/main/plex-api-spec.yaml
python scripts/convert_spec.py plex-api-spec.yaml openapi.json
python scripts/generate_tools.py openapi.json src/plex_mcp/tools.pyA test compares every generated call against every operation in the spec, in both directions. An endpoint Plex adds and this misses fails the build; so does a tool pointing at an endpoint the spec does not define.
Tool names
Verb first, derived from the method and path, so the name says what it does:
Pattern | Meaning | Example |
| Read a collection |
|
| Read one record |
|
| POST |
|
| PUT |
|
| DELETE |
|
28 tools, 405 operations
Exposing all 405 operations as tools put about 84 000 tokens of definitions in front of every message, which left Claude Desktop unusable with it switched on. The list is now about 8 400. So the client sees:
25 core tools for libraries, search, items, recently added, continue watching, sessions, history, playlists, watched state, ratings, refreshing a section and the watchlist (
COREinsrc/plex_mcp/catalog.py)find_operation, which searches every operation by words and returns its route, summary and argumentsrun_operation, which runs any operation by nameget_result_page, which pages answers too large to send at once
The generated functions live in tools.py as before; they are recorded as operations and only the core set is registered as tools.
Two APIs, one server
Plex splits across the media server and the plex.tv cloud. The spec records which host each operation belongs to and the client routes on it, so a watchlist call reaches plex.tv while a library call reaches your server:
Host | Operations |
Your media server | 353 |
| 27 |
| 11 |
| 6 |
| 4 |
| 4 |
What is covered
Activities, Authentication, Butler, Collections, Content, DVRs, Devices, Download Queue, EPG, Events, General, Hubs, Library, Library Collections, Library Playlists, Live TV, Log, Play Queue, Playback, Playlist, Playlists, Plex, Preferences, Provider, Rate, Search, Status, Subscriptions, Timeline, Transcoder, UltraBlur, Updater, Users.
Setup
git clone https://github.com/rollecode/plex-mcp.git
cd plex-mcp
uv venv && uv pip install -e .export PLEX_URL=http://127.0.0.1:32400
export PLEX_TOKEN=... # see belowFind the token by opening any item in the Plex web app, choosing Get Info, then View XML: it is the X-Plex-Token in the address bar.
Claude Code
claude mcp add plex -- /path/to/plex-mcp/.venv/bin/plex-mcpNotes
Plex answers in XML unless asked for JSON, which the client does; a few endpoints ignore that and their raw XML comes back as text. Rating keys identify items, section keys identify libraries.
Hosting it
Running it over HTTP puts it in reach of Claude.ai as a custom connector, and of Claude Code on other machines. Three tiers, the same shape the other servers in this family use:
Tier | Port | What it does |
| 8590 | The server. No login of its own, never exposed |
nginx | 8591 | Front door, behind a Cloudflare Tunnel |
| 8592 | OAuth 2.1 sign-in, or a fixed bearer token |
npm install
node set-password.js 'a password for the sign-in page'
printf 'PLEX_URL=...\nPLEX_TOKEN=...\n' > ~/.config/plex-mcp/env
chmod 600 ~/.config/plex-mcp/envCopy systemd/*.service into /etc/systemd/system/, replacing YOUR_USER and the ISSUER hostname, then:
sudo systemctl enable --now plex-mcp plex-mcp-authPoint nginx/plex-mcp.conf at your own hostname and send the tunnel at 127.0.0.1:8591.
Claude.ai
Settings, Connectors, Add custom connector, URL https://plex-mcp.your-domain/mcp, client ID and secret blank. The sign-in page asks for the password set above.
Development
uv pip install -e . pytest ruff
.venv/bin/python -m pytest tests
.venv/bin/ruff check .Available Tools
28 toolscreate_actions_add_to_watchlistBIdempotent
Add to Watchlist.
POST /actions/addToWatchlist
Args: uri: The URI of the item to add or remove
| Name | Required | Description | Default |
|---|---|---|---|
| uri | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, so the mutation aspect is known. The description adds the specific target of the mutation (the watchlist) and the HTTP endpoint, but does not explain side effects, authorization needs, or what happens when uri is null. It provides some context beyond annotations 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 short and front-loaded with the core purpose. The endpoint and parameter line are compact, though the 'add or remove' phrase adds confusion rather than value. Overall it is concise and readable.
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 single-parameter tool with annotations and an output schema, the description is minimally adequate. It identifies the action and parameter but misses usage guidance and contains an ambiguous parameter description. These gaps make it viable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does clarify that 'uri' is the URI of the item involved, which is meaningful. However, saying 'add or remove' is confusing and contradicts the tool's stated purpose, and it does not clarify the URI format or the effect of the default null value.
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 first line 'Add to Watchlist' states a specific verb and resource, and the endpoint /actions/addToWatchlist reinforces the action. It is distinguishable from the sibling create_actions_remove_from_watchlist. However, the Args line says the URI is for the item 'to add or remove', which introduces ambiguity about whether this tool also removes items.
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 create_actions_remove_from_watchlist or any other alternative. It does not state prerequisites, exclusions, or a preferred context. An agent must 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.
create_actions_remove_from_watchlistCIdempotent
Remove from Watchlist.
POST /actions/removeFromWatchlist
Args: uri: The URI of the item to add or remove
| Name | Required | Description | Default |
|---|---|---|---|
| uri | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already signal an idempotent, non-destructive mutation. The description adds the HTTP method and endpoint, but the 'add or remove' phrase conflicts with the remove-only operation and no additional behavior (such as missing-item handling or auth needs) is 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 appropriately short and front-loaded with the operation. There is no filler, though the misleading 'add or remove' phrase is a substantive error even if it does not make the description overly long.
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 itself is simple and the output schema plus annotations cover return values and safety. However, the conflicting parameter wording and lack of guidance for selecting this tool over its add-to-watchlist sibling leave the description incomplete for reliable agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden of explaining uri. It identifies uri as the item URI, but says 'add or remove' for a removal endpoint and fails to explain optionality, expected URI format, or what null/default 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 opening line 'Remove from Watchlist' plus the endpoint POST /actions/removeFromWatchlist clearly states the action and resource. It is distinguishable from the sibling create_actions_add_to_watchlist by the word 'remove', though it does not explicitly reference that sibling. The parameter line's 'add or remove' wording slightly muddies the otherwise clear 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?
No guidance is given about when to use this tool versus create_actions_add_to_watchlist or other watchlist-related tools. The agent must infer usage entirely from the tool name and the one-line summary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_library_sections_by_section_id_refreshBIdempotent
Refresh Section.
POST /library/sections/{sectionId}/refresh
Args: section_id: Section identifier force: Whether the update of metadata and items should be performed even if modification dates indicate the items have not change path: Restrict refresh to the specified path
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| force | No | ||
| section_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the idempotentHint and destructiveHint flags, so the safety profile is known. The description adds that force controls whether metadata/items update regardless of modification dates and that path restricts the refresh, which is useful behavioral context. However, it does not disclose whether the operation is synchronous or asynchronous, nor any potential performance or side-effect implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the action 'Refresh Section', followed by the endpoint and parameter list. There is no unnecessary filler, though the HTTP method and path line is somewhat redundant given the tool name already encodes the route. Overall it is tight and organized.
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?
Although an output schema exists, which reduces the need to document return values, the description still lacks important context for an agent: when to choose this refresh tool over sibling refresh endpoints and whether the operation completes immediately or runs in the background. These gaps prevent it from being fully complete for a mutation 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?
With schema description coverage at 0%, the Args section in the description is the only source of parameter meaning. It explains all three parameters: section_id, force, and path. While section_id's explanation is minimal, force and path have substantive descriptions, giving the description enough compensation for the missing schema 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 states 'Refresh Section' followed by the HTTP endpoint, clearly indicating that this tool triggers a refresh of a library section. This is a specific verb plus resource. However, it does not differentiate itself from sibling refresh tools like create_library_sections_refresh or delete_library_sections_by_section_id_refresh, so it falls short of 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 description provides no guidance on when to use this tool versus alternatives. There is no mention of when a refresh is needed, how it should be preferred over other refresh endpoints, or any exclusions. It only implies the action without contextual usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_playlistsBIdempotent
Create a Playlist.
POST /playlists
Args:
uri: The content URI for what we're playing (e.g. library://...).
play_queue_id: To create a playlist from an existing play queue.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | No | ||
| play_queue_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that this is non-read-only, non-destructive, and idempotent. The description adds no behavioral context beyond the purpose itself, such as side effects, required permissions, or failure modes. There is no contradiction with 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 short, front-loaded, and free of filler. The endpoint line and parameter bullets are useful. It could be slightly more integrated, but every element 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 tool is low-complexity with two optional parameters, an output schema, and annotations covering safety. Still, the relationship between uri and play_queue_id is left ambiguous, and there is no guidance for the no-argument case. This is minimally viable but has clear 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?
Schema coverage is 0%, so the description must carry parameter meaning. It does explain uri as a content URI with an example and play_queue_id as a source for creating from an existing play queue. However, it does not clarify whether the parameters are alternatives, combinable, or what happens if neither is 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 states a clear verb and resource: 'Create a Playlist.' It also includes the endpoint POST /playlists, which reinforces the action. However, it does not distinguish this tool from the sibling create_playlists_upload, so the agent must infer the difference from names alone.
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 guidance on when to use this tool versus create_playlists_upload, update_playlists, or other playlist-related siblings. The parameter hints imply two creation sources, but no decision rule, exclusions, or alternatives are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_operationARead-onlyIdempotent
Search all 405 Plex API operations, including those not exposed as tools.
Returns each match's name, route, summary and arguments. Run one with run_operation.
Args: query: Words describing what you want, such as "delete playlist item", "butler tasks" or "transcode sessions". limit: How many matches to return.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds useful context: it searches a corpus of 405 operations broader than the exposed toolset, and names the payload fields (name, route, summary, arguments). It doesn't mention result ordering or truncation behavior, but the added search-space context is genuine value beyond 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?
Front-loaded with purpose and scope, followed by return fields and the handoff to run_operation, then a compact Args block. Every sentence earns its place; minor redundancy in restating 'Args:' beneath already-named fields.
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 two-param search tool with an output schema covering return values, this is complete: purpose, scope, return fields, next-step tool, and both params are addressed. The only omission is any note on result ranking or limits interaction, which is minor.
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 0%, so the description must carry the load, and it does: query is defined as free-text words describing the goal with three concrete example queries, and limit is explained as match count. This is stronger than the schema, which gives no per-field 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?
States a specific verb (search) and resource (Plex API operations), with the scope clarified as 'all 405... including those not exposed as tools.' This cleanly distinguishes it from sibling run_operation, which executes rather than 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?
Explicitly routes the agent: search here, then 'Run one with run_operation.' The scope note ('including those not exposed as tools') tells the agent this is the discovery path for operations otherwise unreachable. No explicit when-not guidance, but the search-vs-execute split is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_library_collections_by_collection_id_itemsBRead-onlyIdempotent
Get items in a collection.
GET /library/collections/{collectionId}/items
Args: collection_id: The collection id
| Name | Required | Description | Default |
|---|---|---|---|
| collection_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the HTTP GET method and path template, but it does not disclose pagination, ordering, filtering, or what types of items are returned. Given the strong annotations, this is acceptable 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 short and front-loaded with the core action. The endpoint line is useful, but the 'Args' block mostly repeats the parameter title, so it is not maximally efficient.
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 read operation with a rich output schema and strong annotations, the description is minimally viable. However, it lacks any mention of pagination, item scope, or behavior for empty or missing collections, leaving some ambiguity about the returned result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the parameter. It only says 'collection_id: The collection id,' which is tautological. The endpoint template does imply the parameter is a path variable, which adds some meaning, but the description otherwise adds no format, source, or usage detail 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 states a specific verb and resource: 'Get items in a collection.' The endpoint path further clarifies the operation. It does not explicitly distinguish itself from sibling collection-related tools, but the resource is unambiguous enough for an agent to identify what it does.
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 guidance on when to use this tool versus alternatives such as get_library_sections_by_section_id_collections or update_library_collections_by_collection_id_items. The description only restates the operation and gives no context, 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_library_metadata_by_id_childrenCRead-onlyIdempotent
Get Metadata Children.
GET /library/metadata/{id}/children
Args: id: The unique identifier of the item
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is clear. The description adds only the endpoint path and parameter label; it does not disclose any behavioral traits beyond what the annotations and name already imply, such as what kinds of items are returned or how open-world results should be interpreted.
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 compact and front-loads the operation, then provides the endpoint and the one argument. It avoids bloat, though the opening line 'Get Metadata Children' largely repeats the tool name and the argument documentation is terse.
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 required parameter, strong annotations, and an output schema, the description is minimally workable. The gaps are that it does not define 'children,' differentiate from closely related metadata traversal endpoints, or explain the open-world hint, leaving some interpretation to the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does minimally by documenting id as 'The unique identifier of the item,' which adds a small amount of meaning beyond the schema's integer title. This is sufficient for a single obvious parameter, though it does not specify what kind of item or where the id originates.
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 resource and operation: getting metadata children for a library item, reinforced by the explicit endpoint GET /library/metadata/{id}/children. The word 'children' distinguishes it from sibling tools like parent, grandparent, and grandchildren, though it does not explain what children means in the metadata hierarchy.
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 given about when to use this tool versus siblings such as get_library_metadata_by_id_grandchildren, get_library_metadata_by_id_parent, or get_library_metadata_by_id_grandparent. An agent must infer usage entirely from the endpoint and name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_library_metadata_by_idsARead-onlyIdempotent
Get a metadata item.
GET /library/metadata/{ids}
Args:
ids: Comma-separated list of IDs
async_check_files: Determines if file check should be performed asynchronously. An activity is created to indicate progress. Default is false.
async_refresh_local_media_agent: Determines if local media agent refresh should be performed asynchronously. An activity is created to indicate progress. Default is false.
async_refresh_analysis: Determines if analysis refresh should be performed asynchronously. An activity is created to indicate progress. Default is false.
check_files: Determines if file check should be performed synchronously. Specifying asyncCheckFiles will cause this option to be ignored. Default is false.
skip_refresh: Determines if synchronous local media agent and analysis refresh should be skipped. Specifying async versions will cause synchronous versions to be skipped. Default is false.
check_file_availability: Determines if file existence check should be performed synchronously. Specifying checkFiles will imply this option. Default is false.
async_augment_metadata: Add metadata augmentations. An activity is created to indicate progress. Option will be ignored if specified by non-admin or if multiple metadata items are requested. Default is false.
augment_count: Number of augmentations to add. Requires asyncAugmentMetadata to be specified.
include_markers: Include intro/credits markers in the response
include_guids: Include external GUIDs (e.g. TMDB, TVDB) in the response
include_chapters: Include chapter data in the response
include_external_media: Include external/online media in the response
include_extras: Include trailers, behind-the-scenes, and other extras
include_related: Include related items in the response
include_on_deck: Include On Deck status in the response
include_popular_leaves: Include popular episodes in the response
include_reviews: Include user reviews in the response
include_stations: Include radio station data in the response
exclude_elements: Comma-separated list of elements to exclude from the response
exclude_fields: Comma-separated list of fields to exclude from the response
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | ||
| check_files | No | ||
| skip_refresh | No | ||
| augment_count | No | ||
| include_guids | No | ||
| exclude_fields | No | ||
| include_extras | No | ||
| include_markers | No | ||
| include_on_deck | No | ||
| include_related | No | ||
| include_reviews | No | ||
| exclude_elements | No | ||
| include_chapters | No | ||
| include_stations | No | ||
| async_check_files | No | ||
| async_augment_metadata | No | ||
| async_refresh_analysis | No | ||
| include_external_media | No | ||
| include_popular_leaves | No | ||
| check_file_availability | No | ||
| async_refresh_local_media_agent | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already declare readOnlyHint and idempotentHint, the description adds significant behavioral detail: async options create activity records, async flags override synchronous ones, checkFiles implies checkFileAvailability, and asyncAugmentMetadata is ignored for non-admins or multiple items. This goes well beyond what the annotations convey.
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 structure is logical: a one-line summary, the endpoint, then a compact parameter block. The repeated phrase 'An activity is created to indicate progress' appears three times, which is mildly redundant, but overall the length is justified by the 21 parameters and the lack of schema descriptions.
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 21-parameter surface area and zero schema descriptions, the tool is largely self-sufficient for invocation: the required ids are identified and all optional flags are documented with behavior and defaults. It is slightly weaker on high-level guidance, such as what base metadata is always returned versus what must be requested via flags.
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?
With 0% schema description coverage, the description compensates thoroughly by explaining every parameter, including defaults and interdependencies. The only notable gap is that 'ids' is described as a comma-separated list while the schema declares it as an array, and augment_count lacks an explicit value range.
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 a specific verb and resource: 'Get a metadata item' followed by 'GET /library/metadata/{ids}'. This clearly identifies the operation as fetching metadata by ID, though it does not explicitly distinguish itself from nearby siblings like get_library_metadata_by_id_children or get_library_metadata_by_ids_related.
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 through the name and endpoint: use this tool when you need a metadata item by IDs. However, there is no explicit guidance about when to prefer this over the many related siblings, nor any 'when-not-to-use' or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_library_metadata_by_ids_similarBRead-onlyIdempotent
Get similar items.
GET /library/metadata/{ids}/similar
Args: ids: Comma-separated list of IDs
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds no behavioral context beyond the bare 'Get similar items' — nothing about result semantics, pagination, how multiple IDs affect output, or any caveats.
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 compact and front-loaded with the purpose, followed by the endpoint and parameter format. Every line earns its place; there is no fluff or redundant prose.
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, read-only tool with an output schema, the description provides the essential endpoint and parameter format. It is slightly incomplete because 'similar items' is ambiguous and no sibling or usage context is given, but nothing critical is missing for basic 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 schema only defines ids as a string with no format guidance, while the description explicitly states 'Comma-separated list of IDs' and the endpoint path confirms these are metadata IDs. This adds meaningful parameter semantics beyond the schema, though it does not explain constraints or expected ID count.
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: get similar items for library metadata IDs, and the endpoint path clarifies the resource. However, it does not differentiate this from sibling tools like get_library_metadata_by_ids_related or get_library_metadata_by_ids_all_leaves, and 'similar' remains somewhat vague.
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 guidance on when to use this tool versus alternatives such as related, nearest, or reviews endpoints. The description simply states what it does without indicating when it is appropriate or when a different sibling should be chosen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_library_sections_by_section_id_allBRead-onlyIdempotent
Get items in the section.
GET /library/sections/{sectionId}/all
Args: section_id: The id of the section include_meta: Adds the Meta object to the response include_guids: Adds the Guid object to the response include_collections: Include collection items in results include_external_media: Include external or online media include_advanced: Include advanced settings check_files: Verify file existence include_related: Include related items include_extras: Include trailers, behind-the-scenes, etc. include_popular_leaves: Include popular episodes include_concerts: Include concert items include_on_deck: Include On Deck status include_chapters: Include chapter markers include_preferences: Include user preferences include_bandwidths: Include bandwidth info include_loudness_ramps: Include loudness ramp data include_stations: Include radio station data include_external_ids: Include external GUIDs include_reviews: Include user reviews include_credits: Include full credits include_art: Force inclusion of artwork fields include_thumb: Force inclusion of thumbnail fields include_banner: Force inclusion of banner fields include_theme: Force inclusion of theme fields include_fields: Whitelist of fields to return exclude_fields: Blacklist of fields to omit async_augment_metadata: Async metadata augmentation async_refresh_local_media_agent: Async local media agent refresh nocache: Bypass cache skip_refresh: Skip synchronous refresh exclude_elements: Comma-separated list of elements to exclude from the response filters: General filtering expression. unwatched: Filter to unwatched only (1 = true). genre: Filter by genre. studio: Filter by studio. content_rating: Filter by content rating. resolution: Filter by resolution. year: Filter by year. first_character: Filter by first character of title.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | ||
| genre | No | ||
| studio | No | ||
| filters | No | ||
| nocache | No | ||
| unwatched | No | ||
| resolution | No | ||
| section_id | Yes | ||
| check_files | No | ||
| include_art | No | ||
| include_meta | No | ||
| skip_refresh | No | ||
| include_guids | No | ||
| include_theme | No | ||
| include_thumb | No | ||
| content_rating | No | ||
| exclude_fields | No | ||
| include_banner | No | ||
| include_extras | No | ||
| include_fields | No | ||
| first_character | No | ||
| include_credits | No | ||
| include_on_deck | No | ||
| include_related | No | ||
| include_reviews | No | ||
| exclude_elements | No | ||
| include_advanced | No | ||
| include_chapters | No | ||
| include_concerts | No | ||
| include_stations | No | ||
| include_bandwidths | No | ||
| include_collections | No | ||
| include_preferences | No | ||
| include_external_ids | No | ||
| async_augment_metadata | No | ||
| include_external_media | No | ||
| include_loudness_ramps | No | ||
| include_popular_leaves | No | ||
| async_refresh_local_media_agent | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safe read-only profile is covered. The description adds the endpoint path and a long list of optional include/filter parameters, but does not disclose behavioral traits such as response size, pagination, caching effects, or that an 'all' query may return a very large payload. It is consistent with annotations and adds some but not rich 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?
The description is front-loaded with the one-sentence purpose and the endpoint, followed by a structured Args block. The 39-line parameter list is necessary given the parameter count and lack of schema descriptions, but it is long and repetitive, and the formatting is minimal rather than genuinely concise. It is functional but not a model of compactness.
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 39-parameter endpoint, the description is reasonably complete: it states the operation and explains every parameter. However, it provides no guidance on typical use, default behavior, or how this endpoint relates to the many sibling section endpoints. The presence of an output schema removes the need to describe return values, but the missing selection guidance leaves the context incomplete for an autonomous agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden for 39 parameters. It lists every parameter with a brief semantic hint, such as 'include_meta: Adds the Meta object to the response' and 'unwatched: Filter to unwatched only (1 = true)'. This adds real meaning beyond the bare schema titles, though many entries simply restate 'include X' and several are vague (e.g., 'filters: General filtering expression.').
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 concrete action and resource: 'Get items in the section' followed by the REST path 'GET /library/sections/{sectionId}/all'. This clearly identifies the primary operation. It does not explicitly differentiate from closely related siblings like get_library_sections_by_section_id_movies, _shows, or _all_leaves, so it misses the full sibling-distinguishing 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?
There is no guidance about when to use this tool instead of the many sibling get_library_sections_by_section_id_* endpoints. The name and endpoint imply it returns 'all' items, but the description never states that it is the general/all-items endpoint or mentions alternatives for filtered or type-specific queries. Agents are left to infer usage from the URL.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_library_sections_by_section_id_collectionsCRead-onlyIdempotent
Get collections in a section.
GET /library/sections/{sectionId}/collections
Args: section_id: Section identifier
| Name | Required | Description | Default |
|---|---|---|---|
| section_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no additional behavioral context—no mention of result sets, filtering, pagination, or any side effects. It merely restates the operation without enriching the annotation-covered facts.
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 compact: one sentence plus endpoint and Args listing. It front-loads the action and avoids fluff. The Args line is somewhat redundant with the schema, but the overall size is appropriate for a simple get operation.
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 annotations and an output schema present, the description's main burden is usage contextcongruence. It provides none: no explanation of what a 'collection' is, no guidance on selecting this endpoint among dozens of section sub-resources, and no preconditions. Although the tool is read-only and simple, the complete lack of context makes it insufficient for an agent choosing between 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?
Schema description coverage is 0%, so the description must compensate. It only echoes the parameter name and a vague label ('Section identifier'), adding substantially no meaning beyond the schema's 'Section Id' title. No information about where to find section IDs, valid values, or how the parameter shapes the response.
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: 'Get collections in a section' and includes the endpoint path. The tool name also mirrors this, making the core function clear. However, it does not explicitly differentiate from sibling tools like get_library_sections_by_section_id_playlists, though 'collections' is distinct enough.
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 guidance on when to use this tool versus alternatives. The sibling list contains many similar get_library_sections_by_section_id_* tools, and the description provides no decision context, exclusions, or references to more appropriate tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_library_sections_by_section_id_unwatchedBRead-onlyIdempotent
Get Unwatched for Section.
GET /library/sections/{sectionId}/unwatched
Args: section_id: The unique identifier of the library section
| Name | Required | Description | Default |
|---|---|---|---|
| section_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds no additional behavioral context such as what 'unwatched' means, whether results are paginated, or any authentication or rate-limit considerations. It simply repeats the GET endpoint, which does not go beyond what annotations and the tool name already convey.
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 short and front-loaded with the purpose. The endpoint path is slightly redundant with the tool name, but it serves as a concrete reference. The Args section is minimal and directly useful. No unnecessary 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?
For a simple single-parameter GET endpoint with robust annotations and an output schema, the description is mostly complete. The missing usage guidance is the main gap, but the purpose and parameter semantics are clear enough for the agent to select and call 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?
The schema's property description coverage is 0%, so the tool description carries the burden of explaining the parameter. It does define section_id as 'the unique identifier of the library section', which is meaningful and sufficient for a single required integer parameter. It could mention where to find this ID, but the definition is clear enough for correct invocation.
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 action and resource: 'Get Unwatched for Section' with the exact endpoint path. The verb and resource are clear, and the endpoint path removes ambiguity about which resource is affected. However, it does not explicitly differentiate itself from similar section-based siblings like all, on_deck, or recently_added.
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 guidance on when to use this tool versus alternatives. With a large set of sibling tools such as get_library_sections_by_section_id_all and get_library_sections_by_section_id_on_deck, the agent is left to infer when 'unwatched' is the appropriate choice. No when-not or alternative conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlists_by_playlist_id_itemsARead-onlyIdempotent
Retrieve Playlist Contents.
GET /playlists/{playlistId}/items
Args: playlist_id: The ID of the playlist type: The metadata types of the item to return. Values past the first are only used in fetching items from the background processing playlist.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| playlist_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, so the safety profile is covered. The description adds one genuinely useful behavioral detail: extra values in 'type' are only used for the background processing playlist. It does not add much beyond that.
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 compact and front-loaded: one clear purpose sentence, the HTTP endpoint, then both args. Every line earns its place with no filler 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?
Given the low parameter count, strong annotations, and presence of an output schema, the description provides the essential calling information. The main gap is the absence of sibling routing guidance, but the tool is otherwise adequately specified 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?
Schema description coverage is 0%, so the description carries the full burden of explaining parameters. It documents playlist_id as 'The ID of the playlist' and clarifies that type specifies metadata types, with a non-obvious special rule about array values after the first. This meaningfully compensates for the empty schema 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?
Description clearly states the verb and resource: 'Retrieve Playlist Contents' with the endpoint GET /playlists/{playlistId}/items. It is distinct from broader playlist operations, though it does not explicitly differentiate itself from close siblings like get_playlists_by_playlist_id_items_by_generator_id.
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 the many related playlist endpoints. The only contextual hint, about the 'type' parameter and the background processing playlist, is behavioral rather than usage routing, so an agent must infer when this endpoint is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_result_pageARead-onlyIdempotent
Read more of a result that was too large to return in one piece.
Any tool whose answer is too large returns its first page with a
paging block. Pass that block's result_id here. Nothing is fetched
again: the stored result is paged, filtered and narrowed.
Args:
result_id: From the paging block of the earlier answer.
offset: First item to return, usually the previous next_offset.
limit: At most this many items. Fewer come back if they would not fit.
fields: Only these keys of each item. Dots reach nested keys, such as
"statistics.sizeOnDisk". The paging.fields list shows what exists.
match: Keep only items whose field contains this text, ignoring case,
for example {"title": "alien", "year": "1979"}.
path: Which list to page when the result holds several, as named in
paging.lists. Defaults to the largest.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| limit | No | ||
| match | No | ||
| fields | No | ||
| offset | No | ||
| result_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: nothing is re-fetched or re-executed, the stored result is paged/filtered/narrowed in place, which reassures the agent this is a cheap, safe re-read.
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?
Purpose is front-loaded in the first sentence, then the usage mechanism, then a per-argument block. Every line carries information (syntax, defaults, examples) with no 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?
With six parameters, zero schema description coverage, and an output schema that already documents return shape, the description supplies everything the agent needs: provenance of result_id, semantics of each optional filter, and the no-refetch behavior. Nothing material 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?
Schema description coverage is 0%, so the description carries the full burden and does so thoroughly: it explains result_id provenance, offset meaning (usually the prior next_offset), limit behavior (may return fewer), fields with dotted-path syntax and an example, match with case-insensitivity and an example, and path defaulting to the largest list. This is exactly the compensation required.
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?
States a specific verb and resource — reading another page of a previously returned oversized result — and explains the mechanism concisely in the first sentence. No sibling tool in this API surface does anything similar, so distinctiveness is inherent.
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?
Explicitly states when to call it: when an earlier answer was too large and returned a `paging` block, pass that block's `result_id`. There is no meaningful alternative to route between and no when-not guidance, which keeps this just 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.
list_hubs_continue_watching_itemsBRead-onlyIdempotent
Get Continue Watching Items.
GET /hubs/continueWatching/items
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. However, the description only repeats the HTTP verb and path, which adds no meaningful behavioral context such as whether results are paginated, sorted, scoped to a user, or what 'items' actually represents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded, with only two lines: a human-readable summary and the raw endpoint. The first line is somewhat redundant with the tool name, but there is no wasted or misleading content, and the size is appropriate for a zero-parameter tool.
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 zero-parameter input, rich annotations, and existing output schema, the description is minimally sufficient to call the endpoint correctly. However, it lacks context about how this tool differs from list_hubs_continue_watching and what class of items the response contains, which an agent would need to make an informed selection among many hub-related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline for this dimension is 4. The description correctly adds no parameter information that could conflict with the empty schema, and nothing further is needed to understand invocation inputs.
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 clear verb and resource: 'Get Continue Watching Items' and includes the endpoint path. It is unambiguous about the basic operation, but it does not explicitly differentiate from sibling tools like list_hubs_continue_watching or list_hubs_items, so an agent might not know this returns the flattened item list rather than the hub summary.
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 guidance on when to use this tool versus the alternative list_hubs_continue_watching or other hub-listing tools. The description provides no exclusions, preconditions, or alternative routes, leaving selection entirely to inference from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_hubs_searchBRead-onlyIdempotent
Search Hub.
GET /hubs/search
Args: query: The query term section_id: This gives context to the search, and can result in re-ordering of search result hubs. limit: The number of items to return per hub. 3 if not specified include_collections: Include collection results in search hubs
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| section_id | No | ||
| include_collections | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safe read-only profile is covered. The description adds a concrete HTTP GET method and a default of 3 for limit, which are helpful, but it does not discuss response behavior, pagination, or authentication.
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 argument list is compact and front-loaded with the endpoint; each parameter gets one line. However, the opening 'Search Hub.' is a sparse fragment that could have been replaced with a full purpose sentence.
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 read-only annotations and output schema, the parameter coverage is adequate, but the description lacks usage context and does not distinguish this search from sibling search/list tools. The overall picture is functional but minimal.
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 descriptions cover 0% of parameters, and the description compensates by documenting all four arguments. It clarifies section_id reorders results, limit defaults to 3 per hub, and include_collections toggles collection results.
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 'Search Hub.' and the endpoint 'GET /hubs/search', which conveys a search action over hubs, but it never explains what a hub is or what the returned search results contain. It also does not differentiate from sibling tools like list_hubs_search_voice or list_library_search, and the first line largely restates the tool name.
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 guidance on when to call this tool instead of list_hubs, list_hubs_search_voice, or list_library_search. The description only lists parameters; it does not mention exclusions, prerequisites, or alternative conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_identityBRead-onlyIdempotent
Get PMS identity.
GET /identity
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is clear. The description adds the exact HTTP endpoint and method, which is mildly useful, but it does not disclose additional behavioral traits such as authentication needs, rate limits, or response characteristics beyond what annotations and output schema already 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 very short and front-loaded, with 'Get PMS identity' as the first line. The second line 'GET /identity' is somewhat redundant with the first line, but it is brief and provides the concrete endpoint, so the extra cost is minimal. No filler or unnecessary detail is present.
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 parameterless, read-only identity lookup with rich annotations and an output schema, the description is essentially sufficient. It could clarify what 'PMS identity' includes, but the output schema covers the return structure, and annotations cover the operational profile. No critical information for invoking the tool correctly 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?
The tool has zero parameters, so parameter documentation is unnecessary. The description does not need to compensate for any schema gaps, and the schema coverage is trivially 100%. The baseline of 4 for a parameterless tool 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 action and resource: 'Get PMS identity.' It clearly indicates this tool retrieves identity information, and the endpoint 'GET /identity' reinforces the target. It does not explicitly contrast with sibling tools like list_server or list_accounts, but the resource is distinct enough to avoid serious ambiguity.
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 alternatives such as list_server, list_servers, list_user, or list_accounts. The description implies use for identity retrieval but gives no context, exclusions, or selection criteria. With a large sibling set, this is a noticeable gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_library_recently_addedARead-onlyIdempotent
Get Global Recently Added.
GET /library/recentlyAdded
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds the global scope and exact endpoint but does not disclose behavior like pagination, ordering, or default limits. With annotations present, this level of added context is acceptable though not extensive.
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 exceptionally concise: one sentence plus the endpoint. Every element is useful, with the primary action front-loaded and no filler. It is appropriately sized for a zero-parameter GET endpoint.
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 parameterless GET with an output schema present, the description provides the essential information: the global scope and the endpoint. It doesn't clarify result ordering or how this endpoint relates to other recently-added variants, but the tool's simplicity and existing structured data make this adequate.
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, so 100% schema coverage. With no parameters to document, the description has nothing to add; the baseline for 0 parameters 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 states a specific verb and resource: 'Get Global Recently Added' with the endpoint 'GET /library/recentlyAdded'. The word 'Global' clearly distinguishes this from sibling tools like get_library_sections_by_section_id_recently_added, so an agent can tell them apart without further investigation.
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 alternatives such as list_hubs_home_recently_added or get_library_sections_by_section_id_recently_added. The description only states what it does, leaving the agent to infer usage context from the name and endpoint rather than explicit when-to-use or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_library_sectionsBRead-onlyIdempotent
Get Library Sections (Fallback).
GET /library/sections/
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is known. The description adds the endpoint GET /library/sections/ and the 'Fallback' label, but does not explain what 'fallback' implies, such as response format or limits.
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?
Two short fragments – the description and the endpoint – convey the basic action without wasted words. It is lean, though the 'Fallback' note could be omitted or clarified.
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 operation with an output schema, the description provides the essential endpoint. Still, the ambiguous 'Fallback' and lack of context about when this variant is preferred leaves the agent with incomplete understanding relative to the many 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 tool has zero parameters, so the schema is empty and the baseline of 4 applies. The description does not need to add 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 clear imperative ('Get') with a specific resource ('Library Sections'), so an agent knows what it returns. However, the word 'Fallback' is ambiguous and does not differentiate it from siblings like list_library_sections_all or list_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 on when to use this tool over the many sibling library-section listing tools. The description does not mention the role of the fallback variant or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_library_sections_watchlist_allBRead-onlyIdempotent
Get Watchlist.
GET /library/sections/watchlist/all
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds only the HTTP GET path, which is not a behavioral disclosure. It omits any additional context such as pagination, response size, or authorization requirements.
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 short—two lines—and wastes no words. It front-loads the purpose ('Get Watchlist') and includes the endpoint path. It is concise, though slightly under-specified in terms of enriching 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?
Given zero parameters, strong safety annotations, and the presence of an output schema, the description is largely sufficient. The purpose is clear, and there is no missing parameter or behavioral information that would prevent correct invocation. It only lacks explicit notes about what the returned watchlist contains.
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 nothing for the description to explain. The input schema is empty and fully covers the absence of parameters, making the description's lack of parameter detail non-penalizing.
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 'Get Watchlist' and provides the exact endpoint 'GET /library/sections/watchlist/all', which identifies the operation and resource. It is not merely a tautology, though it lacks explicit differentiation from sibling watchlist-related tools like create_actions_add_to_watchlist.
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 given on when to use this tool versus alternatives. It does not mention that mutations should be done via create_actions_add_to_watchlist or create_actions_remove_from_watchlist, nor does it specify any preconditions or intended scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_playlistsCRead-onlyIdempotent
List playlists.
GET /playlists
Args: playlist_type: Limit to a type of playlist type: Filter by playlist type. Use 42 for optimized/conversion items.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| playlist_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds only the endpoint and parameter hints, with no behavioral context such as pagination, result size, or authentication requirements. It does not contradict annotations, but it also adds no meaningful behavioral transparency 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 short and front-loaded with the main purpose and endpoint, followed by compact parameter notes. There is no filler or redundant restating of the schema, though the parameter descriptions could be more precise.
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?
Although the tool has output schema and annotations that cover its read-only/idempotent safety profile, the description fails to clarify the ambiguous relationship between 'playlist_type' and 'type', and gives no usage context or exclusion guidance. For a list tool with two optional filters, this is an incomplete picture 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?
Schema description coverage is 0%, so the description must carry the full burden for parameters. 'playlist_type: Limit to a type of playlist' is vague, and 'type: Filter by playlist type' is nearly identical, creating confusion about which to use. The only concrete detail is 'Use 42 for optimized/conversion items', which is insufficient to make the parameters actionable.
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?
Description states a clear verb and resource ('List playlists') with the endpoint 'GET /playlists'. It is easily distinguishable from sibling tools like get_playlists_by_playlist_id (single playlist) and create_playlists/update_playlists/delete_playlists (mutations).
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 given about when to use this tool versus alternatives. The description does not mention that this lists all playlists while get_playlists_by_playlist_id retrieves a specific one, nor does it explain when the two filter parameters should be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_status_sessionsBRead-onlyIdempotent
List Sessions.
GET /status/sessions
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds only the HTTP path 'GET /status/sessions', which mostly restates the read-only nature already captured by annotations. It does not disclose what subset of sessions is returned, any limits, or other behavioral details.
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 terse and front-loaded. 'List Sessions.' immediately communicates the operation, and the endpoint line provides a useful, non-redundant REST reference. No fluff or filler is present.
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 with an output schema, the description is mostly adequate. However, the word 'Sessions' is ambiguous among many session-related siblings, and the description does not clarify what type of sessions are included or excluded. This is a meaningful gap for tool selection.
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 an empty schema, so the baseline for this dimension is 4. There is nothing for the description to clarify about parameter meanings.
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 clear verb and resource: 'List Sessions' backed by the endpoint 'GET /status/sessions'. This makes the core operation understandable. However, it does not differentiate this from sibling tools like list_status_sessions_background, list_status_sessions_history_all, or list_livetv_sessions, and it omits the word 'active' or 'current'.
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 guidance about when to use this tool versus alternatives such as list_status_sessions_history_all or list_transcode_sessions. The description provides no selection criteria, exclusions, or pointers to related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_status_sessions_history_allARead-onlyIdempotent
List Playback History.
GET /status/sessions/history/all
Args:
account_id: The account id to restrict view history
viewed_at: The time period to restrict history (typically of the form viewedAt>=12456789)
library_section_id: The library section id to restrict view history
metadata_item_id: The metadata item to restrict view history (can provide the id for a show to see all of that show's view history). Note this is translated to metadata_items.id, parents.id, or grandparents.id internally depending on the metadata type.
sort: The field on which to sort. Multiple orderings can be specified separated by , and the direction specified following a : (desc or asc; asc is assumed if not provided). Note metadataItemID may not be used here.
exclude_elements: Comma-separated list of elements to exclude from the response
exclude_fields: Comma-separated list of fields to exclude from the response
include_fields: Whitelist of fields to return
include_elements: Whitelist of elements to include
viewed_at_query: Greater-than filter for viewedAt timestamp
viewed_at_query_2: Less-than filter for viewedAt timestamp
device_id: Filter by device ID
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| device_id | No | ||
| viewed_at | No | ||
| account_id | No | ||
| exclude_fields | No | ||
| include_fields | No | ||
| viewed_at_query | No | ||
| exclude_elements | No | ||
| include_elements | No | ||
| metadata_item_id | No | ||
| viewed_at_query_2 | No | ||
| library_section_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe read-only, non-destructive profile. The description adds useful behavioral details, such as metadata_item_id being translated internally to metadata_items.id/parents.id/grandparents.id and sort restrictions (metadataItemID may not be used), but it does not disclose default scope, pagination, or result limits for an endpoint named 'history_all'.
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 efficiently structured: a one-line purpose, the endpoint, then a clear 'Args' list where each parameter earns its place. There is no fluff or repetition, and the front-loaded purpose makes the intent immediately obvious.
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 12 optional parameters and an output schema present, the parameter docs are complete, but high-level operation context is missing. The description does not clarify the relationship between viewed_at, viewed_at_query, and viewed_at_query_2, nor state whether the endpoint returns all history or paginated results, leaving ambiguity for a large 'history_all' listing.
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 zero descriptions for its 12 parameters, and the description compensates fully by explaining each parameter with meaningful detail. It includes format examples (viewed_at as `viewedAt>=12456789`), syntax rules for sort and direction, and a special note about metadata_item_id translation.
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 'List Playback History,' a clear verb and resource that identifies the operation as a read of history data, distinct from sibling list_status_sessions (active sessions). It does not explicitly name a sibling or clarify the 'all' scope, relying on the tool name for differentiation.
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 list_status_sessions, get_status_sessions_history_by_history_id, or delete_status_sessions_history_by_history_id. The description is solely a parameter reference with no usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_operationADestructiveIdempotent
Run any Plex API operation by name, as found with find_operation.
Some operations change or delete things; check read_only in the
find_operation result before running one the user did not ask for.
Args: name: Operation name from find_operation. arguments: Its arguments as listed there, by name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| arguments | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, and openWorldHint=true, so the safety profile is partly covered. The description adds value beyond that by explaining that destructiveness is per-operation and must be checked via `read_only` in the find_operation result — a concrete protocol the annotations cannot express. It doesn't describe error behavior or result handling, but an output schema 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?
Purpose is front-loaded, the caution follows, and the Args block is short and scannable. Every sentence earns its place; only the docstring-style Args formatting is slightly redundant with the schema's own titles.
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 meta-dispatch tool, the definition covers the essentials: where names come from, the dynamic argument shape, and the destructiveness check. An output schema exists, so return values need not be described, and annotations carry the read/write profile. Minor gaps remain on error handling and on when to prefer typed 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?
Schema description coverage is 0%, so the description must carry the load, and it does: `name` is the operation name from find_operation, and `arguments` is 'its arguments as listed there, by name.' This explains the dynamic, discover-then-pass shape of the freeform arguments object, which the schema alone cannot convey. It could be slightly richer on how argument keys map to the discovered signature.
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?
States a specific verb+resource ('Run any Plex API operation by name') and immediately ties itself to the discovery tool ('as found with find_operation'). An agent can distinguish this generic dispatcher from the concrete list_*/get_* siblings, though it doesn't explicitly say when to prefer the typed tools over this one.
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?
Gives actionable context: obtain the name from find_operation, and check the `read_only` flag before invoking an operation the user did not request. This is a real when-to-use / when-to-be-cautious rule. It stops short of explicit exclusions or naming typed alternatives for common cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_playlists_by_playlist_id_itemsCIdempotent
Adding to a Playlist.
PUT /playlists/{playlistId}/items
Args: playlist_id: The ID of the playlist uri: The content URI for the playlist. play_queue_id: The play queue to add to a playlist.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | No | ||
| playlist_id | Yes | ||
| play_queue_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and destructiveHint=false, so the description adds little behavioral context beyond stating it is an additive operation. It does not disclose duplicate-item behavior, failure effects, required permission, or response semantics, which would be valuable for a mutation endpoint.
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 short and organized with an endpoint and an Args block, making the core information easy to scan. Minor formatting issues like the double space in 'Adding to a Playlist' and the redundant 'Args:' header do not significantly hurt readability.
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 3-parameter mutation tool with no schema-level parameter descriptions, the description is incomplete. It fails to explain how to provide multiple items, whether uri and play_queue_id are alternatives or complementary, or what the output/result indicates, leaving a critical gap 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?
Schema description coverage is 0%, so the description must compensate, but it only paraphrases the parameter names: 'The ID of the playlist', 'The content URI for the playlist', and 'The play queue to add to a playlist'. It does not explain URI format, the relationship between uri and play_queue_id, or whether at least one is required despite playlist_id being the only required field.
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 'Adding to a Playlist' and provides the endpoint PUT /playlists/{playlistId}/items, making the action and resource clear. The name and description together distinguish it from sibling operations like deleting playlist items or moving items within a playlist, though it does not explicitly differentiate itself.
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 such as update_playlists_by_playlist_id_items_by_generator_id or create_playlists. It only restates the basic operation, leaving the agent to infer usage from the endpoint and name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_rateAIdempotent
Rate an item.
PUT /:/rate
Args:
identifier: The identifier of the media provider containing the media to rate. Typically com.plexapp.plugins.library
key: The key of the item to rate. This is the ratingKey found in metadata items
rating: The rating to give the item.
rated_at: The time when the rating occurred. If not present, interpreted as now.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| rating | No | ||
| rated_at | No | ||
| identifier | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that this is a non-read-only, idempotent, non-destructive operation. The description adds a useful behavioral detail about `rated_at` defaulting to now, but it does not disclose whether existing ratings are overwritten, what rating values are valid, or any authentication requirements.
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 compact and front-loaded with the core purpose, followed by the endpoint and a clean Args list. There is no redundant filler, and each line contributes useful information.
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 small four-parameter tool with an output schema and annotations, the description covers the essential parameter semantics and defaults. The main missing context is the expected rating scale/range and behavior when re-rating an already-rated item, which an agent would need for a fully 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?
Schema description coverage is 0%, so the description carries the full burden, and it does so well: it explains all four parameters, identifies `key` as the metadata `ratingKey`, provides a typical `identifier` example, and defines the behavior of `rated_at`. This is meaningfully informative beyond the raw 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 action, 'Rate an item,' and reinforces it with the endpoint 'PUT /:/rate'. It is distinct from the broader sibling set, though it does not explicitly call out an alternative or clarify edge cases such as updating vs. creating a rating.
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 intended usage is implied: use this tool when an item needs to be rated. However, there is no explicit guidance about when not to use it, no sibling comparison, and no prerequisites such as whether the item must already exist or whether the rating key is mandatory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_scrobbleBIdempotent
Mark an item as played.
PUT /:/scrobble
Args:
identifier: The identifier of the media provider containing the media to rate. Typically com.plexapp.plugins.library
key: The key of the item to rate. This is the ratingKey found in metadata items
uri: URI of the item to scrobble. Format is library://<section-uuid>/item/<url-encoded-key> or plex://movie/<guid> or plex://episode/<guid>.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| uri | No | ||
| identifier | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover mutability (readOnlyHint=false), idempotency (idempotentHint=true), and non-destructiveness (destructiveHint=false). The description adds no behavioral detail beyond the purpose, such as whether play count is incremented or if repeated calls change state, so it offers little value beyond 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 concise and well-structured: a one-line purpose, the endpoint, and a clear parameter list. It is front-loaded with the action and avoids unnecessary content, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple and has an output schema plus annotations, but the description lacks important invocation context. It doesn't state whether key or uri is required, how to handle cases where both are provided, or how this action relates to playback state. This is a notable gap 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?
With 0% schema description coverage, the description compensates by explaining each parameter: identifier as the media provider, key as the ratingKey, and uri with explicit format examples. This adds real meaning, though it does not clarify which parameters are required or how they relate to each other.
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 'Mark an item as played' uses a specific verb and resource, clearly conveying the action. It does not explicitly name sibling tools like update_unscrobble, but the term 'scrobble' and the played/unplayed distinction are enough to differentiate in most cases.
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 update_unscrobble or update_rate. There are no prerequisites, usage scenarios, or exclusions mentioned, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_unscrobbleBIdempotent
Mark an item as unplayed.
PUT /:/unscrobble
Args:
identifier: The identifier of the media provider containing the media to rate. Typically com.plexapp.plugins.library
key: The key of the item to rate. This is the ratingKey found in metadata items
uri: URI of the item to scrobble. Format is library://<section-uuid>/item/<url-encoded-key> or plex://movie/<guid> or plex://episode/<guid>.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| uri | No | ||
| identifier | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the behavioral profile (mutating, idempotent, non-destructive), so the description adds only the endpoint and operation semantics. It does not disclose side effects or prerequisites, but given the annotation coverage this is acceptable. Minor copy-paste wording ('to rate', 'to scrobble') slightly muddies the behavior but does not contradict 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 one-line summary followed by endpoint and compact arg docs is efficient. The arg descriptions contain unnecessary repetition of rate/scrobble phrasing, but no sentence is extraneous.
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 three-optional-parameter mutation with annotations covering idempotency and safety, plus an output schema, the description covers the endpoint and all parameter semantics. The only notable gap is the lack of usage guidance relative to update_scrobble.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it documents all three parameters. It adds valuable meaning: identifier's typical value, key's relationship to ratingKey, and uri's concrete format templates.
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 clear verb and resource in 'Mark an item as unplayed' and reinforces it with the endpoint 'PUT /:/unscrobble'. It is readily distinguishable from the sibling update_scrobble by function, though it never names that tool explicitly.
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 guidance on when to use this tool versus alternatives such as update_scrobble or update_rate. The endpoint and arg docs imply usage but provide no conditions, exclusions, or selection criteria.
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.
382 tool updates
v1.2.0- Removed
create_auth_jwk - Removed
create_auth_token - Removed
create_butler - Removed
create_butler_by_butler_task - Removed
create_by_transcode_type_transcode_universal_fallback - Removed
create_download_queue - Removed
create_download_queue_by_queue_id_add - Removed
create_download_queue_by_queue_id_items_by_item_id_restart - Removed
create_home_users - Removed
create_home_users_by_id_switch - Removed
create_hubs_sections_by_section_id_manage - Removed
create_library_collections - Removed
create_library_file - Removed
create_library_metadata_by_id_arts - Removed
create_library_metadata_by_id_posters - Removed
create_library_metadata_by_ids_by_element - Removed
create_library_metadata_by_ids_extras - Removed
create_library_metadata_by_ids_marker - Removed
create_library_optimize - Removed
create_library_sections_all - Removed
create_library_sections_by_section_id_empty_trash - Removed
create_library_sections_by_section_id_optimize - Removed
create_library_sections_refresh - Removed
create_livetv_dvrs - Removed
create_livetv_dvrs_by_dvr_id_channels_by_channel_tune - Removed
create_livetv_dvrs_by_dvr_id_reload_guide - Removed
create_log - Removed
create_log_networked - Removed
create_media_grabbers_devices - Removed
create_media_grabbers_devices_by_device_id_scan - Removed
create_media_providers - Removed
create_media_providers_refresh - Removed
create_media_subscriptions - Removed
create_media_subscriptions_process - Removed
create_myplex_claim - Removed
create_pins - Removed
create_pins_xml - Removed
create_play_queues - Removed
create_player_playback_audio_stream - Removed
create_player_playback_mute - Removed
create_player_playback_pause - Removed
create_player_playback_play - Removed
create_player_playback_play_media - Removed
create_player_playback_refresh_play_queue - Removed
create_player_playback_seek - Removed
create_player_playback_set_parameters - Removed
create_player_playback_set_rating - Removed
create_player_playback_set_state - Removed
create_player_playback_set_streams - Removed
create_player_playback_set_text_stream - Removed
create_player_playback_set_view_offset - Removed
create_player_playback_skip_by - Removed
create_player_playback_skip_to - Removed
create_player_playback_step_back - Removed
create_player_playback_step_forward - Removed
create_player_playback_stop - Removed
create_player_playback_subtitle_stream - Removed
create_player_playback_unmute - Removed
create_player_playback_video_stream - Removed
create_player_playback_volume - Removed
create_playlists_upload - Removed
create_security_token - Removed
create_servers_by_machine_id_shared_servers - Removed
create_shared_servers - Removed
create_status_sessions_terminate - Removed
create_timeline - Removed
create_users_password - Removed
create_users_signin - Removed
create_v2_user_webhooks - Removed
create_webhooks - Removed
delete_activities_by_activity_id - Removed
delete_butler - Removed
delete_butler_by_butler_task - Removed
delete_download_queue_by_queue_id_items_by_item_id - Removed
delete_home_users_by_user_id - Removed
delete_hubs_sections_by_section_id_manage - Removed
delete_hubs_sections_by_section_id_manage_by_identifier - Removed
delete_library_caches - Removed
delete_library_metadata_by_ids - Removed
delete_library_metadata_by_ids_marker_by_marker - Removed
delete_library_metadata_by_ids_media_by_media_item - Removed
delete_library_sections_all_refresh - Removed
delete_library_sections_by_section_id - Removed
delete_library_sections_by_section_id_collection_by_collection_id - Removed
delete_library_sections_by_section_id_indexes - Removed
delete_library_sections_by_section_id_intros - Removed
delete_library_sections_by_section_id_refresh - Removed
delete_library_streams_by_stream_id_ext - Removed
delete_livetv_dvrs_by_dvr_id - Removed
delete_livetv_dvrs_by_dvr_id_devices_by_device_id - Removed
delete_livetv_dvrs_by_dvr_id_lineups - Removed
delete_livetv_dvrs_by_dvr_id_reload_guide - Removed
delete_livetv_sessions_by_session_id - Removed
delete_media_grabbers_devices_by_device_id - Removed
delete_media_grabbers_devices_by_device_id_scan - Removed
delete_media_grabbers_operations_by_operation_id - Removed
delete_media_providers_by_provider - Removed
delete_media_subscriptions_by_subscription_id - Removed
delete_play_queues_by_play_queue_id_items - Removed
delete_play_queues_by_play_queue_id_items_by_play_queue_item_id - Removed
delete_playlists - Removed
delete_playlists_by_playlist_id - Removed
delete_playlists_by_playlist_id_items - Removed
delete_playlists_by_playlist_id_items_by_generator_id - Removed
delete_sharings_by_user_id - Removed
delete_status_sessions_history_by_history_id - Removed
delete_users_signout - Added
find_operation - Removed
get_by_transcode_type_transcode_universal_decision - Removed
get_by_transcode_type_transcode_universal_session_by_session_id_by_segment_id_m4s - Removed
get_by_transcode_type_transcode_universal_session_by_session_id_by_segment_id_ts - Removed
get_by_transcode_type_transcode_universal_start_extension - Removed
get_by_transcode_type_transcode_universal_subtitles - Removed
get_download_queue_by_queue_id - Removed
get_download_queue_by_queue_id_item_by_item_id_decision - Removed
get_download_queue_by_queue_id_item_by_item_id_media - Removed
get_download_queue_by_queue_id_items - Removed
get_download_queue_by_queue_id_items_by_item_id - Removed
get_downloads_by_channel_json - Removed
get_hubs_metadata_by_metadata_id - Removed
get_hubs_metadata_by_metadata_id_postplay - Removed
get_hubs_metadata_by_metadata_id_related - Removed
get_hubs_sections_by_section_id - Removed
get_hubs_sections_by_section_id_manage - Removed
get_library_collections_by_collection_id_composite_by_updated_at - Removed
get_library_media_by_media_id_chapter_images_by_chapter - Removed
get_library_metadata_augmentations_by_augmentation_id - Removed
get_library_metadata_by_id_compute_path - Removed
get_library_metadata_by_id_grandchildren - Removed
get_library_metadata_by_id_grandparent - Removed
get_library_metadata_by_id_nearest - Removed
get_library_metadata_by_id_on_deck - Removed
get_library_metadata_by_id_parent - Removed
get_library_metadata_by_id_reviews - Removed
get_library_metadata_by_ids_all_leaves - Removed
get_library_metadata_by_ids_by_element_by_timestamp - Removed
get_library_metadata_by_ids_extras - Removed
get_library_metadata_by_ids_file - Removed
get_library_metadata_by_ids_related - Removed
get_library_metadata_by_ids_subtitles - Removed
get_library_metadata_by_ids_tree - Removed
get_library_metadata_by_ids_users_top - Removed
get_library_parts_by_part_id_by_changestamp_by_filename - Removed
get_library_parts_by_part_id_indexes_by_index - Removed
get_library_parts_by_part_id_indexes_by_index_by_offset - Removed
get_library_people_by_person_id - Removed
get_library_people_by_person_id_media - Removed
get_library_sections_by_section_id - Removed
get_library_sections_by_section_id_agents - Removed
get_library_sections_by_section_id_albums - Removed
get_library_sections_by_section_id_all_leaves - Removed
get_library_sections_by_section_id_artists - Removed
get_library_sections_by_section_id_arts - Removed
get_library_sections_by_section_id_autocomplete - Removed
get_library_sections_by_section_id_by_content_rating - Removed
get_library_sections_by_section_id_by_decade - Removed
get_library_sections_by_section_id_by_folder - Removed
get_library_sections_by_section_id_by_resolution - Removed
get_library_sections_by_section_id_by_year - Removed
get_library_sections_by_section_id_categories - Removed
get_library_sections_by_section_id_clips - Removed
get_library_sections_by_section_id_cluster - Removed
get_library_sections_by_section_id_common - Removed
get_library_sections_by_section_id_composite_by_updated_at - Removed
get_library_sections_by_section_id_compute_path - Removed
get_library_sections_by_section_id_edit - Removed
get_library_sections_by_section_id_empty_trash - Removed
get_library_sections_by_section_id_episodes - Removed
get_library_sections_by_section_id_filters - Removed
get_library_sections_by_section_id_first_characters - Removed
get_library_sections_by_section_id_hubs - Removed
get_library_sections_by_section_id_label - Removed
get_library_sections_by_section_id_location - Removed
get_library_sections_by_section_id_match - Removed
get_library_sections_by_section_id_moment - Removed
get_library_sections_by_section_id_movies - Removed
get_library_sections_by_section_id_nearest - Removed
get_library_sections_by_section_id_newest - Removed
get_library_sections_by_section_id_on_deck - Removed
get_library_sections_by_section_id_optimize - Removed
get_library_sections_by_section_id_photos - Removed
get_library_sections_by_section_id_playlists - Removed
get_library_sections_by_section_id_prefs - Removed
get_library_sections_by_section_id_recently_added - Removed
get_library_sections_by_section_id_refresh - Removed
get_library_sections_by_section_id_search - Removed
get_library_sections_by_section_id_settings - Removed
get_library_sections_by_section_id_shows - Removed
get_library_sections_by_section_id_sorts - Removed
get_library_sections_by_section_id_tags - Removed
get_library_sections_by_section_id_timeline - Removed
get_library_sections_by_section_id_unmatch - Removed
get_library_streams_by_stream_id_ext - Removed
get_library_streams_by_stream_id_levels - Removed
get_library_streams_by_stream_id_loudness - Removed
get_livetv_dvrs_by_dvr_id - Removed
get_livetv_dvrs_by_dvr_id_channels - Removed
get_livetv_dvrs_by_dvr_id_guide - Removed
get_livetv_dvrs_by_dvr_id_recordings - Removed
get_livetv_epg_countries_by_country_by_epg_id_lineups - Removed
get_livetv_epg_countries_by_country_by_epg_id_regions - Removed
get_livetv_epg_countries_by_country_by_epg_id_regions_by_region_lineups - Removed
get_livetv_sessions_by_session_id - Removed
get_livetv_sessions_by_session_id_by_consumer_id_by_segment_id - Removed
get_livetv_sessions_by_session_id_by_consumer_id_index_m3u8 - Removed
get_media_grabbers_devices_by_device_id - Removed
get_media_grabbers_devices_by_device_id_channels - Removed
get_media_grabbers_devices_by_device_id_thumb_by_version - Removed
get_media_subscriptions_by_subscription_id - Removed
get_pins_by_pin_id - Removed
get_play_queues_by_play_queue_id - Removed
get_playlists_by_playlist_id - Removed
get_playlists_by_playlist_id_generators - Removed
get_playlists_by_playlist_id_items_by_generator_id - Removed
get_playlists_by_playlist_id_items_by_generator_id_items - Removed
get_servers_by_machine_id - Removed
get_services_browse_by_base64path - Removed
get_status_sessions_history_by_history_id - Removed
get_sync_items_by_sync_id - Removed
get_system_agents_by_agent_id - Removed
get_user_by_uuid_settings_opt_outs - Removed
list_accounts - Removed
list_activities - Removed
list_auth_keys - Removed
list_auth_nonce - Removed
list_butler - Removed
list_claim_token_json - Removed
list_clients - Removed
list_cloud_server - Removed
list_devices - Removed
list_diagnostics - Removed
list_diagnostics_databases - Removed
list_diagnostics_logs - Removed
list_eventsource_notifications - Removed
list_features - Removed
list_friends - Removed
list_geoip - Removed
list_home - Removed
list_home_users - Removed
list_hubs - Removed
list_hubs_continue_watching - Removed
list_hubs_home_recently_added - Removed
list_hubs_items - Removed
list_hubs_promoted - Removed
list_hubs_search_voice - Removed
list_ip - Removed
list_library - Removed
list_library_all - Removed
list_library_matches - Removed
list_library_optimize - Removed
list_library_random_artwork - Removed
list_library_search - Removed
list_library_sections_all - Removed
list_library_sections_prefs - Removed
list_library_tags - Removed
list_livetv_dvrs - Removed
list_livetv_epg_channelmap - Removed
list_livetv_epg_channels - Removed
list_livetv_epg_countries - Removed
list_livetv_epg_guide - Removed
list_livetv_epg_languages - Removed
list_livetv_epg_lineup - Removed
list_livetv_epg_lineupchannels - Removed
list_livetv_epg_search - Removed
list_livetv_recordings - Removed
list_livetv_sessions - Removed
list_media_grabbers - Removed
list_media_grabbers_devices - Removed
list_media_grabbers_devices_discover - Removed
list_media_providers - Removed
list_media_subscriptions - Removed
list_media_subscriptions_scheduled - Removed
list_media_subscriptions_template - Removed
list_music_transcode - Removed
list_myplex_account - Removed
list_photo_transcode - Removed
list_ping - Removed
list_play_queues_1 - Removed
list_player_resources - Removed
list_player_timeline_poll - Removed
list_prefs - Removed
list_prefs_get - Removed
list_progress - Removed
list_resources - Removed
list_resources_2 - Removed
list_root - Removed
list_security_resources - Removed
list_server - Removed
list_server_access_tokens - Removed
list_server_users_features - Removed
list_servers - Removed
list_services_browse - Removed
list_services_ultrablur_colors - Removed
list_services_ultrablur_image - Removed
list_statistics_bandwidth - Removed
list_statistics_resources - Removed
list_status_sessions_background - Removed
list_sync - Removed
list_sync_items - Removed
list_sync_queue - Removed
list_sync_transcode_queue - Removed
list_system_agents - Removed
list_system_settings - Removed
list_system_updates - Removed
list_transcode_sessions - Removed
list_updater_status - Removed
list_user - Removed
list_users - Removed
list_users_2 - Removed
list_users_account - Removed
list_users_account_json - Removed
list_v2_user_webhooks - Removed
list_webhooks - Removed
list_websocket_notifications - Removed
list_websockets_notifications - Removed
patch_livetv_dvrs_by_dvr_id - Added
run_operation - Removed
update_actions_remove_from_continue_watching - Removed
update_home_users_by_user_id - Removed
update_home_users_restricted_by_user_id - Removed
update_hubs_sections_by_section_id_manage_by_identifier - Removed
update_hubs_sections_by_section_id_manage_move - Removed
update_invites_requests_by_invite_id - Removed
update_library_clean_bundles - Removed
update_library_collections_by_collection_id_items - Removed
update_library_collections_by_collection_id_items_by_item_id - Removed
update_library_collections_by_collection_id_items_by_item_id_move - Removed
update_library_metadata_by_ids - Removed
update_library_metadata_by_ids_addetect - Removed
update_library_metadata_by_ids_analyze - Removed
update_library_metadata_by_ids_by_element - Removed
update_library_metadata_by_ids_chapter_thumbs - Removed
update_library_metadata_by_ids_credits - Removed
update_library_metadata_by_ids_index - Removed
update_library_metadata_by_ids_intro - Removed
update_library_metadata_by_ids_marker_by_marker - Removed
update_library_metadata_by_ids_match - Removed
update_library_metadata_by_ids_matches - Removed
update_library_metadata_by_ids_merge - Removed
update_library_metadata_by_ids_prefs - Removed
update_library_metadata_by_ids_refresh - Removed
update_library_metadata_by_ids_split - Removed
update_library_metadata_by_ids_unmatch - Removed
update_library_metadata_by_ids_voice_activity - Removed
update_library_optimize - Removed
update_library_parts_by_part_id - Removed
update_library_sections_by_section_id - Removed
update_library_sections_by_section_id_all - Removed
update_library_sections_by_section_id_analyze - Removed
update_library_sections_by_section_id_edit - Removed
update_library_sections_by_section_id_empty_trash - Removed
update_library_sections_by_section_id_move - Removed
update_library_sections_by_section_id_prefs - Removed
update_library_streams_by_stream_id_ext - Removed
update_livetv_dvrs_by_dvr_id - Removed
update_livetv_dvrs_by_dvr_id_devices_by_device_id - Removed
update_livetv_dvrs_by_dvr_id_lineups - Removed
update_livetv_dvrs_by_dvr_id_prefs - Removed
update_log - Removed
update_media_grabbers_devices_by_device_id - Removed
update_media_grabbers_devices_by_device_id_channelmap - Removed
update_media_grabbers_devices_by_device_id_prefs - Removed
update_media_subscriptions_by_subscription_id - Removed
update_media_subscriptions_by_subscription_id_move - Removed
update_myplex_refresh_reachability - Removed
update_pins_link - Removed
update_play_queues_by_play_queue_id - Removed
update_play_queues_by_play_queue_id_items_by_play_queue_item_id_move - Removed
update_play_queues_by_play_queue_id_reset - Removed
update_play_queues_by_play_queue_id_shuffle - Removed
update_play_queues_by_play_queue_id_unshuffle - Removed
update_playlists_by_playlist_id - Removed
update_playlists_by_playlist_id_items_by_generator_id - Removed
update_playlists_by_playlist_id_items_by_generator_id_by_metadata_id_by_action - Removed
update_playlists_by_playlist_id_items_by_playlist_item_id_move - Removed
update_prefs - Removed
update_sharings_by_user_id - Removed
update_sync_refresh_content - Removed
update_sync_refresh_synclists - Removed
update_updater_apply - Removed
update_updater_check - Removed
update_user_view_state_sync
1 tool update
v1.1.0- Added
get_result_page
405 tool updates
v1.0.0- First observed
create_actions_add_to_watchlist - First observed
create_actions_remove_from_watchlist - First observed
create_auth_jwk - First observed
create_auth_token - First observed
create_butler - First observed
create_butler_by_butler_task - First observed
create_by_transcode_type_transcode_universal_fallback - First observed
create_download_queue - First observed
create_download_queue_by_queue_id_add - First observed
create_download_queue_by_queue_id_items_by_item_id_restart - First observed
create_home_users - First observed
create_home_users_by_id_switch - First observed
create_hubs_sections_by_section_id_manage - First observed
create_library_collections - First observed
create_library_file - First observed
create_library_metadata_by_id_arts - First observed
create_library_metadata_by_id_posters - First observed
create_library_metadata_by_ids_by_element - First observed
create_library_metadata_by_ids_extras - First observed
create_library_metadata_by_ids_marker - First observed
create_library_optimize - First observed
create_library_sections_all - First observed
create_library_sections_by_section_id_empty_trash - First observed
create_library_sections_by_section_id_optimize - First observed
create_library_sections_by_section_id_refresh - First observed
create_library_sections_refresh - First observed
create_livetv_dvrs - First observed
create_livetv_dvrs_by_dvr_id_channels_by_channel_tune - First observed
create_livetv_dvrs_by_dvr_id_reload_guide - First observed
create_log - First observed
create_log_networked - First observed
create_media_grabbers_devices - First observed
create_media_grabbers_devices_by_device_id_scan - First observed
create_media_providers - First observed
create_media_providers_refresh - First observed
create_media_subscriptions - First observed
create_media_subscriptions_process - First observed
create_myplex_claim - First observed
create_pins - First observed
create_pins_xml - First observed
create_play_queues - First observed
create_player_playback_audio_stream - First observed
create_player_playback_mute - First observed
create_player_playback_pause - First observed
create_player_playback_play - First observed
create_player_playback_play_media - First observed
create_player_playback_refresh_play_queue - First observed
create_player_playback_seek - First observed
create_player_playback_set_parameters - First observed
create_player_playback_set_rating - First observed
create_player_playback_set_state - First observed
create_player_playback_set_streams - First observed
create_player_playback_set_text_stream - First observed
create_player_playback_set_view_offset - First observed
create_player_playback_skip_by - First observed
create_player_playback_skip_to - First observed
create_player_playback_step_back - First observed
create_player_playback_step_forward - First observed
create_player_playback_stop - First observed
create_player_playback_subtitle_stream - First observed
create_player_playback_unmute - First observed
create_player_playback_video_stream - First observed
create_player_playback_volume - First observed
create_playlists - First observed
create_playlists_upload - First observed
create_security_token - First observed
create_servers_by_machine_id_shared_servers - First observed
create_shared_servers - First observed
create_status_sessions_terminate - First observed
create_timeline - First observed
create_users_password - First observed
create_users_signin - First observed
create_v2_user_webhooks - First observed
create_webhooks - First observed
delete_activities_by_activity_id - First observed
delete_butler - First observed
delete_butler_by_butler_task - First observed
delete_download_queue_by_queue_id_items_by_item_id - First observed
delete_home_users_by_user_id - First observed
delete_hubs_sections_by_section_id_manage - First observed
delete_hubs_sections_by_section_id_manage_by_identifier - First observed
delete_library_caches - First observed
delete_library_metadata_by_ids - First observed
delete_library_metadata_by_ids_marker_by_marker - First observed
delete_library_metadata_by_ids_media_by_media_item - First observed
delete_library_sections_all_refresh - First observed
delete_library_sections_by_section_id - First observed
delete_library_sections_by_section_id_collection_by_collection_id - First observed
delete_library_sections_by_section_id_indexes - First observed
delete_library_sections_by_section_id_intros - First observed
delete_library_sections_by_section_id_refresh - First observed
delete_library_streams_by_stream_id_ext - First observed
delete_livetv_dvrs_by_dvr_id - First observed
delete_livetv_dvrs_by_dvr_id_devices_by_device_id - First observed
delete_livetv_dvrs_by_dvr_id_lineups - First observed
delete_livetv_dvrs_by_dvr_id_reload_guide - First observed
delete_livetv_sessions_by_session_id - First observed
delete_media_grabbers_devices_by_device_id - First observed
delete_media_grabbers_devices_by_device_id_scan - First observed
delete_media_grabbers_operations_by_operation_id - First observed
delete_media_providers_by_provider - First observed
delete_media_subscriptions_by_subscription_id - First observed
delete_play_queues_by_play_queue_id_items - First observed
delete_play_queues_by_play_queue_id_items_by_play_queue_item_id - First observed
delete_playlists - First observed
delete_playlists_by_playlist_id - First observed
delete_playlists_by_playlist_id_items - First observed
delete_playlists_by_playlist_id_items_by_generator_id - First observed
delete_sharings_by_user_id - First observed
delete_status_sessions_history_by_history_id - First observed
delete_users_signout - First observed
get_by_transcode_type_transcode_universal_decision - First observed
get_by_transcode_type_transcode_universal_session_by_session_id_by_segment_id_m4s - First observed
get_by_transcode_type_transcode_universal_session_by_session_id_by_segment_id_ts - First observed
get_by_transcode_type_transcode_universal_start_extension - First observed
get_by_transcode_type_transcode_universal_subtitles - First observed
get_download_queue_by_queue_id - First observed
get_download_queue_by_queue_id_item_by_item_id_decision - First observed
get_download_queue_by_queue_id_item_by_item_id_media - First observed
get_download_queue_by_queue_id_items - First observed
get_download_queue_by_queue_id_items_by_item_id - First observed
get_downloads_by_channel_json - First observed
get_hubs_metadata_by_metadata_id - First observed
get_hubs_metadata_by_metadata_id_postplay - First observed
get_hubs_metadata_by_metadata_id_related - First observed
get_hubs_sections_by_section_id - First observed
get_hubs_sections_by_section_id_manage - First observed
get_library_collections_by_collection_id_composite_by_updated_at - First observed
get_library_collections_by_collection_id_items - First observed
get_library_media_by_media_id_chapter_images_by_chapter - First observed
get_library_metadata_augmentations_by_augmentation_id - First observed
get_library_metadata_by_id_children - First observed
get_library_metadata_by_id_compute_path - First observed
get_library_metadata_by_id_grandchildren - First observed
get_library_metadata_by_id_grandparent - First observed
get_library_metadata_by_id_nearest - First observed
get_library_metadata_by_id_on_deck - First observed
get_library_metadata_by_id_parent - First observed
get_library_metadata_by_id_reviews - First observed
get_library_metadata_by_ids - First observed
get_library_metadata_by_ids_all_leaves - First observed
get_library_metadata_by_ids_by_element_by_timestamp - First observed
get_library_metadata_by_ids_extras - First observed
get_library_metadata_by_ids_file - First observed
get_library_metadata_by_ids_related - First observed
get_library_metadata_by_ids_similar - First observed
get_library_metadata_by_ids_subtitles - First observed
get_library_metadata_by_ids_tree - First observed
get_library_metadata_by_ids_users_top - First observed
get_library_parts_by_part_id_by_changestamp_by_filename - First observed
get_library_parts_by_part_id_indexes_by_index - First observed
get_library_parts_by_part_id_indexes_by_index_by_offset - First observed
get_library_people_by_person_id - First observed
get_library_people_by_person_id_media - First observed
get_library_sections_by_section_id - First observed
get_library_sections_by_section_id_agents - First observed
get_library_sections_by_section_id_albums - First observed
get_library_sections_by_section_id_all - First observed
get_library_sections_by_section_id_all_leaves - First observed
get_library_sections_by_section_id_artists - First observed
get_library_sections_by_section_id_arts - First observed
get_library_sections_by_section_id_autocomplete - First observed
get_library_sections_by_section_id_by_content_rating - First observed
get_library_sections_by_section_id_by_decade - First observed
get_library_sections_by_section_id_by_folder - First observed
get_library_sections_by_section_id_by_resolution - First observed
get_library_sections_by_section_id_by_year - First observed
get_library_sections_by_section_id_categories - First observed
get_library_sections_by_section_id_clips - First observed
get_library_sections_by_section_id_cluster - First observed
get_library_sections_by_section_id_collections - First observed
get_library_sections_by_section_id_common - First observed
get_library_sections_by_section_id_composite_by_updated_at - First observed
get_library_sections_by_section_id_compute_path - First observed
get_library_sections_by_section_id_edit - First observed
get_library_sections_by_section_id_empty_trash - First observed
get_library_sections_by_section_id_episodes - First observed
get_library_sections_by_section_id_filters - First observed
get_library_sections_by_section_id_first_characters - First observed
get_library_sections_by_section_id_hubs - First observed
get_library_sections_by_section_id_label - First observed
get_library_sections_by_section_id_location - First observed
get_library_sections_by_section_id_match - First observed
get_library_sections_by_section_id_moment - First observed
get_library_sections_by_section_id_movies - First observed
get_library_sections_by_section_id_nearest - First observed
get_library_sections_by_section_id_newest - First observed
get_library_sections_by_section_id_on_deck - First observed
get_library_sections_by_section_id_optimize - First observed
get_library_sections_by_section_id_photos - First observed
get_library_sections_by_section_id_playlists - First observed
get_library_sections_by_section_id_prefs - First observed
get_library_sections_by_section_id_recently_added - First observed
get_library_sections_by_section_id_refresh - First observed
get_library_sections_by_section_id_search - First observed
get_library_sections_by_section_id_settings - First observed
get_library_sections_by_section_id_shows - First observed
get_library_sections_by_section_id_sorts - First observed
get_library_sections_by_section_id_tags - First observed
get_library_sections_by_section_id_timeline - First observed
get_library_sections_by_section_id_unmatch - First observed
get_library_sections_by_section_id_unwatched - First observed
get_library_streams_by_stream_id_ext - First observed
get_library_streams_by_stream_id_levels - First observed
get_library_streams_by_stream_id_loudness - First observed
get_livetv_dvrs_by_dvr_id - First observed
get_livetv_dvrs_by_dvr_id_channels - First observed
get_livetv_dvrs_by_dvr_id_guide - First observed
get_livetv_dvrs_by_dvr_id_recordings - First observed
get_livetv_epg_countries_by_country_by_epg_id_lineups - First observed
get_livetv_epg_countries_by_country_by_epg_id_regions - First observed
get_livetv_epg_countries_by_country_by_epg_id_regions_by_region_lineups - First observed
get_livetv_sessions_by_session_id - First observed
get_livetv_sessions_by_session_id_by_consumer_id_by_segment_id - First observed
get_livetv_sessions_by_session_id_by_consumer_id_index_m3u8 - First observed
get_media_grabbers_devices_by_device_id - First observed
get_media_grabbers_devices_by_device_id_channels - First observed
get_media_grabbers_devices_by_device_id_thumb_by_version - First observed
get_media_subscriptions_by_subscription_id - First observed
get_pins_by_pin_id - First observed
get_play_queues_by_play_queue_id - First observed
get_playlists_by_playlist_id - First observed
get_playlists_by_playlist_id_generators - First observed
get_playlists_by_playlist_id_items - First observed
get_playlists_by_playlist_id_items_by_generator_id - First observed
get_playlists_by_playlist_id_items_by_generator_id_items - First observed
get_servers_by_machine_id - First observed
get_services_browse_by_base64path - First observed
get_status_sessions_history_by_history_id - First observed
get_sync_items_by_sync_id - First observed
get_system_agents_by_agent_id - First observed
get_user_by_uuid_settings_opt_outs - First observed
list_accounts - First observed
list_activities - First observed
list_auth_keys - First observed
list_auth_nonce - First observed
list_butler - First observed
list_claim_token_json - First observed
list_clients - First observed
list_cloud_server - First observed
list_devices - First observed
list_diagnostics - First observed
list_diagnostics_databases - First observed
list_diagnostics_logs - First observed
list_eventsource_notifications - First observed
list_features - First observed
list_friends - First observed
list_geoip - First observed
list_home - First observed
list_home_users - First observed
list_hubs - First observed
list_hubs_continue_watching - First observed
list_hubs_continue_watching_items - First observed
list_hubs_home_recently_added - First observed
list_hubs_items - First observed
list_hubs_promoted - First observed
list_hubs_search - First observed
list_hubs_search_voice - First observed
list_identity - First observed
list_ip - First observed
list_library - First observed
list_library_all - First observed
list_library_matches - First observed
list_library_optimize - First observed
list_library_random_artwork - First observed
list_library_recently_added - First observed
list_library_search - First observed
list_library_sections - First observed
list_library_sections_all - First observed
list_library_sections_prefs - First observed
list_library_sections_watchlist_all - First observed
list_library_tags - First observed
list_livetv_dvrs - First observed
list_livetv_epg_channelmap - First observed
list_livetv_epg_channels - First observed
list_livetv_epg_countries - First observed
list_livetv_epg_guide - First observed
list_livetv_epg_languages - First observed
list_livetv_epg_lineup - First observed
list_livetv_epg_lineupchannels - First observed
list_livetv_epg_search - First observed
list_livetv_recordings - First observed
list_livetv_sessions - First observed
list_media_grabbers - First observed
list_media_grabbers_devices - First observed
list_media_grabbers_devices_discover - First observed
list_media_providers - First observed
list_media_subscriptions - First observed
list_media_subscriptions_scheduled - First observed
list_media_subscriptions_template - First observed
list_music_transcode - First observed
list_myplex_account - First observed
list_photo_transcode - First observed
list_ping - First observed
list_play_queues_1 - First observed
list_player_resources - First observed
list_player_timeline_poll - First observed
list_playlists - First observed
list_prefs - First observed
list_prefs_get - First observed
list_progress - First observed
list_resources - First observed
list_resources_2 - First observed
list_root - First observed
list_security_resources - First observed
list_server - First observed
list_server_access_tokens - First observed
list_server_users_features - First observed
list_servers - First observed
list_services_browse - First observed
list_services_ultrablur_colors - First observed
list_services_ultrablur_image - First observed
list_statistics_bandwidth - First observed
list_statistics_resources - First observed
list_status_sessions - First observed
list_status_sessions_background - First observed
list_status_sessions_history_all - First observed
list_sync - First observed
list_sync_items - First observed
list_sync_queue - First observed
list_sync_transcode_queue - First observed
list_system_agents - First observed
list_system_settings - First observed
list_system_updates - First observed
list_transcode_sessions - First observed
list_updater_status - First observed
list_user - First observed
list_users - First observed
list_users_2 - First observed
list_users_account - First observed
list_users_account_json - First observed
list_v2_user_webhooks - First observed
list_webhooks - First observed
list_websocket_notifications - First observed
list_websockets_notifications - First observed
patch_livetv_dvrs_by_dvr_id - First observed
update_actions_remove_from_continue_watching - First observed
update_home_users_by_user_id - First observed
update_home_users_restricted_by_user_id - First observed
update_hubs_sections_by_section_id_manage_by_identifier - First observed
update_hubs_sections_by_section_id_manage_move - First observed
update_invites_requests_by_invite_id - First observed
update_library_clean_bundles - First observed
update_library_collections_by_collection_id_items - First observed
update_library_collections_by_collection_id_items_by_item_id - First observed
update_library_collections_by_collection_id_items_by_item_id_move - First observed
update_library_metadata_by_ids - First observed
update_library_metadata_by_ids_addetect - First observed
update_library_metadata_by_ids_analyze - First observed
update_library_metadata_by_ids_by_element - First observed
update_library_metadata_by_ids_chapter_thumbs - First observed
update_library_metadata_by_ids_credits - First observed
update_library_metadata_by_ids_index - First observed
update_library_metadata_by_ids_intro - First observed
update_library_metadata_by_ids_marker_by_marker - First observed
update_library_metadata_by_ids_match - First observed
update_library_metadata_by_ids_matches - First observed
update_library_metadata_by_ids_merge - First observed
update_library_metadata_by_ids_prefs - First observed
update_library_metadata_by_ids_refresh - First observed
update_library_metadata_by_ids_split - First observed
update_library_metadata_by_ids_unmatch - First observed
update_library_metadata_by_ids_voice_activity - First observed
update_library_optimize - First observed
update_library_parts_by_part_id - First observed
update_library_sections_by_section_id - First observed
update_library_sections_by_section_id_all - First observed
update_library_sections_by_section_id_analyze - First observed
update_library_sections_by_section_id_edit - First observed
update_library_sections_by_section_id_empty_trash - First observed
update_library_sections_by_section_id_move - First observed
update_library_sections_by_section_id_prefs - First observed
update_library_streams_by_stream_id_ext - First observed
update_livetv_dvrs_by_dvr_id - First observed
update_livetv_dvrs_by_dvr_id_devices_by_device_id - First observed
update_livetv_dvrs_by_dvr_id_lineups - First observed
update_livetv_dvrs_by_dvr_id_prefs - First observed
update_log - First observed
update_media_grabbers_devices_by_device_id - First observed
update_media_grabbers_devices_by_device_id_channelmap - First observed
update_media_grabbers_devices_by_device_id_prefs - First observed
update_media_subscriptions_by_subscription_id - First observed
update_media_subscriptions_by_subscription_id_move - First observed
update_myplex_refresh_reachability - First observed
update_pins_link - First observed
update_play_queues_by_play_queue_id - First observed
update_play_queues_by_play_queue_id_items_by_play_queue_item_id_move - First observed
update_play_queues_by_play_queue_id_reset - First observed
update_play_queues_by_play_queue_id_shuffle - First observed
update_play_queues_by_play_queue_id_unshuffle - First observed
update_playlists_by_playlist_id - First observed
update_playlists_by_playlist_id_items - First observed
update_playlists_by_playlist_id_items_by_generator_id - First observed
update_playlists_by_playlist_id_items_by_generator_id_by_metadata_id_by_action - First observed
update_playlists_by_playlist_id_items_by_playlist_item_id_move - First observed
update_prefs - First observed
update_rate - First observed
update_scrobble - First observed
update_sharings_by_user_id - First observed
update_sync_refresh_content - First observed
update_sync_refresh_synclists - First observed
update_unscrobble - First observed
update_updater_apply - First observed
update_updater_check - First observed
update_user_view_state_sync
TDQS
Scored across 28 tools
Most tools map to distinct Plex endpoints (sections, metadata, playlists, sessions, scrobble/rate). Some blurring exists: get_library_metadata_by_id_children vs get_library_metadata_by_ids, get_library_sections_by_section_id_all vs list_library_sections, and the find_operation/run_operation pair can do anything any other tool does, so overlap is inherent.
Names follow a fairly predictable verb_path snake_case pattern (list_/get_/create_/update_ + route segments). Minor deviations: singular 'by_id' vs plural 'by_ids', get vs list used for analogous reads, and awkward appends like 'children' or '_all' at the end.
28 tools is on the heavy side for curation, and because find_operation/run_operation already expose all 405 API operations, several of the explicit tools are effectively redundant duplicates of the escape hatch. The set is usable but not tightly scoped.
The surface covers library browsing, playlists, sessions/history, search, scrobble/rate, watchlist and refresh, and run_operation makes the remaining API operations reachable, so no hard dead ends. Direct CRUD is patchy, though: playlist deletion, playlist item removal, and library section mutation require going through run_operation.
Maintenance
Related MCP Connectors
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
One workspace of tools for Claude and ChatGPT: connect 600+ apps, generate media, build tools.
Connect Claude to Fathom meeting recordings, transcripts, and summaries
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceLets AI assistants browse your libraries, search media, get viewing recommendations, check what's on deck, and more — all read-only against your local Plex instance.128 npm1MIT
- FlicenseNot gradedqualityDmaintenanceEnables full management of a Plex Media Server via Claude, including browsing libraries, fixing metadata, managing collections, and more.-
- AlicenseNot gradedqualityCmaintenanceExposes every documented Plex Media Server API operation as a callable tool, plus curated tools for library browsing, media search and editing, playlists, collections, live sessions, user analytics, recommendations, watchlists, playback control and subtitles. Enables clients to query, automate and control a Plex server, discover owned servers and control playback clients through natural language.128 npmMIT
- AlicenseCqualityAmaintenanceEnables full control of Sonarr from Claude.ai and Claude Code by exposing all 234 v3 API operations as tools for managing media libraries.23530 npmMIT