Skip to main content
Glama

Server Details

Manage digital signage screens: health, content, casts, emergency messages, proof of play.

Ownership verified
Status
Healthy
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL

TDQS

A4.1/5.0

Scored across 41 tools

Disambiguation4/5

The tool surface is large and several families are conceptually adjacent: assign_content/cast_content/quick_post/trigger_emergency_template, refresh_screen/clear_screen_cache/reboot_screen, and list_items/search_media/search_screens. Descriptions are unusually explicit and cross-reference each other, so most boundaries are clear, but the sheer number of related tools means an agent may still pause over a few choices.

Naming Consistency4/5

All names use snake_case and are mostly verb-first (create_web_link, list_open_alerts, update_playlist). A few deviate from strict verb_noun (screen_health, quick_post, whoami, bulk_create), but the convention is consistent and readable.

Tool Count2/5

41 tools is well above the 25-tool threshold in the rubric and feels heavy even for a broad digital-signage platform. Several tools are thin wrappers or multi-purpose (bulk_create, list_items), so the surface could be consolidated.

Completeness3/5

The set covers discovery, content assignment/casting, media, playlists, approvals, alerts, reports, and device diagnostics. However, there is no delete/purge operation for most resources and no schedule update/get/delete beyond bulk_create/list_items, leaving notable lifecycle gaps.

Available Tools

41 tools
add_screens_to_groupAdd screens to a groupA
Idempotent
Inspect

Add screens to an existing screen group. Screens already in the group stay as they are; ids outside your reach are skipped and counted (skipped), never fatal. Returns how many were added and their ids. Changes no content, settings or location on the screens. To make a new group use create_screen_group; to take screens out use remove_screens_from_group; to move a screen to another location use assign_screen_to_node. Requires screen.edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupIdYesScreen group id (sgrp_…), from list_items kind screen_groups or create_screen_group. The group must already exist.
screenIdsYesScreens to add (ids from search_screens), 1 to 5000.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses partial-failure semantics (out-of-reach ids are skipped and counted as `skipped`, never fatal), that existing membership is preserved, that no content/settings/location change, and the required permission. The annotations only carry the safety profile; the description supplies the 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.

Conciseness5/5

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

Front-loaded with the core action, then behavioral guarantees, then alternatives, then permission. Every sentence carries distinct information; there is no filler despite the density.

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?

An output schema exists, so return values need not be spelled out, yet the description still summarizes the return (count and ids). Combined with the safety annotations and full schema coverage, an agent has everything needed to call this correctly.

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 100%, so both groupId and screenIds are fully documented in the schema (including the sgrp_ prefix and the 1–5000 bound). The description adds the 'existing group' precondition but no new syntax or format detail, so the baseline 3 applies.

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+resource ('Add screens to an existing screen group') with clear scope, and explicitly names the sibling operations it is not (create_screen_group, remove_screens_from_group, assign_screen_to_node). An agent can distinguish it from all three without opening any schema.

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?

Gives explicit routing: create_screen_group for a new group, remove_screens_from_group to remove, assign_screen_to_node to move location. It also states the prerequisite permission ('Requires `screen.edit`'), leaving nothing to inference.

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

assign_contentAssign content to screensA
DestructiveIdempotent
Inspect

Change what screens play by default: a lasting assignment that stays until changed, not a timed takeover. Target one screen (screenId), a list (screenIds), or every screen at or under a location (nodeId, e.g. "all California stores" in one call); screenIds and nodeId combine. Screens are notified at once. In a bulk call, a screen the content is not shared to, or whose location needs approval for it, is skipped and counted (notShared, needsApproval) rather than failing the call; the response names the screens that changed. Pass contentKind null to clear one screen. Use cast_content for a temporary takeover that ends by itself, quick_post to write and show a new message. Requires screen.cast.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdNoLocation (org node) id: assign to every screen at or under it that you can reach (max 1000). Combines with screenIds.
screenIdNoOne target screen (e.g. scr_aurora_42, from search_screens).
contentIdNoId of the content to play: a playlist or schedule from list_items, a media file or app from search_media. Omit only when contentKind is null.
screenIdsNoBulk alternative: assign the same content to every listed screen (max 200).
contentKindYesKind of content contentId names. null clears the screen's assigned content (one screenId only).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare destructive/idempotent/openWorld, but the description goes well beyond them: it discloses the required `screen.cast` permission, the lasting-vs-timed semantics, that screens are notified at once, and the partial-failure contract (skipped screens counted as notShared/needsApproval instead of failing the call). That partial-success behavior is the kind of thing an agent genuinely needs and cannot get from structured fields.

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?

One dense paragraph, front-loaded with the core distinction before targeting modes and failure semantics. Every clause carries information, though the mid-paragraph switch between targeting, notification, and error handling makes it slightly harder to scan than a short bulleted split would be.

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?

An output schema exists so return values need not be spelled out, and the description still notes that the response names changed screens. With permissions, failure modes, targeting, and the clearing path all covered, nothing needed to call this 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?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: nodeId is illustrated with a concrete use case ('all California stores' in one call), the combination rule between screenIds and nodeId is restated at the tool level, and the null-clears-one-screen constraint is called out with its single-screen limitation. It does not, however, explain contentId/contentKind pairing beyond what the schema says.

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 ('Change what screens play by default') and immediately scopes it as a lasting assignment rather than a timed takeover, which is exactly the axis that separates it from cast_content. An agent can distinguish it from all siblings without opening a schema.

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 routes: 'Use cast_content for a temporary takeover that ends by itself, quick_post to write and show a new message.' It also states when it applies (default, lasting, until changed) and enumerates the three targeting modes plus their combination rule.

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

assign_screen_to_nodeMove a screen to a locationA
DestructiveIdempotent
Inspect

Move one screen to a different location (org node), its single home in the tree. The location decides who can manage the screen, which approval rules apply to it and which timezone it inherits; its content does not change. Refused when what the screen plays would need approval at the destination, or when the account is on hold and the move goes into a paying location. Useful for post-migration cleanup. For a flat label that changes no permissions use add_screens_to_group; to make the location first use bulk_create (locations). Requires screen.edit at both the old and the new location.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdNoDestination location id (from list_items kind locations). null or omitted moves the screen to the workspace root.
screenIdYesScreen to move (e.g. scr_aurora_42, from search_screens).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations. It discloses what actually changes (permissions, approval rules, inherited timezone) versus what does not (content), the two refusal conditions (content needing approval at destination, account on hold moving into a paying location), and the required scope (`screen.edit` at both old and new location). The destructive/idempotent annotation hints are consistent with 'single home in the tree.'

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-loads the core action and consequence in the first sentence, then layers refusal conditions, usage scenarios, alternatives, and permissions. Dense and mostly waste-free, though the accumulation of clauses makes it longer than strictly necessary.

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 an output schema present, return values need no explanation, and the description already covers prerequisites, side effects, refusal cases, and alternative tools. Nothing an agent needs to call this 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?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning to nodeId by explaining that the destination governs manage rights, approval rules, and timezone inheritance. It does not add syntax beyond the schema, so it stays shy of a 5.

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 ('Move one screen to a different location (org node)') and immediately distinguishes it from the nearest sibling by noting this is the screen's 'single home in the tree.' An agent can tell it apart from add_screens_to_group and bulk_create without opening a schema.

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 routes the agent: use add_screens_to_group for a flat label that changes no permissions, and bulk_create to create the location first. It also names the scenario ('post-migration cleanup'), so when-to-use and when-to-use-something-else are both covered.

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

bulk_createCreate records in bulkAInspect

Create many records of one kind in one call — the migration and import tool. Pass exactly ONE of: playlists (max 500; items reference media or app-instance ids that already exist; needs playlist.create), schedules (max 200, up to 50 blocks each; times are HH:MM 24-hour in the SCREEN's timezone; needs schedule.create), locations (org-tree nodes, max 1000; each hangs off parentId, parentExternalId — an existing node's Location ID or an EARLIER node in this call — or the Space root; a node whose externalId already exists is skipped, so re-running is safe; needs org-unit.create), celebrations (Celebrations-app birthdays/anniversaries, max 100, each needs a name plus month/day; one bad row is reported, not fatal; needs integration.create). Only creates; to change an existing playlist use update_playlist, to design a screen use create_creatives.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationsNoLocations (org-tree nodes) to create, max 1000 per call. List a parent before its children.
playlistsNoPlaylists to create, max 500 per call.
schedulesNoSchedules to create, max 200 per call.
celebrationsNoCelebration entries to import, max 100 per call. A bad row is reported, the rest are still created.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, but the description adds far more: per-kind permission scopes (playlist.create, schedule.create, org-unit.create, integration.create), idempotency for locations ('a node whose externalId already exists is skipped, so re-running is safe'), and partial-failure semantics for celebrations ('one bad row is reported, not fatal'). It also clarifies that item refs must already exist, which is a real prerequisite not visible in 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?

A single dense paragraph, but it is front-loaded with the core verb and the 'exactly ONE of' rule before enumerating kinds, and each clause carries non-obvious information (limits, permissions, idempotency). The one nit is that the paragraph is long and scannable structure (per-kind bullets) would help an agent parse four variants quickly.

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?

An output schema exists, so return shapes need not be described, and the description still covers everything else an agent needs: which arrays are mutually exclusive, size caps, required pre-existing references, permission scopes, per-kind error behaviour, and where to go for related write operations. Nothing material is left to inference for a four-variant bulk write 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?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema: the mutual exclusivity of the four arrays ('exactly ONE of') is not expressible in the schema, and it specifies that schedule block times are 'HH:MM 24-hour in the SCREEN's timezone', a detail the schema omits. It also reiterates the per-kind caps and parentExternalId ordering, which the schema also covers, so it is additive rather than redundant.

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 ('Create many records of one kind in one call') and then enumerates the four record kinds it accepts with their individual semantics. It also names the sibling it is not — update_playlist and create_creatives — so an agent can distinguish it from neighbouring write tools without opening any schema.

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 frames itself as 'the migration and import tool' and states the cardinal rule 'Pass exactly ONE of' followed by per-kind conditions. It closes with an explicit exclusion and routing ('Only creates; to change an existing playlist use update_playlist, to design a screen use create_creatives'), giving both when-to-use and when-to-use-something-else.

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

capture_device_frameCapture a screenshot from a screenAInspect

Take a screenshot of one screen now and return it as an image, to check what is actually on the panel. Sends a screenshot command to the player, waits up to about 5 seconds for the new frame, then returns the newest stored frame with fresh (true only when it was taken after this call), latestFrameAt, latestScreenshotId and latestFrameUrl. A slow or offline screen returns its last stored frame with fresh:false (no image if it never sent one); a frame over 2 MB comes back without the inline image. Use screen_health to explain WHY a screen shows something. Requires screen.edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
screenIdYesScreen to capture, e.g. scr_aurora_42; find ids with search_screens. One screen per call.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Discloses behavior well beyond the annotations: it sends a command, waits ~5s for a new frame, defines the `fresh` flag semantics, and specifies fallbacks for slow/offline screens (last stored frame, fresh:false) and oversized frames (>2 MB no inline image). It also states the required `screen.edit` permission. This is consistent with readOnlyHint=false, since a command is dispatched to the player.

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 the action and its output, then progressively layers timeout, return fields, and fallbacks. Dense but every sentence carries distinct operational information; the return-field enumeration is slightly redundant given an output schema exists.

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?

