Skip to main content
Glama
renzel

TRMNL API MCP

by renzel

TRMNL API MCP

Local MCP access to read TRMNL devices and manage playlist items, visibility, ordering and weekly display windows. Built with the official MCP TypeScript SDK, using Node.js and stdio. This is an unofficial TRMNL integration. The current tool set covers playlists; the repository name leaves room for additional API support.

Repository: renzel/trmnl-api-mcp.

Tools

Tool

Inputs

Output

list_devices

optional offset, limit

Device names and numeric IDs, default refresh interval in seconds, sleep settings and last check-in

list_playlist_items

optional device_id, offset, limit

Plugin names, visibility, ordering values, group/mashup IDs, configuration status and render timestamps

get_playlist_item_schedule

item_id

Weekly windows; day 0 is Sunday and day 6 is Saturday

set_playlist_item_visibility

item_id, visible

Updated playlist entry

add_playlist_item

device_id, plugin_setting_id (UUID)

New entry for an existing plugin instance

remove_playlist_item

item_id

Removal result

reorder_playlist_items

device_id, playlist_item_ids

Ordering replacement result

replace_playlist_item_schedule

item_id, week_schedules

Complete replacement schedule

Lists default to 50 items and allow up to 100 per call. Follow next_offset until null. Pagination is local over the API's complete list response; each call makes one GET request. Responses remain in API order.

Related MCP server: dakboard-mcp-server

Connect

Prerequisites: Node.js 22+ and Python 3 for the hidden credential prompt.

  1. In TRMNL Account, copy your User API Key. The per-plugin key beginning ps_mcp_ is not suitable.

  2. Run python3 scripts/configure.py from this directory in a terminal. The hidden prompt stores the token in ~/.config/trmnl-playlist/account-api-key with permissions 600, outside the project. Don't put it in chat, source files or command arguments.

  3. Run npm ci --ignore-scripts if dependencies are not installed.

  4. Add to Codex (use absolute paths to your Node binary and this directory):

    codex mcp add trmnl-api -- /absolute/path/to/node /absolute/path/to/trmnl-api-mcp/src/index.js
  5. Run npm run check to verify an actual stdio handshake and authenticated device/playlist reads. It prints counts, not account content or credentials.

  6. In the desktop app's MCP server settings, restart the MCP connection. Then ask: "Review my TRMNL playlist using trmnl-api."

The server can start and advertise tools before a credential exists; tools return a clear setup error until the key is supplied. It reads the key on every call, so changing the saved key does not require restarting the server.

Other clients may use the included .mcp.json plugin companion after installing dependencies. Environment overrides are TRMNL_ACCOUNT_API_KEY or TRMNL_ACCOUNT_API_KEY_FILE. These are launcher settings, never tool inputs. Direct Codex registration and plugin installation are alternatives; do not enable both copies.

Editing playlists

Inspect the current playlist and relevant schedule before writing; verify the resulting state afterward. Writes are marked as writes in MCP metadata so clients can apply their normal approval policy. Adding write support does not itself change any playlist.

  • Visibility: use a boolean to show or hide an entry while keeping it configured.

  • Add: requires the existing plugin setting UUID, as specified by the API. Do not substitute the numeric plugin or playlist item ID. The current list schema does not expose this UUID, so obtain it from the plugin's settings or an existing known value.

  • Remove: removes the playlist entry and its schedule; hide it if the intention is temporary. There is no undo tool.

  • Reorder: supply every current item exactly once, including hidden entries. The server reads the latest list before writing and rejects missing, duplicate or foreign IDs. TRMNL also validates the set when applying the change.

  • Schedule: replaces all windows. week_schedules: [] clears time restrictions so the item is always active, but does not change visibility. Each window has unique week_days (0–6) and start_time/end_time in HH:MM. Account timezone is not exposed by these endpoints.

A timeout or invalid response after a write can mean the write succeeded. The server reports that uncertainty and never retries automatically; read current state before deciding whether to retry, especially when adding entries.

Access boundary

The account key itself has broader TRMNL permissions. This server limits access to three read tools and five playlist write tools on a fixed set of paths on https://trmnl.com. It validates method/path combinations and strict tool inputs. There is no generic request tool, arbitrary URL, device-setting write, image download, or account-profile endpoint. Redirects are rejected. Known output fields are selected so unexpected credentials or hardware identifiers are not forwarded. API response text is account data and must not be treated as instructions.

