Skip to main content
Glama

Plex MCP server

Version Python Plex Coverage

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.

WARNING

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

niavasha/plex-mcp-server

~40

10 %

tdabasinskas/plex-mcp-server

libraries, playlists, clients

partial

eddmann/plex-mcp

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.py

A 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

list_*

Read a collection

list_library_sections, list_status_sessions

get_*_by_id

Read one record

get_library_metadata_by_rating_key

create_*

POST

create_playlists, create_library_sections

update_*

PUT

update_playlists_by_playlist_id

delete_*

DELETE

delete_playlists_by_playlist_id

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 (CORE in src/plex_mcp/catalog.py)

  • find_operation, which searches every operation by words and returns its route, summary and arguments

  • run_operation, which runs any operation by name

  • get_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

plex.tv/api/v2

27

plex.tv/api

11

plex.tv

6

discover.provider.plex.tv

4

clients.plex.tv/api/v2

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 below

Find 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-mcp

Notes

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

plex-mcp

8590

The server. No login of its own, never exposed

nginx

8591

Front door, behind a Cloudflare Tunnel

auth-server.js

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/env

Copy systemd/*.service into /etc/systemd/system/, replacing YOUR_USER and the ISSUER hostname, then:

sudo systemctl enable --now plex-mcp plex-mcp-auth

Point 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 tools
create_actions_add_to_watchlistB
Idempotent

Add to Watchlist.

POST /actions/addToWatchlist

Args: uri: The URI of the item to add or remove

ParametersJSON Schema
NameRequiredDescriptionDefault
uriNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It 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.

Purpose4/5

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.

Usage Guidelines2/5

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_watchlistC
Idempotent

Remove from Watchlist.

POST /actions/removeFromWatchlist

Args: uri: The URI of the item to add or remove

ParametersJSON Schema
NameRequiredDescriptionDefault
uriNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_refreshB
Idempotent

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
forceNo
section_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. 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_playlistsB
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriNo
play_queue_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_operationA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_itemsB
Read-onlyIdempotent

Get items in a collection.

GET /library/collections/{collectionId}/items

Args: collection_id: The collection id

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate 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.

Purpose4/5

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.

Usage Guidelines2/5

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_childrenC
Read-onlyIdempotent

Get Metadata Children.

GET /library/metadata/{id}/children

Args: id: The unique identifier of the item

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_idsA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes
check_filesNo
skip_refreshNo
augment_countNo
include_guidsNo
exclude_fieldsNo
include_extrasNo
include_markersNo
include_on_deckNo
include_relatedNo
include_reviewsNo
exclude_elementsNo
include_chaptersNo
include_stationsNo
async_check_filesNo
async_augment_metadataNo
async_refresh_analysisNo
include_external_mediaNo
include_popular_leavesNo
check_file_availabilityNo
async_refresh_local_media_agentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_similarB
Read-onlyIdempotent

Get similar items.

GET /library/metadata/{ids}/similar

Args: ids: Comma-separated list of IDs

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_allB
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNo
genreNo
studioNo
filtersNo
nocacheNo
unwatchedNo
resolutionNo
section_idYes
check_filesNo
include_artNo
include_metaNo
skip_refreshNo
include_guidsNo
include_themeNo
include_thumbNo
content_ratingNo
exclude_fieldsNo
include_bannerNo
include_extrasNo
include_fieldsNo
first_characterNo
include_creditsNo
include_on_deckNo
include_relatedNo
include_reviewsNo
exclude_elementsNo
include_advancedNo
include_chaptersNo
include_concertsNo
include_stationsNo
include_bandwidthsNo
include_collectionsNo
include_preferencesNo
include_external_idsNo
async_augment_metadataNo
include_external_mediaNo
include_loudness_rampsNo
include_popular_leavesNo
async_refresh_local_media_agentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters4/5

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

Schema description coverage is 0%, so the description 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.

Purpose4/5

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.

Usage Guidelines2/5

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_collectionsC
Read-onlyIdempotent

Get collections in a section.

GET /library/sections/{sectionId}/collections

Args: section_id: Section identifier

ParametersJSON Schema
NameRequiredDescriptionDefault
section_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It 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.

Purpose4/5

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.

Usage Guidelines2/5

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_unwatchedB
Read-onlyIdempotent

Get Unwatched for Section.

GET /library/sections/{sectionId}/unwatched

Args: section_id: The unique identifier of the library section

ParametersJSON Schema
NameRequiredDescriptionDefault
section_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_itemsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
playlist_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema description coverage is 0%, so the description 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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus 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_pageA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
limitNo
matchNo
fieldsNo
offsetNo
result_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_itemsB
Read-onlyIdempotent

Get Continue Watching Items.

GET /hubs/continueWatching/items

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_identityB
Read-onlyIdempotent

Get PMS identity.

GET /identity

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_addedA
Read-onlyIdempotent

Get Global Recently Added.

GET /library/recentlyAdded

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_sectionsB
Read-onlyIdempotent

Get Library Sections (Fallback).

GET /library/sections/

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_allB
Read-onlyIdempotent

Get Watchlist.

GET /library/sections/watchlist/all

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_playlistsC
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
playlist_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must 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.

Purpose5/5

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.

Usage Guidelines2/5

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_sessionsB
Read-onlyIdempotent

List Sessions.

GET /status/sessions

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_allA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
device_idNo
viewed_atNo
account_idNo
exclude_fieldsNo
include_fieldsNo
viewed_at_queryNo
exclude_elementsNo
include_elementsNo
metadata_item_idNo
viewed_at_query_2No
library_section_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives 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_operationA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
argumentsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema description coverage is 0%, so the description must 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.

Purpose4/5

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.

Usage Guidelines4/5

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_itemsC
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriNo
playlist_idYes
play_queue_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, 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.

Purpose4/5

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.

Usage Guidelines2/5

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_rateA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNo
ratingNo
rated_atNo
identifierNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_scrobbleB
Idempotent

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>.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNo
uriNo
identifierNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives 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_unscrobbleB
Idempotent

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>.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNo
uriNo
identifierNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema description coverage is 0%, so the description 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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 382 tool updatesv1.2.0
    • Removedcreate_auth_jwk
    • Removedcreate_auth_token
    • Removedcreate_butler
    • Removedcreate_butler_by_butler_task
    • Removedcreate_by_transcode_type_transcode_universal_fallback
    • Removedcreate_download_queue
    • Removedcreate_download_queue_by_queue_id_add
    • Removedcreate_download_queue_by_queue_id_items_by_item_id_restart
    • Removedcreate_home_users
    • Removedcreate_home_users_by_id_switch
    • Removedcreate_hubs_sections_by_section_id_manage
    • Removedcreate_library_collections
    • Removedcreate_library_file
    • Removedcreate_library_metadata_by_id_arts
    • Removedcreate_library_metadata_by_id_posters
    • Removedcreate_library_metadata_by_ids_by_element
    • Removedcreate_library_metadata_by_ids_extras
    • Removedcreate_library_metadata_by_ids_marker
    • Removedcreate_library_optimize
    • Removedcreate_library_sections_all
    • Removedcreate_library_sections_by_section_id_empty_trash
    • Removedcreate_library_sections_by_section_id_optimize
    • Removedcreate_library_sections_refresh
    • Removedcreate_livetv_dvrs
    • Removedcreate_livetv_dvrs_by_dvr_id_channels_by_channel_tune
    • Removedcreate_livetv_dvrs_by_dvr_id_reload_guide
    • Removedcreate_log
    • Removedcreate_log_networked
    • Removedcreate_media_grabbers_devices
    • Removedcreate_media_grabbers_devices_by_device_id_scan
    • Removedcreate_media_providers
    • Removedcreate_media_providers_refresh
    • Removedcreate_media_subscriptions
    • Removedcreate_media_subscriptions_process
    • Removedcreate_myplex_claim
    • Removedcreate_pins
    • Removedcreate_pins_xml
    • Removedcreate_play_queues
    • Removedcreate_player_playback_audio_stream
    • Removedcreate_player_playback_mute
    • Removedcreate_player_playback_pause
    • Removedcreate_player_playback_play
    • Removedcreate_player_playback_play_media
    • Removedcreate_player_playback_refresh_play_queue
    • Removedcreate_player_playback_seek
    • Removedcreate_player_playback_set_parameters
    • Removedcreate_player_playback_set_rating
    • Removedcreate_player_playback_set_state
    • Removedcreate_player_playback_set_streams
    • Removedcreate_player_playback_set_text_stream
    • Removedcreate_player_playback_set_view_offset
    • Removedcreate_player_playback_skip_by
    • Removedcreate_player_playback_skip_to
    • Removedcreate_player_playback_step_back
    • Removedcreate_player_playback_step_forward
    • Removedcreate_player_playback_stop
    • Removedcreate_player_playback_subtitle_stream
    • Removedcreate_player_playback_unmute
    • Removedcreate_player_playback_video_stream
    • Removedcreate_player_playback_volume
    • Removedcreate_playlists_upload
    • Removedcreate_security_token
    • Removedcreate_servers_by_machine_id_shared_servers
    • Removedcreate_shared_servers
    • Removedcreate_status_sessions_terminate
    • Removedcreate_timeline
    • Removedcreate_users_password
    • Removedcreate_users_signin
    • Removedcreate_v2_user_webhooks
    • Removedcreate_webhooks
    • Removeddelete_activities_by_activity_id
    • Removeddelete_butler
    • Removeddelete_butler_by_butler_task
    • Removeddelete_download_queue_by_queue_id_items_by_item_id
    • Removeddelete_home_users_by_user_id
    • Removeddelete_hubs_sections_by_section_id_manage
    • Removeddelete_hubs_sections_by_section_id_manage_by_identifier
    • Removeddelete_library_caches
    • Removeddelete_library_metadata_by_ids
    • Removeddelete_library_metadata_by_ids_marker_by_marker
    • Removeddelete_library_metadata_by_ids_media_by_media_item
    • Removeddelete_library_sections_all_refresh
    • Removeddelete_library_sections_by_section_id
    • Removeddelete_library_sections_by_section_id_collection_by_collection_id
    • Removeddelete_library_sections_by_section_id_indexes
    • Removeddelete_library_sections_by_section_id_intros
    • Removeddelete_library_sections_by_section_id_refresh
    • Removeddelete_library_streams_by_stream_id_ext
    • Removeddelete_livetv_dvrs_by_dvr_id
    • Removeddelete_livetv_dvrs_by_dvr_id_devices_by_device_id
    • Removeddelete_livetv_dvrs_by_dvr_id_lineups
    • Removeddelete_livetv_dvrs_by_dvr_id_reload_guide
    • Removeddelete_livetv_sessions_by_session_id
    • Removeddelete_media_grabbers_devices_by_device_id
    • Removeddelete_media_grabbers_devices_by_device_id_scan
    • Removeddelete_media_grabbers_operations_by_operation_id
    • Removeddelete_media_providers_by_provider
    • Removeddelete_media_subscriptions_by_subscription_id
    • Removeddelete_play_queues_by_play_queue_id_items
    • Removeddelete_play_queues_by_play_queue_id_items_by_play_queue_item_id
    • Removeddelete_playlists
    • Removeddelete_playlists_by_playlist_id
    • Removeddelete_playlists_by_playlist_id_items
    • Removeddelete_playlists_by_playlist_id_items_by_generator_id
    • Removeddelete_sharings_by_user_id
    • Removeddelete_status_sessions_history_by_history_id
    • Removeddelete_users_signout
    • Addedfind_operation
    • Removedget_by_transcode_type_transcode_universal_decision
    • Removedget_by_transcode_type_transcode_universal_session_by_session_id_by_segment_id_m4s
    • Removedget_by_transcode_type_transcode_universal_session_by_session_id_by_segment_id_ts
    • Removedget_by_transcode_type_transcode_universal_start_extension
    • Removedget_by_transcode_type_transcode_universal_subtitles
    • Removedget_download_queue_by_queue_id
    • Removedget_download_queue_by_queue_id_item_by_item_id_decision
    • Removedget_download_queue_by_queue_id_item_by_item_id_media
    • Removedget_download_queue_by_queue_id_items
    • Removedget_download_queue_by_queue_id_items_by_item_id
    • Removedget_downloads_by_channel_json
    • Removedget_hubs_metadata_by_metadata_id
    • Removedget_hubs_metadata_by_metadata_id_postplay
    • Removedget_hubs_metadata_by_metadata_id_related
    • Removedget_hubs_sections_by_section_id
    • Removedget_hubs_sections_by_section_id_manage
    • Removedget_library_collections_by_collection_id_composite_by_updated_at
    • Removedget_library_media_by_media_id_chapter_images_by_chapter
    • Removedget_library_metadata_augmentations_by_augmentation_id
    • Removedget_library_metadata_by_id_compute_path
    • Removedget_library_metadata_by_id_grandchildren
    • Removedget_library_metadata_by_id_grandparent
    • Removedget_library_metadata_by_id_nearest
    • Removedget_library_metadata_by_id_on_deck
    • Removedget_library_metadata_by_id_parent
    • Removedget_library_metadata_by_id_reviews
    • Removedget_library_metadata_by_ids_all_leaves
    • Removedget_library_metadata_by_ids_by_element_by_timestamp
    • Removedget_library_metadata_by_ids_extras
    • Removedget_library_metadata_by_ids_file
    • Removedget_library_metadata_by_ids_related
    • Removedget_library_metadata_by_ids_subtitles
    • Removedget_library_metadata_by_ids_tree
    • Removedget_library_metadata_by_ids_users_top
    • Removedget_library_parts_by_part_id_by_changestamp_by_filename
    • Removedget_library_parts_by_part_id_indexes_by_index
    • Removedget_library_parts_by_part_id_indexes_by_index_by_offset
    • Removedget_library_people_by_person_id
    • Removedget_library_people_by_person_id_media
    • Removedget_library_sections_by_section_id
    • Removedget_library_sections_by_section_id_agents
    • Removedget_library_sections_by_section_id_albums
    • Removedget_library_sections_by_section_id_all_leaves
    • Removedget_library_sections_by_section_id_artists
    • Removedget_library_sections_by_section_id_arts
    • Removedget_library_sections_by_section_id_autocomplete
    • Removedget_library_sections_by_section_id_by_content_rating
    • Removedget_library_sections_by_section_id_by_decade
    • Removedget_library_sections_by_section_id_by_folder
    • Removedget_library_sections_by_section_id_by_resolution
    • Removedget_library_sections_by_section_id_by_year
    • Removedget_library_sections_by_section_id_categories
    • Removedget_library_sections_by_section_id_clips
    • Removedget_library_sections_by_section_id_cluster
    • Removedget_library_sections_by_section_id_common
    • Removedget_library_sections_by_section_id_composite_by_updated_at
    • Removedget_library_sections_by_section_id_compute_path
    • Removedget_library_sections_by_section_id_edit
    • Removedget_library_sections_by_section_id_empty_trash
    • Removedget_library_sections_by_section_id_episodes
    • Removedget_library_sections_by_section_id_filters
    • Removedget_library_sections_by_section_id_first_characters
    • Removedget_library_sections_by_section_id_hubs
    • Removedget_library_sections_by_section_id_label
    • Removedget_library_sections_by_section_id_location
    • Removedget_library_sections_by_section_id_match
    • Removedget_library_sections_by_section_id_moment
    • Removedget_library_sections_by_section_id_movies
    • Removedget_library_sections_by_section_id_nearest
    • Removedget_library_sections_by_section_id_newest
    • Removedget_library_sections_by_section_id_on_deck
    • Removedget_library_sections_by_section_id_optimize
    • Removedget_library_sections_by_section_id_photos
    • Removedget_library_sections_by_section_id_playlists
    • Removedget_library_sections_by_section_id_prefs
    • Removedget_library_sections_by_section_id_recently_added
    • Removedget_library_sections_by_section_id_refresh
    • Removedget_library_sections_by_section_id_search
    • Removedget_library_sections_by_section_id_settings
    • Removedget_library_sections_by_section_id_shows
    • Removedget_library_sections_by_section_id_sorts
    • Removedget_library_sections_by_section_id_tags
    • Removedget_library_sections_by_section_id_timeline
    • Removedget_library_sections_by_section_id_unmatch
    • Removedget_library_streams_by_stream_id_ext
    • Removedget_library_streams_by_stream_id_levels
    • Removedget_library_streams_by_stream_id_loudness
    • Removedget_livetv_dvrs_by_dvr_id
    • Removedget_livetv_dvrs_by_dvr_id_channels
    • Removedget_livetv_dvrs_by_dvr_id_guide
    • Removedget_livetv_dvrs_by_dvr_id_recordings
    • Removedget_livetv_epg_countries_by_country_by_epg_id_lineups
    • Removedget_livetv_epg_countries_by_country_by_epg_id_regions
    • Removedget_livetv_epg_countries_by_country_by_epg_id_regions_by_region_lineups
    • Removedget_livetv_sessions_by_session_id
    • Removedget_livetv_sessions_by_session_id_by_consumer_id_by_segment_id
    • Removedget_livetv_sessions_by_session_id_by_consumer_id_index_m3u8
    • Removedget_media_grabbers_devices_by_device_id
    • Removedget_media_grabbers_devices_by_device_id_channels
    • Removedget_media_grabbers_devices_by_device_id_thumb_by_version
    • Removedget_media_subscriptions_by_subscription_id
    • Removedget_pins_by_pin_id
    • Removedget_play_queues_by_play_queue_id
    • Removedget_playlists_by_playlist_id
    • Removedget_playlists_by_playlist_id_generators
    • Removedget_playlists_by_playlist_id_items_by_generator_id
    • Removedget_playlists_by_playlist_id_items_by_generator_id_items
    • Removedget_servers_by_machine_id
    • Removedget_services_browse_by_base64path
    • Removedget_status_sessions_history_by_history_id
    • Removedget_sync_items_by_sync_id
    • Removedget_system_agents_by_agent_id
    • Removedget_user_by_uuid_settings_opt_outs
    • Removedlist_accounts
    • Removedlist_activities
    • Removedlist_auth_keys
    • Removedlist_auth_nonce
    • Removedlist_butler
    • Removedlist_claim_token_json
    • Removedlist_clients
    • Removedlist_cloud_server
    • Removedlist_devices
    • Removedlist_diagnostics
    • Removedlist_diagnostics_databases
    • Removedlist_diagnostics_logs
    • Removedlist_eventsource_notifications
    • Removedlist_features
    • Removedlist_friends
    • Removedlist_geoip
    • Removedlist_home
    • Removedlist_home_users
    • Removedlist_hubs
    • Removedlist_hubs_continue_watching
    • Removedlist_hubs_home_recently_added
    • Removedlist_hubs_items
    • Removedlist_hubs_promoted
    • Removedlist_hubs_search_voice
    • Removedlist_ip
    • Removedlist_library
    • Removedlist_library_all
    • Removedlist_library_matches
    • Removedlist_library_optimize
    • Removedlist_library_random_artwork
    • Removedlist_library_search
    • Removedlist_library_sections_all
    • Removedlist_library_sections_prefs
    • Removedlist_library_tags
    • Removedlist_livetv_dvrs
    • Removedlist_livetv_epg_channelmap
    • Removedlist_livetv_epg_channels
    • Removedlist_livetv_epg_countries
    • Removedlist_livetv_epg_guide
    • Removedlist_livetv_epg_languages
    • Removedlist_livetv_epg_lineup
    • Removedlist_livetv_epg_lineupchannels
    • Removedlist_livetv_epg_search
    • Removedlist_livetv_recordings
    • Removedlist_livetv_sessions
    • Removedlist_media_grabbers
    • Removedlist_media_grabbers_devices
    • Removedlist_media_grabbers_devices_discover
    • Removedlist_media_providers
    • Removedlist_media_subscriptions
    • Removedlist_media_subscriptions_scheduled
    • Removedlist_media_subscriptions_template
    • Removedlist_music_transcode
    • Removedlist_myplex_account
    • Removedlist_photo_transcode
    • Removedlist_ping
    • Removedlist_play_queues_1
    • Removedlist_player_resources
    • Removedlist_player_timeline_poll
    • Removedlist_prefs
    • Removedlist_prefs_get
    • Removedlist_progress
    • Removedlist_resources
    • Removedlist_resources_2
    • Removedlist_root
    • Removedlist_security_resources
    • Removedlist_server
    • Removedlist_server_access_tokens
    • Removedlist_server_users_features
    • Removedlist_servers
    • Removedlist_services_browse
    • Removedlist_services_ultrablur_colors
    • Removedlist_services_ultrablur_image
    • Removedlist_statistics_bandwidth
    • Removedlist_statistics_resources
    • Removedlist_status_sessions_background
    • Removedlist_sync
    • Removedlist_sync_items
    • Removedlist_sync_queue
    • Removedlist_sync_transcode_queue
    • Removedlist_system_agents
    • Removedlist_system_settings
    • Removedlist_system_updates
    • Removedlist_transcode_sessions
    • Removedlist_updater_status
    • Removedlist_user
    • Removedlist_users
    • Removedlist_users_2
    • Removedlist_users_account
    • Removedlist_users_account_json
    • Removedlist_v2_user_webhooks
    • Removedlist_webhooks
    • Removedlist_websocket_notifications
    • Removedlist_websockets_notifications
    • Removedpatch_livetv_dvrs_by_dvr_id
    • Addedrun_operation
    • Removedupdate_actions_remove_from_continue_watching
    • Removedupdate_home_users_by_user_id
    • Removedupdate_home_users_restricted_by_user_id
    • Removedupdate_hubs_sections_by_section_id_manage_by_identifier
    • Removedupdate_hubs_sections_by_section_id_manage_move
    • Removedupdate_invites_requests_by_invite_id
    • Removedupdate_library_clean_bundles
    • Removedupdate_library_collections_by_collection_id_items
    • Removedupdate_library_collections_by_collection_id_items_by_item_id
    • Removedupdate_library_collections_by_collection_id_items_by_item_id_move
    • Removedupdate_library_metadata_by_ids
    • Removedupdate_library_metadata_by_ids_addetect
    • Removedupdate_library_metadata_by_ids_analyze
    • Removedupdate_library_metadata_by_ids_by_element
    • Removedupdate_library_metadata_by_ids_chapter_thumbs
    • Removedupdate_library_metadata_by_ids_credits
    • Removedupdate_library_metadata_by_ids_index
    • Removedupdate_library_metadata_by_ids_intro
    • Removedupdate_library_metadata_by_ids_marker_by_marker
    • Removedupdate_library_metadata_by_ids_match
    • Removedupdate_library_metadata_by_ids_matches
    • Removedupdate_library_metadata_by_ids_merge
    • Removedupdate_library_metadata_by_ids_prefs
    • Removedupdate_library_metadata_by_ids_refresh
    • Removedupdate_library_metadata_by_ids_split
    • Removedupdate_library_metadata_by_ids_unmatch
    • Removedupdate_library_metadata_by_ids_voice_activity
    • Removedupdate_library_optimize
    • Removedupdate_library_parts_by_part_id
    • Removedupdate_library_sections_by_section_id
    • Removedupdate_library_sections_by_section_id_all
    • Removedupdate_library_sections_by_section_id_analyze
    • Removedupdate_library_sections_by_section_id_edit
    • Removedupdate_library_sections_by_section_id_empty_trash
    • Removedupdate_library_sections_by_section_id_move
    • Removedupdate_library_sections_by_section_id_prefs
    • Removedupdate_library_streams_by_stream_id_ext
    • Removedupdate_livetv_dvrs_by_dvr_id
    • Removedupdate_livetv_dvrs_by_dvr_id_devices_by_device_id
    • Removedupdate_livetv_dvrs_by_dvr_id_lineups
    • Removedupdate_livetv_dvrs_by_dvr_id_prefs
    • Removedupdate_log
    • Removedupdate_media_grabbers_devices_by_device_id
    • Removedupdate_media_grabbers_devices_by_device_id_channelmap
    • Removedupdate_media_grabbers_devices_by_device_id_prefs
    • Removedupdate_media_subscriptions_by_subscription_id
    • Removedupdate_media_subscriptions_by_subscription_id_move
    • Removedupdate_myplex_refresh_reachability
    • Removedupdate_pins_link
    • Removedupdate_play_queues_by_play_queue_id
    • Removedupdate_play_queues_by_play_queue_id_items_by_play_queue_item_id_move
    • Removedupdate_play_queues_by_play_queue_id_reset
    • Removedupdate_play_queues_by_play_queue_id_shuffle
    • Removedupdate_play_queues_by_play_queue_id_unshuffle
    • Removedupdate_playlists_by_playlist_id
    • Removedupdate_playlists_by_playlist_id_items_by_generator_id
    • Removedupdate_playlists_by_playlist_id_items_by_generator_id_by_metadata_id_by_action
    • Removedupdate_playlists_by_playlist_id_items_by_playlist_item_id_move
    • Removedupdate_prefs
    • Removedupdate_sharings_by_user_id
    • Removedupdate_sync_refresh_content
    • Removedupdate_sync_refresh_synclists
    • Removedupdate_updater_apply
    • Removedupdate_updater_check
    • Removedupdate_user_view_state_sync
  2. 1 tool updatev1.1.0
    • Addedget_result_page
  3. 405 tool updatesv1.0.0
    • First observedcreate_actions_add_to_watchlist
    • First observedcreate_actions_remove_from_watchlist
    • First observedcreate_auth_jwk
    • First observedcreate_auth_token
    • First observedcreate_butler
    • First observedcreate_butler_by_butler_task
    • First observedcreate_by_transcode_type_transcode_universal_fallback
    • First observedcreate_download_queue
    • First observedcreate_download_queue_by_queue_id_add
    • First observedcreate_download_queue_by_queue_id_items_by_item_id_restart
    • First observedcreate_home_users
    • First observedcreate_home_users_by_id_switch
    • First observedcreate_hubs_sections_by_section_id_manage
    • First observedcreate_library_collections
    • First observedcreate_library_file
    • First observedcreate_library_metadata_by_id_arts
    • First observedcreate_library_metadata_by_id_posters
    • First observedcreate_library_metadata_by_ids_by_element
    • First observedcreate_library_metadata_by_ids_extras
    • First observedcreate_library_metadata_by_ids_marker
    • First observedcreate_library_optimize
    • First observedcreate_library_sections_all
    • First observedcreate_library_sections_by_section_id_empty_trash
    • First observedcreate_library_sections_by_section_id_optimize
    • First observedcreate_library_sections_by_section_id_refresh
    • First observedcreate_library_sections_refresh
    • First observedcreate_livetv_dvrs
    • First observedcreate_livetv_dvrs_by_dvr_id_channels_by_channel_tune
    • First observedcreate_livetv_dvrs_by_dvr_id_reload_guide
    • First observedcreate_log
    • First observedcreate_log_networked
    • First observedcreate_media_grabbers_devices
    • First observedcreate_media_grabbers_devices_by_device_id_scan
    • First observedcreate_media_providers
    • First observedcreate_media_providers_refresh
    • First observedcreate_media_subscriptions
    • First observedcreate_media_subscriptions_process
    • First observedcreate_myplex_claim
    • First observedcreate_pins
    • First observedcreate_pins_xml
    • First observedcreate_play_queues
    • First observedcreate_player_playback_audio_stream
    • First observedcreate_player_playback_mute
    • First observedcreate_player_playback_pause
    • First observedcreate_player_playback_play
    • First observedcreate_player_playback_play_media
    • First observedcreate_player_playback_refresh_play_queue
    • First observedcreate_player_playback_seek
    • First observedcreate_player_playback_set_parameters
    • First observedcreate_player_playback_set_rating
    • First observedcreate_player_playback_set_state
    • First observedcreate_player_playback_set_streams
    • First observedcreate_player_playback_set_text_stream
    • First observedcreate_player_playback_set_view_offset
    • First observedcreate_player_playback_skip_by
    • First observedcreate_player_playback_skip_to
    • First observedcreate_player_playback_step_back
    • First observedcreate_player_playback_step_forward
    • First observedcreate_player_playback_stop
    • First observedcreate_player_playback_subtitle_stream
    • First observedcreate_player_playback_unmute
    • First observedcreate_player_playback_video_stream
    • First observedcreate_player_playback_volume
    • First observedcreate_playlists
    • First observedcreate_playlists_upload
    • First observedcreate_security_token
    • First observedcreate_servers_by_machine_id_shared_servers
    • First observedcreate_shared_servers
    • First observedcreate_status_sessions_terminate
    • First observedcreate_timeline
    • First observedcreate_users_password
    • First observedcreate_users_signin
    • First observedcreate_v2_user_webhooks
    • First observedcreate_webhooks
    • First observeddelete_activities_by_activity_id
    • First observeddelete_butler
    • First observeddelete_butler_by_butler_task
    • First observeddelete_download_queue_by_queue_id_items_by_item_id
    • First observeddelete_home_users_by_user_id
    • First observeddelete_hubs_sections_by_section_id_manage
    • First observeddelete_hubs_sections_by_section_id_manage_by_identifier
    • First observeddelete_library_caches
    • First observeddelete_library_metadata_by_ids
    • First observeddelete_library_metadata_by_ids_marker_by_marker
    • First observeddelete_library_metadata_by_ids_media_by_media_item
    • First observeddelete_library_sections_all_refresh
    • First observeddelete_library_sections_by_section_id
    • First observeddelete_library_sections_by_section_id_collection_by_collection_id
    • First observeddelete_library_sections_by_section_id_indexes
    • First observeddelete_library_sections_by_section_id_intros
    • First observeddelete_library_sections_by_section_id_refresh
    • First observeddelete_library_streams_by_stream_id_ext
    • First observeddelete_livetv_dvrs_by_dvr_id
    • First observeddelete_livetv_dvrs_by_dvr_id_devices_by_device_id
    • First observeddelete_livetv_dvrs_by_dvr_id_lineups
    • First observeddelete_livetv_dvrs_by_dvr_id_reload_guide
    • First observeddelete_livetv_sessions_by_session_id
    • First observeddelete_media_grabbers_devices_by_device_id
    • First observeddelete_media_grabbers_devices_by_device_id_scan
    • First observeddelete_media_grabbers_operations_by_operation_id
    • First observeddelete_media_providers_by_provider
    • First observeddelete_media_subscriptions_by_subscription_id
    • First observeddelete_play_queues_by_play_queue_id_items
    • First observeddelete_play_queues_by_play_queue_id_items_by_play_queue_item_id
    • First observeddelete_playlists
    • First observeddelete_playlists_by_playlist_id
    • First observeddelete_playlists_by_playlist_id_items
    • First observeddelete_playlists_by_playlist_id_items_by_generator_id
    • First observeddelete_sharings_by_user_id
    • First observeddelete_status_sessions_history_by_history_id
    • First observeddelete_users_signout
    • First observedget_by_transcode_type_transcode_universal_decision
    • First observedget_by_transcode_type_transcode_universal_session_by_session_id_by_segment_id_m4s
    • First observedget_by_transcode_type_transcode_universal_session_by_session_id_by_segment_id_ts
    • First observedget_by_transcode_type_transcode_universal_start_extension
    • First observedget_by_transcode_type_transcode_universal_subtitles
    • First observedget_download_queue_by_queue_id
    • First observedget_download_queue_by_queue_id_item_by_item_id_decision
    • First observedget_download_queue_by_queue_id_item_by_item_id_media
    • First observedget_download_queue_by_queue_id_items
    • First observedget_download_queue_by_queue_id_items_by_item_id
    • First observedget_downloads_by_channel_json
    • First observedget_hubs_metadata_by_metadata_id
    • First observedget_hubs_metadata_by_metadata_id_postplay
    • First observedget_hubs_metadata_by_metadata_id_related
    • First observedget_hubs_sections_by_section_id
    • First observedget_hubs_sections_by_section_id_manage
    • First observedget_library_collections_by_collection_id_composite_by_updated_at
    • First observedget_library_collections_by_collection_id_items
    • First observedget_library_media_by_media_id_chapter_images_by_chapter
    • First observedget_library_metadata_augmentations_by_augmentation_id
    • First observedget_library_metadata_by_id_children
    • First observedget_library_metadata_by_id_compute_path
    • First observedget_library_metadata_by_id_grandchildren
    • First observedget_library_metadata_by_id_grandparent
    • First observedget_library_metadata_by_id_nearest
    • First observedget_library_metadata_by_id_on_deck
    • First observedget_library_metadata_by_id_parent
    • First observedget_library_metadata_by_id_reviews
    • First observedget_library_metadata_by_ids
    • First observedget_library_metadata_by_ids_all_leaves
    • First observedget_library_metadata_by_ids_by_element_by_timestamp
    • First observedget_library_metadata_by_ids_extras
    • First observedget_library_metadata_by_ids_file
    • First observedget_library_metadata_by_ids_related
    • First observedget_library_metadata_by_ids_similar
    • First observedget_library_metadata_by_ids_subtitles
    • First observedget_library_metadata_by_ids_tree
    • First observedget_library_metadata_by_ids_users_top
    • First observedget_library_parts_by_part_id_by_changestamp_by_filename
    • First observedget_library_parts_by_part_id_indexes_by_index
    • First observedget_library_parts_by_part_id_indexes_by_index_by_offset
    • First observedget_library_people_by_person_id
    • First observedget_library_people_by_person_id_media
    • First observedget_library_sections_by_section_id
    • First observedget_library_sections_by_section_id_agents
    • First observedget_library_sections_by_section_id_albums
    • First observedget_library_sections_by_section_id_all
    • First observedget_library_sections_by_section_id_all_leaves
    • First observedget_library_sections_by_section_id_artists
    • First observedget_library_sections_by_section_id_arts
    • First observedget_library_sections_by_section_id_autocomplete
    • First observedget_library_sections_by_section_id_by_content_rating
    • First observedget_library_sections_by_section_id_by_decade
    • First observedget_library_sections_by_section_id_by_folder
    • First observedget_library_sections_by_section_id_by_resolution
    • First observedget_library_sections_by_section_id_by_year
    • First observedget_library_sections_by_section_id_categories
    • First observedget_library_sections_by_section_id_clips
    • First observedget_library_sections_by_section_id_cluster
    • First observedget_library_sections_by_section_id_collections
    • First observedget_library_sections_by_section_id_common
    • First observedget_library_sections_by_section_id_composite_by_updated_at
    • First observedget_library_sections_by_section_id_compute_path
    • First observedget_library_sections_by_section_id_edit
    • First observedget_library_sections_by_section_id_empty_trash
    • First observedget_library_sections_by_section_id_episodes
    • First observedget_library_sections_by_section_id_filters
    • First observedget_library_sections_by_section_id_first_characters
    • First observedget_library_sections_by_section_id_hubs
    • First observedget_library_sections_by_section_id_label
    • First observedget_library_sections_by_section_id_location
    • First observedget_library_sections_by_section_id_match
    • First observedget_library_sections_by_section_id_moment
    • First observedget_library_sections_by_section_id_movies
    • First observedget_library_sections_by_section_id_nearest
    • First observedget_library_sections_by_section_id_newest
    • First observedget_library_sections_by_section_id_on_deck
    • First observedget_library_sections_by_section_id_optimize
    • First observedget_library_sections_by_section_id_photos
    • First observedget_library_sections_by_section_id_playlists
    • First observedget_library_sections_by_section_id_prefs
    • First observedget_library_sections_by_section_id_recently_added
    • First observedget_library_sections_by_section_id_refresh
    • First observedget_library_sections_by_section_id_search
    • First observedget_library_sections_by_section_id_settings
    • First observedget_library_sections_by_section_id_shows
    • First observedget_library_sections_by_section_id_sorts
    • First observedget_library_sections_by_section_id_tags
    • First observedget_library_sections_by_section_id_timeline
    • First observedget_library_sections_by_section_id_unmatch
    • First observedget_library_sections_by_section_id_unwatched
    • First observedget_library_streams_by_stream_id_ext
    • First observedget_library_streams_by_stream_id_levels
    • First observedget_library_streams_by_stream_id_loudness
    • First observedget_livetv_dvrs_by_dvr_id
    • First observedget_livetv_dvrs_by_dvr_id_channels
    • First observedget_livetv_dvrs_by_dvr_id_guide
    • First observedget_livetv_dvrs_by_dvr_id_recordings
    • First observedget_livetv_epg_countries_by_country_by_epg_id_lineups
    • First observedget_livetv_epg_countries_by_country_by_epg_id_regions
    • First observedget_livetv_epg_countries_by_country_by_epg_id_regions_by_region_lineups
    • First observedget_livetv_sessions_by_session_id
    • First observedget_livetv_sessions_by_session_id_by_consumer_id_by_segment_id
    • First observedget_livetv_sessions_by_session_id_by_consumer_id_index_m3u8
    • First observedget_media_grabbers_devices_by_device_id
    • First observedget_media_grabbers_devices_by_device_id_channels
    • First observedget_media_grabbers_devices_by_device_id_thumb_by_version
    • First observedget_media_subscriptions_by_subscription_id
    • First observedget_pins_by_pin_id
    • First observedget_play_queues_by_play_queue_id
    • First observedget_playlists_by_playlist_id
    • First observedget_playlists_by_playlist_id_generators
    • First observedget_playlists_by_playlist_id_items
    • First observedget_playlists_by_playlist_id_items_by_generator_id
    • First observedget_playlists_by_playlist_id_items_by_generator_id_items
    • First observedget_servers_by_machine_id
    • First observedget_services_browse_by_base64path
    • First observedget_status_sessions_history_by_history_id
    • First observedget_sync_items_by_sync_id
    • First observedget_system_agents_by_agent_id
    • First observedget_user_by_uuid_settings_opt_outs
    • First observedlist_accounts
    • First observedlist_activities
    • First observedlist_auth_keys
    • First observedlist_auth_nonce
    • First observedlist_butler
    • First observedlist_claim_token_json
    • First observedlist_clients
    • First observedlist_cloud_server
    • First observedlist_devices
    • First observedlist_diagnostics
    • First observedlist_diagnostics_databases
    • First observedlist_diagnostics_logs
    • First observedlist_eventsource_notifications
    • First observedlist_features
    • First observedlist_friends
    • First observedlist_geoip
    • First observedlist_home
    • First observedlist_home_users
    • First observedlist_hubs
    • First observedlist_hubs_continue_watching
    • First observedlist_hubs_continue_watching_items
    • First observedlist_hubs_home_recently_added
    • First observedlist_hubs_items
    • First observedlist_hubs_promoted
    • First observedlist_hubs_search
    • First observedlist_hubs_search_voice
    • First observedlist_identity
    • First observedlist_ip
    • First observedlist_library
    • First observedlist_library_all
    • First observedlist_library_matches
    • First observedlist_library_optimize
    • First observedlist_library_random_artwork
    • First observedlist_library_recently_added
    • First observedlist_library_search
    • First observedlist_library_sections
    • First observedlist_library_sections_all
    • First observedlist_library_sections_prefs
    • First observedlist_library_sections_watchlist_all
    • First observedlist_library_tags
    • First observedlist_livetv_dvrs
    • First observedlist_livetv_epg_channelmap
    • First observedlist_livetv_epg_channels
    • First observedlist_livetv_epg_countries
    • First observedlist_livetv_epg_guide
    • First observedlist_livetv_epg_languages
    • First observedlist_livetv_epg_lineup
    • First observedlist_livetv_epg_lineupchannels
    • First observedlist_livetv_epg_search
    • First observedlist_livetv_recordings
    • First observedlist_livetv_sessions
    • First observedlist_media_grabbers
    • First observedlist_media_grabbers_devices
    • First observedlist_media_grabbers_devices_discover
    • First observedlist_media_providers
    • First observedlist_media_subscriptions
    • First observedlist_media_subscriptions_scheduled
    • First observedlist_media_subscriptions_template
    • First observedlist_music_transcode
    • First observedlist_myplex_account
    • First observedlist_photo_transcode
    • First observedlist_ping
    • First observedlist_play_queues_1
    • First observedlist_player_resources
    • First observedlist_player_timeline_poll
    • First observedlist_playlists
    • First observedlist_prefs
    • First observedlist_prefs_get
    • First observedlist_progress
    • First observedlist_resources
    • First observedlist_resources_2
    • First observedlist_root
    • First observedlist_security_resources
    • First observedlist_server
    • First observedlist_server_access_tokens
    • First observedlist_server_users_features
    • First observedlist_servers
    • First observedlist_services_browse
    • First observedlist_services_ultrablur_colors
    • First observedlist_services_ultrablur_image
    • First observedlist_statistics_bandwidth
    • First observedlist_statistics_resources
    • First observedlist_status_sessions
    • First observedlist_status_sessions_background
    • First observedlist_status_sessions_history_all
    • First observedlist_sync
    • First observedlist_sync_items
    • First observedlist_sync_queue
    • First observedlist_sync_transcode_queue
    • First observedlist_system_agents
    • First observedlist_system_settings
    • First observedlist_system_updates
    • First observedlist_transcode_sessions
    • First observedlist_updater_status
    • First observedlist_user
    • First observedlist_users
    • First observedlist_users_2
    • First observedlist_users_account
    • First observedlist_users_account_json
    • First observedlist_v2_user_webhooks
    • First observedlist_webhooks
    • First observedlist_websocket_notifications
    • First observedlist_websockets_notifications
    • First observedpatch_livetv_dvrs_by_dvr_id
    • First observedupdate_actions_remove_from_continue_watching
    • First observedupdate_home_users_by_user_id
    • First observedupdate_home_users_restricted_by_user_id
    • First observedupdate_hubs_sections_by_section_id_manage_by_identifier
    • First observedupdate_hubs_sections_by_section_id_manage_move
    • First observedupdate_invites_requests_by_invite_id
    • First observedupdate_library_clean_bundles
    • First observedupdate_library_collections_by_collection_id_items
    • First observedupdate_library_collections_by_collection_id_items_by_item_id
    • First observedupdate_library_collections_by_collection_id_items_by_item_id_move
    • First observedupdate_library_metadata_by_ids
    • First observedupdate_library_metadata_by_ids_addetect
    • First observedupdate_library_metadata_by_ids_analyze
    • First observedupdate_library_metadata_by_ids_by_element
    • First observedupdate_library_metadata_by_ids_chapter_thumbs
    • First observedupdate_library_metadata_by_ids_credits
    • First observedupdate_library_metadata_by_ids_index
    • First observedupdate_library_metadata_by_ids_intro
    • First observedupdate_library_metadata_by_ids_marker_by_marker
    • First observedupdate_library_metadata_by_ids_match
    • First observedupdate_library_metadata_by_ids_matches
    • First observedupdate_library_metadata_by_ids_merge
    • First observedupdate_library_metadata_by_ids_prefs
    • First observedupdate_library_metadata_by_ids_refresh
    • First observedupdate_library_metadata_by_ids_split
    • First observedupdate_library_metadata_by_ids_unmatch
    • First observedupdate_library_metadata_by_ids_voice_activity
    • First observedupdate_library_optimize
    • First observedupdate_library_parts_by_part_id
    • First observedupdate_library_sections_by_section_id
    • First observedupdate_library_sections_by_section_id_all
    • First observedupdate_library_sections_by_section_id_analyze
    • First observedupdate_library_sections_by_section_id_edit
    • First observedupdate_library_sections_by_section_id_empty_trash
    • First observedupdate_library_sections_by_section_id_move
    • First observedupdate_library_sections_by_section_id_prefs
    • First observedupdate_library_streams_by_stream_id_ext
    • First observedupdate_livetv_dvrs_by_dvr_id
    • First observedupdate_livetv_dvrs_by_dvr_id_devices_by_device_id
    • First observedupdate_livetv_dvrs_by_dvr_id_lineups
    • First observedupdate_livetv_dvrs_by_dvr_id_prefs
    • First observedupdate_log
    • First observedupdate_media_grabbers_devices_by_device_id
    • First observedupdate_media_grabbers_devices_by_device_id_channelmap
    • First observedupdate_media_grabbers_devices_by_device_id_prefs
    • First observedupdate_media_subscriptions_by_subscription_id
    • First observedupdate_media_subscriptions_by_subscription_id_move
    • First observedupdate_myplex_refresh_reachability
    • First observedupdate_pins_link
    • First observedupdate_play_queues_by_play_queue_id
    • First observedupdate_play_queues_by_play_queue_id_items_by_play_queue_item_id_move
    • First observedupdate_play_queues_by_play_queue_id_reset
    • First observedupdate_play_queues_by_play_queue_id_shuffle
    • First observedupdate_play_queues_by_play_queue_id_unshuffle
    • First observedupdate_playlists_by_playlist_id
    • First observedupdate_playlists_by_playlist_id_items
    • First observedupdate_playlists_by_playlist_id_items_by_generator_id
    • First observedupdate_playlists_by_playlist_id_items_by_generator_id_by_metadata_id_by_action
    • First observedupdate_playlists_by_playlist_id_items_by_playlist_item_id_move
    • First observedupdate_prefs
    • First observedupdate_rate
    • First observedupdate_scrobble
    • First observedupdate_sharings_by_user_id
    • First observedupdate_sync_refresh_content
    • First observedupdate_sync_refresh_synclists
    • First observedupdate_unscrobble
    • First observedupdate_updater_apply
    • First observedupdate_updater_check
    • First observedupdate_user_view_state_sync

TDQS

B3.3/5.0

Scored across 28 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Lets 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 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables full management of a Plex Media Server via Claude, including browsing libraries, fixing metadata, managing collections, and more.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Exposes 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 npm
    MIT
  • A
    license
    C
    quality
    A
    maintenance
    Enables full control of Sonarr from Claude.ai and Claude Code by exposing all 234 v3 API operations as tools for managing media libraries.
    235
    30 npm
    MIT