Covers everything an agent needs: the permission requirement, the wait/timeout, the freshness semantics, and the degraded-path behavior for offline or oversized frames. An output schema exists, so the additional return-field detail is bonus rather than a gap.

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 100% and the schema already documents screenId with an example and a pointer to search_screens. The description only adds the constraint 'One screen per call,' which the schema already implies via a single required screenId, so baseline 3 applies.

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 ('Take a screenshot of one screen now and return it as an image') with explicit scope ('one screen'). It also distinguishes its role from the diagnostic sibling by directing agents to screen_health for 'WHY' questions.

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 a clear purpose ('to check what is actually on the panel') and names screen_health as the alternative for a related-but-different question. It does not, however, address when to use this versus other screen-state siblings like refresh_screen.

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

cast_contentCast content over the scheduleA
DestructiveIdempotent
Inspect

Show EXISTING content on screens as a TIMED takeover (a cast) — screens return to their normal schedule when it expires. Scope it to everything (all), an org node subtree, or explicit screenIds. This is the tool for 'put the lunch menu on the lobby screens until 2pm'. Returns castId; pass it to end_cast to stop early. Use assign_content for a lasting change, quick_post to write a new message, trigger_emergency_template for an emergency. Requires screen.cast.

ParametersJSON Schema
NameRequiredDescriptionDefault
headlineNoDisplay name recorded for the cast.
contentIdYesId of the existing content to show, from search_media or list_items.
expiresAtNoISO datetime the cast ends. Default: one hour from now.
scopeKindNoDefault all — every screen this key can reach.
screenIdsNoWith scopeKind=screens: explicit targets (max 500).
contentKindYesKind of content contentId names.
scopeNodeIdNoWith scopeKind=node: the org-node subtree to cast across.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and idempotentHint=true but say nothing about reversibility or auth. The description adds that screens revert to their normal schedule on expiry, that it returns a castId routable to end_cast, and that it requires `screen.cast`. That is substantive context beyond the structured fields, and it does not contradict the destructive flag.

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?

Front-loaded with the core behavior, then scope, then the canonical example, then alternatives, then the return/permission notes. Every sentence carries distinct information 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?

Covers purpose, scope options, reversibility, the stop-early path via end_cast, the permission requirement, and sibling routing. With an output schema present, it does not need to detail return shape, and it still surfaces the castId handoff that matters operationally.

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 100%, so the baseline is 3. The description adds real value by explaining the scope axis ('everything (all), an org node subtree, or explicit screenIds') and reinforcing that contentId must reference EXISTING content, mapping the two enum parameters to intent rather than just restating them.

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+resource+behavior: 'Show EXISTING content on screens as a TIMED takeover (a cast)'. It explicitly distinguishes itself from siblings assign_content, quick_post, and trigger_emergency_template, so an agent can route correctly without opening schemas.

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?

Gives a concrete usage scenario ('put the lunch menu on the lobby screens until 2pm') and explicit alternatives with selection conditions: assign_content for a lasting change, quick_post to write new content, trigger_emergency_template for emergencies. Nothing is left to inference.

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

clear_screen_cacheClear a screen's stored contentA
DestructiveIdempotent
Inspect

Delete the content files stored on one screen or many (screenIds) so the player downloads them again. Media can show late or blank while it downloads. Use when a screen plays an old or damaged file; try refresh_screen first, which keeps the stored files. In a bulk call, screens outside your reach are skipped. Requires screen.edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
screenIdNoOne screen id, from search_screens.
screenIdsNoBulk alternative: every listed screen (max 200) in one call.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare the safety profile (destructive, idempotent, openWorld, not readOnly), but the description adds what they cannot: the visible side effect that media may show late or blank during re-download, that bulk calls silently skip screens outside your reach, and the required `screen.edit` permission. That is exactly the extra context annotations cannot carry.

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?

Four short sentences, front-loaded with the action and effect, then the when-to-use, then the alternative, then the permission requirement. No filler or repetition of the title.

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?

Covers the mutation, its user-visible consequence, the fallback tool, bulk behavior, and the auth scope; an output schema exists so return values need no explanation. Nothing an agent needs to call this 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?

Schema coverage is 100%, so the baseline is 3; the description goes beyond it by explaining the relationship between screenId and the bulk screenIds path and that out-of-reach screens in a bulk call are skipped rather than erroring. It stops short of restating the 200-item cap, which lives in 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?

States a specific verb and resource ('Delete the content files stored on one screen or many') plus the downstream effect ('so the player downloads them again'), which is exactly the distinction an agent needs. It also implicitly separates itself from refresh_screen by contrast later in the text.

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?

Explicit when-to-use ('when a screen plays an old or damaged file') and an explicit preferred alternative with the reason it should be tried first ('try refresh_screen first, which keeps the stored files'). This is a textbook when/when-not/alternative statement.

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

create_creativesCreate designsAInspect

Author new creatives (data-bound canvases) from scratch. This is how you BUILD templates programmatically. Each: { name, stage?:'landscape'|'portrait', backgroundUrl?, dataSourceId?, nodeId?, boxes:[…] }. A box is { kind, x, y, w, h, … } where x/y/w/h are 0–1 fractions of the stage and kind is one of text|field|list|image|shape|celebrations|event-board|signage|group|slot. Shapes use { shape:'rect'|'circle'|'line'|'triangle', fill, stroke, strokeWidth, cornerRadius }; text uses { text, color, fontWeight, align, fontSize? }; field/list bind via { field:'dot.path' }; image uses { url }; slot is a transparent hole the screen fills with real content, like a layout zone — { slot: { kind:'media'|'playlist'|'app', id, name } } naming a file / playlist / app in THIS workspace (or slot:null for an empty hole the customer fills later; borderRadius clips what plays there); signage is a full Signage Template Engine block — { signage: { archetype, style, mode, industry, orientation, content, anim } } — rendered 1:1 (layout + animations), usually one full-bleed box (x:0,y:0,w:1,h:1). Boxes are validated + clamped server-side; an invalid box rejects the whole call. Max 100 creatives per call. Designs also pass a quality gate (the Brix template standard): REJECTED with named findings when text pins under 24px (1920w scale), an authored contrast pair computes <3:1, or one layer fully hides another; WARNED as structured diagnostics for busy layouts (>36 content layers), >5 font sizes, >2 font families, hand-frozen list rows that should be ONE list box, static clock/date copy instead of {{now.*}} tokens, and competing loop animations. Treat warnings as defects: fix and re-emit. Creating a design shows it nowhere; put it on screens with assign_content or cast_content. For a one-off text announcement use quick_post.

ParametersJSON Schema
NameRequiredDescriptionDefault
creativesYesCreatives to create, max 100 per call. One invalid box rejects the whole call.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Goes well beyond the annotations (which only declare non-read-only, non-destructive, closed-world) by disclosing server-side validation/clamping, whole-call rejection on an invalid box, a 100-creative cap, and the full quality-gate behavior including specific REJECT and WARN conditions. This is exactly the operational context an agent needs before invoking.

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 and alternatives are front-loaded and almost every sentence carries information, but the box-kind documentation is delivered as one dense run-on paragraph rather than clearly delimited, which slows parsing for a payload this complex.

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 complex write tool with an output schema already present, the description covers creation semantics, validation/failure modes, the quality gate, limits, and the follow-up tooling to make the design visible. Nothing necessary for correct invocation 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 coverage is 100%, but the description adds meaning the schema does not: the per-kind extra fields for text, field, list, image, shape, signage, and slot layers, plus the 0–1 fractional coordinate semantics and the 'slot:null = empty hole' convention. It substantially exceeds the schema on the most consequential nested payload.

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 ('Author new creatives (data-bound canvases) from scratch') and frames the tool's role as the programmatic template-building path. It explicitly distinguishes itself from assign_content, cast_content, and quick_post, so an agent can route without opening a schema.

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?

Gives explicit when-to-use ('This is how you BUILD templates programmatically') and what happens after ('Creating a design shows it nowhere; put it on screens with assign_content or cast_content'). It also names a direct alternative with its triggering condition ('For a one-off text announcement use quick_post').

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

create_screen_groupCreate a screen groupAInspect

Create a named screen group: a saved set of screens you handle together, such as 'all lobby TVs'. A group is a flat label; it can cross locations, a screen can be in many groups, and it grants no permissions. Optionally add the first members with screenIds. Refused when a group with that name already exists. Add members later with add_screens_to_group; to change where a screen lives in the location tree use assign_screen_to_node. Requires screen.edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesGroup name, unique in the workspace; up to 120 characters.
screenIdsNoInitial members (ids from search_screens), max 5000; foreign/out-of-scope ids are skipped silently.
descriptionNoOptional note about the group, up to 500 characters.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (which only say it is a non-read-only, non-destructive, closed-world write), the description discloses the duplicate-name refusal, that out-of-scope screenIds are skipped silently, that groups carry no permissions, and the required `screen.edit` permission.

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 the definition of the resource before mechanics and routing. Dense but each clause (uniqueness, permission, cross-location semantics) carries distinct information; only slightly long for a single-create tool.

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?

An output schema exists so return values need no explanation. The description covers authorization, failure mode, member-add semantics, and sibling routing, leaving no obvious gap for an agent to call this correctly.

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 100%, so name, screenIds and description are already fully documented. The description only restates that members are optional via screenIds; it adds no format, limit or interaction detail beyond the schema, so the baseline 3 applies.

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 ('Create a named screen group') and immediately defines what the resource is ('a saved set of screens you handle together'). The clarification that a group is a flat label that grants no permissions distinguishes it from location-tree or permission constructs.

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 routes the agent: add members later with add_screens_to_group, and use assign_screen_to_node to change where a screen lives. It also states the precondition that creation is refused on a duplicate name, so the agent knows when this call will fail.

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

decide_approvalApprove or reject contentA
Destructive
Inspect

Approve or reject one pending approval request (from list_pending_approvals). Approving lets the content air where it is assigned; rejecting keeps it off screens and needs a reason. Only works when this connection's identity is an approver for the request's chain; otherwise the call is refused. Use list_pending_approvals to see what is waiting.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNoWhy: required for reject, an optional note for approve.
decisionYesapprove lets the content air; reject keeps it off screens.
approvalIdYesApproval request id (ar_…), from list_pending_approvals.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (destructiveHint true, readOnlyHint false), and the description adds real value beyond them: the concrete effect of each decision (content airs vs stays off screens), the requirement of a reason for reject, and the authorization constraint that causes refusal. It does not address reversibility or rate limits, but the added auth and effect disclosure is substantive.

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 the action and appropriately sized for a mutation with authorization constraints. There is minor redundancy in referencing list_pending_approvals both parenthetically up front and again in the final sentence.

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?

Output schema exists, so return values need not be explained, and the description covers the key gaps an agent needs: decision effects, the reason requirement, and the approver-identity precondition. Complete enough to invoke correctly, with only minor omissions around post-decision state.

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 100%, so the schema already documents approvalId, decision (with enum), and the conditional reason requirement. The description's note that rejecting 'needs a reason' reinforces but does not meaningfully extend what the schema states, so baseline 3 is appropriate.

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 pair (approve/reject) and a specific resource (one pending approval request), and explicitly ties the request to the list_pending_approvals sibling as its source. An agent can distinguish it from list_pending_approvals without opening either schema.

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?

Clearly states the prerequisite condition — the connection identity must be an approver for the request's chain, otherwise the call is refused — and points to list_pending_approvals for discovery. It lacks an explicit 'do not use this instead of X' exclusion, but the when-to-use context is strong.

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

end_castEnd a castA
DestructiveIdempotent
Inspect

End an active cast early on EVERY screen it covers in one call — its screens return to scheduled content immediately. Pass the castId that quick_post or cast_content returned (one cast covers all of its screens; do not call once per screen). The creativeId/contentId of what is being cast also works. Ending a cast that already ended succeeds. Requires screen.cast.