Requests are bounded by a 15-second timeout and 2 MiB response limit. HTTP errors and invalid payloads are reported without returning upstream bodies. No keys or playlist contents are logged. The server has no listening port or persistent background service; the MCP client starts it as needed.

Limits

These endpoints do not expose rendered screen images, mashup section contents, custom item durations, or the account timezone. The plugin's icon is not a preview. Device refresh_interval is a default and does not prove each item's duration. Schedule always_active means no time windows are set, and does not override an item's visible state. The device-specific endpoint documents an empty list for inaccessible devices, so an empty result alone does not prove device ownership.

Verification

npm test checks MCP discovery and stdio negotiation, read/write request routing and payloads, strict inputs, playlist pagination, schedule replacement/clearing, reorder preflight, hidden/mashup items, output filtering, credential-file permissions, and uncertain-write handling. Fixtures are synthetic; only npm run check verifies your account connection. The connection check performs reads only; tests never edit a live playlist.

Sources

  • TRMNL OpenAPI schema, inspected 2026-09-14. Read routes: GET /api/devices, GET /api/playlists/items, GET /api/devices/{device_id}/playlist_items, GET /api/playlists/items/{item_id}/schedule. Write routes: POST /api/devices/{device_id}/playlist_items, PATCH and DELETE /api/playlists/items/{id}, PUT /api/devices/{device_id}/playlist_items/order, PUT /api/playlists/items/{item_id}/schedule.

  • TRMNL User API Keys.

  • Official MCP SDK.

  • Codex MCP configuration.

Available Tools

8 tools
add_playlist_itemA

Add an existing plugin instance to a device playlist. plugin_setting_id must be the plugin setting UUID documented by TRMNL, not a numeric plugin ID. This may create another entry if retried; inspect the playlist after any uncertain outcome.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes
plugin_setting_idYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare idempotentHint=false, so the non-idempotency is partially covered. The description adds value by explicitly stating the potential duplicate entry on retry and advising inspection, which goes beyond the hint. However, it doesn't clarify whether this operation requires specific permissions or what side effects occur beyond duplication (e.g., visibility or order). With annotations covering the mutation hint, a 3 is appropriate.

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

Conciseness5/5

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

The description is three sentences with no filler. The main action and critical parameter clarification are front-loaded, followed by a concise warning. Every sentence earns its place, making it efficient and well-structured.

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

Completeness4/5

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

Given the tool's moderate complexity (2 parameters, no output schema, but with sibling tools), the description covers the key semantic pitfalls (UUID requirement, non-idempotency) and the need for post-action verification. It doesn't describe return value, but with no output schema and a clear action, what matters is the side effect and how to handle uncertainty. The main gap is lack of guidance on finding the device_id, but siblings like list_devices can compensate, so it's strong overall.

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%, meaning the schema provides minimal meaning beyond types and constraints. The description notably clarifies that plugin_setting_id must be the plugin setting UUID from TRNML, not a numeric plugin ID—a critical semantic distinction not present in the schema. However, it doesn't explain the meaning of device_id (e.g., which device or how to find it) beyond being an integer. Since it compensates for the key ambiguous parameter but not fully for the other, a 3 is fair.

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

Purpose5/5

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

The description clearly states the action (add) and the resource (an existing plugin instance to a device playlist), and specifies the key object (plugin instance). It distinguishes itself from siblings like remove_playlist_item and reorder_playlist_items by the unique action and resource, making its purpose unambiguous.

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?

The description includes an important usage caution: it warns about non-idempotency, advising to inspect the playlist after uncertain outcomes. While it doesn't explicitly name alternative tools for similar operations, the context of adding versus removing/reordering is clear. It provides context on when to use this tool (to add items) but not explicit exclusions, so not a 5.

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

get_playlist_item_scheduleA
Read-onlyIdempotent

Read weekly display windows for a playlist item. week_days uses 0=Sunday through 6=Saturday. Times are returned as stored; the API does not supply timezone. always_active describes schedule windows, not the separate visibility flag.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes

TDQS

A4.2/5.0
Behavior5/5

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

The annotations already declare readOnlyHint/openWorldHint/idempotentHint, so the bar for extra behavioral disclosure is lower. The description goes beyond that by explaining weekday numbering (0=Sunday through 6=Saturday), that times are returned as stored without timezone conversion, and that always_active is about schedule windows rather than the separate visibility flag. These are non-obvious behaviors an agent must know before reasoning about the result.

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?