ParametersJSON Schema
NameRequiredDescriptionDefault
castIdYesThe castId returned by quick_post or cast_content (ends it on all its screens). The content id being cast also works.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare destructive=true and idempotent=true. The description still adds real context beyond them: the concrete effect (screens revert to scheduled content immediately) and an explicit authorization requirement (screen.cast), which annotations do not convey. It stops short of covering failure modes or partial-success semantics, so it is not a 5.

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 dense sentences, front-loaded with the action and scope. The per-screen warning and the auth requirement are parenthetical and each earn their place 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?

An output schema exists, so return values need not be explained. For a single-parameter mutation the agent gets the effect, the permission needed, the idempotency behavior, and the correct identifier source — nothing material 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?

Schema description coverage is 100%, so a 3 is the baseline. The description goes further by stating the parameter accepts either the returned castId or the creativeId/contentId of the content being cast, and by clarifying that one cast covers all its screens — semantics that help the agent supply the right 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?

States a specific verb+resource (end a cast) and immediately scopes it: it ends the cast on EVERY screen it covers, and the covered screens go back to scheduled content. This distinguishes it from siblings like cast_content/quick_post, which create casts rather than terminate them.

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 tells the agent where the castId comes from (quick_post or cast_content), warns against the common wrong pattern (do not call once per screen), and notes that ending an already-ended cast succeeds. These are concrete when/how-to-invoke instructions, not inference.

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

get_device_test_runGet device test resultsA
Read-only
Inspect

Read a Device Lab run that start_device_test_run queued: the run (status, suite, device, summary) and its per-step results (pass/fail, expected vs observed, time taken). Poll it until the run has finished. Each step's frameKey only records that a proof frame was captured; it is not a URL you can fetch. For a screenshot you can see, use capture_device_frame. A run outside the locations you can see reads as not found.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesThe runId (dtr_…) that start_device_test_run returned.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly/non-destructive annotations, it discloses the polling requirement, the visibility scoping rule that makes out-of-location runs appear missing, and the trap that frameKey records a proof frame rather than a fetchable URL. These are exactly the behaviors an agent would otherwise get wrong.

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?

Front-loaded with the core action, then four tight sentences covering polling, the frameKey caveat, the alternative tool, and the scoping rule. No sentence is 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?

An output schema exists so return-value explanation is unnecessary, annotations cover the safety profile, and the description supplies the remaining operational context (poll loop, scoping, caveats). Nothing needed to invoke it correctly is missing.

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 100% and the schema already documents runId as the '(dtr_…)' value returned by start_device_test_run, so the description adds no syntax or format detail beyond it. Baseline 3 for a fully documented single parameter.

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 ('Read a Device Lab run that start_device_test_run queued') and enumerates the returned payload (status, suite, device, summary, per-step pass/fail, expected vs observed, time taken). It clearly differentiates itself from start_device_test_run (the producer) and capture_device_frame (the screenshot path).

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 instructs to poll until the run has finished, routes screenshot needs to capture_device_frame, and explains the cross-location failure mode ('reads as not found'). Both when-to-use and the alternative path are stated outright.

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

get_playlistRead a playlist's itemsA
Read-only
Inspect

Read one playlist: its name and its items in play order, each with the item id update_playlist needs, the content it plays and how long it shows. Also returns its approvalState and shuffle setting. Find playlist ids with list_items (kind playlists); change the playlist with update_playlist. Requires playlist.view.

ParametersJSON Schema
NameRequiredDescriptionDefault
playlistIdYesPlaylist id (pl_…), from list_items kind playlists.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description adds real value on top by naming the required scope (`playlist.view`) and itemizing the returned structure, including the item id that update_playlist consumes. It does not discuss pagination or limits on very large playlists, which keeps it short of a 5.

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 sentences, front-loaded with what is returned, then routing and permission. Every clause carries information; nothing is restated from the schema or annotations.

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 read tool with an output schema, an output schema already documents the return shape, and annotations cover safety. Adding the permission requirement and id provenance makes the definition fully sufficient 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 coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by tying playlistId provenance to list_items (kind playlists) and clarifying that the returned item ids are what update_playlist needs. That cross-tool semantics for identifiers is genuine added 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?

States a specific verb and resource ('Read one playlist') and enumerates exactly what comes back: name, items in play order, item ids, content, duration, approvalState, shuffle. It is immediately distinguishable from siblings such as list_items, update_playlist, and get_proof_of_play.

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?

Gives explicit routing: use list_items (kind playlists) to find ids, use update_playlist to change the playlist, and states the required `playlist.view` permission. Both the 'when to use' and the 'use this instead' alternatives are named.

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

get_proof_of_playGet a proof-of-play reportA
Read-only
Inspect

Proof-of-play rollup for a time window: plays, watch time, skips and failures per piece of content, plus which screens reported. Answers 'how did the promo actually do?'. Counts only screens in locations you can see. Use get_uptime_report for whether screens were online, search_audit_log for who changed the content. Requires playback-log.view.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoISO datetime; default now.
fromNoISO datetime; default: the start of the workspace's playback-history window.
screenIdNoRestrict to one screen's report.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/non-destructive/openWorld=false, so the safety profile is covered. The description adds meaningful behavioral context beyond that: results are scoped to 'screens in locations you can see' and calling requires the `playback-log.view` permission. It does not mention pagination or result-size behavior, keeping it just short of a 5.

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?

Tight and front-loaded: the core output description comes first, then the disambiguating siblings, then the permission. Every sentence earns its place 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?

An output schema exists so return format needn't be restated, and annotations cover safety. The description still supplies the scoping rule, permission prerequisite, and sibling disambiguation, making it complete for an agent to call correctly.

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 100%, with ISO-datetime defaults documented for to/from and the screenId restriction explained inline, so the schema carries the burden. The description's 'time window' phrasing adds only modest semantic framing over that baseline.

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 report verb and resource ('proof-of-play rollup for a time window') and enumerates its contents (plays, watch time, skips, failures per piece of content, reporting screens). The framing question 'how did the promo actually do?' further pins the intent, and it is clearly distinct from uptime and audit siblings.

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 routes to alternatives with the selecting condition: get_uptime_report for whether screens were online and search_audit_log for who changed content. It also states the data-scope constraint and the required permission, leaving nothing to inference.

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

get_uptime_reportGet an uptime reportA
Read-only
Inspect

Uptime/SLA summary for a time window: online % per screen, downtime windows (each with its cause), worst offenders first. Every screen, location and the fleet carry an outageSummary — cause counts, the top cause and a plain-language insight such as 'went down 6 times in the last 30 days, all Wi-Fi drops'. Covers screens in locations you can see; deleted screens are left out. A from/to that is not ISO 8601 is refused. Use screen_health (view outages) for one screen's outage list, list_open_alerts for what is wrong right now, get_proof_of_play for what actually played. Requires screen.view.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoISO datetime; default now.
fromNoISO datetime; default: the start of the outage-history window (30 days unless the workspace changed it).
screenIdNoOnly this screen (e.g. scr_aurora_42, from search_screens); omit for every screen you can see.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description goes well beyond that by disclosing the visibility scope, the deletion exclusion, the input validation rule ('a from/to that is not ISO 8601 is refused'), and the required permission. It also describes the per-entity outageSummary content an agent will receive.

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?

Front-loaded with the core purpose and result shape, then scope, then validation, then sibling routing, then permissions. Dense but every sentence carries distinct information 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?

Despite an output schema existing (so return details are not strictly required), the description still explains the outageSummary structure and insight format, and covers scope, auth, validation, and alternatives. Nothing an agent needs to call it 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?

Schema coverage is 100%, so the three params with their defaults are already documented, making 3 the baseline. The description adds genuine meaning beyond the schema by specifying the ISO 8601 validation behavior and the default window semantics (30 days unless the workspace changed it), though it does not restate per-param syntax.

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+resource ('Uptime/SLA summary for a time window') and immediately enumerates the output shape: online % per screen, downtime windows with causes, worst offenders first. It is unmistakable against siblings like screen_health and get_proof_of_play, which it names directly.

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?

Routes the agent with explicit alternatives and the condition that selects each: 'screen_health (view outages) for one screen's outage list, list_open_alerts for what is wrong right now, get_proof_of_play for what actually played.' It also states scope ('screens in locations you can see; deleted screens are left out') and the required scope 'screen.view'.

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

list_emergency_templatesList emergency templatesA
Read-only
Inspect

List the pre-armed emergency takeover templates (Lockdown, Severe weather, Fire drill, …) with their ids, scope and severity. Pass an id to trigger_emergency_template — never guess one. Read-only; templates homed outside your locations are not shown. Requires emergency-override.view.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Goes beyond the readOnlyHint annotation by disclosing the visibility constraint (templates homed outside your locations are hidden) and the required permission scope `emergency-override.view`. The 'Read-only' restatement is redundant with annotations, but the auth and scoping details are genuinely additive.

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 tightly packed sentences with the resource, the downstream handoff, the scope caveat, and the permission requirement front-loaded. No filler and no repetition of structured data.

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?

An output schema exists, so return shapes need not be documented, and the description still names the key fields (ids, scope, severity). Between the permission requirement, visibility scope, and the id-handoff warning, an agent has everything needed to call this 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 tool takes zero parameters, so the schema carries no per-parameter burden and the baseline is 4. The description's mention of 'Pass an id' refers to the sibling trigger tool rather than an input here, which could momentarily confuse but harms nothing.

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 ('List the pre-armed emergency takeover templates') and disambiguates with concrete examples (Lockdown, Severe weather, Fire drill). It also names the fields returned (ids, scope, severity) and distinguishes itself from the write-side sibling trigger_emergency_template.

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 to trigger_emergency_template and warns 'never guess' an id, implying this list must be consulted first. It also states a scope condition (templates homed outside your locations are not shown). It stops short of an explicit when-to-use/when-not-to-use statement but the downstream routing is clear.

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

list_itemsList playlists, locations and other itemsA
Read-only
Inspect

List one kind of item in this workspace with its id and a few fields, to pick an id for another tool. Kinds: playlists, schedules, layouts, apps, data_sources, screen_groups, locations, media_folders, active_casts (casts running now). Filter by name with q; page with offset (100 a page; the response gives total and hasMore). Each row is a short projection (id, name, location and counts such as itemCount or memberCount), never full configs, members or billing. Each kind uses its own view permission, so a kind this connection cannot read returns an error. For media files use search_media; for screens use search_screens; for one playlist's items use get_playlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoOnly items whose name contains this text (case-insensitive).
kindYesWhich kind of item to list; see the tool description.
offsetNoSkip this many matching items (default 0).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), but the description goes well beyond them: page size (100), that the response carries total/hasMore, that rows are a short projection never full configs/members/billing, and that each kind is gated by its own view permission and errors if unreadable. That last point is operationally critical and cannot be derived from 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?

Four sentences, each with a distinct job: purpose and kinds, filtering/paging mechanics, return shape, then sibling routing. Nothing is repeated and the selection-critical content is front-loaded.

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?

An output schema exists, so return values need no further explanation, yet the description still flags the projection boundary (no members or billing) that an agent would otherwise have to guess at. Combined with the permission-error behavior, nothing needed to invoke this 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?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond it: offset is quantified as '100 a page' with total/hasMore in the response, and the kind parameter is tied to the per-kind permission model. The q parameter's case-insensitive substring match is only restated from the schema, which keeps this below 5.

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 gives a specific verb and resource ('List one kind of item in this workspace') and enumerates the nine kinds inline, so an agent knows exactly what the tool returns without opening the schema. It also states the instrumentation-level purpose ('to pick an id for another tool'), which distinguishes it from read-for-display siblings.

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?

Explicit routing: 'For media files use search_media; for screens use search_screens; for one playlist's items use get_playlist.' Combined with the positive 'to pick an id for another tool' framing, an agent can decide between this tool and its nearest siblings without inference.

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