Three concise sentences, each earning its place: the main purpose is front-loaded, then the weekday encoding, then the storage/timezone caveats. There is no redundancy or tangential content.

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 annotations covering idempotence/safety and no output schema, the description covers the most important semantics: what is returned, the weekday range, the timezone limitation, and the meaning of always_active. A small gap remains because the response structure is not sketched, but the tool is simple and the description is sufficiently complete for a likely call.

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% and the only parameter, item_id, is not discussed directly. Still, the description says 'for a playlist item,' so an agent can infer that item_id identifies a playlist item whose schedule is being fetched. With one simple resource-ID parameter and no enums, the description provides adequate but not explicit parameter clarification.

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 opens with a specific verb and resource: 'Read weekly display windows for a playlist item.' It clearly identifies what is being retrieved and differentiates this read operation from mutation siblings like replace_playlist_item_schedule and set_playlist_item_visibility. The note that always_active is not the visibility flag further prevents confusion with the separate visibility tool.

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 description clearly implies a read-only inspection use case, and the 'Read' verb plus the warning about the visibility flag provides some usage signal. However, it never explicitly says when to use this tool versus replace_playlist_item_schedule or set_playlist_item_visibility, nor does it mention that schedule mutations belong to a different sibling tool. Usage guidance is present but left largely to inference.

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

list_devicesA
Read-onlyIdempotent

List your TRMNL devices with names, numeric IDs, refresh interval in seconds, sleep settings and last check-in. Credentials and hardware identifiers are excluded.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the operation as read-only, idempotent, and non-destructive, so the description's main value-add is listing return fields and exclusions. This goes beyond structured data by specifying what data the agent can expect (including 'sleep settings' and 'last check-in') and what is intentionally omitted. This is useful context that complements 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.

Conciseness5/5

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

The description is two concise sentences with no fluff. The main action and resource are front-loaded, and the exclusion note is efficiently appended. Every word earns its place.

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?

With no output schema, the description sufficiently explains what fields are returned and what is excluded, which is the primary information an agent needs. It does not mention pagination behavior, but that is implicitly covered by the limit/offset parameters in the schema. The description is complete enough for a simple read-only list operation.

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% — the description does not mention the 'limit' or 'offset' parameters at all. While the schema provides defaults and ranges, the description does not compensate for the low coverage by explaining that these control pagination or how they affect results. The parameter names are somewhat self-explanatory, but the description adds no value beyond the schema.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'TRMNL devices', and enumerates the specific fields returned (names, numeric IDs, refresh interval, sleep settings, last check-in). It also explicitly notes exclusions (credentials and hardware identifiers), which unambiguously distinguishes this tool from sibling playlist tools.

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?

The resource type 'TRMNL devices' provides clear context for when to use this tool, and sibling names all relate to playlist items, so an agent can easily infer this is the device-listing tool. However, the description does not explicitly mention alternatives or state when not to use it, so it falls short of a 5.

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

list_playlist_itemsA
Read-onlyIdempotent

Read TRMNL playlist items, optionally for one numeric device_id. Returns plugin names, visibility, row_order, group IDs and render timestamps in API order. Does not fetch images or custom durations.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
device_idNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is clear. The description adds valuable disclosure about return fields (plugin names, visibility, row_order, group IDs, render timestamps) and explicitly notes that images and custom durations are not fetched. This goes beyond annotations and helps manage agent expectations.

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?

Two succinct sentences. The purpose and key scoping detail (optional device_id) are front-loaded, and the exclusions (images/durations) are stated in a single trailing clause. No wasted words.

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

Completeness3/5

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

For a read-only tool with three optional parameters and no output schema, the description should explain pagination (limit/offset) and default behavior. It mentions return fields but not the response structure or how parameters affect results. Given the annotations cover safety, the description is partially complete but leaves parameter semantics and expected output shape to inference.

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 explain parameters. It only mentions that device_id is optional and numeric, but provides no explanation of limit or offset, their defaults, or their effects. The agent cannot infer pagination behavior from the description, and the schema alone doesn't carry semantic guidance. This is a significant gap.

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

Purpose4/5

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