list_open_alertsList open alertsA
Read-only
Inspect

List alerts that are open now (not yet closed), newest first, 200 per page. Filter by severity, one screen or one location; page with offset (the response gives total, hasMore and nextOffset). Only alerts in locations this connection can see are returned. Use it for 'what is wrong right now'; for one screen's past outages use screen_health, for uptime over a window use get_uptime_report, for a list of screens by status use search_screens.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdNoOnly alerts raised at exactly this location (org node id from list_items kind locations); alerts of its child locations are not included.
offsetNoSkip this many matching alerts (default 0).
screenIdNoOnly alerts for this screen (e.g. scr_aurora_42, from search_screens).
severityNoOnly alerts of this severity.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations cover the safety profile, and the description goes further by disclosing result ordering (newest first), page size (200), the response's pagination contract (total, hasMore, nextOffset), and an authorization constraint ('only alerts in locations this connection can see'). That permission-scoping detail is exactly the kind of context annotations cannot express.

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 tight sentences: capability and scope first, paging/filtering second, sibling routing last. No sentence is redundant and the most decision-relevant information is front-loaded.

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 an output schema present, return values need not be explained. The description covers filtering, ordering, pagination, visibility constraints, and alternative tools, so an agent has everything needed to select and invoke it correctly.

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 100%, so all four parameters are already documented in the schema, including the node vs. screen distinction and the offset default. The description only summarizes filters already present ('severity, one screen or one location') and adds no syntax or format detail, so the baseline of 3 applies.

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 with scope qualifiers: 'List alerts that are open now (not yet closed), newest first, 200 per page.' It explicitly differentiates itself from siblings by naming screen_health, get_uptime_report, and search_screens for adjacent needs.

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?

It gives an explicit when-to-use ('what is wrong right now') and three named alternatives with the exact condition that selects each, leaving nothing to inference.

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

list_pending_approvalsList content awaiting approvalA
Read-only
Inspect

List approval requests: content waiting for an approve/reject decision before it can air. Defaults to pending; pass state to see decided history. Content created or edited over this connection lands as draft when its location requires approval, so check here to see what is waiting. Read-only; to approve or reject one, pass its id to decide_approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size (default 50).
stateNoFilter by decision state (default pending). withdrawn = the requester took it back.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds real behavioral context beyond that: the workflow note that content created or edited over this connection lands as draft when its location requires approval, which explains why items appear here. It does not discuss pagination behavior, keeping it short of a 5.

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, front-loaded with purpose and scope, then the default, then the sibling handoff. No sentence is redundant and nothing is buried.

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 two-parameter read-only list tool with an output schema present, the description covers purpose, defaults, filter semantics, the underlying workflow that generates pending items, and the handoff to decide_approval. Nothing an agent needs to select and call it 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?

Schema coverage is 100%, so both parameters are already documented, including the 'withdrawn' enum meaning. The description still adds value by framing the state parameter in workflow terms ('see decided history') and restating the pending default, which clarifies intent beyond the raw enum.

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+resource ('List approval requests') and immediately scopes it to 'content waiting for an approve/reject decision before it can air.' This clearly separates it from the sibling decide_approval, which acts on a single item rather than listing them.

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?

It states the default behavior ('Defaults to pending'), the alternative state filter ('pass state to see decided history'), and the routing rule to the sibling mutation tool ('to approve or reject one, pass its id to decide_approval'). When-to-use and when-to-use-something-else are both explicit.

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

list_recycle_binList the recycle binA
Read-only
Inspect

List soft-deleted items across every content kind within the 30-day restore window, newest deletion first, with what used them before deletion. Paged (default 50). Filter by kind or name to find one item. Pass a row's kind and id to restore_recycle_bin_item for 'undo that delete' requests. Deleted screens appear here too, in the same 30-day window. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoCase-insensitive match on the item's name.
kindNoOnly this kind: screen, media, playlist, schedule, layout, creative, app, data-source, signage, banner or media-folder.
limitNoPage size (default 50).
offsetNonextOffset from the previous page.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare the safe read-only, non-destructive profile, but the description adds real operational context beyond them: the 30-day restore window, newest-deletion-first ordering, default page size of 50, and that soft-deleted screens are included. The closing 'Read-only' merely repeats the annotation, and it does not cover auth or pagination mechanics beyond the default, so it stops short of a 5.

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 purpose and scope are front-loaded, then paging, filtering, restore routing, and the screen inclusion note follow logically. Every sentence serves a purpose except the redundant 'Read-only,' which duplicates the annotation.

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 an output schema present, return values need not be described, and safety is covered by annotations. The description supplies the remaining essentials: scope, retention window, ordering, paging, filtering, and the sibling handoff for restoration.

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 100%, so the schema fully documents q, kind, limit, and offset; baseline is 3. The description explains the intent of filtering ('to find one item') but adds no parameter syntax, format, or constraints beyond what the schema already provides.

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 ('List soft-deleted items') and scopes it to every content kind within the 30-day restore window. It distinguishes itself from the sibling restore_recycle_bin_item by naming it explicitly and explaining the handoff. An agent can identify the operation and its boundary without opening either schema.

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?

Directly routes the agent: use this tool to list and filter, and pass a row's kind and id to restore_recycle_bin_item for undo requests. It also states how to find a single item via the kind or name filters. The when-to-use and the alternative are both explicit.

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

quick_postPost a quick message to screensA
Destructive
Inspect

Write a short text announcement and show it on screens in ONE step — the agent twin of Quick Post. Creates a full-screen creative (headline + optional body on a tone colour) and casts it over the schedule for expiresInSec, then the screens go back to normal. If the scope reaches no screens, nothing is created; if the cast fails, the creative is removed. Returns castId; pass it to end_cast to take the post down early. Use cast_content to show content that already exists, trigger_emergency_template for an emergency. Needs creative.create and screen.cast.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoOptional smaller text under the headline, up to 400 characters.
toneNoPicks the background treatment. Default announcement.
headlineYesMain text, up to 120 characters.
scopeKindNoWhere it shows. Default all — every screen this connection can reach.
screenIdsNoWith scopeKind=screens: the screen ids (from search_screens).
scopeNodeIdNoWith scopeKind=node: location id (from list_items kind locations); every screen at or under it.
expiresInSecNoHow long the message stays up (default 3600).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations declare destructive/openWorld write semantics, and the description goes beyond them with transactional behavior: no screens reached means nothing is created, a failed cast removes the creative, the post auto-expires after expiresInSec, and it requires `creative.create` and `screen.cast`. That is meaningful context an agent cannot get from the annotations alone.

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-loads the one-step atomic behavior, then stacks behavior, return value, alternatives, and permissions in dense but non-redundant sentences. Slightly packed, but no sentence is 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?

Despite an output schema existing, the description still explains the one return value that matters operationally (castId feeding end_cast). For a 7-parameter mutation with rollback semantics, nothing an agent needs to invoke it correctly is missing.

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 100%, so every parameter is already documented in the schema (including enum meanings and cross-references to search_screens/list_items). The description reinforces the headline+body+tone composition and the expiresInSec lifespan but adds no new syntax or constraints. Baseline 3 applies.

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+resource ('Write a short text announcement and show it on screens in ONE step') and explicitly positions itself against siblings ('Use cast_content to show content that already exists, trigger_emergency_template for an emergency'). An agent can pick it apart from cast_content without opening the schema.

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?

Gives explicit when-to-use routing to two named alternatives and states the selection condition for each (existing content vs. emergency). It also covers the follow-up case: pass castId to end_cast to take the post down early.

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

reboot_screenRestart a screen's playerA
Destructive
Inspect

Restart the player on one screen or many (screenIds). The screen is blank until the player starts again, usually under a minute. Use when a screen is frozen or shows an error; when content is only out of date, refresh_screen is gentler. In a bulk call, screens outside your reach are skipped. Requires screen.edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
screenIdNoOne screen id, from search_screens.
screenIdsNoBulk alternative: every listed screen (max 200) in one call.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and non-idempotent, but the description adds context annotations cannot convey: the screen goes blank until the player restarts (typically under a minute), screens outside your reach are silently skipped in bulk calls, and the `screen.edit` permission is required. This is exactly the operational context an agent needs before invoking a disruptive restart.

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?

Four short sentences, each earning its place: capability, impact/duration, usage routing, partial-failure behavior, and auth requirement. The core action is front-loaded before the caveats.

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?

An output schema exists, so return values need no explanation. Combined with the downtime estimate, permission requirement, and bulk-skip semantics, the description covers everything an agent needs to invoke this disruptive tool safely.

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 100%, so both parameters (screenId, screenIds) and their formats are already documented in the schema. The description references the bulk form but adds no syntax or format detail beyond what the schema provides, so baseline 3 applies.

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 ('Restart the player on one screen or many') with the scope of the bulk variant. It explicitly differentiates itself from the sibling refresh_screen, so an agent can route correctly without opening either schema.

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?

Gives a clear trigger ('when a screen is frozen or shows an error') and names the alternative with the condition that selects it ('when content is only out of date, refresh_screen is gentler'). This is explicit when-to-use and when-to-use-something-else guidance.

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

refresh_all_data_sourcesRefresh all data sourcesAInspect

Sync EVERY connected data feed in this workspace that you can edit, one after another. One failing feed does not stop the rest; returns total, ok and failed counts. Limited to 5 calls a minute. Use before big announcements so menus/prices are current; for one feed use sync_data_source. Requires integration.edit.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (readOnly=false, destructive=false, openWorld=true), the description discloses failure semantics ('one failing feed does not stop the rest'), a rate limit (5 calls a minute), and the required permission scope ('integration.edit'). These are operationally critical traits no structured field conveys.

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 tight sentences, front-loaded with the core scope, then failure/limit behavior, then usage guidance. Every clause carries distinct information 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?

Although an output schema exists, the description supplies the remaining operational context an agent needs: failure isolation, rate limiting, permission requirement, and sibling routing. Nothing essential is missing 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?

The tool takes zero parameters, so per the rubric the baseline is 4. The description adds nothing parameter-related, which is appropriate since there is nothing to document.

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 (sync) and resource (EVERY connected data feed in this workspace) with an explicit scope qualifier ('that you can edit'). It cleanly distinguishes itself from the sibling sync_data_source by name, so an agent can select correctly without opening either schema.

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?

It gives a concrete when-to-use ('before big announcements so menus/prices are current') and an explicit alternative with its selecting condition ('for one feed use sync_data_source'). This is exactly the when/when-not/alternative guidance the dimension asks for.

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

refresh_screenReload a screen's contentA
Idempotent
Inspect

Make one screen or many (screenIds) download and play their current content again, without a restart. Use after a change that has not appeared on the screen yet. Use reboot_screen if the player is frozen, clear_screen_cache if it keeps playing an old or broken file. In a bulk call, screens outside your reach are skipped. Requires screen.edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
screenIdNoOne screen id, from search_screens.
screenIdsNoBulk alternative: every listed screen (max 200) in one call.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context: no restart is required, unauthorized screens are silently skipped in bulk, and the `screen.edit` permission is required. It stops short of describing latency/return behavior, which keeps it at a 4 rather than 5.

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 tight sentences, front-loaded with the action and the primary routing guidance (the alternatives) immediately after. Every sentence carries decision-relevant information 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?

An output schema exists, so return values need not be explained. Permission requirements, alternatives, and bulk-skip semantics are all covered, giving the agent everything needed to call this correctly.

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 100% — both screenId (from search_screens) and screenIds (bulk, max 200) are fully documented in the schema. The description only restates the single-vs-bulk split without adding syntax or format detail, so the baseline 3 applies.

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 concrete verb and resource ('Make one screen or many download and play their current content again, without a restart') and scopes it precisely. An agent can distinguish it from reboot_screen and clear_screen_cache from the description alone, without opening either schema.

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?

Gives explicit when-to-use ('after a change that has not appeared on the screen yet') and names two alternatives with their selecting conditions: reboot_screen for a frozen player, clear_screen_cache for a stuck/broken file. It also discloses bulk-call scoping (screens outside your reach are skipped), leaving nothing to inference.

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

remove_screens_from_groupRemove screens from a groupA
DestructiveIdempotent
Inspect

Take screens out of a screen group — only the label drops; the screens, their content and their location are untouched, and the group stays (even when empty). Ids outside your reach are skipped and counted (skipped); ids not in the group are ignored. Returns how many were removed and their ids. To add screens use add_screens_to_group. Requires screen.edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupIdYesScreen group id (sgrp_…), from list_items kind screen_groups.
screenIdsYesScreens to take out (ids from search_screens), 1 to 5000.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations: it clarifies that despite destructiveHint=true nothing is deleted (content and location untouched, group persists even when empty), discloses permission requirements, and explains edge-case handling (skipped ids counted, non-member ids ignored). This is exactly the kind of nuance annotations cannot 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?

Front-loads the core action and the key clarification (label-only removal) in one dense sentence, then adds routing and permission in a second. Every clause earns its place, though the long parenthetical chain makes it slightly heavy to parse.

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?

Covers purpose, the alternative tool, permission requirement, and id edge cases for a two-param mutation with full schema coverage and an output schema that handles return values. The only missing element is any mention of scale/rate considerations for the 5000-id upper bound.

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 100%, so both parameters are already documented with id prefixes and list/range constraints; the description adds only the `skipped` outcome vocabulary. Baseline 3 is appropriate when the schema carries the parameter burden.

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+resource ('take screens out of a screen group') and immediately disambiguates the scope of the mutation: only the label drops, the screens and their location remain. It also names the inverse sibling (add_screens_to_group), so an agent can pick between the two without inspecting schemas.

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 explicit routing to the alternative ('To add screens use add_screens_to_group') and states the required permission (`screen.edit`), plus how out-of-reach and non-member ids are handled. It lacks an explicit 'do not use this when...' clause, which is the only gap.

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

restore_recycle_bin_itemRestore from the recycle binA
Idempotent
Inspect

Restore ONE soft-deleted item from the recycle bin (kind from list_recycle_bin). Playlists/screens referencing it resume automatically where they still do. Each kind's own permission applies (e.g. playlist.delete restores playlists). Purging (permanent deletion) is not part of this tool. Find the kind and id with list_recycle_bin first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe item's id, from list_recycle_bin.
kindYesThe item's kind, exactly as list_recycle_bin shows it.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly=false, idempotent=true and destructive=false, but the description adds real behavioral context beyond them: referencing playlists/screens resume automatically, per-kind permission requirements (e.g. playlist.delete), and that purging is out of scope. It stops short of noting irreversibility or failure modes, so a 4 rather than 5.

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-loads verb and scope efficiently, and every sentence carries useful information about side effects, permissions, and exclusions. Slight redundancy from referencing list_recycle_bin twice (for kind and again at the end) prevents a full 5.

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?

Output schema exists so return values need no explanation; annotations cover safety, and the description supplies prerequisite, permission model, side effects, and exclusions. Nothing needed to invoke it correctly is missing.

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 100% and both params (id, kind with an enum) are documented in the schema, so baseline 3 applies. The description only echoes that kind/id come from list_recycle_bin, adding no new syntax or format detail.

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 (Restore) plus resource (soft-deleted recycle bin item) and scope (ONE), and explicitly ties the kind to list_recycle_bin, distinguishing it from that sibling and from purge operations. An agent can identify the action without opening schemas.

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?

Gives an explicit prerequisite/alternative path ('Find the kind and id with list_recycle_bin first') and a clear exclusion ('Purging (permanent deletion) is not part of this tool'), so both when-to-use and when-not-to-use are covered.

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

screen_healthCheck a screen's healthA
Read-only
Inspect

Read one screen's health. view picks what comes back. 'why': why it shows what it shows — the resolution chain (deactivated / emergency / cast / scheduled / default). 'diagnose': for a screen that looks blank or wrong, one likely cause reasoned from verifiable signals plus a next-step checklist; the player cannot read TV/HDMI state, so a healthy stick gets a guided: true TV/input/cable checklist, a guess and not a detection. 'outages': every outage in the last days (default 30) with how long and a plain-language cause, plus a rollup sentence; planned darkness is listed but not counted. 'tv': what the TV panel did (switched off, other HDMI input, cable lost, back on) and its current state; only a Signage Stick over CEC produces rows; each row's basisLabel says whether the reading was checked, seen or only a stored guess, and dailySummaries gives one line per day of input checks; default window 14 days. For the fleet or a time window use get_uptime_report; for what is wrong across all screens now use list_open_alerts; for a live picture use capture_device_frame. Requires screen.view.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNooutages and tv only: window in days. outages: default 30, capped at the outage-history window; tv: default and cap 14.
viewYesWhat to read: 'why', 'diagnose', 'outages' or 'tv' (see the tool description).
limitNooutages and tv only: max rows; default 50, max 200 for outages and 500 for tv.
screenIdYesThe screen ID, e.g. scr_aurora_42; find it with search_screens.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), yet the description adds substantial extra context: the required `screen.view` permission, the hard limitation that the player cannot read TV/HDMI state (so a 'guided' checklist is a guess, not a detection), that only CEC-connected Signage Sticks produce `tv` rows, and that planned darkness is listed but excluded from counts. That is exactly the kind of caveat an agent needs before trusting output.

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 the core purpose and the routing alternatives before the per-view detail. It is dense and long, but for a four-mode tool nearly every clause carries distinct information; a small amount of repetition between the view prose and the schema notes is the only waste.

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?

Output schema exists, so return shapes need not be re-explained, and the description instead supplies everything else an agent needs: view semantics, defaults/caps, detection limits, permission requirement, and sibling routing. Complete for a read-only diagnostic tool of this complexity.

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 100%, so the baseline is 3, and the schema already documents defaults and caps for `days` and `limit`. The description goes beyond that by explaining what each `view` enum value actually returns, giving the enum semantic weight the terse schema note ('see the tool description') deliberately defers.

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 ('Read one screen's health') and then enumerates the four modes of reading via `view`, each with a distinct purpose. It explicitly distinguishes itself from the sibling tools an agent might otherwise pick (get_uptime_report, list_open_alerts, capture_device_frame).

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?

Gives per-view when-to-use guidance ('diagnose': for a screen that looks blank or wrong) and names three concrete alternatives with the condition that selects each: fleet/time window -> get_uptime_report, fleet-wide problems now -> list_open_alerts, live picture -> capture_device_frame. Nothing about routing is left to inference.

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

search_audit_logSearch the audit logA
Read-only
Inspect

Read the workspace audit log, newest first — who changed what (by name; no emails, IP addresses or browser details), including changes made by MCP tools themselves. Keyset-paged via cursor; since stops at a date. Use get_proof_of_play for what played on screens rather than who changed it. Requires audit-log.view.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size (default 50).
sinceNoISO datetime; only events at or after it, and no cursor past it.
cursorNonextCursor from the previous page.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly/destructive annotations, the description discloses what is redacted (no emails, IP addresses, browser details), that MCP-tool-initiated changes are included, the newest-first ordering, keyset paging, and the `audit-log.view` permission requirement. That is substantive behavioral context an agent cannot get from 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?

Three tight clauses with no filler; the core purpose leads, then paging mechanics, then the sibling disambiguation, then the permission gate. Every sentence carries load.

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?

An output schema exists, so return values need not be explained, and the description still covers ordering, paging, redaction, permission, and alternative routing. Nothing an agent needs to invoke this correctly is missing.

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 100%, so limit/since/cursor are already documented with defaults and bounds. The description's 'keyset-paged via cursor; since stops at a date' largely restates what the schema says about `since`, adding little new syntax or edge-case detail, so the baseline of 3 applies.

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 ('Read the workspace audit log'), plus scope and ordering ('newest first'), and clarifies the payload ('who changed what, by name'). It is immediately distinguishable from siblings like get_proof_of_play and whoami.

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 routes the agent away from a plausible alternative: 'Use get_proof_of_play for what played on screens rather than who changed it.' That is a named alternative plus the condition that selects it, and the required permission is stated.

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

search_mediaSearch the media libraryA
Read-only
Inspect

Search the media library by name, kind, folder or tag. Resolves media names to asset ids before building playlists, casting or assigning. Also finds apps (Menu Boards, Weather, …) by name — rows with kind "app" and their appKey; pass kind:"app" for apps only. Returns id/name/kind/tags/state/duration per asset, newest files first; results are scoped to the locations this connection can see. Searches the newest 1000 files (and 1000 apps); scanCapped:true means there are more, so narrow with kind or folderId. For playlists, schedules or layouts use list_items; for what one playlist holds use get_playlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoCase-insensitive substring match on asset name.
tagNoExact tag match (case-insensitive).
kindNoKind filter, e.g. image | video | audio | pdf | web | rss | app (app instances).
limitNoPage size (default 50).
offsetNoSkip this many matches (default 0).
folderIdNoOnly assets filed in this folder.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already establish readOnly/openWorld=false/destructive=false, but the description adds real operational behavior: results are scoped to locations the connection can see, only the newest 1000 files/apps are searched, scanCapped:true signals truncation, and ordering is newest-first. It stops short of explaining how limit/offset interact with the scan cap, so a 4 rather than a 5.

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 the core purpose and filters, then behavior, then sibling routing in a tight sequence. It is dense and mostly earns its sentences, though the per-asset return field list slightly duplicates the output schema.

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?

Given an output schema exists, return values need not be restated, yet the description still covers scope, cap behavior, ordering, app handling and where to go for playlist/layout data. Nothing an agent needs to invoke it 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?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: kind:"app" returns app instances with their appKey, and narrowing via kind or folderId is the remedy when scanCapped is true. That cross-parameter guidance pushes it above baseline.

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 (search the media library) and goes further by naming the filters (name, kind, folder, tag) and the cross-cutting use case (resolve names to asset ids before building playlists, casting or assigning). It is clearly distinguishable from siblings like list_items, get_playlist and search_screens.

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 routes the agent: use list_items for playlists/schedules/layouts and get_playlist for the contents of one playlist, and tells you to pass kind:"app" for apps only. The when-to-use and when-to-use-something-else conditions are stated directly.

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

search_screensSearch screensA
Read-only
Inspect

Find screens by name, status, location or tag; every filter is optional and they combine (AND). Start here to turn a screen name into its id for any other tool. Each screen carries location, region (the location's parent) and playing ({kind,id,name} of its assigned content). Up to 200 per page; the response gives total, hasMore and nextOffset, so page with offset instead of re-querying. scanCapped:true means more than 500 screens matched status/nodeId and only the first 500 were searched, so narrow with nodeId or status. Only screens in locations you can see are returned. For one screen's diagnosis use screen_health; for open problems use list_open_alerts.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSubstring match on screen name (case-insensitive).
tagNoOnly screens with this exact tag (case-insensitive).
nodeIdNoLimit to screens at or under this org node (a region id returns all its stores' screens).
offsetNoSkip this many matches (default 0).
statusNoonline or offline as last reported; pairing = waiting to be paired.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), but the description adds genuine behavioral context: result visibility is scoped to 'locations you can see', pagination is capped at 200 per page with total/hasMore/nextOffset, and the scanCapped:true flag signals a 500-result search cap with the suggested remedy. None of this is derivable from 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?

Front-loaded with purpose, then routing, then response/pagination behavior, then alternatives — a sensible order. It is dense and slightly over-packed (response-field details like location/region/playing sit close to filter guidance), but almost every clause carries actionable information.

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?

An output schema exists, so return values need no explanation; nonetheless the description covers pagination contract, visibility scoping, the scan cap, and routing to alternatives. Nothing needed to call this 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?

Schema coverage is 100%, so the baseline is 3. The description goes beyond it by stating that all filters are optional and combine with AND, and by tying nodeId/status to the scan-cap workaround ('narrow with nodeId or status'), which gives practical meaning to those two params.

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?

Opens with a specific verb and resource ('Find screens') plus the exact filterable facets (name, status, location, tag). It also states its role in the broader toolset ('turn a screen name into its id for any other tool'), which no sibling could claim, so an agent can distinguish it immediately.

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?

Gives explicit when-to-use ('Start here to turn a screen name into its id') and names two alternatives with their respective conditions: screen_health for single-screen diagnosis and list_open_alerts for open problems. This is the full when/when-not/alternative pattern.

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

set_tv_powerTurn a screen's TV on or offA
DestructiveIdempotent
Inspect

Turn the TV attached to one screen or many (screenIds) on or off over HDMI-CEC. Off makes the screen dark until it is turned on again. Works only where the TV accepts HDMI-CEC; the player keeps running either way. To restart the player instead use reboot_screen. In a bulk call, screens outside your reach are skipped. Requires screen.edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
powerYes"on" wakes the TV; "off" puts it in standby.
screenIdNoOne screen id, from search_screens.
screenIdsNoBulk alternative: every listed screen (max 200) in one call.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint/readOnlyHint already flag a mutating call), the description explains the nature of the effect: 'Off makes the screen dark until it is turned on again' and 'the player keeps running either way'. It also discloses the required permission (`screen.edit`) and that unauthorized screens are silently skipped in bulk calls, which annotations cannot convey.

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?

Five tight sentences, front-loaded with the core action and scope, then consequences, then the alternative tool, then the permission requirement. No filler or redundant restatement of the name.

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 annotations covering safety traits and an output schema covering return values, the description fills the remaining gaps an agent needs: effect duration, player-side impact, CEC limitation, bulk skip behavior, and the `screen.edit` requirement.

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 100%, with power's enum and both screenId/screenIds already documented in the schema. The description confirms the bulk semantics of screenIds but adds no format, limits, or edge cases beyond what the schema provides, so the baseline of 3 applies.

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 concrete verb (turn on/off) and resource (the TV attached to a screen) plus the transport mechanism (HDMI-CEC) and the single/bulk scope. It explicitly distinguishes itself from reboot_screen, so an agent can separate the two without opening either schema.

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?

Names the alternative tool and the condition that selects it ('To restart the player instead use reboot_screen'), states the environmental precondition (TV must accept HDMI-CEC), and documents bulk-call behavior for out-of-reach screens. This is explicit when/when-not guidance.

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

start_device_test_runStart a device test runA
Destructive
Inspect

Start an automated Device Lab test suite against a connected player. suite: 'smoke' (safe liveness + command round-trips), 'chaos' (fault-injection — internal/test devices only), 'full', 'content' (assign every item, judge each proof frame against its committed golden), 'requirements' (product rules proven on glass: expiry, takeover, dead zone, scheduled switch — internal workspaces), 'display', 'soak', 'capacity'. The run is queued and the call returns a runId at once; poll get_device_test_run for results. 'chaos' and 'full' run only on an internal workspace or a screen tagged test-device. 'content', 'soak', 'chaos' and 'full' change what the screen plays while they run and need screen.cast as well as screen.edit. For one screenshot use capture_device_frame instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
suiteYesWhich suite to run; see the tool description. Start with 'smoke' when unsure.
screenIdYesScreen to test, e.g. scr_aurora_42; find ids with search_screens.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=true, openWorldHint=true) by disclosing that the run is queued and returns a runId immediately, that content/soak/chaos/full change what the screen plays while running, and that these same suites additionally require `screen.cast` on top of `screen.edit`. This surfaces the destructive side effect and the extra permission requirement that annotations alone cannot express.

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-loads the action, then the suite catalogue, then async behavior, then access restrictions — a logical order with no filler sentences. It is dense and somewhat wall-of-text, but each clause carries operational information.

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 an output schema present, return-value explanation is unnecessary, and the description nonetheless covers the async return contract, suite-specific access limits, permission prerequisites, and the competing single-frame tool. Nothing needed to call this 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?