The description clearly states the verb 'Read' and resource 'TRMNL playlist items', and specifies optional filtering by device_id. It is distinct from siblings like list_devices (different resource) and mutation tools, but it does not explicitly name or contrast a sibling, 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 Guidelines3/5

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

The description implies this tool is for reading playlist items and mentions optional device_id filtering, but provides no explicit guidance on when to use it versus alternatives like get_playlist_item_schedule or the mutation tools. There is no when-not-to-use context, so it stops at clear context without exclusions.

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

remove_playlist_itemA
DestructiveIdempotent

Remove a playlist entry by its item_id. This loses that entry and its schedule; use set_playlist_item_visibility to pause it instead. Read the entry before removal and verify afterward.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true. The description adds concrete behavioral context: that removal loses the entry and its schedule, and recommends verification steps. This goes beyond what annotations convey, though it does not contradict them.

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 three sentences, each serving a distinct purpose: stating the action, noting the consequence and alternative, and prescribing verification. It is front-loaded with the core purpose and contains no redundant or vague wording.

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?

For a single-parameter destructive tool with rich annotations and no output schema, the description covers all essential aspects: purpose, side effects, alternative behavior, and recommended usage steps. Nothing critical for correct invocation is missing.

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

Parameters1/5

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

The input schema provides no description for item_id (schema description coverage is 0%), and the description merely repeats 'item_id' without explaining its meaning, format, or relationship to playlist items. The description fails to compensate for the schema gap, offering no additional semantic value.

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 action ('Remove a playlist entry') and the resource key ('by its item_id'), and clearly differentiates from the sibling tool set_playlist_item_visibility. It tells the agent exactly what the tool does and what it is not for.

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

Usage Guidelines5/5

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

Explicitly directs the agent to use set_playlist_item_visibility for pausing instead of permanent removal, establishing a clear when-to-use/when-not-to-use contrast. It also advises reading the entry before removal and verifying afterward, providing actionable usage steps.

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

reorder_playlist_itemsA
DestructiveIdempotent

Replace a device playlist ordering. Supply every current playlist item ID exactly once in the desired order, including hidden items. The current list is checked before writing; TRMNL also validates the complete set.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes
playlist_item_idsYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false, destructiveHint=true, idempotentHint=true, and openWorldHint=true. The description adds value by mentioning that the current list is checked before writing and that TRMNL validates the complete set, which explains the destructive and validating nature. It does not contradict annotations, but it could add more context about side effects or concurrency, so a score of 3 is appropriate.

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

Conciseness4/5

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

The description is concise, consisting of two sentences. The first sentence delivers the primary purpose and critical ordering constraint, front-loading the most important information. The second sentence adds validation context. No unnecessary words, but it could benefit from slightly more detail on usage, hence a 4.

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 complexity (two parameters, no output schema, destructive operation), the description provides the essential requirement for the array (complete set) and validation behavior. However, it lacks details on error handling, whether the operation is atomic, or what the response looks like. It is adequate but leaves some gaps for an agent, so a 3 is reasonable.

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. The description explains the playlist_item_ids parameter by specifying that it must contain every current item ID exactly once. However, it does not explain device_id beyond the schema, and the array's ordering semantics are explained implicitly. This adds some meaning but not complete coverage.

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

Purpose4/5

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

The description clearly states the verb ('Replace') and resource ('device playlist ordering'), and specifies the main action of reordering playlist items. It distinguishes itself from siblings like add/remove by focusing on ordering, though it does not explicitly name a counterpart for reordering.

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?

It provides clear usage guidance by specifying that every current playlist item ID must be supplied exactly once, including hidden items, and notes that the current list is checked before writing. This helps the agent know when to use it (full reordering) and what requirements must be met, but it does not explicitly state when not to use it or compare to alternatives.

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

replace_playlist_item_scheduleA
DestructiveIdempotent

Replace ALL weekly display windows for an item. Read the existing schedule first; send all windows to retain. An empty week_schedules array clears time restrictions (always active), not visibility. week_days: 0=Sunday through 6=Saturday; use HH:MM in the account timezone, which this API does not expose.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
week_schedulesYes

TDQS

A4.6/5.0
Behavior5/5

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

This adds substantial behavior beyond the annotations: omitted windows are lost because this is a full replacement, an empty week_schedules array makes the item always active but does not affect visibility, and times are interpreted in the account timezone, which the API does not expose. This directly supports correct use.

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?

Three sentences, each carrying essential information with no repetition. The destructive full-replacement warning is front-loaded, and the edge cases about empty arrays and timezones are packed into tight, useful notes.

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?

The description is strong enough that an agent can invoke this tool correctly: it explains the destructive replacement, the retain-all-windows requirement, the empty-array behavior, and weekday/time semantics. Small gaps are that it does not explicitly point to the tool to read the schedule, and time-window boundary cases are not mentioned, but these are minor given the schema and annotations.

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 description compensates well by explaining week_schedules semantics: weekday numbering, HH:MM format, timezone behavior, and empty-array meaning. The item_id parameter is left implicit, but it is a self-explanatory integer identifier, and the description adds enough for the two-parameter schema.

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 opens with a specific verb and resource: 'Replace ALL weekly display windows for an item.' It clearly states the full-replacement semantics and distinguishes itself from visibility-related tools by noting that an empty schedule clears time restrictions, not visibility.

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?

It gives a concrete workflow: read the existing schedule first, then send all windows that should remain. It also clarifies when an empty array is appropriate. However, it does not explicitly name sibling tools such as get_playlist_item_schedule or set_playlist_item_visibility as the alternatives, so the 'when not to use' guidance is implied rather than explicit.

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

set_playlist_item_visibilityA
DestructiveIdempotent

Show or hide an existing playlist item without removing it. Inspect the playlist first and verify visibility afterward.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
visibleYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already convey that the tool is not read-only, is idempotent, and is destructive. The description adds a meaningful caution that the item is not removed, and instructs inspect/verify to handle side effects. It does not describe permissions, rate limits, or the exact nature of destructive changes, but with annotations present this is acceptable.

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 sentences, with the core purpose front-loaded and the procedural guidance second. No wasted words, and the key clarification 'without removing it' is placed at the end of the sentence. It could mention the parameter effect more explicitly, but the structure is efficient.

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 2-parameter, no-output-scale tool, the description covers the essential workflow: inspect, set visibility, verify. It does not elaborate on error conditions or access requirements, but given the annotation and schema, completeness is adequate.

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 explains that 'visible' controls show/hide and 'item_id' refers to an existing playlist item, and the instruction to inspect the playlist implies how to obtain the ID. Yet it does not detail parameter formats, validation, or relationships, leaving some ambiguity.

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

Purpose5/5

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

The description states a specific verb ('show or hide'), a specific resource ('an existing playlist item'), and explicitly disambiguates from siblings by adding 'without removing it'. This distinguishes it from remove_playlist_item and reorder_playlist_items, making the purpose unambiguous.

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

Usage Guidelines4/5

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

The description provides clear procedural guidance: 'Inspect the playlist first and verify visibility afterward.' This tells the agent when to use the tool (ensure item exists, verify after) and implicitly suggests using list_playlist_items for inspection. However, it does not explicitly name alternative tools or state when not to use this tool over others.

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. 8 tool updatesv0.2.0
    • First observedadd_playlist_item
    • First observedget_playlist_item_schedule
    • First observedlist_devices
    • First observedlist_playlist_items
    • First observedremove_playlist_item
    • First observedreorder_playlist_items
    • First observedreplace_playlist_item_schedule
    • First observedset_playlist_item_visibility

TDQS

A4.1/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct resource and action: devices, playlist items, schedules, visibility, and ordering are clearly separated. The read/write schedule pair and visibility vs. removal are described with enough distinction to prevent misselection.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern using list/get/set/add/remove/reorder/replace. The naming style is uniform and the resource hierarchy is predictable.

Tool Count5/5

Eight tools cover the device listing and playlist management workflows without redundancy or bloat. The count is well within the ideal range and each tool contributes a distinct playlist lifecycle operation.

Completeness4/5

The playlist item lifecycle is well covered: add, list, read schedule, update visibility, replace schedule, reorder, and remove. The main gap is that add_playlist_item requires an external plugin_setting_id with no corresponding tool to discover plugin settings, forcing agents to get that ID from outside the server.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    B
    maintenance
    Enables MCP clients to manage a self-hosted RPort fleet by listing and inspecting connected devices, opening and closing SSH tunnels, and executing commands through RPort agents.
    10
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables MCP clients to query and manage a Qbee-managed device fleet, offering read tools for device status, files, CVEs, and changes, plus confirmation-gated write operations for configuration, file management, membership, and IAM.
    Apache 2.0