Schema coverage is 100%, so the baseline is 3, but the schema's own suite description defers to this text ('see the tool description'), and the description supplies real semantic content for each enum value (what 'smoke', 'chaos', 'content', 'requirements' actually do). screenId gains only marginal added meaning 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?

States a specific verb and resource ('Start an automated Device Lab test suite against a connected player') and explicitly distinguishes itself from the sibling capture_device_frame ('For one screenshot use capture_device_frame instead'). An agent can identify the tool without opening the schema.

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?

Gives explicit conditions per suite variant ('chaos' and 'full' only on internal workspace or test-device screen; 'requirements' for internal workspaces), names the follow-up tool to poll (get_device_test_run), and routes single-frame needs to an alternative. When-to-use and when-not-to-use are both covered.

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

sync_data_sourceSync a data sourceAInspect

Pull fresh data through one connected feed (CSV, Google Sheets, POS…) now, instead of waiting for its scheduled sync, so data-bound apps and creatives show current values; screens are told when it succeeds. Returns synced:true, or synced:false with the feed's error (e.g. a sheet that is not shared) — a feed error is reported, not thrown. To sync every feed at once use refresh_all_data_sources. Requires integration.edit at the data source's location.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataSourceIdYesData source id (ds_…), from list_items kind data_sources.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: it states the return contract (synced:true, or synced:false with the feed's error), that errors are reported rather than thrown, that screens are notified on success, and the required permission (integration.edit at the data source's location). These are exactly the mutation-side effects an agent needs and that readOnlyHint/destructiveHint do not 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?

Front-loaded with purpose, then return semantics, alternative, and permission — every clause earns its place. The first sentence is dense and runs long, which slightly hurts scanability, but nothing is redundant.

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?

Covers purpose, scoping to a single feed, the alternative tool, error behavior, side effects on screens, and required permissions. An output schema exists so return values need not be spelled out further; nothing needed to call it correctly is missing.

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 100% and the single dataSourceId is fully documented in the schema (ds_… from list_items kind data_sources). The description implies the id refers to one feed but adds no new format or constraint detail, so the baseline of 3 applies.

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+resource with scope: 'Pull fresh data through one connected feed ... now, instead of waiting for its scheduled sync.' It explicitly distinguishes itself from the sibling refresh_all_data_sources, so an agent can choose between them without opening either schema.

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?

Gives an explicit when-to-use ('now, instead of waiting for its scheduled sync') and names the alternative with its selecting condition ('To sync every feed at once use refresh_all_data_sources'). Routing between the two sync tools is unambiguous.

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

trigger_emergency_templateTrigger an emergency takeoverA
Destructive
Inspect

Fire a pre-armed emergency template (Lockdown, Severe weather, Fire drill, …) now: every screen in the template's own scope switches to it at once, above any cast or schedule. This call sets no end time. Get the id from list_emergency_templates and confirm the scope with the operator first; never guess an id. For a normal timed message use quick_post or cast_content. Requires screen.edit and emergency-override.create.

ParametersJSON Schema
NameRequiredDescriptionDefault
templateIdYesEmergency template id (etpl_…), from list_emergency_templates.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already flag destructiveHint and openWorldHint, but the description goes further with non-obvious behavior: the call sets no end time (no automatic revert), it overrides existing casts and schedules, and it requires the `screen.edit` and `emergency-override.create` scopes. It also warns against guessing ids. That is exactly the additional context annotations cannot carry.

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 load-bearing: effect and scope first, then the irreversibility note, then sourcing/permissions. Front-loaded with the action and impact, no filler or restated title.

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?

An output schema exists, so return values need no explanation. For a destructive, single-parameter emergency tool the description covers impact, scope, irreversibility, prerequisites, alternatives, and required permissions — everything an agent needs to invoke it safely.

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 100% and the id prefix (etpl_…) is already documented, so baseline is 3. The description adds provenance and safety semantics beyond the schema: the id must come from list_emergency_templates and be operator-confirmed, never guessed. Small but genuine value over 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?

States a specific verb (fire/trigger) and resource (emergency template) plus the concrete effect: every screen in the template's scope switches to it at once, above any cast or schedule. It explicitly distinguishes itself from the timed-message siblings quick_post and cast_content, so an agent can separate it from near neighbours without opening schemas.

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?

Gives an explicit when (real emergency, immediate takeover), an explicit when-not plus alternative ("For a normal timed message use quick_post or cast_content"), and the prerequisite workflow (fetch the id from list_emergency_templates and confirm scope with the operator). Nothing about tool selection is left to inference.

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

update_mediaUpdate a media itemA
DestructiveIdempotent
Inspect

Update a media asset's metadata: rename it, retag it, move it to another folder, set alt text, set how it fills the screen, or give it an expiry (+ optional auto-archive into the recycle bin). Only the fields you pass change; the file itself is never touched. For a web link's crop, scroll or refresh use configure_web_link. Requires media.edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
fitNoHow this file fills any screen or zone it plays in: contain (whole picture, black bars), blur-fill (whole picture, blurred edges), cover (fills, crops the edges), fill (fills, distorts). Applies everywhere the file plays; a playlist slot can override it.
nameNoNew display name.
tagsNoReplaces the whole tag list.
altTextNoShort text description of the image or video for accessibility; null clears it.
mediaIdYesMedia asset id (med_…), from search_media.
folderIdNoDestination folder in THIS workspace; null moves to the library root.
expiresAtNoISO datetime after which the asset stops airing; null clears.
autoArchiveOnExpiryNoSoft-delete the asset into the recycle bin when it expires.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the description earns credit for scoping that destructiveness — the recycle-bin soft delete only fires via autoArchiveOnExpiry — plus stating the file itself is never modified. It also discloses the required `media.edit` permission, which annotations do not cover. It stops short of describing the response form, though 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.

Conciseness5/5

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

Three sentences, front-loaded with the mutation scope, then the merge semantics, then the sibling exclusion and the permission requirement. No filler, no repetition of the title, and the most decision-relevant clause comes first.

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 an 8-parameter mutation tool with full schema coverage, an output schema, and rich annotations, the description supplies everything else an agent needs: partial-update semantics, the destructive edge case, the alternative tool, and the auth requirement. Nothing material is left to inference.

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 100%, including the enum and null-clearing semantics for fit, altText, folderId and expiresAt, so the schema already carries the parameter burden. The description's field list is largely a restatement of those parameters rather than new syntax or format detail. Baseline 3 applies when the schema does the heavy lifting.

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+resource ('Update a media asset's metadata') and enumerates the dimensions it can change (name, tags, folder, alt text, fit, expiry), which maps cleanly onto the sibling set. It also explicitly distinguishes itself from configure_web_link, which an agent could plausibly confuse with 'change how media plays'. An agent can select this tool without opening the schema.

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?

Names the alternative explicitly with the selecting condition: 'For a web link's crop, scroll or refresh use configure_web_link.' It also gives the operative usage rule that this is a partial/merge update ('Only the fields you pass change') so the agent knows not to send a full object. Both the routing decision and the invocation decision are covered.

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

update_playlistUpdate a playlistA
Destructive
Inspect

Edit an EXISTING playlist: rename/describe it, set its play window, toggle shuffle, append items, remove items, patch item duration/fit, or reorder. Compose any subset in one call; each change runs through the same validation as the CMS editor. Steps run in this order: details, removals, item edits, appends, reorder; if one step fails, the earlier ones stay applied. An edit can send an approved playlist back to draft when its location requires approval; the response returns the final playlist with its approvalState. Get item ids with get_playlist; to create new playlists use bulk_create. Requires playlist.edit at the playlist's node.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew display name.
shuffleNotrue plays the items in random order; false in list order.
startsAtNoISO datetime the playlist starts airing; null clears.
expiresAtNoISO datetime the playlist stops airing; null clears.
fullscreenNoWhen this playlist plays inside a layout, EVERY item fills the whole screen and the other zones hide. Per-item: patchItems[].fullscreen.
patchItemsNoChanges to existing items, max 50 per call. Only the fields given change.
playlistIdYesPlaylist to edit (pl_…), from list_items kind playlists.
appendItemsNoItems to add at the end of the playlist, in order, max 50 per call.
descriptionNoNew note about the playlist, shown in the console.
removeItemIdsNoItem ids (pli_…) to remove, max 50 per call. An id that is already gone is ignored.
reorderItemIdsNoThe COMPLETE item order after the move — unknown ids are dropped, the rest keep this sequence.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With destructiveHint=true and idempotentHint=false already declared, the description goes well beyond them: it discloses the fixed step order, that a failure leaves earlier steps applied (non-atomic), that an edit can demote an approved playlist back to draft, that the response carries approvalState, and that `playlist.edit` is required at the playlist's node. That is exactly the kind of risk and auth context annotations cannot express.

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 the purpose, then ordering semantics, then side effects, then sibling routing; every sentence carries information. It is a dense single paragraph that would read better as a short list, but there is no filler to cut.

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 an 11-parameter destructive mutation with a nested item-editing array, the description covers composition, ordering, partial-failure behavior, approval side effects, and required permission. Since an output schema exists, it only needs to nod at the return value, and it does so via approvalState.

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 100%, so per-field meaning is already documented, which sets a baseline of 3. The description earns an extra point by explaining how the parameters interact — the execution ordering of details/removals/item edits/appends/reorder and the ability to combine subsets — which is not derivable from the schema alone.

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 ('Edit an EXISTING playlist') and then enumerates the concrete editable surfaces: rename/describe, play window, shuffle, append, remove, patch item duration/fit, reorder. This is unambiguous against siblings like bulk_create or assign_content.

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 routes the agent: 'Get item ids with get_playlist; to create new playlists use bulk_create.' It also tells the agent it may compose any subset of steps in one call, so the agent knows this is the single mutation entry point rather than model-level updating.

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

upload_media_from_urlImport media from a URLAInspect

Copy a file from a public URL into the media library. Returns the new asset id, kind, size and URL. Use for migration: pull from a Drive share, S3, an old CMS export, etc. Max 500 MB; use mint_upload_url for larger. The asset is created at the workspace root, so a key limited to one location is refused. To show a live web page rather than copy a file, use create_web_link. Requires media.create.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublicly fetchable http(s) URL.
nameYesDisplay name for the asset.
tagsNoTags to set on the new asset, e.g. ["menu", "spring"].
folderIdNoLibrary folder to file it in (id from list_items kind media_folders); omit for the library root.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare the generic write/open-world/no-destroy profile; the description adds the operational specifics an agent actually needs: the 500 MB ceiling, that the asset lands at the workspace root and location-scoped keys are refused, and the required media.create permission. That is exactly the beyond-annotation context this dimension rewards.

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?

Five compact sentences, each with a distinct job: what it does, what it returns, when to use it, its limit plus the alternative, and its constraints. The purpose and scope are front-loaded with zero 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 an output schema present, the description need not explain return values in depth, and it still names them briefly. Size limit, permission requirement, placement rule, and alternative tools cover everything an agent needs to call this correctly and to avoid mis-calling siblings.

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 100%, so the schema already documents url, name, tags and folderId, including the root-filing default. The description reinforces the root-placement behavior but adds no syntax, format, or default detail the schema lacks. Baseline 3 applies.

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 ('Copy a file from a public URL into the media library'), and explicitly contrasts itself with create_web_link ('show a live web page rather than copy a file') and mint_upload_url. An agent can distinguish it from every near sibling without opening a schema.

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?

Gives a concrete use case ('migration: pull from a Drive share, S3, an old CMS export'), an explicit size boundary with the alternative for exceeding it (500 MB cap, use mint_upload_url for larger), and a routing rule away from create_web_link. When-to-use, when-not, and alternatives are all present.

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

whoamiShow the current accountA
Read-only
Inspect

Who this connection is and what it may do. Useful at the start of work in an unfamiliar workspace. Returns the actor (an API key with the org node it is pinned to, or the signed-in user), the workspace id + name, and the flat permission set. A pinned key simply cannot see or write outside its branch, so this is usually the answer to an unexplained 403 or an empty list. The permission set is a planning hint: node-precise checks still run on every write.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already establish the safe-read profile (readOnlyHint, destructiveHint=false, openWorldHint=false), yet the description adds real behavior: what the actor field can contain, the branch confinement of a pinned key, and the caveat that the returned permission set is only a planning hint because node-precise checks still run on every write.

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?

Four sentences, each carrying distinct information (identity, use context, key confinement, permission-set caveat), and the purpose plus use case are front-loaded. No filler or restated schema content.

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 no parameters, a present output schema, and full annotations, the agent needs only to know what the tool returns and why it matters. The description supplies exactly that, including the failure-mode diagnosis, so nothing material 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 takes zero parameters and schema coverage is 100%, so there is nothing for the description to clarify. Nothing is missing, and the description usefully characterizes what comes back even though parameters are absent.

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 precise verb+resource: it returns the acting identity (API key or signed-in user), the workspace id/name, and the permission set. No sibling tool does anything comparable, and the first sentence ('Who this connection is and what it may do') is an unambiguous purpose statement.

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?

It names two concrete when-to-use conditions: 'at the start of work in an unfamiliar workspace' and as the diagnostic for 'an unexplained 403 or an empty list.' That is explicit routing guidance with no ambiguity about when this tool is the right call.

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. 32 tool updates
    • Changedadd_screens_to_group3 fields changed
      • addedInput schema / properties / groupId / description
        Added value: +"Screen group id (sgrp_…), from list_items kind screen_groups or create_screen_group. The group must already exist."
      • addedInput schema / properties / screenIds / description
        Added value: +"Screens to add (ids from search_screens), 1 to 5000."
      • addedInput schema / properties / screenIds / maxItems
        Added value: +5000
    • Changedassign_content3 fields changed
      • addedInput schema / properties / contentId / description
        Added value: +"Id of the content to play: a playlist or schedule from list_items, a media file or app from search_media. Omit only when contentKind is null."
      • addedInput schema / properties / contentKind / description
        Added value: +"Kind of content contentId names. null clears the screen's assigned content (one screenId only)."
      • changedInput schema / properties / screenId / description
        Previous value: -"Single target screen."New value: +"One target screen (e.g. scr_aurora_42, from search_screens)."
    • Changedassign_screen_to_node2 fields changed
      • changedInput schema / properties / nodeId / description
        Previous value: -"null to clear; otherwise the destination node id."New value: +"Destination location id (from list_items kind locations). null or omitted moves the screen to the workspace root."
      • addedInput schema / properties / screenId / description
        Added value: +"Screen to move (e.g. scr_aurora_42, from search_screens)."
    • Changedbulk_create19 fields changed
      • addedInput schema / properties / celebrations / description
        Added value: +"Celebration entries to import, max 100 per call. A bad row is reported, the rest are still created."
      • addedInput schema / properties / celebrations / items / properties / customMessage / description
        Added value: +"Optional message shown with the entry."
      • addedInput schema / properties / celebrations / items / properties / department / description
        Added value: +"Optional department, e.g. \"Sales\"."
      • addedInput schema / properties / celebrations / items / properties / location / description
        Added value: +"Optional site or office name, as free text."
      • addedInput schema / properties / celebrations / items / properties / occasionDay / description
        Added value: +"Day of the month of the occasion."
      • addedInput schema / properties / celebrations / items / properties / occasionMonth / description
        Added value: +"Month of the occasion, 1 = January."
      • addedInput schema / properties / celebrations / items / properties / occasionYear / description
        Added value: +"Optional year, e.g. birth year or start year (for ages and work anniversaries)."
      • addedInput schema / properties / celebrations / items / properties / title / description
        Added value: +"Optional job title."
      • addedInput schema / properties / locations / description
        Added value: +"Locations (org-tree nodes) to create, max 1000 per call. List a parent before its children."
      • addedInput schema / properties / locations / items / properties / name / description
        Added value: +"Location display name, e.g. \"Store 0142\" or \"West region\"."
      • addedInput schema / properties / playlists / description
        Added value: +"Playlists to create, max 500 per call."
      • addedInput schema / properties / playlists / items / properties / description / description
        Added value: +"Optional note about the playlist, shown in the console."
      • addedInput schema / properties / playlists / items / properties / items / description
        Added value: +"What the playlist plays, in play order. Omit for an empty playlist."
      • addedInput schema / properties / playlists / items / properties / items / items / properties / refKind / description
        Added value: +"'media' for a library file, 'app' for an app instance."
      • addedInput schema / properties / schedules / description
        Added value: +"Schedules to create, max 200 per call."
      • addedInput schema / properties / schedules / items / properties / blocks / description
        Added value: +"Time blocks, max 50. Each plays one piece of content on the given days between startTime and endTime."
      • addedInput schema / properties / schedules / items / properties / blocks / items / properties / refKind / description
        Added value: +"Kind of content refId names."
      • addedInput schema / properties / schedules / items / properties / description / description
        Added value: +"Optional note about the schedule, shown in the console."
      • addedInput schema / properties / schedules / items / properties / name / description
        Added value: +"Schedule display name."
    • Changedcapture_device_frame1 field changed
      • addedInput schema / properties / screenId / description
        Added value: +"Screen to capture, e.g. scr_aurora_42; find ids with search_screens. One screen per call."
    • Changedcast_content2 fields changed
      • addedInput schema / properties / contentId / description
        Added value: +"Id of the existing content to show, from search_media or list_items."
      • addedInput schema / properties / contentKind / description
        Added value: +"Kind of content contentId names."
    • Changedconfigure_web_link1 field changed
      • addedInput schema / properties / mediaId / description
        Added value: +"Web link id (med_…), from create_web_link or search_media with kind web."
    • Changedcreate_creatives11 fields changed
      • addedInput schema / properties / creatives / description
        Added value: +"Creatives to create, max 100 per call. One invalid box rejects the whole call."
      • addedInput schema / properties / creatives / items / properties / boxes / description
        Added value: +"The layers of the design; see the tool description for each kind's extra fields."
      • addedInput schema / properties / creatives / items / properties / boxes / items / properties / h / description
        Added value: +"Height, as a fraction of the stage height."
      • addedInput schema / properties / creatives / items / properties / boxes / items / properties / kind / description
        Added value: +"Layer type; decides which extra fields apply."
      • changedInput schema / properties / creatives / items / properties / boxes / items / properties / slot / description
        Previous value: -"kind:'slot' only — the file / playlist / app this hole plays (ids from list_media / list_playlists / list_app_instances in this workspace). null = an empty hole the customer fills in the editor."New value: +"kind:'slot' only — the file / playlist / app this hole plays (ids from search_media or list_items in this workspace). null = an empty hole the customer fills in the editor."
      • changedInput schema / properties / creatives / items / properties / boxes / items / properties / slot / oneOf
        Previous value: -[
        -  {
        -    "type": "null"
        -  },
        -  {
        -    "properties": {
        -      "id": {
        -        "type": "string"
        -      },
        -      "kind": {
        -        "enum": [
        -          "media",
        -          "playlist",
        -          "app"
        -        ],
        -        "type": "string"
        -      },
        -      "name": {
        -        "description": "Display label shown in the editor; optional.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "kind",
        -      "id"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "type": "null"
        +  },
        +  {
        +    "properties": {
        +      "id": {
        +        "description": "Id of that file, playlist or app in this workspace.",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "description": "What fills the hole: a media file, a playlist or an app.",
        +        "enum": [
        +          "media",
        +          "playlist",
        +          "app"
        +        ],
        +        "type": "string"
        +      },
        +      "name": {
        +        "description": "Display label shown in the editor; optional.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "id"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / creatives / items / properties / boxes / items / properties / w / description
        Added value: +"Width, as a fraction of the stage width."
      • addedInput schema / properties / creatives / items / properties / boxes / items / properties / x / description
        Added value: +"Left edge, as a fraction of the stage width (0 = left, 1 = right)."
      • addedInput schema / properties / creatives / items / properties / boxes / items / properties / y / description
        Added value: +"Top edge, as a fraction of the stage height (0 = top, 1 = bottom)."
      • addedInput schema / properties / creatives / items / properties / name / description
        Added value: +"Creative display name."
      • addedInput schema / properties / creatives / items / properties / stage / description
        Added value: +"Canvas orientation; default landscape."
    • Changedcreate_screen_group4 fields changed
      • addedInput schema / properties / description / description
        Added value: +"Optional note about the group, up to 500 characters."
      • addedInput schema / properties / name / description
        Added value: +"Group name, unique in the workspace; up to 120 characters."
      • changedInput schema / properties / screenIds / description
        Previous value: -"Initial membership; foreign/out-of-scope ids are skipped silently."New value: +"Initial members (ids from search_screens), max 5000; foreign/out-of-scope ids are skipped silently."
      • addedInput schema / properties / screenIds / maxItems
        Added value: +5000
    • Changedcreate_web_link2 fields changed
      • changedInput schema / properties / folderId / description
        Previous value: -"Library folder; omit for the root."New value: +"Library folder (id from list_items kind media_folders); omit for the root."
      • addedInput schema / properties / tags / description
        Added value: +"Tags to set on the new link."
    • Changeddecide_approval3 fields changed
      • addedInput schema / properties / approvalId / description
        Added value: +"Approval request id (ar_…), from list_pending_approvals."
      • addedInput schema / properties / decision / description
        Added value: +"approve lets the content air; reject keeps it off screens."
      • changedInput schema / properties / reason / description
        Previous value: -"Required for reject."New value: +"Why: required for reject, an optional note for approve."
    • Changedget_device_test_run1 field changed
      • addedInput schema / properties / runId / description
        Added value: +"The runId (dtr_…) that start_device_test_run returned."
    • Changedget_playlist1 field changed
      • addedInput schema / properties / playlistId / description
        Added value: +"Playlist id (pl_…), from list_items kind playlists."
    • Changedget_proof_of_play1 field changed
      • changedInput schema / properties / from / description
        Previous value: -"ISO datetime; default 7 days ago."New value: +"ISO datetime; default: the start of the workspace's playback-history window."
    • Changedget_uptime_report1 field changed
      • addedInput schema / properties / screenId / description
        Added value: +"Only this screen (e.g. scr_aurora_42, from search_screens); omit for every screen you can see."
    • Changedlist_items1 field changed
      • addedInput schema / properties / kind / description
        Added value: +"Which kind of item to list; see the tool description."
    • Changedlist_open_alerts3 fields changed
      • changedInput schema / properties / nodeId / description
        Previous value: -"Limit to alerts raised at (or under) this org node."New value: +"Only alerts raised at exactly this location (org node id from list_items kind locations); alerts of its child locations are not included."
      • addedInput schema / properties / screenId / description
        Added value: +"Only alerts for this screen (e.g. scr_aurora_42, from search_screens)."
      • addedInput schema / properties / severity / description
        Added value: +"Only alerts of this severity."
    • Changedlist_pending_approvals1 field changed
      • changedInput schema / properties / state / description
        Previous value: -"Filter by decision state (default pending)."New value: +"Filter by decision state (default pending). withdrawn = the requester took it back."
    • Changedlist_recycle_bin1 field changed
      • changedInput schema / properties / kind / description
        Previous value: -"Only this kind, e.g. screen, playlist, media, schedule, layout."New value: +"Only this kind: screen, media, playlist, schedule, layout, creative, app, data-source, signage, banner or media-folder."
    • Changedquick_post5 fields changed
      • addedInput schema / properties / body / description
        Added value: +"Optional smaller text under the headline, up to 400 characters."
      • addedInput schema / properties / headline / description
        Added value: +"Main text, up to 120 characters."
      • changedInput schema / properties / scopeKind / description
        Previous value: -"Default all."New value: +"Where it shows. Default all — every screen this connection can reach."
      • addedInput schema / properties / scopeNodeId / description
        Added value: +"With scopeKind=node: location id (from list_items kind locations); every screen at or under it."
      • addedInput schema / properties / screenIds / description
        Added value: +"With scopeKind=screens: the screen ids (from search_screens)."
    • Changedremove_screens_from_group3 fields changed
      • addedInput schema / properties / groupId / description
        Added value: +"Screen group id (sgrp_…), from list_items kind screen_groups."
      • addedInput schema / properties / screenIds / description
        Added value: +"Screens to take out (ids from search_screens), 1 to 5000."
      • addedInput schema / properties / screenIds / maxItems
        Added value: +5000
    • Changedrender_web_link1 field changed
      • addedInput schema / properties / mediaId / description
        Added value: +"Web link id (med_…), from create_web_link or search_media with kind web."
    • Changedrestore_recycle_bin_item2 fields changed
      • addedInput schema / properties / id / description
        Added value: +"The item's id, from list_recycle_bin."
      • addedInput schema / properties / kind / description
        Added value: +"The item's kind, exactly as list_recycle_bin shows it."
    • Changedscreen_health4 fields changed
      • changedInput schema / properties / days / description
        Previous value: -"outages and tv only: window in days."New value: +"outages and tv only: window in days. outages: default 30, capped at the outage-history window; tv: default and cap 14."
      • changedInput schema / properties / limit / description
        Previous value: -"outages and tv only: max rows; default 50."New value: +"outages and tv only: max rows; default 50, max 200 for outages and 500 for tv."
      • changedInput schema / properties / screenId / description
        Previous value: -"The screen ID, e.g. scr_aurora_42"New value: +"The screen ID, e.g. scr_aurora_42; find it with search_screens."
      • addedInput schema / properties / view / description
        Added value: +"What to read: 'why', 'diagnose', 'outages' or 'tv' (see the tool description)."
    • Changedsearch_screens3 fields changed
      • changedInput schema / properties / q / description
        Previous value: -"Substring match on screen name."New value: +"Substring match on screen name (case-insensitive)."
      • addedInput schema / properties / status / description
        Added value: +"online or offline as last reported; pairing = waiting to be paired."
      • addedInput schema / properties / tag / description
        Added value: +"Only screens with this exact tag (case-insensitive)."
    • Changedset_tv_power1 field changed
      • addedInput schema / properties / power / description
        Added value: +"\"on\" wakes the TV; \"off\" puts it in standby."
    • Changedstart_device_test_run2 fields changed
      • addedInput schema / properties / screenId / description
        Added value: +"Screen to test, e.g. scr_aurora_42; find ids with search_screens."
      • addedInput schema / properties / suite / description
        Added value: +"Which suite to run; see the tool description. Start with 'smoke' when unsure."
    • Changedsync_data_source1 field changed
      • addedInput schema / properties / dataSourceId / description
        Added value: +"Data source id (ds_…), from list_items kind data_sources."
    • Changedtrigger_emergency_template1 field changed
      • addedInput schema / properties / templateId / description
        Added value: +"Emergency template id (etpl_…), from list_emergency_templates."
    • Changedupdate_media3 fields changed
      • addedInput schema / properties / altText / description
        Added value: +"Short text description of the image or video for accessibility; null clears it."
      • addedInput schema / properties / mediaId / description
        Added value: +"Media asset id (med_…), from search_media."
      • addedInput schema / properties / name / description
        Added value: +"New display name."
    • Changedupdate_playlist12 fields changed
      • addedInput schema / properties / appendItems / description
        Added value: +"Items to add at the end of the playlist, in order, max 50 per call."
      • addedInput schema / properties / appendItems / items / properties / durationSeconds / description
        Added value: +"Seconds this item shows. Omit to use the content's default."
      • addedInput schema / properties / appendItems / items / properties / refKind / description
        Added value: +"Kind of content refId names (playlist = a nested playlist)."
      • addedInput schema / properties / description / description
        Added value: +"New note about the playlist, shown in the console."
      • addedInput schema / properties / patchItems / description
        Added value: +"Changes to existing items, max 50 per call. Only the fields given change."
      • addedInput schema / properties / patchItems / items / properties / durationMode / description
        Added value: +"fixed = durationSeconds; full = the video's own length; live = stays on with no timer (live web page); loop = loopCount plays of an animated file; manual = holds until someone presses a bound key."
      • addedInput schema / properties / patchItems / items / properties / durationSeconds / description
        Added value: +"Seconds the item shows when durationMode is fixed."
      • addedInput schema / properties / patchItems / items / properties / itemId / description
        Added value: +"Playlist item id (pli_…), from get_playlist."
      • addedInput schema / properties / patchItems / items / properties / loopCount / description
        Added value: +"With durationMode loop: how many times the animated file plays before the next item."
      • addedInput schema / properties / playlistId / description
        Added value: +"Playlist to edit (pl_…), from list_items kind playlists."
      • addedInput schema / properties / removeItemIds / description
        Added value: +"Item ids (pli_…) to remove, max 50 per call. An id that is already gone is ignored."
      • addedInput schema / properties / shuffle / description
        Added value: +"true plays the items in random order; false in list order."
    • Changedupload_media_from_url2 fields changed
      • addedInput schema / properties / folderId / description
        Added value: +"Library folder to file it in (id from list_items kind media_folders); omit for the library root."
      • addedInput schema / properties / tags / description
        Added value: +"Tags to set on the new asset, e.g. [\"menu\", \"spring\"]."
  2. 41 tool updates
    • First observedadd_screens_to_group
    • First observedassign_content
    • First observedassign_screen_to_node
    • First observedbulk_create
    • First observedcapture_device_frame
    • First observedcast_content
    • First observedclear_screen_cache
    • First observedconfigure_web_link
    • First observedcreate_creatives
    • First observedcreate_screen_group
    • First observedcreate_web_link
    • First observeddecide_approval
    • First observedend_cast
    • First observedget_device_test_run
    • First observedget_playlist
    • First observedget_proof_of_play
    • First observedget_uptime_report
    • First observedlist_emergency_templates
    • First observedlist_items
    • First observedlist_open_alerts
    • First observedlist_pending_approvals
    • First observedlist_recycle_bin
    • First observedquick_post
    • First observedreboot_screen
    • First observedrefresh_all_data_sources
    • First observedrefresh_screen
    • First observedremove_screens_from_group
    • First observedrender_web_link
    • First observedrestore_recycle_bin_item
    • First observedscreen_health
    • First observedsearch_audit_log
    • First observedsearch_media
    • First observedsearch_screens
    • First observedset_tv_power
    • First observedstart_device_test_run
    • First observedsync_data_source
    • First observedtrigger_emergency_template
    • First observedupdate_media
    • First observedupdate_playlist
    • First observedupload_media_from_url
    • First observedwhoami

Publisher details

Operator
Brix Signage, LLC · Publisher source
Vendor relationship
First-party · Publisher source
Restrictions
Requires a Brix account (free trial available). Sign in with OAuth and choose the workspace and permission areas to share. Billing, payment, API keys, users and roles are not reachable through the connector. · Publisher source

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources