Skip to main content
Glama
bbernstein

LacyLights MCP Server

by bbernstein

LacyLights MCP Server

GitHub Release GitHub Pre-release License: MIT

An MCP (Model Context Protocol) server that provides AI-powered theatrical lighting design capabilities for the LacyLights system. This server enables AI assistants to create, manage, and control professional theatrical lighting designs through natural language interactions.

What is LacyLights MCP?

LacyLights MCP is an intelligent lighting control interface that bridges the gap between creative vision and technical execution. It allows lighting designers, directors, and technicians to:

  • Design lighting looks using natural language descriptions

  • Analyze theatrical scripts to automatically generate lighting cues

  • Manage DMX fixtures from various manufacturers

  • Create and run cue sequences for theatrical performances

  • Optimize lighting designs for dramatic impact or energy efficiency

The system uses AI to understand artistic intent and translate it into precise DMX values for real-world lighting fixtures.

Related MCP server: Eos MCP

Complete Function Reference

Project Management

  • list_projects - List all available lighting projects with optional fixture/look counts

  • create_project - Create a new lighting project for a production

  • get_project_details - Get comprehensive details about a specific project

  • delete_project - Delete a project and all associated data (requires confirmation)

  • qlc_import_guidance - Get information about importing QLC+ (.qxw) files

Fixture Management

  • get_fixture_inventory - Query available fixtures and their capabilities

  • analyze_fixture_capabilities - Deep analysis of fixture capabilities (color mixing, positioning, effects)

  • create_fixture_instance - Add a new fixture to a project with manufacturer/model details

  • get_channel_map - View DMX channel usage map for a project

  • suggest_channel_assignment - Get optimal channel assignments for multiple fixtures

  • update_fixture_instance - Modify existing fixture properties

  • delete_fixture_instance - Remove a fixture from a project (requires confirmation)

Look Creation & Management

  • generate_look - AI-powered look generation based on descriptions and context

  • analyze_script - Extract lighting cues and suggestions from theatrical scripts

  • optimize_look - Optimize looks for various goals (energy, impact, simplicity)

  • update_look - Update look properties and fixture values

  • activate_look - Activate a look by name or ID

  • fade_to_black - Fade all lights to black with customizable timing

  • get_current_active_look - Get information about the currently active look

Advanced Look Operations

  • add_fixtures_to_look - Add fixtures to existing looks

  • remove_fixtures_from_look - Remove specific fixtures from looks

  • get_look_fixture_values - Read current fixture values in a look

  • ensure_fixtures_in_look - Ensure fixtures exist with specific values

  • update_look_partial - Partial look updates with fixture merging

  • bulk_update_looks_partial - Batch partial updates across multiple looks with fixture merging

Cue Sequence Management

  • create_cue_sequence - Build cue sequences from existing looks

  • generate_act_cues - Generate complete cue lists for theatrical acts

  • optimize_cue_timing - Optimize cue timing for various strategies

  • analyze_cue_structure - Analyze cue lists with recommendations

Cue List Operations

  • update_cue_list - Update cue list metadata

  • add_cue_to_list - Add new cues to existing lists

  • remove_cue_from_list - Remove cues from lists

  • update_cue - Modify individual cue properties

  • bulk_update_cues - Update multiple cues simultaneously

  • reorder_cues - Reorder cues with new numbering

  • get_cue_list_details - Query cues with filtering and sorting

  • delete_cue_list - Delete entire cue lists (requires confirmation)

Cue Playback Control

  • start_cue_list - Begin playing a cue list from any point

  • next_cue - Advance to the next cue

  • previous_cue - Go back to the previous cue

  • go_to_cue - Jump to a specific cue by number or name

  • stop_cue_list - Stop the currently playing cue list

  • get_cue_list_status - Get playback status and navigation options

Look Board Management

Look Boards provide a visual layout system for organizing and triggering looks with customizable button positions on a 2D canvas (default 2000x2000 pixels).

Look Board CRUD

  • list_look_boards - List all look boards in a project with button counts

  • get_look_board - Get a specific look board with all buttons and layout

  • create_look_board - Create a new look board with custom canvas and grid settings

  • update_look_board - Update look board metadata and settings

  • delete_look_board - Delete a look board and all its buttons (requires confirmation)

  • bulk_create_look_boards - Create multiple look boards in a single operation

  • bulk_update_look_boards - Update multiple look boards in a single operation

  • bulk_delete_look_boards - Delete multiple look boards in a single operation

Look Board Button Management

  • add_look_to_board - Add a look as a button at a specific canvas position

  • update_look_board_button - Update button properties (position, size, color, label)

  • remove_look_from_board - Remove a button from a look board

  • update_look_board_button_positions - Batch update button positions (drag-and-drop)

  • bulk_create_look_board_buttons - Create multiple buttons in a single operation

  • bulk_update_look_board_buttons - Update multiple buttons in a single operation

  • bulk_delete_look_board_buttons - Delete multiple buttons in a single operation

Look Board Playback

  • activate_look_from_board - Activate a look from a board (uses board's default fade time)

  • create_look_board_with_buttons - Create a complete look board with buttons in one command

Data Export (CSV / Excel)

Requires lacylights-go v0.4.0 or newer; older backends get an "update LacyLights" message.

  • list_data_export_tables - List exportable tables with their columns and scope (which IDs each export needs)

  • export_data_table - Export one table as CSV (returned inline, truncated with a note when large) or XLSX (written to a file; the path is returned)

  • export_data_workbook - Export several project tables as one multi-sheet XLSX workbook written to a file

Files are written to the tool's outputDirectory argument, else LACYLIGHTS_EXPORT_DIR, else a private (0700) lacylights-exports folder in the system temp directory. Files are created with mode 0600 and never overwrite an existing file (a numeric suffix is added). Note that outputDirectory is chosen by the AI assistant and can be any directory the MCP server process can write to. Set LACYLIGHTS_EXPORT_DIR to give exports a predictable home, and keep the assistant on that default.

Installation

  1. Install dependencies:

npm install
  1. Set up environment variables:

cp .env.example .env
# Edit .env with your configuration
  1. Build the project:

npm run build

Configuration

Environment Variables

  • LACYLIGHTS_GRAPHQL_ENDPOINT - GraphQL endpoint for your lacylights-go backend (default: http://localhost:4000/graphql)

  • OPENAI_API_KEY - OpenAI API key, needed only for the AI-powered generation tools (e.g. generate_look, analyze_script, generate_act_cues). The server starts without it and every other tool works; the AI tools then return an error asking you to set it.

Optional Environment Variables

  • CHROMA_HOST - ChromaDB host for enhanced RAG functionality (default: localhost)

  • CHROMA_PORT - ChromaDB port (default: 8000)

  • LACYLIGHTS_EXPORT_DIR - Directory for CSV/XLSX data export files (default: lacylights-exports in the system temp directory)

Running the Server

Make sure your lacylights-go backend is running first, then:

# Start in development mode (with auto-reload)
npm run dev

# Or build and run in production mode
npm run build
npm start

You should see:

RAG service initialized with in-memory patterns
LacyLights MCP Server running on stdio

Integration with Claude

Add this server to your Claude configuration:

{
  "mcpServers": {
    "lacylights": {
      "command": "/usr/local/bin/node",
      "args": ["/path/to/lacylights-mcp/run-mcp.js"],
      "env": {
        "OPENAI_API_KEY": "your_openai_api_key_here",
        "LACYLIGHTS_GRAPHQL_ENDPOINT": "http://localhost:4000/graphql"
      }
    }
  }
}

Important:

  • Use the absolute path to run-mcp.js in your configuration

  • If the above doesn't work, find your Node.js path with: which node

  • The wrapper script ensures proper CommonJS module loading

Releases & Versioning

Release Channels

LacyLights MCP supports two release channels:

  1. Stable Releases (e.g., 1.4.0, 1.5.0)

    • Production-ready versions

    • Fully tested and validated

    • Listed as "Latest" on GitHub

    • Updates latest.json for automatic discovery

  2. Beta Releases (e.g., 1.4.1b1, 1.5.0b2)

    • Pre-release versions for testing

    • New features and experimental changes

    • Marked as "Pre-release" on GitHub

    • Does not affect stable latest.json

Version Format

  • Stable: X.Y.Z (semantic versioning)

    • X = Major version (breaking changes)

    • Y = Minor version (new features)

    • Z = Patch version (bug fixes)

  • Beta: X.Y.Zb[N] (beta with iteration)

    • b = Beta identifier

    • [N] = Beta iteration number (1, 2, 3, ...)

Installing Specific Versions

# Download latest stable release
curl -s https://dist.lacylights.com/releases/mcp/latest.json | jq -r '.url' | xargs curl -LO

# Extract archive
tar -xzf lacylights-mcp-*.tar.gz
cd lacylights-mcp

# Install and run
npm ci --omit=dev
npm start

Install Specific Version

# Download specific version (replace X.Y.Z with actual version)
VERSION="1.4.0"  # or "1.4.1b1" for beta
curl -LO https://dist.lacylights.com/releases/mcp/lacylights-mcp-${VERSION}.tar.gz

# Verify SHA256 checksum (optional but recommended)
curl -s https://dist.lacylights.com/releases/mcp/latest.json | jq -r '.sha256'
sha256sum lacylights-mcp-${VERSION}.tar.gz

# Extract and run
tar -xzf lacylights-mcp-${VERSION}.tar.gz
cd lacylights-mcp
npm ci --omit=dev
npm start

Install Beta for Testing

# Download latest beta (check GitHub releases for version)
VERSION="1.5.0b2"
curl -LO https://dist.lacylights.com/releases/mcp/lacylights-mcp-${VERSION}.tar.gz

# Extract and test
tar -xzf lacylights-mcp-${VERSION}.tar.gz
cd lacylights-mcp
npm ci --omit=dev
npm start

Release Distribution

All releases are distributed through multiple channels:

  1. GitHub Releases: https://github.com/bbernstein/lacylights-mcp/releases

    • Source code

    • Pre-built archives

    • Release notes

  2. S3 Distribution: https://dist.lacylights.com/releases/mcp/

    • Direct archive downloads

    • SHA256 checksums

    • latest.json metadata

  3. DynamoDB Registry:

    • Version tracking

    • Release metadata

    • Prerelease flags

Beta Testing Program

Want to help test new features? Install beta releases:

  1. Check for betas: Visit GitHub Releases

    • Look for releases marked "Pre-release"

    • Version format: X.Y.Zb[N]

  2. Install beta:

    # See "Install Beta for Testing" above
  3. Report issues:

    • Open issues on GitHub

    • Include version number

    • Provide reproduction steps

Release Process

For maintainers: See RELEASE_PROCESS.md for complete release documentation including:

  • Beta release workflows

  • Stable release procedures

  • Version management

  • Distribution verification

  • Troubleshooting and rollback

Complete Example: Lighting Design for Macbeth

Here's a comprehensive example showing how a lighting designer would use LacyLights MCP to create a complete lighting design for Shakespeare's Macbeth:

Step 1: Create the Project

Use create_project to create a new project called "Macbeth - Main Stage 2024"
with description "Shakespeare's Macbeth, directed by Jane Smith, March 2024 production"

Step 2: Set Up Fixtures

Use create_fixture_instance to add these fixtures to the project:
- 12x Chauvet SlimPAR Pro RGBA fixtures for front wash (channels 1-48)
- 8x Martin MAC Quantum Profile moving heads for specials (channels 100-163)
- 6x ETC Source Four LED Series 2 for side lighting (channels 200-241)
- 4x Chauvet Strike 4 strobes for storm effects (channels 300-315)
- 2x Rosco Vapour Plus hazers for atmosphere (channels 400-403)

Step 3: Analyze the Script

Use analyze_script with the full text of Act 1 to extract:
- All lighting cues mentioned in stage directions
- Scene transitions that need lighting changes
- Mood and atmosphere requirements for each scene

Step 4: Generate Key Looks

Use generate_look to create these essential looks:

1. "Opening - Thunder and Lightning"
   - Script context: "Thunder and lightning. Enter three witches."
   - Mood: ominous, supernatural
   - Color palette: ["deep purple", "electric blue", "white strobe"]
   - Intensity: dramatic

2. "Duncan's Arrival at Inverness"
   - Script context: "Hautboys and torches. Enter Duncan, Malcolm, Donalbain, Banquo"
   - Mood: regal, warm
   - Color palette: ["warm amber", "gold", "soft orange"]
   - Intensity: moderate

3. "Lady Macbeth Reads the Letter"
   - Script context: "Enter Lady Macbeth, reading a letter"
   - Mood: intimate, plotting
   - Color palette: ["cool blue", "pale amber", "shadow"]
   - Focus areas: ["center stage", "downstage center"]

4. "The Dagger Soliloquy"
   - Script context: "Is this a dagger which I see before me"
   - Mood: hallucinatory, tense
   - Color palette: ["blood red", "deep shadow", "cold steel blue"]
   - Intensity: subtle
   - Focus areas: ["center stage spot"]

5. "Murder of Duncan"
   - Script context: "Macbeth exits to kill Duncan, bell rings"
   - Mood: dark, suspenseful
   - Color palette: ["deep red", "black", "moonlight blue"]
   - Intensity: dramatic

6. "Banquo's Ghost Appears"
   - Script context: "The Ghost of Banquo enters, and sits in Macbeth's place"
   - Mood: supernatural, terrifying
   - Color palette: ["ghostly green", "cold white", "shadow"]
   - Effects: use moving heads for ghost tracking

7. "Lady Macbeth's Sleepwalking"
   - Script context: "Enter Lady Macbeth with a taper"
   - Mood: haunted, guilty
   - Color palette: ["candlelight amber", "moonlight", "deep shadow"]
   - Focus areas: ["follow spot", "single candle effect"]

8. "Final Battle"
   - Script context: "Alarums. Enter Macbeth and Macduff fighting"
   - Mood: violent, chaotic
   - Color palette: ["fire red", "steel blue", "explosive white"]
   - Intensity: dramatic
   - Effects: strobe for sword clashes

Step 5: Create Cue Sequences

Use create_cue_sequence to build the Act 1 cue list:
- Name: "Act 1 - Complete"
- Include all Act 1 looks in order
- Set default fade times: 3 seconds in, 3 seconds out
- Add follow cues for quick transitions during soliloquies

Step 6: Generate Act Cues with Script Analysis

Use generate_act_cues with the complete text of Act 2:
- This will analyze the script and create a complete cue list
- Automatically times transitions based on dramatic pacing
- Suggests lighting changes for every entrance, exit, and mood shift

Step 7: Optimize for Performance

Use optimize_cue_timing on the Act 1 cue list:
- Strategy: "dramatic_timing"
- This will adjust fade times for maximum dramatic impact
- Smooth transitions for scene changes
- Sharp cuts for supernatural appearances

Step 8: Create Special Effect Sequences

Use create_cue_sequence for the storm effect:
1. Lightning Strike 1 (strobes at full, 0.1s)
2. Thunder Roll (deep blue wash, 2s fade)
3. Lightning Strike 2 (strobes at 75%, 0.15s)
4. Return to storm base (purple/blue, 3s fade)
- Set follow times for automatic progression

Step 9: Run the Show

During performance, the stage manager can use:

start_cue_list "Act 1 - Complete"
next_cue  # Advance through each cue
go_to_cue 15.5  # Jump to specific cue for pickups
fade_to_black 5  # Emergency blackout with 5-second fade

Step 10: Make Live Adjustments

Use update_look to adjust the "Banquo's Ghost" look:
- Increase moving head intensity for better visibility
- Adjust color temperature based on costume reflectance
- Fine-tune positioning for actor's blocking changes

Advanced Usage Examples

Script-Driven Design Workflow

1. Analyze the entire script:
   analyze_script with full play text

2. Review extracted cues and looks

3. Generate all suggested looks in batch:
   generate_look for each suggestion

4. Create master cue list:
   create_cue_sequence with all looks

5. Optimize for your venue:
   optimize_look for each look with "technical_simplicity"

Multi-Universe Setup

For large productions spanning multiple DMX universes:

1. Plan channel allocation:
   suggest_channel_assignment for all fixtures

2. Create fixtures with specific universe assignments:
   create_fixture_instance with universe: 1 for front lights
   create_fixture_instance with universe: 2 for moving heads
   create_fixture_instance with universe: 3 for effects

3. View the complete channel map:
   get_channel_map for the project

Collaborative Design Process

Director requests:
"I want the witches' scenes to feel otherworldly but not cartoonish"

Use generate_look:
- Description: "Witches on the heath"
- Mood: "otherworldly, mysterious"
- Color palette: ["deep violet", "fog grey", "pale green"]
- Intensity: "subtle"

Then iterate with optimize_look using "dramatic_impact" until satisfied

AI-Powered Features

Intelligent Script Analysis

  • Extracts explicit lighting cues from stage directions

  • Identifies implicit lighting needs from dialogue and action

  • Suggests atmospheric lighting based on dramatic context

  • Recognizes standard theatrical conventions (sunrise, sunset, storms)

Context-Aware Look Generation

  • Understands theatrical lighting principles

  • Applies color theory for emotional impact

  • Considers fixture capabilities and positions

  • Generates DMX values that respect real-world constraints

Adaptive Optimization

  • Energy Efficiency: Reduces power consumption while maintaining artistic intent

  • Dramatic Impact: Enhances contrast and focus for maximum effect

  • Technical Simplicity: Simplifies programming for easier operation

  • Color Accuracy: Optimizes for true color rendering

Troubleshooting

Common Issues

  1. Module import errors

    • Ensure Node.js version is 18+ as specified in package.json

    • Use the run-mcp.js wrapper script, not dist/index.js directly

  2. GraphQL connection errors

    • Verify your lacylights-go backend is running on port 4000

    • Check the LACYLIGHTS_GRAPHQL_ENDPOINT environment variable

  3. OpenAI API errors (e.g. "This tool requires OpenAI, but OPENAI_API_KEY is not set")

    • Set OPENAI_API_KEY in the env block of your MCP client configuration (or export it in the shell that launches the server), then restart the server. The server does not load a .env file by itself

    • Verify the API key has access to GPT-4

  4. MCP connection errors in Claude

    • Use the full absolute path in your Claude configuration

    • Restart Claude after updating the MCP configuration

    • Check Claude's logs for detailed error messages

  5. "Unexpected token ?" error

    • Update your config to use the full path to Node.js 14+

    • On macOS with Homebrew: "command": "/opt/homebrew/bin/node"

    • On other systems, find your node path with: which node

ChromaDB Setup (Optional - For Enhanced RAG)

The MCP server works out of the box with in-memory pattern storage. For persistent vector storage and more sophisticated pattern matching:

# Start ChromaDB with Docker
docker-compose up -d chromadb

# Verify it's running
curl http://localhost:8000/api/v2/heartbeat

Option 2: Local Installation

# Install ChromaDB
pip install chromadb

# Start the server
chroma run --host localhost --port 8000

Then update your .env file:

# Uncomment these lines in .env
CHROMA_HOST=localhost
CHROMA_PORT=8000

Integration with LacyLights Ecosystem

This MCP server is part of the complete LacyLights system:

  • lacylights-go - Backend GraphQL API for fixture and look management

  • lacylights-fe - Web frontend for manual control and visualization

  • lacylights-mcp - AI interface for intelligent automation

The MCP server enhances the existing system with:

  • Natural language control

  • Intelligent look generation

  • Script analysis capabilities

  • Automated cue creation

  • Performance optimization

Development

Project Structure

src/
├── tools/           # MCP tool implementations
│   ├── fixture-tools.ts    # Fixture management operations
│   ├── look-tools.ts       # Look creation and control
│   ├── cue-tools.ts        # Cue list management
│   └── project-tools.ts    # Project operations
├── services/        # Core services
│   ├── graphql-client.ts   # GraphQL API client
│   ├── rag-service.ts      # RAG pattern matching
│   └── ai-lighting.ts      # AI look generation
├── types/          # TypeScript type definitions
│   └── lighting.ts         # Core lighting types
└── index.ts        # MCP server entry point

Adding New Tools

  1. Create tool implementation in appropriate file under src/tools/

  2. Add tool definition to src/index.ts in the ListToolsRequestSchema handler

  3. Add tool handler in the CallToolRequestSchema handler

  4. Update this README with tool documentation

Testing

npm test

MCP Directory

License

MIT

Available Tools

102 tools
activate_lookC

Activate a lighting look by name or ID

ParametersJSON Schema
NameRequiredDescriptionDefault
lookIdNoLook ID to activate
lookNameNoLook name to activate (searches across projects if projectId not provided)
projectIdNoOptional project ID to search within

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It does not say what happens to the previously active look, whether activation is reversible, what state it changes on the playback engine, or how errors surface when a name matches nothing. 'Activate' implies mutation but the details are absent.

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?

It is a single front-loaded sentence with zero filler, which is structurally sound. The brevity, however, reflects under-specification rather than tight editing of rich content.

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

Completeness2/5

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

For a state-changing tool with no annotations and no output schema, the description is far too thin: it never explains the activation effect, return value, or failure modes. An agent would have to guess at the operational semantics before calling it.

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 cross-project search fallback for lookName, so the schema already documents parameters fully. The description's 'by name or ID' merely restates the two lookup modes without adding syntax, precedence, or conflict-resolution details beyond the schema.

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

Purpose4/5

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

The description states a specific verb+resource ('Activate a lighting look') that an agent can act on immediately. It fails to differentiate from the close sibling activate_look_from_board, so it stops short of a 5.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, no mention of prerequisites (e.g. whether cue playback must be running), and no routing to alternatives such as activate_look_from_board or get_current_active_look. 'By name or ID' hints at input options but says nothing about situational choice.

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

activate_look_from_boardA

Activate a look from a board (uses board's default fade time unless overridden).

ParametersJSON Schema
NameRequiredDescriptionDefault
lookIdYesLook ID to activate
lookBoardIdYesLook board ID
fadeTimeOverrideNoOptional fade time override in seconds

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It helpfully discloses that the board's default fade time applies unless overridden, which is real behavioral context, but a state-changing action tool should also say what activation affects (live output), whether it supersedes a currently active look, or any prerequisites. Those gaps keep it at a 3.

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

Conciseness5/5

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

A single short sentence with the action front-loaded and the one non-obvious behavioral nuance tucked into a parenthetical. Nothing wasted.

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

Completeness3/5

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

With no annotations, no output schema, and a fully documented param set, the definition is minimally serviceable. It tells the agent what the tool does and the fade default, but says nothing about the result of activation or how it interacts with playback state, which matters for an action tool.

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 three parameters are already documented in the schema, and the description's fade-time note merely echoes the fadeTimeOverride parameter. Baseline 3 applies since the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb (activate) plus resource (a look) and scopes it to 'from a board', which meaningfully separates it from the sibling activate_look. It does not name that sibling explicitly, so an agent must infer the distinction, but the resource and scope are unambiguous.

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

Usage Guidelines3/5

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

The phrase 'from a board' implies this is the variant to use when the look lives on a look board rather than being activated directly, but there is no explicit when-to-use or when-not-to-use guidance and no mention of the alternative activate_look. Usage is implied rather than stated.

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

add_cue_to_listC

Add a new cue to an existing cue list

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the new cue
notesNoNotes or description for the cue
lookIdYesLook ID to use for this cue
positionNoPosition relative to reference cue
cueListIdYesCue list ID to add cue to
cueNumberYesCue number (e.g., 1.5, 2.0)
fadeInTimeNoFade in time in seconds
followTimeNoAuto-follow time in seconds (null for manual)
fadeOutTimeNoFade out time in seconds
referenceCueNumberNoCue number to insert before/after

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description bears full behavioral burden and delivers almost none. It does not disclose whether inserting a cue renumbers/shifts existing cues, how position/referenceCueNumber interact with the required fields, permission requirements, or reversibility of the mutation.

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

Conciseness3/5

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

It is a single front-loaded sentence with no filler, which is good. But the extreme brevity leaves the definition under-specified for a 10-parameter mutation tool, so it is concise without being appropriately sized.

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

Completeness2/5

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

For a 10-parameter write operation with no annotations and no output schema, the description is inadequate. Nothing explains the insertion semantics, the interaction between position, referenceCueNumber, and cueNumber, or what the caller should expect afterward.

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 10 parameters (including the before/after enum and the fade timings) are already documented in the schema. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

The description states a clear verb and resource ('Add a new cue to an existing cue list'), which is enough to distinguish it from siblings like remove_cue_from_list. However, it never explicitly contrasts itself with alternatives such as bulk_create_cues, create_cue_sequence, or update_cue, so the differentiation is implicit rather than stated.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus bulk_create_cues, create_cue_sequence, or update_cue, and no stated preconditions (e.g., that the cue list must already exist). The 'existing cue list' phrasing faintly implies a prerequisite but nothing actionable is offered.

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

add_fixtures_to_lookC

Safely add fixtures to a look without affecting existing fixtures

ParametersJSON Schema
NameRequiredDescriptionDefault
lookIdYesLook ID to add fixtures to
fixtureValuesYesFixtures to add to the look
overwriteExistingNoWhether to overwrite existing fixture values

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It hints at safe/additive behavior ('without affecting existing fixtures'), but there is a tension with the schema's overwriteExisting flag, and it says nothing about permissions, whether added fixtures are appended or merged, or ordering effects.

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?

A single, tight sentence with the key scoping qualifier front-loaded and no wasted words.

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

Completeness2/5

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

For a mutation tool with no annotations and no output schema, the description is too thin: it does not clarify the effect of overwriteExisting, the return value, or how it differs from the many sibling look-mutation tools.

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 all three parameters including overwriteExisting and the nested channel values. The description's 'without affecting existing fixtures' loosely maps to the overwriteExisting default, but adds no syntax or format detail beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('add') and resource ('fixtures to a look') with a clear scope qualifier ('without affecting existing fixtures'). However, it does not distinguish itself from close siblings such as ensure_fixtures_in_look, copy_fixtures_to_looks, or update_look, so an agent must still infer which tool applies.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance and no mention of alternatives. With several overlapping siblings (ensure_fixtures_in_look, copy_fixtures_to_looks, remove_fixtures_from_look) present, the absence of routing guidance is a real gap.

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

add_look_to_boardC

Add a look as a button to a look board at a specific position.

ParametersJSON Schema
NameRequiredDescriptionDefault
colorNoButton color (hex or CSS color value)
labelNoButton label/text override
widthNoButton width in pixels (default: 200)
heightNoButton height in pixels (default: 120)
lookIdYesLook ID for this button
layoutXYesX position in pixels
layoutYYesY position in pixels
lookBoardIdYesLook board ID to add button to

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full behavioral burden, yet it discloses only that placement is positional. It says nothing about what happens if the look is already on the board (error vs. duplicate), whether the caller needs ownership or write permissions on the board, or whether the operation is undoable given the undo/redo tooling present among siblings.

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?

A single front-loaded sentence with zero filler — verb, artifact, target, and placement constraint in one pass. Nothing is repeated from the name and no sentence fails to earn its place.

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

Completeness2/5

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

For a mutation tool with no annotations, no output schema, and eight parameters, the description is too thin. It omits conflict handling, permission requirements, and the fact that required positioning parameters make this a layout-sensitive operation, all of which an agent needs before committing to a call.

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

Parameters3/5

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

Schema description coverage is 100%, with every one of the 8 parameters documented in the schema including defaults for width/height, so the schema does the heavy lifting and a baseline of 3 applies. The phrase 'at a specific position' loosely maps to layoutX/layoutY but adds no syntax, units, or constraint detail beyond what the schema already states.

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

Purpose4/5

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

The description names a specific verb (add), resource (look), and target container (look board) plus the resulting artifact (a button), so the operation is unambiguous. It does not, however, explicitly differentiate itself from close siblings such as bulk_create_look_board_buttons or update_look_board_button, leaving the agent to infer the singular-vs-bulk distinction from the name alone.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance. The description never mentions the alternative of bulk_create_look_board_buttons for adding multiple buttons, nor does it say whether this should be used instead of create_look_board_with_buttons when setting up a new board, so the agent receives no routing signal.

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

analyze_cue_structureC

Analyze the structure and timing of a cue list

ParametersJSON Schema
NameRequiredDescriptionDefault
cueListIdYesCue list ID to analyze
projectIdYesProject ID containing the cue list
includeRecommendationsNoInclude improvement recommendations

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It mentions 'analyze' but doesn't specify whether this is a read-only operation, what permissions are needed, if it's computationally intensive, or what the output format might be. For a tool with no annotations, this leaves significant behavioral gaps.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded with the core functionality.

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

Completeness2/5

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

Given no annotations and no output schema, the description is incomplete for a tool that performs analysis. It doesn't explain what the analysis produces (e.g., a report, metrics, or visualizations) or any behavioral aspects like performance characteristics. For a 3-parameter tool with no structured support, this leaves too much unspecified.

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 all three parameters thoroughly. The description doesn't add any additional meaning about the parameters beyond what's in the schema (e.g., it doesn't explain what 'cue list structure' entails or how recommendations are generated). Baseline 3 is appropriate 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.

Purpose4/5

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

The description clearly states the action ('analyze') and the target ('structure and timing of a cue list'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate this tool from sibling tools like 'optimize_cue_timing' or 'get_cue_list_details', which might have overlapping purposes in cue list analysis.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'optimize_cue_timing' (which might adjust timing) and 'get_cue_list_details' (which might retrieve basic info), there's no indication of when this analysis tool is preferred or what specific context it serves.

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

analyze_fixture_capabilitiesC

Analyze specific fixtures to understand their lighting capabilities

ParametersJSON Schema
NameRequiredDescriptionDefault
fixtureIdNoSingle fixture ID to analyze
fixtureIdsNoMultiple fixture IDs to analyze
analysisTypeNoType of capability analysisgeneral

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'analyze' and 'understand capabilities,' which suggests a read-only operation, but doesn't specify if it requires permissions, has rate limits, or what the output format is (e.g., textual report, structured data). For a tool with no annotations, this leaves significant gaps in understanding its behavior and constraints.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose ('analyze specific fixtures') and adds clarifying detail ('to understand their lighting capabilities'). There is no wasted wording, repetition, or unnecessary elaboration, making it appropriately sized for its informational content.

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

Completeness2/5

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

Given the complexity (analysis tool with 3 parameters), no annotations, and no output schema, the description is incomplete. It doesn't explain what 'lighting capabilities' means in practice, how results are returned, or any behavioral traits like error handling. For a tool that likely produces insights or reports, more context is needed to guide effective use by an AI agent.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents the three parameters (analysisType, fixtureId, fixtureIds) with descriptions and an enum for analysisType. The description adds no additional meaning beyond the schema, such as explaining how 'fixtureId' and 'fixtureIds' interact or what 'lighting capabilities' entail. Baseline 3 is appropriate as the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the action ('analyze') and resource ('specific fixtures'), specifying the purpose is to 'understand their lighting capabilities.' It distinguishes from siblings like 'get_fixture_inventory' or 'create_fixture_instance' by focusing on analysis rather than retrieval or creation. However, it doesn't explicitly differentiate from 'analyze_cue_structure' or 'analyze_script,' which might involve different resources.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, such as needing fixture IDs from 'get_fixture_inventory,' or compare to siblings like 'analyze_cue_structure' for different analysis types. Usage is implied through the action and resource but lacks explicit context or exclusions.

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

analyze_scriptC

Analyze a theatrical script to extract lighting-relevant information

ParametersJSON Schema
NameRequiredDescriptionDefault
scriptTextYesThe theatrical script text to analyze
suggestLooksNoGenerate look suggestions based on analysis
extractLightingCuesNoExtract specific lighting cues from the script

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It never states whether the tool is read-only, whether it mutates the project, what the extraction produces, or how the boolean flags change behavior. For a 3-parameter analysis tool with no output schema, this leaves the agent guessing.

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 front-loaded sentence with no filler. It is efficient, though the brevity is partly under-specification rather than disciplined concision.

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

Completeness2/5

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

With no annotations, no output schema, and two behavior-altering boolean flags defaulting to true, the description should explain what the analysis returns and what each flag toggles. It explains neither, leaving the agent unable to predict the result or the side effects.

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 three parameters are already documented in the schema. The description adds nothing beyond a loose nod to 'lighting-relevant information' and does not explain the interaction between suggestLooks and extractLightingCues. Baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb (analyze) and resource (theatrical script) with a clear output scope (lighting-relevant information). It is distinguishable from neighboring tools like analyze_cue_structure and analyze_fixture_capabilities by its input resource, though it does not name those siblings explicitly.

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

Usage Guidelines2/5

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

No when-to-use guidance, prerequisites, or alternatives are given. An agent cannot tell whether this is a first step before generate_act_cues or a standalone check, nor whether results feed anything else.

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

bulk_create_cue_listsC

Create multiple cue lists in a single operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
cueListsYesArray of cue lists to create

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. "In a single operation" hints at batching, but it never says whether the batch is atomic (all-or-nothing) or partial on failure, how duplicate names are handled, or what permissions are required for a write. It merely restates the mutation implied by the name.

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 front-loaded sentence with zero padding or repetition. It is efficient, though it is also the entire description, so there is no structure beyond the one clause.

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

Completeness3/5

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

No output schema exists and parameter documentation is fully in the schema, so those gaps are covered. However, for a mutation tool with zero annotation coverage, the description omits batch failure semantics and validation rules an agent would want before invoking it — minimum viable but not complete.

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

Parameters3/5

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

Schema description coverage is 100% and the nested item fields (name, projectId, description, loop) are all documented in the schema itself, so the baseline of 3 applies. The description adds nothing beyond the schema about the shape or requirements of the cueLists array.

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

Purpose4/5

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

States a specific verb and resource (create cue lists) plus the batching scope ("multiple... in a single operation"), which is the key distinction from the singular update_cue_list / delete_cue_list siblings. It does not name any sibling explicitly, but the bulk-vs-single intent is unambiguous.

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

Usage Guidelines2/5

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

There is no statement of when to use this over alternatives (e.g., why batch rather than calling a single-create path repeatedly, or how it relates to bulk_update_cue_lists / bulk_delete_cue_lists). No prerequisites, no exclusions, no routing guidance of any kind.

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

bulk_create_cuesC

Create multiple cues in a single operation. All cues are created in one GraphQL call for efficiency.

ParametersJSON Schema
NameRequiredDescriptionDefault
cuesYesArray of cues to create

TDQS

C2.9/5.0
Behavior2/5

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

No annotations, so the description carries the full behavioral burden. It discloses that everything goes in one GraphQL call, but says nothing about atomicity/partial-failure behavior, required permissions, rate limits, or validation rules for the nested cue objects.

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

Conciseness4/5

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

Two short sentences, with the core action front-loaded and the batching rationale second. Nothing is wasted, though the second sentence is closer to an implementation note than decision-relevant information.

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

Completeness3/5

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

Schema fully documents the single array parameter and there is no output schema to explain, but a mutation with no annotations should at least address failure semantics and prerequisites. Those gaps keep it at minimum-viable rather than complete.

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

Parameters3/5

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

Schema description coverage is 100% and every nested field (name, cueNumber, lookId, cueListId, fade times) is documented in the schema. The description adds no syntax, format, or ordering detail beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Create multiple cues') and the bulk nature is unambiguous, so an agent can separate it from single-cue tools like add_cue_to_list. It does not explicitly name which sibling to prefer, so it stops short of a 5.

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

Usage Guidelines2/5

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

No guidance on when to use this versus add_cue_to_list, create_cue_sequence, or the single-cue creation path. The only hint is the word 'bulk', leaving the agent to infer the selection condition from the name.

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

bulk_create_fixture_definitionsB

Create multiple fixture definitions in a single operation. Use this to efficiently add multiple fixture types (manufacturer/model combinations) to the system at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
definitionsYesArray of fixture definitions to create

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full disclosure burden for a bulk mutation. It says nothing about permissions required, duplicate manufacturer/model handling, partial-failure semantics when one of many definitions is invalid, or whether the operation is transactional — all critical for a batch 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?

Two tight sentences with the core action front-loaded and zero filler. Every clause earns its place.

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

Completeness3/5

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

For a nested bulk-mutation tool with no annotations and no output schema, the description covers what the tool does but omits the behavioral detail an agent needs to call it safely — batch error behavior, duplicates, and what is returned on success.

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 nested fields (type, model, modes, channels, channel offsets, DMX min/max/default) are already documented in the schema. The description adds no format or constraint detail beyond it, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: create multiple fixture definitions, with the parenthetical clarifying that a definition is a manufacturer/model combination. However, it never distinguishes itself from the close sibling bulk_create_fixtures (which presumably creates fixture instances rather than definitions), leaving the definition-vs-instance boundary implicit.

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

Usage Guidelines3/5

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

"Use this to efficiently add multiple fixture types... at once" implies the usage context is bulk insertion, but there is no explicit when-to-use vs bulk_create_fixtures, no guidance on single vs bulk, and no exclusions or prerequisites stated.

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

bulk_create_fixturesA

Create multiple fixture instances with best-effort approach. Each fixture is processed individually, allowing partial success if some fixtures fail. Returns detailed success/failure information for each fixture. Automatically assigns DMX channels if not specified. Validates channel availability before creation.

ParametersJSON Schema
NameRequiredDescriptionDefault
fixturesYesArray of fixtures to create

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the best-effort partial-failure model, per-fixture success/failure reporting, automatic DMX channel assignment, and pre-creation validation — substantive behavioral context for a mutation tool. It stops short of stating permissions, rollback semantics, or return format.

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 core action and failure model, each carrying a distinct behavioral fact. No filler or repetition.

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

Completeness4/5

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

For a single-parameter bulk mutation with no output schema, the description covers failure semantics, auto-assignment, and validation adequately. It lacks explicit guidance on error-recovery expectations and sibling routing, keeping it just shy of complete.

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

Parameters3/5

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

Parameter count is 1 and schema description coverage is 100%, so the schema already documents every nested fixture field. The description only adds that startChannel is optional ('auto-assign'), which the schema also states. 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 and resource ('Create multiple fixture instances'), and the 'bulk' qualifier plus 'best-effort approach' distinguishes it from the singular create_fixture_instance sibling. An agent can select it 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 Guidelines3/5

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

Implies batch use via 'multiple fixture instances' and 'partial success', but never explicitly says when to use this versus create_fixture_instance or bulk_update_fixtures. No when-not or exclusion guidance is given.

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

bulk_create_look_board_buttonsC

Create multiple buttons in a single operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
buttonsYesArray of buttons to create

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden but only hints at batching via 'single operation.' It does not disclose whether the batch is atomic, what happens on partial failure, required permissions, or whether referenced boards/looks must pre-exist.

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 short sentence that is front-loaded with the verb and resource, with no filler. It is efficient, though arguably terse enough to leave necessary context unstated.

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

Completeness2/5

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

For a bulk mutation accepting an array of nested objects with required board/look references, the description omits failure semantics, ordering, and return behavior, and no output schema or annotations compensate. It is materially under-specified for the tool's complexity.

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 nested button object's fields are already documented in the schema. The description adds no meaning beyond the single 'buttons' array, so baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb ('Create') and resource ('buttons') and clarifies the bulk nature with 'multiple buttons in a single operation,' which distinguishes it from single-button operations. However, it does not differentiate from close siblings such as create_look_board_with_buttons or bulk_update_look_board_buttons.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus create_look_board_with_buttons (for a new board) or add_look_to_board, nor any prerequisite such as the look board existing. The agent must infer usage entirely from the name and siblings.

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

bulk_create_look_boardsC

Create multiple look boards in a single operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
lookBoardsYesArray of look boards to create

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It does not disclose whether the batch is atomic or partially applied on error, who is authorized to create boards, or any rate/size limits — all critical for a bulk mutation.

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 short, front-loaded sentence with no filler. It is efficient, though its brevity is partly under-specification rather than disciplined conciseness.

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

Completeness2/5

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

For a bulk mutation tool with no annotations and no output schema, the description should explain at minimum error/partial-failure behavior and the shape of the result. None of that is present, leaving an agent unable to predict what a returned call means.

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 single lookBoards array parameter is self-documented with per-item name/projectId requirements and defaults for gridSize, canvas dimensions, and fade time. The description adds no further meaning beyond that baseline.

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

Purpose4/5

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

States a specific verb (Create) and resource (look boards) plus the batch qualifier 'multiple ... in a single operation', which distinguishes it from the sibling create_look_board. It does not name that sibling explicitly, so it falls short of a 5.

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

Usage Guidelines2/5

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

No guidance on when to choose this over create_look_board or the other bulk siblings, no batch-size limits, and no prerequisites such as project existence or permissions. The agent must infer usage entirely from the tool name.

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

bulk_create_looksB

Create multiple looks in a single operation. Returns all created looks with their IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
looksYesArray of looks to create

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses the return payload ('all created looks with their IDs'), which offsets the absent output schema, but says nothing about atomicity, partial-failure behavior, size limits, or permission requirements for a nested write operation.

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 short sentences, front-loaded with the action and followed by the return contract. No filler or redundancy.

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

Completeness3/5

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

For a deeply nested bulk-write with no annotations and no output schema, the description covers the action and return shape but omits error/atomicity semantics and any limits on batch size. It is minimally adequate rather than complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the nested items, required fields, and DMX value bounds are already documented in the schema. The description adds nothing about parameter format or constraints, which is acceptable at full coverage but leaves it at the baseline.

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

Purpose4/5

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

States a specific verb and resource ('Create multiple looks') and notes the batch nature ('in a single operation'). It does not explicitly distinguish itself from related siblings such as bulk_update_looks or generate_look, but the 'bulk create' framing and the 'multiple looks' scope are clear enough to select it.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus update_look, generate_look, or bulk_update_looks, and no prerequisites are stated despite each look requiring a projectId. The agent must infer usage entirely from the name.

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

bulk_create_projectsC

Create multiple projects in a single operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectsYesArray of projects to create

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden for a write operation. 'Single operation' vaguely gestures at atomicity without saying whether a partial failure rolls back, how duplicate names are handled, or what identifiers come back — none of which is covered anywhere else.

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 front-loaded sentence with no filler or redundancy, and the bulk nature is stated immediately. It is efficient, though its brevity is partly the under-specification flagged elsewhere rather than disciplined density.

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

Completeness2/5

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

For a batch mutation tool with zero annotations and no output schema, the description leaves critical gaps: response shape, atomicity/partial-failure behavior, and practical batch limits. An agent can attempt the call but cannot predict what happens on partial failure.

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, groupId, and description are already documented inline; baseline 3 applies. The description adds only the notion of cardinality ('multiple projects'), which is marginally useful but not meaningful semantic detail.

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

Purpose4/5

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

States a specific verb (Create), resource (projects), and the bulk scope ('multiple projects in a single operation'), which cleanly separates it from the singular create_project sibling. It does not name that sibling explicitly, so an agent still has to infer the routing choice.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no statement of when to prefer this over repeated create_project calls, and no mention of batch size limits or prerequisites. The word 'bulk' plus 'multiple' implies batching, but nothing tells the agent when this is the right tool.

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

bulk_delete_cue_listsB

Delete multiple cue lists in a single operation. Returns count of successfully deleted cue lists and any failed IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
cueListIdsYesArray of cue list IDs to delete
confirmDeleteYesConfirm deletion (required to be true for safety)

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full disclosure burden. It usefully implies non-atomic, partial-success behavior by mentioning 'any failed IDs', which is real behavioral signal, but it never states that deletion is irreversible, what permissions are needed, or that confirmDelete must be true for the call to proceed.

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, zero filler, with the operation and its scope front-loaded before the return-value note. Every sentence earns its place.

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

Completeness4/5

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

There is no output schema, so the description correctly compensates by describing the return shape (count plus failed IDs). For a destructive bulk tool with no annotations it could still warn about irreversibility, but the partial-failure semantics and return format are covered.

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 cueListIds and confirmDelete are already documented in the schema; the description adds no param-level syntax or format detail. Baseline 3 applies since the schema does the heavy lifting.

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

Purpose4/5

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

The description states a specific verb (Delete) and resource (cue lists) with explicit scope ('multiple ... in a single operation'), which implicitly separates it from the singular delete_cue_list sibling. It stops short of naming the single-item alternative directly, so it is clear but not fully differentiated.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance, and no mention of the single-item delete_cue_list alternative or the confirmDelete precondition beyond what the schema already states. Usage is only implied by the 'bulk' prefix and the plural resource.

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

bulk_delete_cuesA

Delete multiple cues in a single operation. Returns count of successfully deleted cues and any failed IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
cueIdsYesArray of cue IDs to delete
confirmDeleteYesConfirm deletion (required to be true for safety)

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It does state the return format (count of successful deletions and failed IDs), but it does not disclose that deletion is destructive, whether it is reversible, or whether undo is available—critical omissions for a delete operation.

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 the core action, and no wasted words. The return-value note is secondary but directly relevant.

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

Completeness3/5

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

The description covers the action and return summary, and the schema fully documents parameters. However, for a destructive bulk tool with no annotations and no output schema, it should provide more safety context (e.g., irreversibility, confirmation requirement beyond the schema) and guidance on alternatives.

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 both parameters ('cueIds' and 'confirmDelete') clearly. The description adds no additional parameter meaning beyond what the schema provides, so a 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?

The description states a specific verb ('Delete'), resource ('cues'), and scope ('multiple cues in a single operation'). This clearly distinguishes it from sibling bulk-delete tools that target other resources like projects, looks, or cue lists.

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

Usage Guidelines3/5

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

The phrase 'multiple cues in a single operation' implies this is for bulk deletion, which is useful context. However, it does not explicitly say when to use this tool versus a single-cue deletion alternative, nor does it mention any prerequisites or exclusions.

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

bulk_delete_fixturesA

Delete multiple fixture instances in a single operation. Returns count of successfully deleted fixtures and any failed IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
fixtureIdsYesArray of fixture IDs to delete
confirmDeleteYesConfirm deletion (required to be true for safety)

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does add genuine value by disclosing non-atomic, partial-failure semantics ('any failed IDs'), which is not derivable from the schema, but it omits irreversibility, permission/auth requirements, and any batch-size limits for a destructive operation.

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 tight sentences with zero filler; the action and its return contract are front-loaded in that order. Nothing in the text is redundant.

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

Completeness3/5

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

The absence of an output schema is partly offset because the description states the return shape (deleted count plus failed IDs). However, for a destructive bulk tool with no annotations at all, more disclosure about irreversibility and the confirmDelete safeguard's effect would be needed to be fully complete.

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

Parameters3/5

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

Schema description coverage is 100%, and both fixtureIds and the confirmDelete safety flag are fully documented in the schema itself. The description adds no format, ordering, or limit detail beyond that, so the baseline 3 applies.

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

Purpose4/5

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

The description states a clear verb ('Delete') plus resource ('fixture instances') and scope ('multiple ... in a single operation'), which distinguishes it from the singular delete_fixture_instance sibling by implication. It stops short of explicitly naming that alternative, so it is clear but not maximally disambiguating.

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

Usage Guidelines3/5

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

The phrase 'in a single operation' implies this is the batch-efficient path versus deleting one at a time, but the description never states when to prefer it over delete_fixture_instance or bulk_update_fixtures. Usage must be inferred from the name and the word 'multiple'.

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

bulk_delete_look_board_buttonsC

Delete multiple buttons in a single operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
buttonIdsYesArray of button IDs to delete
confirmDeleteYesConfirm deletion (required to be true for safety)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It does not state that deletion is irreversible, what happens to buttons still referenced by a look board, or what the response contains. The safety confirmation flag is only visible in the schema, not explained here.

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 front-loaded sentence with no filler. It is efficient, though possibly too terse given the destructive nature of the operation.

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

Completeness3/5

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

For a two-parameter destructive mutation with no annotations and no output schema, the description is thin. The schema covers the confirmation requirement, but irreversibility and side effects on referencing look boards are never addressed.

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 (buttonIds, confirmDelete) are already documented inline, including the safety rationale for confirmDelete. The description adds no additional meaning beyond the schema, which is the expected baseline for full coverage.

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

Purpose4/5

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

The description states a specific verb ('Delete') and resource ('buttons'), with the bulk scope made explicit by 'multiple ... in a single operation'. It is clear enough to distinguish from single-button deletion and from the sibling bulk_delete_look_boards, though it does not name any sibling.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus deleting buttons individually, updating them via bulk_update_look_board_buttons, or other bulk operations. No prerequisites or conditions are stated.

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

bulk_delete_look_boardsC

Delete multiple look boards in a single operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
lookBoardIdsYesArray of look board IDs to delete
confirmDeleteYesConfirm deletion (required to be true for safety)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden for a destructive bulk operation. It discloses only that multiple boards go in one call; irreversibility, permission requirements, cascade effects on buttons or cue references, and the confirmDelete safety gate (left to the schema) are all unstated.

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 front-loaded sentence with no filler or redundancy. It is efficient, though so terse that it borders on under-specification rather than optimal density.

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

Completeness2/5

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

For a destructive multi-record operation with no annotations and no output schema, the description should cover at least reversibility and failure behavior. Neither is present, leaving an agent unable to predict the consequences of the call.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (lookBoardIds, confirmDelete) are already documented in the schema, including the safety semantics of confirmDelete. The description adds no syntax, limit, or behavioral detail beyond that baseline.

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

Purpose4/5

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

States a specific verb (delete) and resource (look boards) with an explicit bulk scope, which cleanly separates it from the singular delete_look_board sibling. It stops short of naming that sibling or any alternative, so an agent must infer the distinction.

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

Usage Guidelines2/5

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

No when-to-use guidance is given: nothing says when to prefer this over delete_look_board, whether the operation is atomic across IDs, or what happens on partial failure. The bulk intent is implied by the name and description only.

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

bulk_delete_looksA

Delete multiple looks in a single operation. Returns count of successfully deleted looks and any failed IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
lookIdsYesArray of look IDs to delete
confirmDeleteYesConfirm deletion (required to be true for safety)

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose one genuinely useful trait: partial-failure semantics via 'count of successfully deleted looks and any failed IDs'. However it omits irreversibility/recoverability, permission requirements, and any mention of the confirmDelete safety gate beyond what the schema already states.

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 short sentences, zero filler, with the operation and its scope front-loaded before the return-value note.

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

Completeness3/5

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

It usefully compensates for the absent output schema by describing the return payload, but for a destructive mutation with no annotations it should also address reversibility and the confirmDelete requirement to be fully self-sufficient.

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 parameters (lookIds, confirmDelete) are documented in the schema itself, so the baseline is 3. The description adds no format, limit, or ordering semantics for lookIds beyond what the schema 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 (delete), a specific resource (looks), and the bulk scope (multiple in a single operation), which cleanly separates it from bulk_delete_projects, bulk_delete_cues, and single-item delete_look.

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

Usage Guidelines2/5

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

There is no when-to-use guidance: it never says to prefer this over repeated single deletions, nor mentions the confirmDelete prerequisite, nor names any alternative tool. The reader must infer all routing decisions from the name alone.

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

bulk_delete_projectsB

Delete multiple projects in a single operation. Returns count of successfully deleted projects and any failed IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdsYesArray of project IDs to delete
confirmDeleteYesConfirm deletion (required to be true for safety)

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses partial-failure semantics by stating the return includes a success count and failed IDs, which implies operations may partially succeed. However, it says nothing about irreversibility, required permissions, or whether deletion is atomic.

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 tight sentences with zero waste; the operation is front-loaded and the return contract follows immediately. Every clause earns its place.

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

Completeness4/5

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

For a destructive bulk tool with no annotations and no output schema, the description covers purpose and return shape well. It still leaves the irreversibility/permission profile unstated, which matters for an unflagged bulk delete, so it is not fully complete.

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

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 (projectIds, confirmDelete) are already documented in the schema, including the safety rationale for confirmDelete. The description adds no syntax or semantic detail beyond what the schema provides, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (delete) and resource (projects) with clear bulk scope ('multiple projects in a single operation'), which implicitly distinguishes it from the singular delete_project sibling. It does not explicitly name an alternative, so the differentiation requires a small inference.

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

Usage Guidelines2/5

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

No guidance on when to use this over delete_project or any alternative, and no stated preconditions beyond the schema's confirmDelete flag. The agent must infer usage entirely from the name and scope.

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

bulk_update_cue_listsC

Update multiple cue lists in a single operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
cueListsYesArray of cue list updates to apply

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden for a mutation tool, and it discloses almost nothing. It never states whether the bulk update is atomic or permits partial failure, what happens to invalid cueListId values, whether omitted fields are left untouched, or what permissions are required.

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 front-loaded sentence with no wasted words, which is structurally ideal. It is arguably too terse for a bulk mutation tool, but it earns its place and reads cleanly.

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

Completeness2/5

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

For a bulk write tool with no annotations and no output schema, the description should at minimum address atomicity, partial-failure semantics, and what the caller gets back. None of that is present, leaving meaningful gaps for safe invocation.

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 cueListId, name, description, and loop are already documented in the schema. The description adds no syntax, format, or semantic detail 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.

Purpose4/5

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

States a specific verb+resource ('Update multiple cue lists') and implies the bulk scope via 'multiple', which distinguishes it from the singular sibling update_cue_list. It does not, however, name the sibling it is not, so differentiation is left implicit.

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

Usage Guidelines2/5

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

No guidance on when to use this versus update_cue_list or bulk_create/bulk_delete_cue_lists, and no preconditions or exclusions stated. The 'single operation' phrasing hints at a batching benefit but never says when batching is appropriate.

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

bulk_update_cuesB

Update fade times and follow times for multiple cues in a single operation

ParametersJSON Schema
NameRequiredDescriptionDefault
skipNoWhen set, updates the skip status of all selected cues
cueIdsYesArray of cue IDs to update
easingTypeNoEasing type for transitions
fadeInTimeNoNew fade in time in seconds (applies to all selected cues)
followTimeNoNew follow time in seconds (applies to all selected cues, null to remove auto-follow)
fadeOutTimeNoNew fade out time in seconds (applies to all selected cues)

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full disclosure burden, and it does very little. It does not explain that this is a mutating operation that overwrites existing timing values, what happens to cues whose IDs are invalid, whether the update is atomic across all cues, or what permission/undo implications exist. Only neutral timing language is offered.

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 front-loaded sentence with no filler and no redundancy, which is efficient. It is brief almost to a fault, but nothing in it fails to earn its place.

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

Completeness2/5

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

For a bulk mutation tool with zero annotations and no output schema, an agent still lacks key context: whether updates apply uniformly to all cueIds, error/partial-failure behavior, and confirmable side effects. The one-line description is not sufficient to call this 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 the schema already documents all six parameters with units and behavior (e.g. followTime 'null to remove auto-follow'). The description adds no syntax, format, or constraint detail beyond what the schema provides, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (Update), resource (cues), and scope (multiple cues in a single operation), which lets an agent distinguish it from the singular update_cue and from bulk_create_cues / bulk_delete_cues. However, it advertises only 'fade times and follow times' while the schema also supports skip status and easing type, so the stated purpose is narrower than the tool actually is.

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

Usage Guidelines3/5

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

The phrase 'for multiple cues in a single operation' implicitly signals the batch use case versus single-cue update_cue, but there is no explicit when/when-not guidance and no named alternative. Usage is inferable from the wording rather than stated.

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

bulk_update_fixturesA

Update multiple fixture instances in a single atomic operation. All updates succeed or fail together. Useful for batch renaming, repositioning, or re-tagging fixtures.

ParametersJSON Schema
NameRequiredDescriptionDefault
fixturesYesArray of fixture updates to apply

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden, and it does disclose the key trait that updates are atomic ('All updates succeed or fail together'). However it omits whether unlisted fields are left untouched vs cleared, permission requirements, and any error/response behavior, leaving meaningful gaps for a mutation tool.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core purpose and atomicity before the use-case examples. No filler, every sentence contributes.

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

Completeness3/5

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

For a mutation tool with no annotations and no output schema, the description covers purpose and atomicity but leaves partial-update semantics (whether omitted fields are preserved) and permission/error behavior unstated. Adequate but not complete for the risk profile.

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 nested fields (name, tags, layoutX/Y, universe, startChannel, etc.) are all documented in the schema. The description adds no parameter-level meaning 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.

Purpose4/5

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

The description states a specific verb ('Update') and resource ('multiple fixture instances') and adds the distinguishing batch scope ('single atomic operation'). This lets an agent separate it from the singular update_fixture_instance without opening the schema, though no sibling is named explicitly.

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

Usage Guidelines4/5

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

It gives clear usage context ('batch renaming, repositioning, or re-tagging'), which tells the agent when this batch tool is appropriate. It does not state when NOT to use it or point to update_fixture_instance for single-item edits, so it stops short of full routing guidance.

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

bulk_update_look_board_buttonsC

Update multiple buttons in a single operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
buttonsYesArray of button updates to apply

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. 'Update' implies mutation but nothing is said about whether the batch is atomic, what happens on partial failure, whether fields are merged or replaced, or what permissions are needed. For a bulk write tool this is a significant gap.

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 front-loaded sentence with zero waste. It is efficient, though the terseness contributes to the overall under-specification of a mutating batch operation.

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

Completeness2/5

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

For a batch mutation tool with no annotations and no output schema, the description is too thin. It omits atomicity, partial-failure behavior, and result reporting, which an agent needs before invoking a bulk write.

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 array items are self-documenting (buttonId required, plus color/label/width/height/layoutX/layoutY), so the schema does the heavy lifting. The description adds no meaning about how updates are applied per item, so baseline 3 is appropriate.

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

Purpose4/5

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

States a clear verb (Update) and resource (multiple buttons) with a batch scope qualifier. It implicitly distinguishes itself from the singular update_look_board_button and from the create/delete bulk siblings, but never names them explicitly.

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

Usage Guidelines2/5

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

Provides no when-to-use guidance, no prerequisites, and no mention of alternatives such as update_look_board_button for single edits or update_look_board_button_positions for layout-only changes. Usage is only implied by the word 'multiple'.

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

bulk_update_look_boardsC

Update multiple look boards in a single operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
lookBoardsYesArray of look board updates to apply

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden and it discloses almost nothing. It does not say whether the batch is atomic or per-item, what happens to fields omitted from an item, whether existing values are overwritten, or what permissions are needed for a mutation.

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 efficient sentence with no filler, front-loaded on the verb and resource. It is arguably too terse for a mutation tool, but there is no wasted wording to trim.

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

Completeness2/5

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

For a batch mutation with no annotations and no output schema, the description leaves critical agent-facing questions unanswered: atomicity of the batch, failure semantics, and whether partial success is possible. The schema covers the inputs, but nothing covers behavior on invocation.

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 nested lookBoards array documents all seven updatable fields, so the schema does the heavy lifting. The description only adds the notion of multiplicity, which the parameter name already conveys, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ("Update multiple look boards") and the modifier "in a single operation" distinguishes it from the single-item update_look_board sibling. It does not, however, name any sibling explicitly, so an agent must infer the bulk-vs-single relationship from the name alone.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no conditions for preferring this over repeated update_look_board calls, and no mention of the related bulk_create_look_boards or bulk_delete_look_boards tools. Usage is only implied by the plural "multiple".

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

bulk_update_looksC

Update multiple looks in a single operation. Supports updating name, description, and fixture values.

ParametersJSON Schema
NameRequiredDescriptionDefault
looksYesArray of look updates to apply

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about the key semantic question: whether omitted fields are left unchanged or cleared (critical when a 'partial' sibling exists). It also omits failure handling for a batch of look updates, permission requirements, and whether changes are reversible.

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

Conciseness4/5

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

Two compact sentences with no filler, and the core action is front-loaded. It is efficiently sized, though the second sentence is close to restating schema fields.

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

Completeness2/5

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

For a batch mutation tool with no annotations, no output schema, and an ambiguous relationship to bulk_update_looks_partial, the description is too thin. An agent cannot determine merge semantics, partial-failure behavior, or which sibling to choose.

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 looks, lookId, name, description, and the fixtureValues/channels structure, making a baseline of 3 appropriate. The description adds only a field enumeration that largely mirrors the schema and does not clarify merge-vs-replace semantics for the nested fixtureValues.

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

Purpose4/5

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

The description states a specific verb and resource ('Update multiple looks in a single operation') and enumerates the updatable fields (name, description, fixture values). It is clear what the tool does, but it never distinguishes itself from the near-identical sibling bulk_update_looks_partial or from single-look update_look/update_look_partial.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no routing to alternatives. Given the presence of update_look, update_look_partial, and especially bulk_update_looks_partial, the agent is left to guess which bulk variant applies.

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

bulk_update_looks_partialA

Update multiple looks with partial fixture value merging support. Each look can independently specify name, description, fixtureValues, and mergeFixtures. Unlike bulk_update_looks, this preserves existing fixtures not mentioned in the update (when mergeFixtures=true). This is useful for batch operations like changing a channel value across many looks without affecting other fixtures.

ParametersJSON Schema
NameRequiredDescriptionDefault
looksYesArray of look partial updates to apply

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden and does disclose the key merge-vs-replace semantic. However, it says nothing about permissions, reversibility, atomicity, or what happens when one look in the batch fails — material for a bulk mutation with zero annotation coverage.

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?

Three tightly written sentences with the core operation front-loaded and no filler. The final use-case sentence is helpful rather than redundant, though the definition is slightly longer than strictly necessary.

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

Completeness3/5

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

For a mutation tool with no annotations and no output schema, the description covers the merge semantics but omits error/partial-failure behavior and permission requirements. Adequate to invoke correctly, but not fully complete.

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 the schema by explaining what mergeFixtures=true actually does to unmentioned fixtures and enumerating the per-look fields. This exceeds what the field descriptions alone convey.

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 (update), resource (multiple looks), and scope (partial fixture merging), and explicitly distinguishes itself from bulk_update_looks. An agent can tell it apart from update_look, update_look_partial, and bulk_update_looks 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?

Names the alternative (bulk_update_looks) and the exact condition that selects this tool: preservation of existing fixtures when mergeFixtures=true. It even supplies a concrete batch use case (changing a channel value across many looks), 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.

clear_operation_historyA

Clear all operation history for a project.

WARNING: This is a destructive operation that cannot be undone. All undo/redo history will be permanently deleted.

Parameters:

  • projectId: The project to clear history for

  • confirmClear: Must be true to confirm the deletion

Returns:

  • success: Whether the history was cleared

  • message: Confirmation message

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID to clear operation history for
confirmClearYesMust be true to confirm clearing history

TDQS

A3.7/5.0
Behavior4/5

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

No annotations exist, so the description carries the full load, and it does the most important part well: a WARNING that the operation is destructive, irreversible, and permanently deletes undo/redo history. It omits permissions/auth requirements and scope side effects, keeping it just below 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 purpose followed immediately by the destructive warning, which is the right ordering. The Parameters/Returns sections are somewhat redundant against the schema and no output schema exists, but the whole is short and readable.

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?

Complete for a two-parameter destructive tool: it conveys the destructive nature, the required confirmation flag, and the return fields in the absence of an output schema. Missing only auth/permission expectations, which would round it out.

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 both parameters are already documented in the schema, including confirmClear's 'Must be true' semantics. The description's parameter section largely restates the schema rather than adding format or constraint detail, so baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb+resource: 'Clear all operation history for a project.' This clearly distinguishes it from retrieval siblings like get_operation_history and manipulation siblings like undo/redo. It stops short of naming a sibling explicitly, so it lands at a strong 4.

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

Usage Guidelines3/5

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

Usage is implied by 'all operation history for a project,' but the description never says when to prefer this over undo/redo, get_operation_history, or jump_to_operation. With no exclusions or alternatives named, this is adequate-but-incomplete guidance.

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

copy_fixtures_to_looksB

Copy fixture channel values from a source look to multiple target looks. This is an atomic operation that supports undo/redo. Useful for propagating lighting changes across multiple looks efficiently.

ParametersJSON Schema
NameRequiredDescriptionDefault
fixtureIdsYesArray of fixture IDs to copy (must exist in source look)
sourceLookIdYesID of the source look to copy fixture values from
targetLookIdsYesArray of target look IDs to copy fixture values to

TDQS

B3.4/5.0
Behavior3/5

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

No annotations, so the description carries full burden. It does disclose real behavioral traits — atomicity and undo/redo support — which is valuable. But it omits failure modes (what if a fixture is absent from a target look), whether existing target values are overwritten, and permission requirements, all significant for an unannotated mutation tool.

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

Conciseness4/5

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

Three short sentences, front-loaded with the core action, followed by behavior and use case in descending priority. The trailing "efficiently" is mild filler, but there is no real padding.

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

Completeness3/5

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

For a 3-parameter mutation tool with no annotations and no output schema, the description covers purpose, atomicity, and undo/redo but leaves failure semantics and overwrite behavior unstated. Adequate but with clear gaps an agent would want filled.

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 three parameters are documented in the schema itself, including the constraint that fixtures must exist in the source look. The description adds no syntax, ordering, or ID-format detail beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource with clear scope: copy fixture channel values from one source look to many target looks. This distinguishes it implicitly from add_fixtures_to_look (structure vs values) and bulk_update_looks, though it never names a sibling to make the distinction explicit.

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

Usage Guidelines3/5

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

"Useful for propagating lighting changes across multiple looks efficiently" implies the use case but gives no explicit when-to-use conditions or contrast with add_fixtures_to_look / bulk_update_looks. An agent must infer the routing rather than being told.

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

create_cue_sequenceC

Create a sequence of lighting cues from existing looks

ParametersJSON Schema
NameRequiredDescriptionDefault
lookIdsYesLook IDs to include in sequence
projectIdYesProject ID to create cue sequence in
sequenceNameYesName for the cue sequence
scriptContextYesScript context for the cue sequence
transitionPreferencesNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden and delivers almost nothing: it does not say whether existing looks are modified, whether the sequence is persisted with generated IDs, what ordering/side effects transitionPreferences produces, or what permissions are required. For a create/mutation tool this is a significant gap.

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 tight sentence with the action and source front-loaded and no filler. It is efficient, though it is arguably too terse for a five-parameter mutation tool.

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

Completeness2/5

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

Five parameters (four required), a nested transitionPreferences object, no output schema, and no annotations leave a lot unexplained. The description omits return value, the meaning of the nested transition options, and whether looks are consumed or copied.

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 80%, so the schema already documents the individual parameters; baseline is 3. The description's 'from existing looks' loosely maps to lookIds but adds nothing about scriptContext or the nested transitionPreferences object.

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

Purpose4/5

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

States a clear verb+resource ('Create a sequence of lighting cues') and names the source material ('from existing looks'), which distinguishes it from nearby tools like bulk_create_cues. It stops short of explicitly naming which sibling to prefer when the agent just wants raw cues.

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

Usage Guidelines2/5

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

No when-to-use or when-not-to-use guidance. With siblings such as generate_act_cues, bulk_create_cues, and add_cue_to_list available, the description never says which situation calls for a sequence built from looks versus these alternatives.

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

create_fixture_instanceC

Create a new fixture instance in a project with manufacturer/model details

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoSpecific mode if the fixture has multiple modes
nameYesName for this fixture instance
tagsNoTags for organization (e.g., ["front", "wash", "blue"])
modelYesFixture model name
universeNoDMX universe number (typically 1-4)
projectIdYesProject ID to add fixture to
descriptionNoDescription of where this fixture is placed or its purpose
manufacturerYesFixture manufacturer (e.g., "Chauvet", "Martin", "ETC")
startChannelNoStarting DMX channel (1-512). If not provided, will auto-assign
channelAssignmentNoHow to assign channels: auto=find next available, manual=use provided startChannel, suggest=recommend placementauto

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states it's a creation tool, implying mutation, but lacks details on permissions, side effects, error handling, or response format. This is a significant gap for a tool with 10 parameters and no output schema.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and wastes no space, making it easy to parse quickly.

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

Completeness2/5

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

Given the complexity (10 parameters, no annotations, no output schema), the description is inadequate. It doesn't explain what a 'fixture instance' entails in this domain, how creation interacts with other tools, or what the tool returns. For a mutation tool with rich parameters, more context is needed.

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?

The schema description coverage is 100%, meaning all parameters are documented in the input schema itself. The description adds minimal value beyond the schema by mentioning 'manufacturer/model details', but it doesn't elaborate on parameter interactions or usage nuances. Baseline 3 is appropriate 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.

Purpose4/5

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

The description clearly states the action ('Create a new fixture instance') and specifies the resource ('in a project with manufacturer/model details'), making the purpose understandable. It doesn't explicitly differentiate from sibling tools like 'update_fixture_instance' or 'suggest_channel_assignment', which prevents a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'update_fixture_instance' or 'suggest_channel_assignment', nor does it mention prerequisites or context for usage. It's a basic statement of function without operational context.

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

create_look_boardC

Create a new look board for organizing looks with custom layout.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesLook board name
gridSizeNoGrid size for layout alignment in pixels (default: 50)
projectIdYesProject ID to create look board in
canvasWidthNoCanvas width in pixels (default: 2000)
descriptionNoLook board description
canvasHeightNoCanvas height in pixels (default: 2000)
defaultFadeTimeNoDefault fade time in seconds (default: 3.0)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden for a mutation tool. It implies creation but says nothing about permissions, side effects, duplicate-name handling, or what happens to the 'custom layout' it references, leaving a significant gap.

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 compact sentence with the verb and scope front-loaded and no filler. It is efficient, though its brevity is what leaves the other gaps unfilled.

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

Completeness3/5

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

For a 7-parameter creation tool with no annotations and no output schema, the description is minimally adequate: the schema covers parameters, but there is no note on return values (e.g. a new board ID) or how it relates to near-identical siblings like create_look_board_with_buttons.

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 seven parameters (gridSize, canvasWidth/Height, defaults, etc.) are fully documented in the schema. The phrase 'custom layout' loosely gestures at the canvas/grid parameters but adds no format or constraint detail beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

The description gives a specific verb and resource ('Create a new look board') plus a purpose ('organizing looks with custom layout'), so the agent knows exactly what is being created. It does not, however, distinguish this from the very similar sibling create_look_board_with_buttons or bulk_create_look_boards.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of the obvious alternative (create_look_board_with_buttons). The agent is left to infer that this is the plain single-board creation path.

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

create_look_board_with_buttonsC

Create a complete look board with buttons in a single operation. Allows defining an entire look board layout in one command.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesLook board name
buttonsNoOptional array of buttons to create with the board
gridSizeNoGrid size for layout alignment
projectIdYesProject ID to create look board in
canvasWidthNoCanvas width in pixels
descriptionNoLook board description
canvasHeightNoCanvas height in pixels
defaultFadeTimeNoDefault fade time in seconds

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden for a mutation tool. 'In a single operation' vaguely hints at atomicity but never states whether the board and buttons are created transactionally, what happens if one button is invalid, or what permissions are required. That is a significant gap for a create operation.

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

Conciseness3/5

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

It is short, but the second sentence ('Allows defining an entire look board layout in one command') is a near-verbatim restatement of the first and does not earn its place. Front-loading is fine; content density is low.

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

Completeness3/5

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

For an 8-parameter create tool with no annotations and no output schema, the description covers the 'what' but omits the behavioral details an agent needs: atomicity, failure behavior, and how it relates to the non-combined sibling tools. The rich schema compensates for parameter documentation but not for behavioral context.

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 all 8 parameters (including nested button fields and defaults) are documented in the schema, so the baseline is 3. The description adds no additional meaning about button structure, grid/canvas defaults, or fade time beyond what the schema already provides.

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

Purpose4/5

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

States a specific verb+resource: create a look board together with its buttons. However, it does not distinguish itself from close siblings like create_look_board, bulk_create_look_boards, or bulk_create_look_board_buttons, leaving the agent to infer that this is the combined single-shot variant. The second sentence largely restates the first.

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

Usage Guidelines2/5

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

No when-to-use guidance is given. Given siblings such as create_look_board plus bulk_create_look_board_buttons, the description should say when the combined operation is preferable (e.g. atomic creation vs. two calls), but it offers no condition or exclusion.

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

create_projectC

Create a new lighting project

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProject name
groupIdNoGroup ID to own this project (optional, defaults to user's personal group)
descriptionNoProject description

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It says nothing about permissions required, name uniqueness, what happens on duplicate names, what the call returns (e.g. new project ID), or default behavior beyond what the schema already states for groupId.

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 front-loaded phrase with zero filler, which is efficient. It is arguably too terse for a mutation tool, but that under-specification is penalized in other dimensions rather than here.

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

Completeness2/5

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

For a creation/mutation tool with no annotations and no output schema, the description leaves key questions unanswered: what is returned, whether the name must be unique, and how it relates to bulk_create_projects. The schema covers inputs but nothing covers behavior.

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 name, groupId, and description, including the groupId default. The description adds no parameter meaning beyond what the structured data provides, which is the baseline 3 case.

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

Purpose4/5

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

The description states a clear verb and resource ('Create a new lighting project'), which is unambiguous about the domain. It does not, however, distinguish itself from the sibling bulk_create_projects or explain why a single-create exists alongside a bulk variant.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of prerequisites (e.g. a group must exist), and no routing to the obvious alternative bulk_create_projects. The agent must infer everything from the sibling list.

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

delete_cue_listB

Delete a cue list and all its cues

ParametersJSON Schema
NameRequiredDescriptionDefault
cueListIdYesCue list ID to delete
confirmDeleteYesConfirm deletion of cue list and all its cues (required to be true for safety)

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does disclose the important cascading effect (deletes the list AND all its cues), which is valuable, but omits irreversibility, undo support, and required permissions for a destructive operation.

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?

A single front-loaded sentence with zero filler that leads with the verb and the cascading scope. Nothing wasteful, nothing missing from the core statement.

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

Completeness3/5

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

For a destructive mutation with no annotations and no output schema, the description covers the core action and its cascade but leaves out usage context, reversibility, and sibling routing. Adequate but with clear gaps.

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 both parameters (cueListId, confirmDelete) are fully documented in the schema, including the safety-confirmation semantics. The description adds no meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (delete) and resource (cue list) plus the scope of the operation (and all its cues). It is clear what the tool does, though it does not explicitly distinguish itself from the singular/plural siblings like bulk_delete_cue_lists or remove_cue_from_list.

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

Usage Guidelines2/5

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

The description contains no when-to-use guidance, no prerequisites, and no mention of when to prefer this over bulk_delete_cue_lists or remove_cue_from_list. An agent must infer the single-list scope from the resource name alone.

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

delete_fixture_instanceB

Delete a fixture instance from a project (will remove it from all looks)

ParametersJSON Schema
NameRequiredDescriptionDefault
fixtureIdYesID of the fixture instance to delete
confirmDeleteYesConfirm deletion (required to be true for safety)

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does disclose a meaningful cascading side effect ('will remove it from all looks'), which is useful. However, it does not state that the deletion is permanent/irreversible, and the safety confirmDelete flag is only described in the schema, not the description.

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 efficient sentence with the action front-loaded and the cascading side effect appended in a concise parenthetical. Nothing is wasted, though it is not maximally informative.

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

Completeness3/5

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

For a two-parameter destructive tool with no annotations and no output schema, the description covers purpose and fan-out impact but leaves irreversibility, permissions, and error behavior unstated. Adequate but with clear gaps given the absence of safety annotations.

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 both parameters are fully documented there, so the schema does the heavy lifting. The description adds no syntax or format detail beyond the schema, making the baseline 3 appropriate.

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

Purpose4/5

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

The description states a specific verb and resource ('Delete a fixture instance') and scopes it to 'a project', which helps separate it from remove_fixtures_from_look (removes from one look, not deletes). It doesn't explicitly name how it differs from update_fixture_instance, but the core action is unambiguous.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, and no alternative sibling is named. An agent must infer that this is the single-instance counterpart to bulk_delete_fixtures and distinct from remove_fixtures_from_look.

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

delete_look_boardB

Delete a look board and all its buttons.

ParametersJSON Schema
NameRequiredDescriptionDefault
lookBoardIdYesLook board ID to delete
confirmDeleteYesConfirm deletion of look board and all its buttons (required to be true for safety)

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the important behavioral fact that child buttons are destroyed along with the board. However, it omits irreversibility, permission requirements, and whether the operation can be recovered via the sibling undo tool, which matters for a destructive mutation.

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?

A single ten-word sentence that front-loads the action and ends with the highest-value detail (child deletion). No filler whatsoever.

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

Completeness3/5

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

Adequate but thin for a destructive, no-annotation mutation tool: it covers the cascade effect but says nothing about reversibility, undo availability, or the bulk alternative in a sibling set that includes bulk_delete_look_boards, undo, and remove_look_from_board. Nothing an agent needs to call it is missing, but routing context is not.

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 lookBoardId and the confirmDelete safety flag are already documented in the schema. The description adds nothing about parameter format or the confirmation requirement, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb (Delete) and resource (look board) plus the cascade scope: 'and all its buttons'. This implicitly separates it from remove_look_from_board, which removes a look from a board rather than deleting the board itself, though it never names a sibling explicitly.

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

Usage Guidelines2/5

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

There is no when-to-use guidance: nothing explains when to delete a single board versus using bulk_delete_look_boards, nor any preconditions beyond what the schema enforces. The agent must infer usage entirely from the name.

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

delete_projectC

Delete a project and all its data

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID to delete
confirmDeleteYesConfirm deletion of project and all its data

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool deletes a project and all its data, implying a destructive, irreversible action, but lacks details on permissions, side effects, or error handling. For a high-stakes deletion tool, this is insufficient.

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

Conciseness5/5

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

The description is a single, direct sentence that efficiently conveys the core action without unnecessary words. It is front-loaded and wastes no space, making it highly concise and well-structured.

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

Completeness2/5

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

Given the tool's destructive nature, lack of annotations, and no output schema, the description is incomplete. It doesn't cover critical aspects like what 'all its data' entails, potential dependencies, or response format. For a deletion operation, more context is needed to ensure safe usage.

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?

The input schema has 100% description coverage, clearly documenting both parameters (projectId and confirmDelete). The description adds no additional meaning beyond what's in the schema, such as explaining why confirmation is required. With high schema coverage, the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the action ('Delete') and resource ('a project and all its data'), making the purpose immediately understandable. However, it doesn't differentiate from potential alternatives like 'remove_cue_from_list' or other deletion-like operations among siblings, which would require a 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, such as needing to confirm deletion, or compare it to other tools like 'remove_cue_from_list' for partial deletions. This lack of context leaves usage unclear.

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

ensure_fixtures_in_lookA

Ensure specific fixtures exist in a look with given values, adding only if missing

ParametersJSON Schema
NameRequiredDescriptionDefault
lookIdYesLook ID to ensure fixtures in
fixtureValuesYesFixtures to ensure exist in the look

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose the important behavioral trait that the operation is idempotent ('adding only if missing'), which is real value. However, it leaves a critical ambiguity: what happens when a fixture already exists with different values — update, ignore, or error? It also says nothing about live DMX output impact, permissions, or return behavior.

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?

A single sentence with no filler; the behavioral qualifier ('adding only if missing') is placed where it matters, right after the core action. Every word earns its place.

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

Completeness3/5

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

For a mutation tool with no annotations and no output schema, the description covers the essential idempotency semantics but omits the effect on existing fixtures whose values differ, whether the change touches live output, and any confirmation of what is returned. Adequate but with a clear gap at the exact decision point an agent would hit.

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 each parameter (lookId, fixtureValues, channels, offset, value, lookOrder) is documented in the schema itself, so the baseline is 3. The description adds only 'with given values', which does not extend the schema's meaning.

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

Purpose4/5

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

The description names a specific verb+resource ('ensure specific fixtures exist in a look') plus a scope qualifier ('adding only if missing'), which implicitly separates it from add_fixtures_to_look. It never names a sibling explicitly, so the differentiation is inferential rather than stated.

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

Usage Guidelines3/5

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

The phrase 'adding only if missing' implies the idempotent use case (call when you want a guaranteed end state without duplicates, vs add_fixtures_to_look for unconditional insertion), but no alternative tool or triggering condition is stated. Usage must be inferred from the wording.

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

export_data_tableA

Export one data table (fixtures, looks, cue lists, look details, ...) as CSV or Excel.

  • format "csv" (default): returns the CSV text inline so you can read it. Large exports are truncated (default 50000 characters), preferably at a line break, with truncated=true and a note. A cut is not guaranteed to fall between complete rows (a very long first line, or a quoted field containing line breaks, may be split); pass outputDirectory to also save the full file, or raise maxCharacters.

  • format "xlsx": writes the Excel file to disk and returns its path, row count and size (no file content in the response).

Files are written to outputDirectory, else the LACYLIGHTS_EXPORT_DIR environment variable, else a private lacylights-exports folder in the system temp directory. Existing files are never overwritten; a numeric suffix is added instead. Use list_data_export_tables to see the tables and which need scopeId.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesTable to export (case-insensitive): FIXTURE_TYPES, FIXTURE_LIBRARY, FIXTURES, LOOKS, LOOK_DETAILS, EFFECTS, LOOK_BOARD_ENTRIES, CUE_LISTS or CUE_LIST_DETAILS. See list_data_export_tables for what the connected backend supports.
formatNo"csv" (default) or "xlsx", case-insensitive. csv returns text inline; xlsx writes a file and returns its path.csv
scopeIdNoLook ID for LOOK_DETAILS, cue list ID for CUE_LIST_DETAILS, optional look board ID for LOOK_BOARD_ENTRIES.
projectIdNoProject ID. Required for every table except FIXTURE_LIBRARY.
maxCharactersNoCSV only (ignored for xlsx): maximum characters returned inline (default 50000).
outputDirectoryNoDirectory to write the file to (created if missing). For CSV, setting this also saves the full untruncated file.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so richly: it discloses truncation at a default 50000 characters with a truncated flag, that cuts may split rows, the file-write path resolution order (outputDirectory, then LACYLIGHTS_EXPORT_DIR, then temp), and that existing files are never overwritten but get a numeric suffix.

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 action and split into scannable bullets, with the format distinction up top. It is somewhat long, but nearly every clause (truncation edge cases, path resolution, overwrite policy) carries decision-relevant 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 no output schema and no annotations, the description fully compensates by describing return shapes for both formats (inline CSV text vs. a path/row-count/size for xlsx). An agent has everything needed to call it 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?

Schema coverage is already 100%, but the description adds real meaning: it explains the csv/xlsx behavioral difference per format, that maxCharacters is CSV-only and ignored for xlsx, and that setting outputDirectory for CSV also saves the full untruncated file.

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 ('Export one data table ... as CSV or Excel') and enumerates the exportable tables. It is clearly distinguishable from sibling exporters export_data_workbook and export_eos_ascii by scoping to a single table.

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?

Routes the agent to list_data_export_tables to discover available tables and which need scopeId, and explains the csv-vs-xlsx choice. It stops short of explicitly contrasting with export_data_workbook, so the alternative-selection guidance is implied rather than stated.

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

export_data_workbookA

Export several project tables as one multi-sheet Excel (XLSX) workbook, one sheet per table.

Writes the file to disk and returns its path, total row count and size. Omit tables to export the backend's default set of project-level tables. FIXTURE_LIBRARY and scoped tables (LOOK_DETAILS, CUE_LIST_DETAILS, LOOK_BOARD_ENTRIES) cannot be included.

ParametersJSON Schema
NameRequiredDescriptionDefault
tablesNoProject-level tables to include (case-insensitive), e.g. FIXTURE_TYPES, FIXTURES, LOOKS, EFFECTS, CUE_LISTS. Omit for the backend's default set; an empty list is rejected.
projectIdYesProject ID to export.
outputDirectoryNoDirectory to write the workbook to (created if missing). Defaults to LACYLIGHTS_EXPORT_DIR or the system temp directory.

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the side effect (writes the file to disk), the return payload (path, total row count, size), and hard exclusions (FIXTURE_LIBRARY and the scoped tables). It omits permission/auth requirements, but the core behavioral profile is covered.

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 output format, then the optional-parameter behavior, then the hard constraints. No filler or repetition.

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

Completeness4/5

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

No output schema exists, so the description correctly explains the return values (file path, row count, size), and with no annotations it covers the write side effect and table restrictions. A note on permissions or destination overwrite behavior would close the remaining gap.

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, and the description adds value beyond the schema: the explicit list of tables that cannot be included (FIXTURE_LIBRARY, LOOK_DETAILS, CUE_LIST_DETAILS, LOOK_BOARD_ENTRIES) is not in the schema, and it reinforces the omit-for-default and empty-list behavior.

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

Purpose4/5

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

States a specific verb+resource ('Export ... project tables as one multi-sheet Excel (XLSX) workbook') and clarifies the one-sheet-per-table output shape. It implicitly distinguishes itself from the single-table sibling export_data_table, but never names it, so an agent must infer the choice.

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

Usage Guidelines3/5

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

It gives useful conditions for the 'tables' argument (omit for the default set, FIXTURE_LIBRARY and scoped tables are not allowed), but never states when to prefer this multi-sheet tool over the sibling export_data_table or list_data_export_tables. Usage is implied rather than spelled out.

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

export_eos_asciiA

Export a LacyLights project as an ETC Eos ASCII (.asc) showfile.

Returns the file content as a string along with a suggested filename suffix and any export warnings. LacyLights-only concepts (Look Boards, per-channel fade behaviors, synthesized definitions) ride along as $$ LACYLIGHTS: comment lines at the end of file so a subsequent re-import preserves them. EOS itself ignores those comments.

Output is deterministic: the same project produces byte-identical output across runs.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID to export.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it discloses the return shape (file content string, filename suffix, warnings), the round-trip preservation mechanism via $$ LACYLIGHTS comment lines, that EOS ignores those comments, and deterministic byte-identical output. It stops short of stating side effects or required permissions explicitly, 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.

Conciseness5/5

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

Four tight sentences, front-loaded with the core action, then return shape, then preservation behavior, then determinism. No filler and every sentence adds distinct 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?

For a single-parameter export tool with no output schema, the description covers what is produced (content string, filename suffix, warnings) and the non-obvious comment-preservation behavior, so nothing an agent needs to call and interpret it 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?

Only one parameter and schema description coverage is 100%, so the schema already fully documents projectId. The description adds no syntax or format detail beyond it, making the baseline 3 the correct score.

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 (export), resource (LacyLights project) and target format (ETC Eos ASCII .asc showfile), which cleanly separates it from siblings like export_data_table, export_data_workbook, and the inverse import_eos_ascii. An agent can identify the tool's output artifact 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 Guidelines3/5

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

Usage is implied by the naming and the .asc format, but there is no explicit when-to-use guidance, no mention of when this is preferable to the data-table/workbook exporters, and no stated prerequisites. Adequate but leaves the agent to infer routing among the export family.

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

fade_to_blackC

Fade all lights to black (turn off)

ParametersJSON Schema
NameRequiredDescriptionDefault
fadeOutTimeNoTime in seconds to fade out (default: 3.0)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It does convey that the effect is global ('all lights'), but it says nothing about reversibility (undo), interaction with running cue lists or playback, or what happens to the current active look.

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 short sentence with the core action front-loaded and zero filler. It is very brief, but appropriately so for a simple one-argument tool.

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

Completeness3/5

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

The tool is simple (one optional param, no output schema), so the bar is low, but the description omits any behavioral detail about undo/restoration or how it interacts with active cues and looks. Adequate but leaves real gaps for a state-changing global operation.

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 fadeOutTime parameter (default 3s) is fully documented in the schema. The description adds only that a fade occurs, which the schema parameter name already implies. Baseline 3 applies.

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

Purpose4/5

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

The description gives a specific verb and resource: 'Fade all lights to black', which an agent can distinguish from sibling tools like activate_look or next_cue. It does not explicitly name a sibling it contrasts with, but the action is unambiguous.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as activate_look or stop_cue_list. The agent must infer from the name alone that this is a global blackout operation.

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

generate_act_cuesC

Generate cue suggestions for an entire act based on script analysis

ParametersJSON Schema
NameRequiredDescriptionDefault
actNumberYesAct number to generate cues for
projectIdYesProject ID to work with
scriptTextYesScript text for the act
cueListNameNoOptional name for the cue list
existingLooksNoOptional existing look IDs to reference

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. 'Suggestions' hints at a non-mutating operation, but it never confirms whether cues are persisted, whether the caller must then call bulk_create_cues, or what permissions are needed. For a tool whose siblings include bulk_create_cues and create_cue_sequence, this ambiguity is material.

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 front-loaded sentence with no wasted words. It is efficient, though arguably too terse given the absence of annotations and output schema.

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

Completeness2/5

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

A five-parameter tool with no annotations and no output schema needs more than one sentence. The description omits whether output is persisted, how the optional cueListName and existingLooks parameters alter behavior, and how the result relates to bulk_create_cues.

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 all five parameters, including the optional cueListName and existingLooks. The description adds no format, constraint, or relationship detail beyond restating that the act's script text drives generation.

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

Purpose4/5

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

States a specific verb (generate) and resource (cue suggestions) with a clear scope (an entire act) and input basis (script analysis). It is distinguishable from analyze_script and bulk_create_cues because it produces 'suggestions' rather than analysis or committed cues, though it never names those siblings explicitly.

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

Usage Guidelines2/5

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

There is no statement of when to use this versus analyze_script, analyze_cue_structure, or bulk_create_cues, and no prerequisites or exclusions. The agent must infer the workflow position from the name alone.

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

generate_lookC

Generate a lighting look based on script context and design preferences

ParametersJSON Schema
NameRequiredDescriptionDefault
activateNoAutomatically activate the look after creation
lookTypeNoType of look: 'full' uses all fixtures (default), 'additive' only modifies specified fixturesfull
projectIdYesProject ID to create look in
fixtureFilterNo
scriptContextNoOptional script context for the look
lookDescriptionYesDescription of the look to light
designPreferencesNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full disclosure burden, and it discloses almost nothing: it doesn't say whether the look is persisted, whether it is AI-generated or deterministic, whether it modifies existing fixtures, whether the project must exist first, or what activating does. The generative framing is the only behavioral hint.

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 front-loaded sentence with zero filler; the verb and resource lead. It is efficient, though arguably undersized for a seven-parameter tool with nested objects.

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

Completeness2/5

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

For a complex mutation tool with nested objects, seven parameters, no annotations, and no output schema, one sentence is not enough. Missing are persistence/return behavior, prerequisites, and how fixtureFilter and activate interact with the generated result.

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 71% and the schema itself documents the notable parameters (lookType, fixtureFilter, activate, nested designPreferences fields). The description gestures at scriptContext and designPreferences but adds no format, default, or interaction semantics beyond what the schema already states.

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

Purpose4/5

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

States a specific verb (generate) and resource (lighting look) plus the two conceptual inputs it draws from (script context, design preferences). However, it does nothing to separate itself from siblings like bulk_create_looks, optimize_look, or generate_act_cues, so an agent cannot tell which generation path applies 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 Guidelines2/5

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

No when-to-use, when-not-to-use, or alternative routing is given. With ~30 look-related siblings in scope, the absence of any guidance on when to generate versus bulk-create, optimize, or manually build a look is a real gap.

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

get_build_infoA

Get build information for the backend server.

Returns version, git commit hash, and build timestamp for the running lacylights-go server. This is useful for:

  • Verifying the server version after updates

  • Debugging version mismatches

  • Confirming deployment success

Returns:

  • version: Semantic version (e.g., "v0.8.10")

  • gitCommit: Full git commit hash

  • buildTime: UTC timestamp when the binary was built

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and does disclose the exact return fields, the running server context, and implies a read-only operation via 'Get.' It stops short of explicitly confirming no side effects or any authentication requirements, but for a zero-parameter read tool the disclosure is strong.

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

Conciseness4/5

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

The description is front-loaded with the purpose and uses clear headers for usage cases and return values. It is slightly repetitive in first naming the returned fields and then listing them again, but the structure is clean and easy to scan.

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 no output schema and no annotations, the description fully explains what the tool returns (version, gitCommit, buildTime) and why an agent would call it. For this simple no-parameter read tool, no critical context 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, so the baseline for parameter semantics is 4. The description correctly adds no parameter details because none exist, and it does not introduce confusion about inputs.

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 (Get) and resource (build information) with scope (backend server). It clearly distinguishes this from all sibling tools, which handle projects, looks, cues, fixtures, and boards, not server build metadata.

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?

Provides explicit use cases: verifying server version after updates, debugging version mismatches, and confirming deployment success. It does not include when-not-to-use guidance or alternatives, but none are needed because no sibling covers this purpose.

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

get_channel_mapC

Get the DMX channel usage map for a project

ParametersJSON Schema
NameRequiredDescriptionDefault
universeNoSpecific universe to analyze (if not provided, shows all)
projectIdYesProject ID to analyze

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'Get' and 'analyze', implying a read-only operation, but fails to specify if it requires permissions, has rate limits, returns structured data, or handles errors. For a tool with zero annotation coverage, this is a significant gap in transparency.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it easy to understand at a glance.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete. It does not explain what a 'DMX channel usage map' is, the format of the returned data, or any behavioral aspects like error handling. For a tool that likely returns complex lighting data, more context is needed to guide effective use.

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?

The schema description coverage is 100%, with clear descriptions for both parameters ('projectId' and 'universe'). The description adds no additional meaning beyond the schema, such as explaining what a 'DMX channel usage map' entails or how the analysis works. Baseline 3 is appropriate since the schema adequately documents the parameters.

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

Purpose4/5

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

The description clearly states the action ('Get') and resource ('DMX channel usage map for a project'), making the tool's purpose understandable. However, it does not explicitly differentiate from sibling tools like 'get_fixture_inventory' or 'get_project_details', which might also retrieve project-related data, leaving some ambiguity about its unique role.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, such as 'get_fixture_inventory' or 'get_project_details', which might overlap in project analysis. There are no explicit instructions on prerequisites, context, or exclusions, leaving usage decisions unclear.

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

get_cueA

Get full details for a specific cue by ID.

Returns:

  • Cue metadata (name, number, fade times, follow time, notes)

  • Look information (id, name, description)

  • Cue list information (id, name)

Use this when you need to inspect a single cue in detail.

Use cases:

  • "Show me details for cue 5.5"

  • "What look does this cue use?"

  • "What are the fade times for this cue?"

Note: To look up a cue by number or name, use get_cue_list_details with filters and lookup tables instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
cueIdYesCue ID to retrieve

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the return contents (metadata, look info, cue list info), which compensates for the missing output schema and implies a safe read. It does not cover error behavior when a cue is not found or any permission requirements, 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?

Front-loaded with the core purpose, then organized into Returns, when-to-use, use cases, and a routing note. Every section earns its place, especially the return list given there is no 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?

For a single-item read tool with no annotations and no output schema, the description covers what it returns, when to use it, and the sibling to use instead. 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?

Single parameter with 100% schema description coverage, so the schema already documents cueId. The description adds only that lookup is 'by ID', which is marginal beyond the schema. 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 (get) and resource (cue) scoped to a single item by ID, and explicitly distinguishes itself from the lookup sibling get_cue_list_details. An agent can tell what it does and what it is not for 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?

Provides an explicit when-to-use statement ('when you need to inspect a single cue in detail'), concrete use-case examples, and names the alternative (get_cue_list_details) with the condition that selects it (lookup by number/name). Routing is unambiguous.

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

get_cue_list_detailsA

Get cue list with its cues, optionally paginated.

Parameters:

  • cueListId: Cue list to retrieve

  • page: Page number (default: 1)

  • perPage: Items per page (default: 50, max: 100)

  • includeLookDetails: Include full look data for each cue (default: false)

  • sortBy: Sort cues by cueNumber, name, or lookName

  • filterBy: Optional filters (cueNumberRange, nameContains, etc.)

By default, each cue includes lookId and lookName but NOT full look fixture values. Set includeLookDetails=true only if you need full look data for every cue (this can be very large).

For large cue lists (50+ cues), use pagination to avoid context overflow.

Returns:

  • Cue list metadata

  • Paginated cues array

  • Pagination info (total, page, perPage, hasMore)

  • Statistics (averages, counts, ranges)

  • Lookup tables for quick reference

Example workflow:

  1. list_cue_lists(projectId) - Find available cue lists

  2. get_cue_list_details(cueListId, page=1) - Get first page of cues

  3. If pagination.hasMore, call with page=2, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (min 1)
sortByNoSort cues by cue number, name, or look namecueNumber
perPageNoItems per page (min 1, max 100)
filterByNoOptional filters to apply to the cue list
cueListIdYesCue list ID to query
includeLookDetailsNoInclude full look data for each cue (default: false for performance)

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose real behavioral traits: includeLookDetails can produce very large payloads, pagination prevents context overflow, and defaults for page/perPage. It does not mention any auth/permission requirements or error behavior, which is a modest gap for a no-annotation tool.

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, then organized into Parameters, Returns, and Example workflow sections that are easy to scan. The parameter list largely duplicates the schema descriptions, which is minor waste given the useful additions around payload size and pagination.

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 tool with no output schema, the description compensates by enumerating the return shape (metadata, cues array, pagination info, statistics, lookup tables). Combined with defaults, sorting, and filtering hints, an agent has everything needed to call it 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?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema: the warning that includeLookDetails may be 'very large' and the default/max guidance on pagination that frames when to use it. The filterBy examples are listed only sketchily ('etc.'), so it does not fully enrich every 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 ('Get cue list with its cues, optionally paginated') and distinguishes itself from the sibling list_cue_lists by casting that tool as the discovery step in the worked example. An agent can tell immediately that this retrieves the contents of one known cue list rather than enumerating lists.

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?

The example workflow explicitly names list_cue_lists as the alternative for finding lists, then routes to this tool with page=1 and subsequent pages when hasMore is true. It also gives a conditional rule for includeLookDetails ('only if you need full look data') and a concrete threshold for pagination (50+ cues).

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

get_cue_list_statusB

Get information about the currently playing cue list and navigation options

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden. 'Get information' implies a read, but the description doesn't say what happens when nothing is playing, whether an error is returned, what the status payload contains, or whether any state changes. For a zero-annotation status tool this is a real gap.

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 efficient sentence with the core action front-loaded ('Get information about the currently playing cue list'). No filler or redundancy, though it is arguably too terse for the behavioral detail it omits.

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

Completeness3/5

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

With no output schema, the description is the only place an agent can learn what 'status' returns. It gestures at 'currently playing cue list and navigation options' but never enumerates the fields or states the no-active-list case, leaving the agent under-informed for a state-inspection 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?

The tool takes zero parameters and the schema is trivially complete, so there is nothing for the description to disambiguate. Baseline of 4 applies for a parameterless tool.

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

Purpose4/5

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

States a specific verb and resource: getting information about the currently playing cue list, plus navigation options. This is distinguishable from list_cue_lists (enumeration) and get_cue_list_details (details of a specific list), though the description never explicitly draws that distinction. The 'navigation options' phrase is somewhat vague but still signals a status/state read.

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

Usage Guidelines2/5

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

No guidance on when to call this versus get_cue_list_details, list_cue_lists, or the next_cue/previous_cue navigation siblings. There is no mention of prerequisites (e.g., must a cue list be playing) or exclusions. Usage is only inferable from the name and the word 'currently playing'.

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

get_current_active_lookA

Get the currently active look if any

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

No annotations exist, so the description carries the full behavioral burden, but the tool is a zero-argument read, so little needs disclosing. 'If any' is a genuinely useful signal that the result may be empty or null. It still says nothing about auth requirements or what an 'active look' object contains.

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?

One short sentence with zero filler, and the qualifier that matters most ('currently active', 'if any') is front-loaded. Nothing could be removed without losing information.

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

Completeness3/5

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

For a zero-param, no-output-schema tool the definition is minimally sufficient, but it leaves the return shape unexplained and never defines what makes a look 'active' versus merely existing or being on a look board. With almost no structured context to lean on, a sentence or two more would materially help.

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 no parameters, so the baseline for parameter semantics is 4. The description correctly implies parameterless operation and adds no misleading argument hints.

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

Purpose4/5

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

States a specific verb and resource ('get the currently active look'), which is more precise than a bare 'get look' because it names the state being queried. However, it never distinguishes itself from close siblings like get_look, list_looks, or activate_look, so an agent must infer the difference.

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

Usage Guidelines3/5

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

The phrasing 'if any' implies this is a non-destructive status query that may return nothing, which hints at when it applies. There is no explicit when-to-use statement, no exclusions, and no pointer to alternatives such as get_look or list_looks for the non-active case.

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

get_fade_update_rateA

Get the current fade engine update rate in Hz.

The fade update rate controls how frequently the fade engine updates DMX channel values during look transitions. Higher rates provide smoother fades but use more CPU.

Returns:

  • Current update rate in Hz (default: 60Hz)

  • Whether the value is using the default

Typical values:

  • 30Hz: Efficient, adequate for most theatrical lighting

  • 60Hz: Default, smooth fades for professional use

  • 120Hz: Very smooth, for critical applications

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden and does so well: it explains what the setting controls, the CPU/smoothness tradeoff, the default, and typical operating values. It does not address permissions or failure modes, but for a zero-parameter read this is strong context beyond the 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?

Front-loaded with the core statement, then layered context and typical values with no filler sentences. The reference-value list is slightly beyond the minimum needed to invoke the tool, but it is scannable and each line adds practical meaning.

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

Completeness4/5

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

With no output schema and no annotations, the description usefully documents the return contents (Hz value plus a default flag) and interpretation guidance. It stops short of covering error conditions or cross-referencing the setter sibling, but the essentials for a correct call are present.

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 no parameters, so the baseline is 4; there is nothing for the description to clarify and it correctly spends no space on parameters.

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 first sentence gives a precise verb+resource with a unit ('Get the current fade engine update rate in Hz'), which unambiguously identifies this as the read counterpart to the sibling set_fade_update_rate. An agent can distinguish it 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 Guidelines3/5

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

Usage is only implied: the description explains what the rate means but never states when to check it (e.g., before tuning fade performance) or points to set_fade_update_rate as the mutation alternative. For a simple getter this is adequate but leaves routing to inference.

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

get_fixtureA

Get full details for a specific fixture.

Returns:

  • All metadata (id, name, manufacturer, model, type, mode)

  • DMX addressing (universe, startChannel, channelCount)

  • Full channel definitions with types and ranges

  • Tags

Use this tool when you need:

  • Complete channel information for a fixture

  • To understand fixture capabilities in detail

  • Channel types and DMX value ranges

Use list_fixtures instead if you only need basic fixture information.

ParametersJSON Schema
NameRequiredDescriptionDefault
fixtureIdYesFixture ID to retrieve

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden; it discloses the returned payload (metadata, DMX addressing, channel definitions, tags), which substitutes for a missing output schema. It does not state read-only nature explicitly, error behavior for an unknown ID, or permission requirements, so it is strong but not complete.

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, then structured bullets. There is mild redundancy between the 'Returns' list and the 'Use this tool when you need' list, but nothing is wasted enough to hurt clarity.

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 no output schema, the description supplies the return-field breakdown an agent needs and routes to the correct alternative. Nothing essential to correct invocation 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% with a single well-documented fixtureId parameter, so the schema does the heavy lifting. The description adds no format or semantic detail (e.g., accepted ID forms) beyond what the schema provides, 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 ('Get full details for a specific fixture') and explicitly contrasts scope with the sibling list_fixtures ('basic fixture information'). An agent can distinguish this from the lighter-list tool without opening either schema, though it does not address the overlapping analyze_fixture_capabilities.

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?

Provides explicit when-to-use bullets (complete channel info, capabilities detail, channel types/ranges) plus an explicit when-not/alternative routing to list_fixtures. This is close to ideal routing guidance.

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

get_fixture_inventoryB

Get available lighting fixtures and their capabilities for a project or globally

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoOptional project ID to filter fixtures
fixtureTypeNoOptional fixture type filter
includeDefinitionsNoInclude available fixture definitions

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It describes a read operation ('Get') but lacks details on permissions, rate limits, pagination, or response format. The description doesn't contradict annotations, but it's insufficient for a tool with no annotation coverage, missing key behavioral traits.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part earns its place by specifying the action, resource, and scope concisely.

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

Completeness2/5

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

Given no annotations and no output schema, the description is incomplete. It doesn't explain what 'capabilities' entail, how results are structured, or any operational constraints. For a tool with three parameters and potential complexity in lighting systems, more context is needed to guide effective use.

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 all three parameters. The description adds minimal value by hinting at 'project or globally' which relates to 'projectId', but doesn't provide additional syntax or meaning beyond what the schema already specifies. Baseline 3 is appropriate given high schema coverage.

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

Purpose4/5

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

The description clearly states the verb 'Get' and the resource 'available lighting fixtures and their capabilities', specifying scope with 'for a project or globally'. It distinguishes from siblings like 'get_project_details' or 'get_channel_map' by focusing on fixtures, but doesn't explicitly differentiate from 'analyze_fixture_capabilities' which might overlap.

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

Usage Guidelines3/5

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

The description implies usage by mentioning 'for a project or globally', suggesting context for filtering, but doesn't provide explicit guidance on when to use this tool versus alternatives like 'analyze_fixture_capabilities' or 'get_project_details'. No exclusions or prerequisites are stated.

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

get_group_detailsB

Get full details of a group including its members, projects, and assigned devices. Requires the group ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupIdYesThe group ID to get details for

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses what the response contains (members, projects, assigned devices) for a read tool, but says nothing about permissions or access requirements beyond that.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the core action and immediately followed by the required prerequisite. No wasted words.

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

Completeness4/5

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

For a simple single-parameter read tool with no output schema, naming the returned content (members, projects, devices) is sufficient to call it correctly. It lacks only usage framing relative to 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 coverage is 100% and the single groupId parameter is documented in the schema. The description only restates the requirement without adding format or identity details, so baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb and resource ('Get full details of a group') and enumerates the scope of the return (members, projects, assigned devices). This implicitly distinguishes it from the list_groups sibling, though it does not name it.

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

Usage Guidelines2/5

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

No explicit when-to-use or when-not-to-use guidance, and no routing to alternatives such as list_groups. The only contextual hint is the prerequisite that a group ID is required.

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

get_lookA

Get full details for a specific look.

Parameters:

  • lookId: Look to retrieve

  • includeFixtureValues: Include all DMX channel values (default: true)

Set includeFixtureValues=false if you only need to know which fixtures are in the look, not their specific values. This is much faster for large looks.

Use get_look_fixtures instead if you only need fixture metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
lookIdYesLook ID to retrieve
includeFixtureValuesNoInclude fixture DMX channel values

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses a useful performance trait ('much faster for large looks') and the default of includeFixtureValues, but says nothing about permissions, read-only guarantees, or what 'full details' actually encompasses.

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 purpose followed by a compact parameter list and actionable guidance. The parameter bullets lightly duplicate the schema, but each sentence (including the performance note and the sibling pointer) earns its place.

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

Completeness4/5

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

For a simple two-parameter getter with no output schema and no annotations, the description covers purpose, both parameters, and the key alternative. The only gap is that 'full details' is not spelled out, but that is minor given the tool's low complexity.

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

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 value beyond the schema by explaining the default and the performance rationale for setting includeFixtureValues=false. This goes beyond the schema's terse 'Include fixture DMX channel values'.

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

Purpose4/5

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

States a specific verb (Get) and resource (a specific look) plus scope (full details), so an agent knows this is a single-record fetch rather than a list. It is clearly distinct from get_look_fixtures, though it never explicitly contrasts with list_looks.

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 an explicit condition for the includeFixtureValues flag (set false when you only need to know which fixtures are present) and names an alternative tool (get_look_fixtures) for fixture metadata. It lacks a when-not-to-use rule versus list_looks, but the routing guidance is strong.

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

get_look_boardA

Get a specific look board with all its buttons and layout information.

ParametersJSON Schema
NameRequiredDescriptionDefault
lookBoardIdYesLook board ID to retrieve

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations and no output schema, the description carries the full burden, and it does disclose the payload ('all its buttons and layout information'), which is the most useful behavioral fact here. It says nothing about failure behavior for an invalid ID, permissions, or payload size, so the disclosure is partial rather than thorough.

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?

A single sentence, front-loaded with the operation and resource, with no redundant restatement of the name or title. Nothing could be trimmed without losing information.

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

Completeness4/5

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

For a one-parameter read tool with full schema coverage and no output schema, the description covers what is fetched and what comes back. Only edge-case behavior (board not found, empty board) is unaddressed, which is a minor gap at this complexity level.

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 single lookBoardId parameter is documented in the schema itself, so the baseline of 3 applies. The description adds no format, source, or lookup guidance for the ID beyond what the schema already states.

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

Purpose4/5

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

States a specific verb ('Get') and resource ('look board') and clarifies scope with 'a specific look board', which implicitly distinguishes it from list_look_boards. It does not, however, name any sibling explicitly, so the agent must infer separation from get_look, get_look_fixtures, and list_look_boards.

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

Usage Guidelines3/5

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

Usage is implied: fetch one board when you already have its ID. There is no explicit when-to-use, when-not-to-use, or named alternative (e.g. list_look_boards vs get_look_board), and no mention that the board must already exist.

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

get_look_fixturesA

Get just the fixtures used in a look without their values.

Returns:

  • Fixture IDs, names, and types

This is the fastest way to understand look composition without loading full DMX channel data.

Use cases:

  • "Which fixtures does this look use?"

  • "What type of fixtures are in this look?"

  • Quick look composition analysis

ParametersJSON Schema
NameRequiredDescriptionDefault
lookIdYesLook ID to get fixtures for

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden: it discloses the return shape (fixture IDs, names, types) and a behavioral trait (it is the 'fastest way', light on data). It omits any auth/permission or error context, but for a simple read tool this is solid disclosure.

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 key distinction in the first sentence, then lists returns and use cases. The use-case bullets partially restate the opening sentence, so there is minor redundancy, but overall it is well organized and short.

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?

No output schema exists, but the description compensates by naming the returned fields and the composition-analysis purpose. For a one-param read tool this is nearly complete; it only lacks explicit linkage to the alternative tool.

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?

Single parameter with 100% schema coverage, so the schema already documents lookId fully. The description adds no syntax, format, or lookup guidance beyond what the schema provides, matching the baseline for fully-covered 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?

States a specific verb and resource ('Get ... fixtures used in a look') and immediately scopes it ('without their values', 'without loading full DMX channel data'). This cleanly distinguishes it from the sibling get_look_fixture_values, which an agent can identify 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?

Provides explicit use cases ('Which fixtures does this look use?') and contrasts against loading full DMX channel data, which implicitly routes the agent to get_look_fixture_values. It does not name that sibling directly or state exclusion conditions, so it falls short of a 5.

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

get_look_fixture_valuesB

Get current fixture values for a look (read-only)

ParametersJSON Schema
NameRequiredDescriptionDefault
lookIdYesLook ID to get fixture values for

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full behavioral burden. '(read-only)' is a genuine safety disclosure that tells the agent this call will not mutate state, which is valuable. However, it says nothing about what 'fixture values' actually contains (DMX levels, intensity, color?) or how current/real-time the values are.

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 front-loaded sentence with no filler or repetition. It is efficient, though arguably too terse to earn a top mark given how little it conveys about the return payload.

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

Completeness3/5

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

There is no output schema, so the description should ideally explain the shape and meaning of the returned fixture values; it does not. For a simple one-parameter read tool it is minimally adequate, but it leaves the agent guessing at the response content.

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% for the single lookId parameter, so the schema already documents it fully. The description adds no format, source, or sourcing 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.

Purpose4/5

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

States a specific verb and resource ('Get current fixture values for a look'), so the agent knows exactly what is retrieved. It does not, however, distinguish itself from close siblings like get_look_fixtures or get_look, which an agent could easily confuse when looking for fixture data.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance and never names an alternative. The parenthetical '(read-only)' hints at a safe inspection use case but does not say when to prefer this over get_look_fixtures, get_look, or get_current_active_look.

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

get_operation_historyA

Get the operation history for a project with pagination.

Returns a list of all recorded operations that can be navigated via undo/redo. Each operation includes:

  • id: Unique operation ID

  • description: Human-readable description

  • operationType: CREATE, UPDATE, DELETE, or BULK

  • entityType: Type of entity affected (Look, FixtureInstance, etc.)

  • sequence: Position in the history

  • createdAt: When the operation occurred

  • isCurrent: Whether this is the current state

Use this to display an operation history timeline and allow jumping to specific points.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-based)
perPageNoNumber of operations per page (max 100)
projectIdYesProject ID to get operation history for

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses return fields (id, description, operationType, entityType, sequence, createdAt, isCurrent) and notes pagination, which is valuable. However, it does not explicitly state that the operation is read-only, describe any side effects, or mention authentication or rate limits, leaving some behavioral gaps.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the core purpose, then details the return structure, then gives a usage note. The bulleted list of return fields is justified because there is no output schema, but the description is slightly longer than strictly necessary.

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

Completeness4/5

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

Given no output schema, the description appropriately explains the return fields, which is essential. It also covers purpose and a usage scenario. It lacks explicit handling of edge cases, auth requirements, or sibling routing, but for a simple paginated read tool it is largely complete.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already fully documents all three parameters (page, perPage, projectId). The description mentions pagination but adds no parameter syntax or constraints beyond what the schema provides, matching the baseline of 3 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.

Purpose4/5

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

The description states a specific verb and resource: 'Get the operation history for a project with pagination.' It clearly conveys what the tool returns (operation history) but does not explicitly differentiate itself from siblings like jump_to_operation, clear_operation_history, or get_undo_redo_status.

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

Usage Guidelines3/5

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

It provides a use case: 'Use this to display an operation history timeline and allow jumping to specific points.' However, it does not state when to use this tool versus alternatives such as jump_to_operation (which actually performs jumping) or get_undo_redo_status, leaving the agent to infer the distinction. The mention of 'allow jumping' could even mislead an agent into thinking this tool performs the jump.

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

get_projectA

Get high-level project information including metadata and counts.

Returns:

  • Project metadata (id, name, description, timestamps)

  • Resource counts (fixtureCount, lookCount, cueListCount)

Does NOT include:

  • Fixture details (use list_fixtures or get_fixture_inventory)

  • Look details (use list_looks)

  • Cue list details (use list_cue_lists or get_cue_list_details)

Use this tool first to understand project scope before drilling down into specific resources.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID to retrieve

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It does disclose the return shape (metadata fields plus fixtureCount/lookCount/cueListCount) and scopes out what is not returned, which is useful. However, it says nothing about permissions required, behavior on a nonexistent or inaccessible projectId, or whether counts are cheap or expensive to compute.

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, then cleanly sectioned into what is returned versus what is not, with each exclusion routed to a named alternative. No sentence is filler and the routing value justifies the bulleted length.

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

Completeness4/5

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

With no output schema and no annotations, the description correctly compensates by enumerating the returned fields and the resource counts. The main residual gap is failure behavior for an invalid or inaccessible projectId, which an agent would need to know.

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?

Only one parameter exists and schema description coverage is 100% ('Project ID to retrieve'), so the schema already defines it fully. The description mentions 'id' in the returned metadata but adds no input semantics such as accepted ID formats or source. Baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb and resource ('Get high-level project information including metadata and counts') and enumerates exactly what is returned. It differentiates from list_fixtures, list_looks, and list_cue_lists, but fails to distinguish itself from the sibling 'get_project_details', which is the most confusable tool in the set.

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 prescribes a workflow ('Use this tool first to understand project scope before drilling down') and names concrete alternatives for each excluded resource type (list_fixtures, list_looks, list_cue_lists, get_cue_list_details). It gives no guidance on when to choose get_project over get_project_details, which leaves the key selection decision unresolved.

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

get_project_detailsA

Get detailed information about a specific project including all fixtures, looks, and cue lists. This returns a lot of data and should only be used when you need comprehensive project information.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID to get details for

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full disclosure burden, and it does add one genuinely useful behavioral trait: the response is large and should be reserved for comprehensive needs. However, it says nothing about permissions, pagination, or performance cost beyond the size warning, leaving the safety/mutation profile entirely implicit (it is a read, but that is only inferable from the verb).

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 purpose and followed immediately by the caution about data volume. No filler, every sentence earns its place.

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

Completeness4/5

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

For a one-parameter read tool with no output schema and no annotations, the description covers scope and the important payload-size caveat, which is what an agent most needs to avoid an expensive accidental call. It could still note the read-only nature or expected return structure, but nothing essential 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 the single projectId parameter is documented in the schema as 'Project ID to get details for.' The description adds no format, source, or lookup guidance for the ID, so the baseline 3 is appropriate when the schema does the work.

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

Purpose4/5

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

States a specific verb and resource ('Get detailed information about a specific project') and enumerates the content scope (fixtures, looks, cue lists), which distinguishes it from the summary-oriented get_project and list_projects siblings. It stops short of explicitly naming the lighter alternative, so sibling differentiation is implied rather than stated.

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 usage condition: use it 'only when you need comprehensive project information,' which steers the agent away from this tool for lightweight lookups. The guidance is directional but never names the cheaper alternative (e.g., get_project) that should be used instead, so the routing is inferred rather than explicit.

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

get_undo_redo_statusA

Get the current undo/redo status for a project.

Returns information about available undo/redo operations:

  • canUndo: Whether undo is available

  • canRedo: Whether redo is available

  • currentSequence: Current position in the operation history

  • totalOperations: Total number of operations in history

  • undoDescription: Description of the operation that would be undone

  • redoDescription: Description of the operation that would be redone

Use this to determine if undo/redo buttons should be enabled and to show tooltips.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID to get undo/redo status for

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the returned fields (canUndo, canRedo, currentSequence, etc.) which conveys the read-only nature and result shape, but says nothing about auth requirements, rate limits, or whether the status is per-project-scoped at the session level.

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

Conciseness4/5

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

Purpose is front-loaded in the first sentence, followed by a clean bulleted return-field list and a closing usage note. The field enumeration is slightly verbose but each item is informative, so no sentence is genuinely wasted.

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

Completeness4/5

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

With no output schema, the description usefully enumerates the return fields an agent needs, and the single param is covered by the schema. It is complete enough to call correctly, with only minor gaps around error/empty-history behavior.

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% for the single projectId parameter, so the schema already documents it. The description adds no syntax or format detail beyond the schema, which is the correct baseline of 3 when structured data does the heavy lifting.

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

Purpose4/5

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

States a specific verb and resource ('Get the current undo/redo status for a project') and enumerates the returned fields, making the scope unambiguous. It does not explicitly distinguish itself from siblings like undo/redo/get_operation_history, but the read-only status framing implicitly separates it from the mutation siblings.

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

Usage Guidelines3/5

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

Gives a concrete use case ('determine if undo/redo buttons should be enabled and to show tooltips'), which is more than implied usage. However, it offers no when-not guidance and never names the alternative tools (undo, redo, get_operation_history), so an agent must infer the boundary with siblings.

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

go_to_cueB

Jump to a specific cue by number or name in the currently playing cue list

ParametersJSON Schema
NameRequiredDescriptionDefault
cueNameNoCue name to search for (alternative to cueNumber)
cueNumberNoCue number to jump to
fadeInTimeNoOverride fade in time in seconds (optional)

TDQS

B3.3/5.0
Behavior2/5

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

No annotations exist, so the description carries the full burden, and it discloses almost no behavior: nothing about what happens if the cue is not found, whether playback resumes/starts, how the optional fadeInTime interacts with the cue's own fade, or whether the jump is immediate or queued.

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?

A single well-formed sentence, front-loaded with the action and resource and free of filler. Nothing could be trimmed without losing meaning.

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

Completeness3/5

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

For a no-annotation, no-output-schema tool with zero required parameters, the definition leaves key questions open: behavior when neither cueName nor cueNumber is supplied, precedence when both are, and the result of a failed lookup. Adequate but with clear gaps.

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 cueName, cueNumber and fadeInTime. The description only restates that lookup can be by number or name, adding no syntax, precedence (what if both are supplied), or unit detail beyond the schema.

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

Purpose4/5

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

States a specific verb (jump) plus resource (cue) and scope (currently playing cue list), with the two lookup modes named. It is clear on its own, though it never names the sequential siblings next_cue/previous_cue that an agent must choose between.

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

Usage Guidelines3/5

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

Usage is only implied: jumping to an arbitrary cue contrasts with next_cue/previous_cue, but the description never says so, nor does it state the precondition that a cue list must already be playing (it only references it obliquely).

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

import_eos_asciiA

Import an ETC Eos ASCII (.asc) showfile into LacyLights.

Creates a new project (or appends into an existing one if targetProjectId is given) populated with the patch, cues, palettes, and groups from the Eos showfile. EOS-only concepts (effects, partitions, magic sheets, action triggers, curves, submasters) are skipped and surfaced as structured warnings. Palettes/presets are imported as standalone Looks in dedicated cue lists ("Color Palettes", "Beam Palettes", etc.).

Returns:

  • projectId: the created or updated project

  • counts of fixtures, looks, cue lists, cues, groups created

  • warnings: structured list with code/severity/message/context entries

  • synthesizedDefinitionIds: definitions auto-synthesized when no library match was found

Provide either newProjectName or targetProjectId, not both. If both are omitted, the project name comes from the showfile's $$Title.

ParametersJSON Schema
NameRequiredDescriptionDefault
asciiContentYesFull text content of the .asc showfile.
newProjectNameNoOptional explicit name for the new project.
targetProjectIdNoOptional existing project ID to append the import into. Existing data is preserved.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so richly: it discloses what is imported (patch, cues, palettes, groups), what is silently skipped and surfaced as warnings (effects, partitions, magic sheets, etc.), how palettes are remapped into Looks, and the structured return payload. This is well beyond what structured fields provide.

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-loads purpose, then behavior, then return shape, then parameter constraints. The Returns list is justified because no output schema exists, and no sentence 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?

For a complex import tool with no output schema, the description covers side effects, skipped content, warning structure, synthesized definitions, and parameter rules. An agent has everything needed to call it 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?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: newProjectName and targetProjectId are mutually exclusive, and if both are omitted the name is derived from the showfile's $$Title. That constraint is not visible 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: 'Import an ETC Eos ASCII (.asc) showfile into LacyLights.' It also names the sibling it is the inverse of (export_eos_ascii is in the sibling list), so an agent can distinguish import from export immediately.

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 clear context: creates a new project, or appends into an existing one when targetProjectId is supplied. It does not name alternatives or state when NOT to use it, but the usage conditions for its two modes are explicit.

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

invite_to_groupA

Invite a user to join a group by their email address. Requires GROUP_ADMIN role in the target group. The invited user will receive a pending invitation they can accept or decline.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoRole for the invited user (default: MEMBER)MEMBER
emailYesEmail address of the user to invite
groupIdYesThe group ID to invite the user to

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does reasonably well: it discloses the authorization requirement (GROUP_ADMIN) and the asynchronous outcome (the recipient gets a pending invitation they can accept or decline). It stops short of covering failure cases such as an already-invited or already-member user.

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 with the action front-loaded, then the permission requirement, then the recipient-side outcome. Every sentence carries information and none is wasted.

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

Completeness4/5

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

For a three-parameter mutation with no output schema, the description covers the essential context: who may invoke it and what the invitation lifecycle looks like. Edge-case behavior (duplicate invites, response shape) is left unaddressed, but the core picture is complete.

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

Parameters3/5

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

Schema coverage is 100%, and the schema already documents all three parameters including the role enum and its MEMBER default. The description adds no parameter meaning 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?

The description states a specific verb (invite), the resource (a user to a group), and the mechanism (by their email address). This cleanly separates it from the read-oriented group siblings (list_groups, get_group_details) without ambiguity.

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

Usage Guidelines4/5

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

It establishes a clear precondition for use ('Requires GROUP_ADMIN role in the target group'), which tells an agent whether the call is permissible. It does not name alternatives or exclusions, but the group-management sibling set is small and mostly read-only, so context is fairly clear.

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

jump_to_operationA

Jump to a specific operation in the history.

This allows navigating directly to any point in the operation history, effectively performing multiple undos or redos to reach the target state.

Parameters:

  • projectId: The project containing the operation

  • operationId: The ID of the operation to jump to

Returns:

  • success: Whether the jump was successful

  • message: Description of what happened

  • operation: Details of the target operation

Use get_operation_history to get available operation IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID
operationIdYesOperation ID to jump to

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose the key behavioral trait that this collapses many undo/redo steps into one state change. It also documents the return payload inline (success/message/operation), which no output schema provides. It does not state permissions, reversibility, or whether the jump itself is recorded in history.

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

Conciseness4/5

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

Purpose is front-loaded in the first sentence and the Returns section earns its place since there is no output schema. The Parameters block largely duplicates the already-complete schema, which is the one redundant section.

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

Completeness4/5

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

For a 2-param mutation tool with no annotations and no output schema, the description covers purpose, state-change semantics, both parameters, the return shape, and the sibling needed to obtain a valid operationId. Only explicit guidance on undo/redo vs. jump and side-effect/reversibility notes are 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 the schema already documents both parameters. The description's Parameters block restates projectId and operationId without adding format, valid-value, or constraint detail beyond the schema. Baseline 3 applies when the schema does the work.

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 ('jump to a specific operation in the history') and immediately clarifies the mechanism ('effectively performing multiple undos or redos'). An agent can distinguish this from the single-step undo/redo siblings 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?

Gives an explicit prerequisite and routing hint ('Use get_operation_history to get available operation IDs'), and the undo/redo framing implies when multi-step navigation is preferable to single-step undo. It stops short of explicitly stating when to prefer undo/redo over this tool.

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

list_cue_listsA

List all cue lists in a project with lightweight summaries.

Returns:

  • Metadata (id, name, description)

  • Cue count

  • Total duration estimate

  • Loop setting

Does NOT include:

  • Individual cues (use get_cue_list_details)

  • Look details (use get_look)

This is the most efficient way to browse available cue lists. Projects typically have < 10 cue lists, so no pagination needed.

Use cases:

  • "What cue lists are available?"

  • "Show me all cue lists in this project"

  • Quick cue list overview

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID to list cue lists from

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it enumerates the returned fields (metadata, cue count, duration estimate, loop setting) in lieu of a nonexistent output schema, and notes the payload is lightweight with no pagination. It omits any permission/auth or ordering context, 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.

Conciseness4/5

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

Front-loaded with the core action, then organized returns/exclusions/use-cases in scannable blocks. Slightly padded by the redundant use-case list and the self-promotional 'most efficient way' claim, but nothing meaningfully wasteful.

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 read-only list tool with one documented parameter and no output schema, the description supplies everything needed: what comes back, what does not, where to go for the excluded data, and that result sets are small. No material gap remains for correct invocation.

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% for the single projectId parameter, so the schema already documents it. The description adds no syntax, format, or sourcing guidance for projectId, 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 (list) and resource (cue lists) scoped to a project, and explicitly names what it does not return, routing to get_cue_list_details and get_look. An agent can distinguish it from the many sibling list/cue 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?

Gives explicit exclusions (individual cues, look details) with the alternative tool for each, plus concrete use-case phrases that map directly to user intents. Also states no pagination is needed, removing an ambiguity an agent would otherwise have to guess at.

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

list_data_export_tablesA

List the data tables that can be exported as CSV or Excel (XLSX), with their column headers and scope.

Each table has a scope that says which IDs export_data_table needs:

  • none: global (FIXTURE_LIBRARY); projectId optional

  • project: projectId required (FIXTURE_TYPES, FIXTURES, LOOKS, EFFECTS, CUE_LISTS)

  • look: projectId + scopeId = look ID (LOOK_DETAILS)

  • cueList: projectId + scopeId = cue list ID (CUE_LIST_DETAILS)

  • lookBoard: projectId, optional scopeId = look board ID (LOOK_BOARD_ENTRIES)

Requires LacyLights backend v0.4.0 or newer.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are supplied, so the description carries the full burden, and for a zero-parameter read-only listing it discharges that burden well: it discloses the returned content and adds a real operational constraint (backend v0.4.0+ required). It does not discuss whether the table catalogue is static or environment-dependent, which is the only remaining behavioral gap.

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?

One front-loaded summary sentence followed by a compact bullet list mapping each scope to its required IDs and table names. Every line carries distinct information; there is no restatement of the tool name or filler.

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

Completeness4/5

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

With no output schema and no annotations, the description must stand alone, and it covers purpose, return content, scope semantics, and version requirements. The precise shape of the returned table entries (field names, ordering) is only sketched, but that is a minor gap for a zero-parameter catalogue 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?

This tool takes no parameters, so the baseline is 4. The description goes further by documenting the scope semantics that drive the parameters of the downstream export tools (none/project/look/cueList/lookBoard and the IDs each requires), which is genuinely useful context even though it does not describe this tool's own inputs.

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 first sentence names a specific verb and resource ('List the data tables that can be exported as CSV or Excel') and states exactly what each entry contains (column headers and scope). It also cross-references the sibling export_data_table, making the division of labour between the two tools obvious 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?

The scope-to-ID mapping effectively tells the agent when this tool is needed: it is the discovery step that supplies the projectId/scopeId that export_data_table and export_data_workbook require. Usage is strongly implied but never stated outright as 'call this before exporting', so it falls short of an explicit when-to-use rule.

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

list_fixturesA

List fixtures in a project with pagination and filtering.

Returns lightweight fixture information:

  • Basic metadata (id, name, manufacturer, model, type)

  • DMX addressing (universe, startChannel, channelCount)

  • Tags

Does NOT include:

  • Full channel definitions (use get_fixture for that)

  • Look usage (use get_fixture_usage)

Pagination:

  • Default: 50 items per page

  • Max: 100 items per page

  • Use pagination.hasMore to check if more results exist

Filtering:

  • type: Filter by fixture type (LED_PAR, MOVING_HEAD, etc.)

  • universe: Filter by DMX universe

  • tags: Filter by tags (array)

  • manufacturer: Filter by manufacturer name

  • model: Filter by model name

Example workflow:

  1. list_fixtures(projectId, page=1) - Get first page

  2. If pagination.hasMore, call with page=2, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1)
filterNoOptional filters to apply
perPageNoItems per page (default: 50, max: 100)
projectIdYesProject ID to list fixtures from

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses pagination defaults (50) and caps (100), the hasMore termination signal, and exactly what is and is not returned. It stops short of stating permission/auth requirements or sort order, which leaves a small gap for a zero-annotation tool.

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?

Strongly front-loaded with labeled sections (Returns, Does NOT include, Pagination, Filtering) and no filler prose. Minor redundancy: the example workflow repeats pagination details already given in the Pagination section.

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 output schema and no annotations, the description fully compensates by enumerating returned fields, exclusions, pagination semantics, and filter dimensions. Nothing an agent needs to call this correctly appears to be 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 the schema already documents page, perPage, projectId and every filter field. The filtering section largely restates the schema enum and field list, adding only marginal meaning (it explicitly frames filter as optional and enumerates example types). Baseline 3 is correct 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 and resource ('List fixtures in a project') and immediately narrows scope with 'with pagination and filtering'. It names the siblings it is not (get_fixture for channel definitions, get_fixture_usage for look usage), so an agent can distinguish it 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?

Explicit when-to-use routing to get_fixture and get_fixture_usage, plus a concrete pagination loop workflow (page=1, check pagination.hasMore, page=2). The conditions that select this tool over alternatives are stated, not inferred.

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

list_groupsA

List groups accessible to this device/user. Shows group names, member counts, and device counts. Groups determine which projects you can access.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses the returned fields (names, member counts, device counts) and implies a read-only, scoped operation, but says nothing about pagination, ordering, or permission requirements for enumerating groups.

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 short sentences, front-loaded with the action and scope, then the return contents, then the domain meaning. No filler or redundancy.

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

Completeness4/5

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

For a parameterless read tool with no output schema, the description covers what the tool returns and why it matters. It could still note result size or ordering, but nothing essential for invocation 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, so there is nothing for the description to disambiguate; baseline 4 applies. The schema is an empty object and the description correctly introduces no arguments.

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

Purpose4/5

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

States a specific verb and resource ('List groups') and scopes it to those 'accessible to this device/user'. It does not, however, explicitly distinguish itself from the close sibling get_group_details, so differentiation is only partial.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the sentence 'Groups determine which projects you can access' hints at why an agent would enumerate groups, but there is no explicit when-to-use guidance or routing to alternatives like get_group_details or list_projects.

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

list_look_boardsB

List all look boards in a project.

Returns lightweight look board summaries with button counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID to list look boards from

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, but it does disclose that results are 'lightweight look board summaries with button counts', which usefully signals the return shape. It says nothing about pagination, ordering, permissions, or behavior for an empty/invalid project.

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 short sentences, front-loaded with the operation and followed by the return shape. No filler or redundancy.

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

Completeness4/5

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

For a single-parameter read tool with a fully documented schema, this covers the essentials and even describes the return payload despite no output schema. Missing only minor operational details such as ordering or pagination.

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 single projectId parameter is documented in the schema, so baseline 3 applies. The description adds no format, sourcing, or constraint detail beyond what the schema already states.

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

Purpose4/5

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

States a specific verb (List) and resource (look boards) scoped to a project, which is unambiguous. However, it does not distinguish itself from nearby siblings such as get_look_board (singular) or list_looks, so an agent must infer the boundary from names alone.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives in a very crowded sibling set (get_look_board, list_looks, list_projects, create_look_board). Usage is only implied by the verb 'List'.

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

list_looksA

List looks in a project with pagination and filtering.

Returns lightweight look summaries:

  • Metadata (id, name, description)

  • Fixture count

  • Timestamps

Does NOT include:

  • Fixture values (use get_look for that)

  • Usage information (use get_look_usage)

This is the most efficient way to browse available looks.

Filtering:

  • nameContains: Filter by look name (case-insensitive)

  • usesFixture: Filter to looks using specific fixture ID

Sorting:

  • name: Alphabetical by name

  • createdAt: Oldest first (default)

  • updatedAt: Recently modified first

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-based)
sortByNoSort fieldCREATED_AT
perPageNoItems per page (max 100)
projectIdYesProject ID to list looks from
usesFixtureNoFilter to looks that use this fixture ID
nameContainsNoFilter looks by name (case-insensitive substring match)

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden, and it does disclose the return payload shape (metadata, fixture count, timestamps) and explicitly what is omitted. It stops short of stating pagination limits or permission requirements, but the read-only nature of a listing tool is implicit and the payload disclosure is the meaningful gap-filler.

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 action, then organized into scannable sections for returns, exclusions, filtering, and sorting. Every line earns its place, though the 'most efficient way to browse' claim is marketing rather than 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 no annotations and no output schema, the description compensates by describing the returned summary fields and the exclusions, and by covering filtering and sorting. An agent has everything it needs to select and invoke this tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it documents the sort direction each option produces ('oldest first' default, 'recently modified first') and restates the filter semantics. The nameContains and usesFixture semantics are largely duplicated from the schema, which caps this below 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+resource ('List looks in a project') and immediately scopes it with pagination and filtering. It explicitly distinguishes itself from the get_look and get_look_usage siblings by naming what it does NOT return, so an agent can tell them apart 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 routing: 'use get_look for that' for fixture values and 'use get_look_usage' for usage information, plus a positive claim that this is 'the most efficient way to browse available looks.' The alternatives and the conditions selecting them are spelled out.

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

list_my_invitationsA

List pending group invitations for the current user/device. Shows which groups you've been invited to, who invited you, and the offered role.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It does disclose the result contents (groups, inviter, offered role) and that only pending invitations are returned, but says nothing about read-only nature, auth/permission requirements, or pagination/limits.

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 tightly written sentences with the core purpose front-loaded and the returned fields following. Every clause carries information; no filler.

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

Completeness4/5

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

For a zero-parameter, no-output-schema tool this is largely complete: it explains what is listed and what each entry reveals. It would be fully complete if it noted the read-only nature and the absence of filtering options.

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 no parameters, so there is no parameter semantics to document and the baseline is 4. Nothing in the description conflicts with the empty schema.

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

Purpose4/5

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

States a specific verb (List) and resource (pending group invitations) with the scope narrowed to the current user/device, so an agent can distinguish it from list_groups or invite_to_group. The purpose is unambiguous, though it never explicitly names those siblings.

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

Usage Guidelines3/5

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

Usage is only implied by the words 'pending' and 'current user/device'. There is no explicit when-to-use statement, no when-not, and no reference to the closely related list_groups, get_group_details, or invite_to_group tools.

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

list_projectsA

List all projects with optional detail level.

Parameters:

  • includeDetails: When true, includes resource counts for each project. Default false.

Returns:

  • Basic info (id, name, description) always

  • Resource counts (fixtureCount, lookCount, cueListCount) when includeDetails=true

Use includeDetails=false for quick project listing. Use includeDetails=true when you need to understand project sizes.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeDetailsNoInclude fixture/look/cue counts

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It does disclose the return shape (basic info always, counts conditionally), which is valuable for a read tool with no output schema. It omits ordering, pagination, and any permission/scope constraints, so behavioral coverage is only partial.

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

Conciseness4/5

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

The description is front-loaded with the one-line purpose, then cleanly separated into Parameters and Returns sections. The closing two usage sentences partially restate the parameter section, a minor redundancy, but overall it is tight and skimmable.

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

Completeness4/5

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

With no output schema, the description correctly compensates by documenting the return payload for both flag values. What is missing is pagination/ordering behavior and sibling disambiguation, which keeps it short of fully complete for a list 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% and the single parameter is already documented, so the baseline is 3. The description goes beyond the schema by naming the concrete returned fields per detail level and framing the flag as a quick-listing vs sizing tradeoff, which adds practical semantic value.

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

Purpose4/5

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

The description states a specific verb+resource ("List all projects") and clearly scopes the tool to listing with an optional detail level. It does not, however, differentiate itself from the closely named siblings get_project and get_project_details, which an agent must choose between.

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

Usage Guidelines3/5

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

It gives clear guidance for the includeDetails flag (false for quick listing, true for understanding project sizes), which is genuinely useful. But it offers no tool-level guidance on when to use list_projects versus get_project, get_project_details, or the bulk_* project siblings.

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

next_cueB

Advance to the next cue in the currently playing cue list

ParametersJSON Schema
NameRequiredDescriptionDefault
fadeInTimeNoOverride fade in time in seconds (optional)

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description carries the full behavioral burden and falls short. It implies a state mutation (playback advances) but does not disclose what happens at the end of the cue list, whether an active cue list is required or an error results, or whether the move is reversible via undo.

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?

A single, front-loaded sentence with zero filler; the action and its scope are stated immediately. Nothing is wasted and nothing essential to the sentence is missing.

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

Completeness3/5

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

For a simple one-optional-param tool with no output schema, the description covers the core action but omits operational context an agent needs — what 'currently playing' means when no list is active, and the result of advancing past the final cue. Adequate but with clear gaps.

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 single optional parameter (fadeInTime) is already fully documented in the schema. The description adds no parameter-level meaning, which is acceptable given the schema does the work — baseline 3.

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

Purpose4/5

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

States a specific verb ('Advance') and resource ('next cue in the currently playing cue list'), which is unambiguous on its own. It does not explicitly name the nearest siblings (previous_cue, go_to_cue, start_cue_list), but the phrase 'currently playing cue list' scopes it well enough that an agent can distinguish it from list-management tools.

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

Usage Guidelines3/5

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

The phrase 'currently playing cue list' implies a precondition (a cue list must be running), which is useful context. However, it never states when to choose this over go_to_cue or previous_cue, nor what happens if nothing is playing — the alternative-selection guidance 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.

optimize_cue_timingC

Optimize the timing of cues in a cue list

ParametersJSON Schema
NameRequiredDescriptionDefault
cueListIdYesCue list ID to optimize
projectIdYesProject ID containing the cue list
optimizationStrategyNoOptimization strategy to applysmooth_transitions

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'optimize' but doesn't explain what that entails—whether it modifies data, requires specific permissions, has side effects like overwriting cues, or what the output might be. This is inadequate for a mutation tool with zero annotation coverage.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and appropriately sized, with no wasted information, making it easy to parse quickly.

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

Completeness2/5

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

Given the tool's complexity (a mutation operation with 3 parameters) and lack of annotations and output schema, the description is incomplete. It doesn't cover behavioral aspects like what 'optimize' does, potential side effects, or return values, leaving significant gaps for an agent to understand and use the tool effectively.

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 all parameters (cueListId, optimizationStrategy, projectId) with descriptions and an enum for strategy. The description adds no additional meaning beyond this, such as explaining the impact of different strategies or parameter interactions, meeting the baseline for high schema coverage.

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

Purpose4/5

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

The description clearly states the action ('optimize') and resource ('timing of cues in a cue list'), making the purpose understandable. However, it doesn't distinguish this tool from sibling 'optimize_scene' or 'reorder_cues', which might have overlapping timing-related functions, so it misses full sibling differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'optimize_scene' or 'reorder_cues'. It lacks context about prerequisites, such as needing an existing cue list, and doesn't specify scenarios where this optimization is appropriate, leaving usage unclear.

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

optimize_lookC

Optimize an existing look for specific goals

ParametersJSON Schema
NameRequiredDescriptionDefault
lookIdYesLook ID to optimize
projectIdYesProject ID containing the look
optimizationGoalsNoGoals for optimization

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It does not disclose what 'optimize' actually changes, whether the look is modified in place or a new one is returned, whether existing adjustments are overwritten, or what permissions are required. For a mutation tool with zero annotation coverage, this is a significant gap.

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 single sentence is front-loaded with the action and resource, with no filler or redundancy. It is tightly written, though its brevity borders on under-specification for a mutation tool.

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

Completeness2/5

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

Given this is a mutation tool with no annotations and no output schema, the description is too thin. It omits side effects, reversibility, permission requirements, and how it differs from related look tools, leaving the agent without enough context to invoke it confidently.

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 lookId, projectId, and optimizationGoals with their enum values and default. The description's 'for specific goals' adds only marginal framing beyond the schema and does not explain how goals interact or affect the optimization. Baseline 3 is appropriate 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.

Purpose4/5

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

The description states a specific verb ('Optimize') and resource ('an existing look'), and adds scope via 'for specific goals', so it is clear and not tautological. It stops short of distinguishing itself from sibling tools like update_look, generate_look, or optimize_cue_timing, which is why it is a 4 rather than a 5.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as update_look, generate_look, or optimize_cue_timing. The phrase 'for specific goals' hints at the optimizationGoals parameter but gives no when/when-not conditions or prerequisites.

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

previous_cueB

Go back to the previous cue in the currently playing cue list

ParametersJSON Schema
NameRequiredDescriptionDefault
fadeInTimeNoOverride fade in time in seconds (optional)

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden for a state-changing playback action. It does not disclose behavior at the first cue (no-op vs. error), whether the transition is crossfaded or immediate, or that it mutates playback position — leaving key behavioral traits undocumented.

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?

A single front-loaded sentence with zero waste; the action and its scope are communicated immediately.

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

Completeness3/5

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

For a simple navigation tool with no output schema and no annotations, the core action is covered, but edge cases (behaving at the first cue of the list, interactions with a stopped list, and the fadeInTime override's effect on the transition) are missing, leaving gaps an agent would want filled.

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 single optional fadeInTime parameter is already documented in the schema, so the description is not obliged to restate it. It adds no extra meaning about the fade override, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb+resource ('Go back to the previous cue') and scopes it to the 'currently playing cue list', which clearly separates it from navigation siblings like next_cue and go_to_cue. It stops short of explicitly naming or contrasting with those alternatives, so it is clear but not fully differentiated.

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

Usage Guidelines3/5

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

Use is only implied: the phrase 'currently playing cue list' hints that a list must be active, but there is no explicit when-to-use, when-not-to-use, or statement of what happens if no cue list is playing. The agent must infer the precondition.

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

qlc_import_guidanceB

Get information about importing QLC+ (.qxw) files into LacyLights

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. 'Get information' implies a read-only, side-effect-free operation, which is the most important disclosure for a zero-parameter tool, but the description says nothing about the nature, source, or scope of the returned guidance.

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?

A single front-loaded sentence with no filler or redundancy. Every word earns its place.

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

Completeness3/5

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

With no parameters and no output schema, the description is the only source of information, yet it does not say what the guidance covers (file requirements, limitations, manual steps) or how the agent should act on it. Adequate but with clear gaps for a documentation-style 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?

The tool takes zero parameters, so there is no parameter semantics to document — the baseline for a parameterless tool is 4. Nothing in the description conflicts with the empty schema.

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

Purpose4/5

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

States a specific verb ('Get information') and resource ('importing QLC+ (.qxw) files into LacyLights'), so the agent knows this is an informational lookup rather than an import action. It does not distinguish itself from the sibling import_eos_ascii, which is also an import-related tool, so sibling differentiation is missing.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no mention of alternatives such as import_eos_ascii. The description does not clarify whether this returns static documentation or project-specific guidance, which matters because the tool takes no parameters.

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

redoA

Redo a previously undone operation in a project.

Re-applies an operation that was previously undone. Only available after an undo operation. If a new operation is performed after undo, the redo history is cleared.

Returns:

  • success: Whether the redo was successful

  • message: Description of what was redone

  • operation: Details of the redone operation

  • restoredEntityId: ID of the restored entity (if applicable)

Use get_undo_redo_status to check if redo is available.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID to redo operation in

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose the key behavioral traits: it is a state-dependent mutation, it is only valid after an undo, and its history is destroyed by a subsequent operation. It does not state permission/auth requirements or whether the redo can cross project boundaries, which are the remaining gaps.

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 action, then conditions, then returns, then a pointer to the status tool. Every block is purposeful; the Returns list is somewhat verbose but justified because no output schema exists.

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

Completeness4/5

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

For a single-parameter, no-output-schema tool, the description supplies the return shape, the precondition, and the invalidation rule, which is nearly everything an agent needs. It stops short of auth/permission context or scope limitations, keeping it just under complete.

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

Parameters3/5

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

Only one parameter (projectId) and schema description coverage is 100%, so the schema already documents it fully. The description adds only the implicit scoping that the redo applies within a project, which is marginal beyond the schema. 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 (redo) and resource (a previously undone operation in a project), and implicitly distinguishes itself from the sibling `undo` by requiring that an undo has already occurred. An agent can identify the operation 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 preconditions ('Only available after an undo operation'), the invalidation rule ('If a new operation is performed after undo, the redo history is cleared'), and routes the agent to a sibling for checking availability ('Use get_undo_redo_status'). This is full when/when-not/alternative guidance.

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

remove_cue_from_listC

Remove a cue from a cue list

ParametersJSON Schema
NameRequiredDescriptionDefault
cueIdYesID of the cue to remove

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the action is 'Remove,' implying a destructive mutation, but doesn't specify permissions required, whether the removal is reversible, side effects on related data, or error handling. This leaves significant gaps in understanding the tool's behavior.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste—it directly states the tool's purpose without unnecessary words. It's appropriately sized for a simple tool and front-loaded with the core action, making it easy to parse quickly.

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

Completeness2/5

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

Given the tool's destructive nature (implied by 'Remove'), lack of annotations, and no output schema, the description is incomplete. It doesn't address critical aspects like what happens after removal, error conditions, or return values, leaving the agent with insufficient context for safe and effective use.

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?

The schema has 100% description coverage, with the 'cueId' parameter clearly documented in the schema. The description adds no additional semantic context beyond what's in the schema, such as format examples or validation rules, so it meets the baseline for high schema coverage without enhancing parameter understanding.

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

Purpose4/5

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

The description clearly states the action ('Remove') and the target ('a cue from a cue list'), providing a specific verb+resource combination. However, it doesn't differentiate itself from sibling tools like 'reorder_cues' or 'update_cue_list' which might also involve cue list modifications, leaving room for ambiguity in tool selection.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing cue list), exclusions, or how it differs from related tools like 'reorder_cues' or 'update_cue_list', leaving the agent without context for proper tool selection.

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

remove_fixtures_from_lookB

Safely remove specific fixtures from a look

ParametersJSON Schema
NameRequiredDescriptionDefault
lookIdYesLook ID to remove fixtures from
fixtureIdsYesArray of fixture IDs to remove

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It says 'Safely remove' but never explains what 'safely' means, whether removal is reversible, what permissions are required, or how missing fixture IDs are handled.

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?

A single front-loaded sentence with no wasted words. The verb and resource appear immediately, making it easy to scan.

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

Completeness3/5

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

For a simple two-parameter mutation with no output schema, the description plus 100% schema coverage gives enough to invoke it. However, because there are no annotations, it should do more to explain the effects of removal and what 'safely' guarantees.

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 lookId and fixtureIds are fully documented in the input schema. The description adds no additional syntax or format detail beyond what the schema already provides, making the baseline score of 3 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 and resource: remove fixtures from a look. It is clearly distinguishable from sibling tools like add_fixtures_to_look and ensure_fixtures_in_look without needing to open 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 Guidelines2/5

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

Provides no explicit when-to-use guidance, prerequisites, or alternatives. An agent can infer the basic action from the name, but there is no routing help for choosing between this and related tools such as ensure_fixtures_in_look or bulk fixture operations.

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

remove_look_from_boardC

Remove a button from a look board.

ParametersJSON Schema
NameRequiredDescriptionDefault
buttonIdYesButton ID to remove

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It does not say whether removal is permanent, whether the underlying look is deleted or merely unplaced from the board, or whether this is destructive. For a removal operation with zero annotation coverage, that is a significant gap.

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 short sentence with no wasted words and the action front-loaded. It is appropriately sized for a one-parameter tool, though it is so terse that it contributes little.

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

Completeness2/5

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

For a mutation tool with no annotations and no output schema, the description should at minimum disclose whether the removal is destructive and whether the look survives; it says neither. The tool is simple, but the missing destructive-semantics disclosure leaves an agent unable to predict consequences.

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% for the single required buttonId parameter, which the schema already documents as 'Button ID to remove'. The description adds no syntax, format, or scoping detail beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: remove a button from a look board. It is clear what the tool does, though it does not distinguish itself from siblings like bulk_delete_look_board_buttons or update_look_board_button, and the wording ('button') diverges slightly from the tool name ('remove_look_from_board'), which could cause a moment of confusion over whether a look or a button is removed.

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

Usage Guidelines2/5

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

There is no indication of when to use this versus the bulk variants (bulk_delete_look_board_buttons) or full-board deletion (delete_look_board). No prerequisites or context for invocation are given.

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

reorder_cuesC

Reorder multiple cues by assigning new cue numbers

ParametersJSON Schema
NameRequiredDescriptionDefault
cueListIdYesCue list ID containing the cues
cueReorderingYesArray of cue ID and new number pairs

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('reorder multiple cues') but doesn't cover critical traits: whether this is a destructive mutation (likely yes, as it changes order), permission requirements, error handling (e.g., duplicate cue numbers), or response format. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core action ('reorder multiple cues') and specifies the mechanism ('by assigning new cue numbers'), making it easy to parse. Every part of the sentence contributes essential information, earning its place.

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

Completeness2/5

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

Given the complexity of a mutation tool (reordering cues likely involves side effects), lack of annotations, and no output schema, the description is incomplete. It doesn't address behavioral aspects like safety, permissions, or what happens to other cues not in the reordering array. For a tool with 2 parameters and no structured support, more context is needed to guide effective use.

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?

The input schema has 100% description coverage, clearly documenting both parameters ('cueListId' and 'cueReordering') with their purposes. The description adds no additional semantic context beyond implying reordering involves 'assigning new cue numbers', which is already covered by the schema's details on 'newCueNumber'. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but doesn't detract either.

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

Purpose4/5

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

The description clearly states the verb ('reorder') and resource ('cues'), specifying it involves assigning new cue numbers. It distinguishes from siblings like 'remove_cue_from_list' or 'update_cue' by focusing on reordering multiple cues rather than deletion or single updates. However, it doesn't explicitly differentiate from 'optimize_cue_timing' or 'create_cue_sequence', which might involve ordering aspects, leaving some ambiguity.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing cue list), exclusions, or comparisons to siblings like 'update_cue_list' (which might handle ordering) or 'optimize_cue_timing' (which could involve reordering for timing). Without such context, the agent must infer usage from the name and schema alone.

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

set_fade_update_rateA

Set the fade engine update rate in Hz.

The fade update rate controls how frequently the fade engine updates DMX channel values during look transitions.

Valid range: 10-120 Hz

Guidelines:

  • 10-30Hz: Lower CPU usage, adequate for simple fades

  • 30-60Hz: Good balance of smoothness and efficiency

  • 60-120Hz: Maximum smoothness for professional applications

Note: Changes take effect immediately for new look transitions.

ParametersJSON Schema
NameRequiredDescriptionDefault
rateHzYesUpdate rate in Hz (10-120)

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses the control target, the valid range, performance tradeoffs, and notably that changes take effect immediately for new look transitions. It stops short of stating persistence, permissions, or whether in-progress transitions are affected.

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

Conciseness5/5

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

The description is front-loaded with the core action, then explains the effect, range, and practical guidelines in a scannable list. Every sentence adds useful information without redundancy.

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

Completeness4/5

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

For a single-parameter setter with no output schema and no annotations, the description covers purpose, valid range, performance implications, and immediate effect on new transitions. It could mention how to read the current rate or whether the setting persists, but it is otherwise complete.

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 parameter is already documented with type, min, max, and a short description. The description adds meaningful semantic guidance by mapping rate ranges to CPU usage and smoothness, going beyond the schema's raw bounds.

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

Purpose4/5

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

The description states a specific verb (Set) and resource (fade engine update rate), and explains what the rate controls (DMX channel update frequency during look transitions). It clearly distinguishes from most siblings, though it does not explicitly reference the get_fade_update_rate counterpart.

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

Usage Guidelines3/5

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

The description provides guidelines for selecting a rate value (10-30Hz for low CPU, 30-60Hz for balance, 60-120Hz for smoothness), which implicitly helps choose an appropriate setting. However, it does not say when to use this tool versus alternatives like get_fade_update_rate, leaving tool-selection guidance implied.

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

start_cue_listC

Start playing a cue list from the beginning or a specific cue

ParametersJSON Schema
NameRequiredDescriptionDefault
cueListIdNoCue list ID to play
projectIdNoProject ID to search within (optional when using cueListName)
cueListNameNoCue list name to search for (alternative to ID)
startFromCueNoCue number to start from (optional, defaults to first cue)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It never says whether this interrupts existing playback, whether it requires an active project, whether the call blocks until completion, or what state changes result from starting a cue list.

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?

One short sentence, front-loaded with the action and immediately qualifying the two start positions. No filler or redundancy.

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

Completeness2/5

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

For a four-parameter playback-control tool with no annotations and no output schema, the single sentence leaves too much unspecified: success/failure behavior, effect on currently running playback, and what status is returned are all unaddressed.

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 cueListId, projectId, cueListName, and startFromCue are all documented in the schema, including the ID/name alternative and the default-to-first-cue behavior. The description's phrase 'from the beginning or a specific cue' adds only marginal meaning beyond that.

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

Purpose4/5

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

States a specific verb and resource ('Start playing a cue list') and scopes it ('from the beginning or a specific cue'). It is distinguishable from stop_cue_list and go_to_cue, though it never names those siblings explicitly.

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

Usage Guidelines2/5

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

No guidance on when to use this versus go_to_cue, next_cue, or jump_to_operation, and no prerequisites stated. The agent must infer that this initiates playback rather than navigating within it.

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

stop_cue_listB

Stop the currently playing cue list

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, and it discloses only the mutation itself. It does not say whether stopping resets the cue position, whether playback state persists, what happens if no cue list is playing (error vs no-op), or how the lighting output is left.

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?

A single sentence with the imperative verb front-loaded and the scoping qualifier immediately after. There is no filler, and every word carries meaning.

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

Completeness3/5

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

For a zero-parameter control action with no annotations and no output schema, this is only minimally complete: the agent knows what it does but not the resulting state or failure modes. A brief clause on post-stop behavior would close the gap.

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 disambiguate; the baseline of 4 applies. No additional parameter meaning is needed or provided.

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

Purpose4/5

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

The description gives a specific verb+resource ('stop' + 'cue list') and narrows scope with 'currently playing', which intuitively separates it from start_cue_list and delete_cue_list. It stops short of naming those siblings, so differentiation is implied rather than explicit.

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

Usage Guidelines3/5

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

The phrase 'currently playing' implies the precondition (an active cue list must exist), which is useful implicit usage guidance. However, no alternatives are named (start_cue_list, fade_to_black, go_to_cue) and there is no guidance on what to do if nothing is playing.

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

suggest_channel_assignmentC

Suggest optimal channel assignments for multiple fixtures

ParametersJSON Schema
NameRequiredDescriptionDefault
universeNoUniverse to assign channels in
projectIdYesProject ID
fixtureSpecsYesList of fixtures to assign channels for
startingChannelNoChannel to start assignments from
groupingStrategyNoHow to group fixture assignmentssequential

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool 'suggests' assignments, implying a non-destructive, advisory operation, but doesn't clarify if this is a read-only analysis or if it modifies data (e.g., saves assignments to a project). It lacks details on permissions, rate limits, or what 'optimal' means (e.g., based on efficiency, grouping). The description adds minimal context beyond the basic action.

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

Conciseness5/5

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

The description is a single, efficient sentence: 'Suggest optimal channel assignments for multiple fixtures.' It's front-loaded with the core purpose, has zero wasted words, and is appropriately sized for the tool's complexity. Every part of the sentence contributes to understanding the tool's function.

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

Completeness2/5

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

Given the tool's complexity (5 parameters, no annotations, no output schema), the description is incomplete. It doesn't explain what 'optimal' means, how suggestions are generated, what the output looks like (e.g., a list of assignments), or behavioral aspects like whether it's a read-only analysis. For a tool that likely involves algorithmic processing of fixture data, more context is needed to guide an AI agent effectively.

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%, meaning all parameters are documented in the input schema. The description doesn't add any parameter-specific information beyond what's in the schema (e.g., it doesn't explain 'fixtureSpecs' or 'groupingStrategy' further). With high schema coverage, the baseline is 3, as the description doesn't compensate but also doesn't detract from the schema's documentation.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Suggest optimal channel assignments for multiple fixtures.' It specifies the action ('suggest'), the resource ('channel assignments'), and the scope ('for multiple fixtures'). However, it doesn't explicitly differentiate from sibling tools like 'get_channel_map' or 'create_fixture_instance,' which might also involve channel-related operations.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a project or fixture specs), exclusions, or comparisons to siblings like 'get_channel_map' (which might retrieve existing assignments) or 'create_fixture_instance' (which might create fixtures with channels). Usage is implied but not explicitly stated.

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

toggle_cue_skipA

Toggle the skip status of a cue. Skipped cues remain visible but are bypassed during playback.

ParametersJSON Schema
NameRequiredDescriptionDefault
cueIdYesID of the cue to toggle skip status

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses what skipping means behaviorally (cues stay visible but are bypassed at playback), which goes beyond the name. However, it omits whether the change persists, what happens with an invalid cueId, and whether a new skip state is returned.

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 short sentences with zero filler; the core action is stated first and the behavioral clarification second. Every sentence earns its place.

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

Completeness4/5

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

For a single-parameter toggle with no annotations or output schema, the description covers the operation and its playback effect. The only gap is the return value / resulting state, which is a minor omission given the tool's simplicity.

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 single cueId parameter is already documented in the schema. The description adds no format, constraint, or sourcing detail beyond it, 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?

The description names a specific verb ('Toggle') and resource ('skip status of a cue'), leaving no ambiguity about the operation. No sibling tool performs this action, so the unique verb+resource pair is sufficient to distinguish it.

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

Usage Guidelines3/5

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

Usage is implied by the semantics of skipping ('bypassed during playback'), but there is no explicit when-to-use guidance, no statement of prerequisites, and no mention of alternatives such as remove_cue_from_list or delete_cue for permanent removal. Adequate but with clear gaps.

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

undoA

Undo the last operation in a project.

Reverts the most recent change made to the project. Operations that can be undone include:

  • Creating, updating, or deleting looks

  • Creating, updating, or deleting fixture instances

  • Creating, updating, or deleting cues

  • Creating, updating, or deleting cue lists

Returns:

  • success: Whether the undo was successful

  • message: Description of what was undone

  • operation: Details of the undone operation

  • restoredEntityId: ID of the restored entity (if applicable)

Use get_undo_redo_status to check if undo is available.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID to undo operation in

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses which operations can be undone and what the return fields are, but omits permissions required, failure behavior, and how undo interacts with the redo stack.

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 core action is front-loaded, then supported by a scannable bullet list and a returns section. Since no output schema exists, the returns section is informative rather than redundant, and the description remains appropriately sized.

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

Completeness4/5

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

With no output schema, the description helpfully explains the return shape, and with no annotations it lists undoable operations and the status-check prerequisite. It remains somewhat incomplete on error paths and redo interaction, but is sufficient for a one-parameter mutation tool.

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% for the single projectId parameter, so the schema already defines the parameter. The description adds no syntax or extra semantic detail beyond indicating the operation occurs 'in a project', matching the baseline 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?

Specific verb and resource ('Undo the last operation in a project'), plus an enumerated scope of undoable entity types. It clearly distinguishes itself from redo and operation-history siblings by stating it reverts the most recent project change.

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 directs the agent to use get_undo_redo_status to check availability, which is a clear prerequisite. However, it does not explain when to choose undo versus redo or what to do if undo is unavailable.

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

update_cueC

Update properties of an existing cue

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name for the cue
skipNoWhen true, this cue is skipped during playback but remains visible in the UI
cueIdYesID of the cue to update
notesNoNew notes or description
lookIdNoNew look ID
cueNumberNoNew cue number
fadeInTimeNoNew fade in time in seconds
followTimeNoNew follow time (null to remove auto-follow)
fadeOutTimeNoNew fade out time in seconds

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. 'Update' implies a mutation, but nothing states whether it requires permissions, whether it is a partial patch (only supplied fields change) or a full replace, whether unmentioned fields are preserved, or whether the change is reversible/undoable given the undo/redo siblings.

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, front-loaded sentence with zero filler. It is efficient, though arguably too terse given the nine-parameter surface it governs.

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

Completeness2/5

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

A nine-parameter mutation tool with no annotations and no output schema needs more than one sentence. The description omits partial-update behavior, permission/undo implications, and any return-value expectation, leaving key context 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%, so all nine parameters are already documented in the schema (e.g. skip semantics, followTime null-to-remove). The description adds no additional meaning beyond 'properties of an existing cue', so the baseline 3 applies.

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

Purpose4/5

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

States a clear verb ('Update') and resource ('properties of an existing cue'), and the required cueId implies targeting an existing entity. However, it does not distinguish itself from sibling tools like bulk_update_cues, toggle_cue_skip, or update_cue_list, leaving the agent to infer the scope is a single cue.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus bulk_update_cues (for multiple cues) or the single-property shortcut toggle_cue_skip. No prerequisites, no mention of partial vs full update semantics, and no exclusions are provided.

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

update_cue_listC

Update cue list name or description

ParametersJSON Schema
NameRequiredDescriptionDefault
loopNoWhether to loop the cue list (restart from first cue after last cue finishes)
nameNoNew name for the cue list
cueListIdYesCue list ID to update
descriptionNoNew description for the cue list

TDQS

C2.5/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, yet it discloses almost nothing: it doesn't say whether the update is partial (do omitted fields get wiped?), whether permissions are required, or whether the change is reversible. For a mutation tool with zero annotation coverage this is a significant gap.

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

Conciseness3/5

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

It is a single short sentence with no waste, which is structurally fine. But its brevity comes at the cost of accuracy and completeness, so it reads as under-specification rather than effective conciseness.

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

Completeness2/5

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

For a four-parameter mutation tool with no annotations and no output schema, the description is far too thin. It neither covers the full set of updatable fields nor explains the mutation semantics, leaving the agent to rely entirely on the schema.

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 documents all four parameters including their meaning, which sets the baseline at 3. The description adds no syntax or format detail, and its narrow 'name or description' phrasing actually omits the documented `loop` parameter rather than clarifying anything.

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

Purpose3/5

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

The description gives a clear verb+resource ('Update cue list'), so the agent knows it modifies an existing cue list. However, it claims the tool updates only 'name or description' while the schema exposes a `loop` parameter, so the stated scope is understated and could mislead. It also does nothing to distinguish this single-item update from siblings like bulk_update_cue_lists or update_cue.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no indication of when this beats bulk_update_cue_lists or update_cue, and no prerequisites or exclusions. The agent is left to infer usage from the name alone.

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

update_fixture_instanceC

Update an existing fixture instance with new properties

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoNew mode name
nameNoNew name for the fixture
tagsNoNew tags array
modelNoNew model (will find/create new definition if changed)
universeNoNew DMX universe number
fixtureIdYesID of the fixture instance to update
descriptionNoNew description for the fixture
manufacturerNoNew manufacturer (will find/create new definition if changed)
startChannelNoNew starting DMX channel

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool updates properties, implying mutation, but lacks details on permissions, side effects (e.g., if changes affect related data), error handling, or response format. This is inadequate for a mutation tool with zero annotation coverage.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose without unnecessary details. Every word earns its place, making it easy for an agent to parse quickly.

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

Completeness2/5

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

For a mutation tool with no annotations and no output schema, the description is incomplete. It lacks behavioral context (e.g., what happens on success/failure), doesn't explain the impact of parameter changes (e.g., 'manufacturer' triggering definition creation), and provides minimal guidance, leaving gaps for the agent.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all 9 parameters. The description adds no additional meaning beyond the schema, such as explaining parameter interactions or constraints. Baseline 3 is appropriate 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.

Purpose4/5

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

The description clearly states the verb ('update') and resource ('existing fixture instance'), specifying it's for modifying properties. It distinguishes from siblings like 'create_fixture_instance' by focusing on updates rather than creation, though it doesn't explicitly contrast with other update tools like 'update_cue' or 'update_scene'.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing fixture instance), exclusions, or comparisons to siblings like 'update_cue' or 'update_scene', leaving the agent to infer usage context.

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

update_lookC

Update an existing look with new values

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional new name for the look
lookIdYesLook ID to update
descriptionNoOptional new description for the look
fixtureValuesNoOptional fixture values to update

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, yet it only implies mutation. It does not say whether the update is a full replacement of fixture values or a merge, whether omitted fields are preserved, or what permissions are required — a material gap given the adjacent 'update_look_partial' tool.

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, front-loaded sentence with no filler or repetition. It is efficient, though its brevity borders on under-specification rather than genuinely tight communication.

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

Completeness2/5

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

For a 4-parameter mutation tool with no annotations and no output schema, the description is too thin. It omits the full-replace vs partial-update semantics that would let an agent choose correctly over 'update_look_partial' and 'bulk_update_looks'.

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 (lookId, name, description, fixtureValues with nested channel offsets/values) is already documented. The description adds no syntax, format, or replacement semantics beyond the schema, so the baseline of 3 applies.

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

Purpose3/5

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

States a clear verb (Update) and resource (look) with a mutating scope, but 'with new values' is vague about what can change and the description never distinguishes itself from the sibling 'update_look_partial' or the bulk variants. An agent could not confidently choose between update_look and update_look_partial from this text alone.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no mention of alternatives despite an obvious sibling (update_look_partial) covering similar territory. The agent is left to infer the selection criteria entirely.

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

update_look_boardC

Update an existing look board's metadata and settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew look board name
gridSizeNoNew grid size for layout alignment
canvasWidthNoNew canvas width in pixels
descriptionNoNew look board description
lookBoardIdYesLook board ID to update
canvasHeightNoNew canvas height in pixels
defaultFadeTimeNoNew default fade time in seconds

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden and largely fails it. It does not say whether this is a partial or full replace, whether omitted fields are preserved, whether it requires ownership/permissions, or what happens on an unknown lookBoardId.

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 front-loaded sentence with no padding or repetition. It is efficient, though its extreme brevity borders on under-specification rather than true conciseness.

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

Completeness2/5

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

For a 7-parameter mutation tool with no annotations and no output schema, the description omits the update semantics (partial vs. full), required permissions, and failure behavior. The schema covers field names but not the operational contract an agent needs to call this 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 every parameter (name, gridSize, canvasWidth/Height, description, defaultFadeTime, lookBoardId) is already documented with units where relevant. The phrase 'metadata and settings' adds only light categorization 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.

Purpose4/5

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

States a specific verb and resource ('Update an existing look board') and names the affected domain ('metadata and settings'), so the core operation is unambiguous. It does not, however, distinguish itself from close siblings like bulk_update_look_boards, update_look_partial, or update_look_board_button, which an agent must sort out from the name alone.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus bulk_update_look_boards (multiple boards), update_look_partial (partial semantics), or update_look_board_button. No prerequisites or conditions are stated, leaving the agent to infer the appropriate context.

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

update_look_board_buttonC

Update a look board button's properties (position, size, color, label).

ParametersJSON Schema
NameRequiredDescriptionDefault
colorNoNew button color
labelNoNew button label/text
widthNoNew button width in pixels
heightNoNew button height in pixels
layoutXNoNew X position in pixels
layoutYNoNew Y position in pixels
buttonIdYesButton ID to update

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. 'Update' implies a mutation, but it never says whether unspecified properties are preserved (partial update) or reset, whether the button must already exist on a board, or what permissions are required. For a mutation tool with zero annotation coverage this is a real gap.

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 efficient sentence that front-loads the verb and resource with no wasted words. It is appropriately sized for the tool, though the parenthetical property list is largely redundant with the schema.

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

Completeness3/5

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

A simple single-record update whose parameters are fully covered by the schema, so the definition is minimally adequate. The missing piece is the partial-versus-full update semantics and the lack of any routing against the position-specific and bulk siblings, which matters given the dense sibling set.

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 including units (pixels) and the required buttonId is already documented in the schema. The description's parenthetical list of properties adds only naming-level overlap, no syntax, format, or constraint detail beyond what the schema provides.

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

Purpose4/5

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

States a specific verb (update) and resource (look board button) and enumerates the editable properties, so the agent knows exactly what it mutates. However, it does not distinguish itself from close siblings like update_look_board_button_positions or bulk_update_look_board_buttons, leaving the agent to infer the boundary from names alone.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of the single-button scope versus the bulk and position-specific siblings, and no prerequisites. The agent must guess whether this is the right tool when only positions change or when multiple buttons are involved.

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

update_look_board_button_positionsB

Update positions of multiple buttons in a single operation (useful for drag-and-drop).

ParametersJSON Schema
NameRequiredDescriptionDefault
positionsYesArray of button position updates

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden and does very little. 'Single operation' mildly implies batch semantics, but nothing is said about atomicity/partial failure, whether buttons must already exist on a board, required permissions, or what happens to buttons omitted from the array.

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 short, front-loaded sentence with no filler; the operation and its scope come first. It is efficient, though it stops just short of the differentiation a second clause could have supplied.

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

Completeness2/5

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

The only parameter is a positions array with no board or look identifier anywhere, and the description does not explain how the target look board is determined — implicit context that an agent cannot safely assume. For a mutation tool with no annotations and no output schema, that is a material 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 nested buttonId/layoutX/layoutY fields are fully typed, so the schema does the explaining. The description only restates that multiple positions are updated at once and adds no coordinate-system, unit, or validation semantics beyond the schema; baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource (update button positions) plus scope (multiple buttons, single operation), which is more precise than a generic update. However, it never distinguishes itself from close siblings such as bulk_update_look_board_buttons or update_look_board_button, so an agent cannot tell when position updates should route here instead.

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

Usage Guidelines3/5

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

The parenthetical '(useful for drag-and-drop)' gives an implied usage context, but there is no explicit when-to-use, when-not-to-use, or alternative-naming guidance. The agent must infer the boundary against the many sibling bulk/update button tools on its own.

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

update_look_partialC

Safely update look metadata and optionally merge fixture values

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional new name for the look
lookIdYesLook ID to update
descriptionNoOptional new description for the look
fixtureValuesNoOptional fixture values to merge/update
mergeFixturesNoWhether to merge fixtures (true) or replace all (false)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. 'Safely' is undefined marketing language with no explanation of what makes it safe, whether it is a mutation, what permissions are needed, or what happens to existing fixture values when mergeFixtures is false. The merge/replace semantics live only in the schema, not the description.

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 front-loaded sentence naming the primary action and the optional extension; there is no filler. It is arguably too terse for a mutation tool, but as raw concision it is efficient.

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

Completeness2/5

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

For a no-annotation mutation tool with no output schema and five parameters, the description is too thin. It omits return behavior, the effect of mergeFixtures=false (destructive replace), and how it relates to the near-identical 'update_look' sibling, leaving real gaps an agent must resolve elsewhere.

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 every parameter (lookId, name, description, fixtureValues, mergeFixtures) is documented inline, so the schema does the heavy lifting. The description adds nothing about parameter formats or defaults beyond what the schema already states, warranting the baseline 3.

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

Purpose4/5

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

States a specific verb and resource ('update look metadata') plus the optional fixture-value merge, so the operation is understandable. However, it never differentiates itself from the sibling 'update_look' or 'bulk_update_looks_partial', leaving the 'partial' distinction to be inferred from the name alone.

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

Usage Guidelines2/5

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

There is no guidance on when to choose this over 'update_look', 'bulk_update_looks', or 'bulk_update_looks_partial'. The word 'optionally' describes the fixture values but gives no condition under which merging versus metadata-only editing is appropriate.

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. 93 tool updatesv1.7.0
    • Addedactivate_look
    • Addedactivate_look_from_board
    • Changedadd_cue_to_list3 fields changed
      • addedInput schema / properties / lookId
        Added value: +{
        +  "description": "Look ID to use for this cue",
        +  "type": "string"
        +}
      • removedInput schema / properties / sceneId
        Removed value: -{
        -  "description": "Scene ID to use for this cue",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "cueListId",
        -  "name",
        -  "cueNumber",
        -  "sceneId"
        -]New value: +[
        +  "cueListId",
        +  "name",
        +  "cueNumber",
        +  "lookId"
        +]
    • Addedadd_fixtures_to_look
    • Addedadd_look_to_board
    • Changedanalyze_script2 fields changed
      • addedInput schema / properties / suggestLooks
        Added value: +{
        +  "default": true,
        +  "description": "Generate look suggestions based on analysis",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / suggestScenes
        Removed value: -{
        -  "default": true,
        -  "description": "Generate scene suggestions based on analysis",
        -  "type": "boolean"
        -}
    • Addedbulk_create_cue_lists
    • Addedbulk_create_cues
    • Addedbulk_create_fixture_definitions
    • Addedbulk_create_fixtures
    • Addedbulk_create_look_board_buttons
    • Addedbulk_create_look_boards
    • Addedbulk_create_looks
    • Addedbulk_create_projects
    • Addedbulk_delete_cue_lists
    • Addedbulk_delete_cues
    • Addedbulk_delete_fixtures
    • Addedbulk_delete_look_board_buttons
    • Addedbulk_delete_look_boards
    • Addedbulk_delete_looks
    • Addedbulk_delete_projects
    • Addedbulk_update_cue_lists
    • Addedbulk_update_cues
    • Addedbulk_update_fixtures
    • Addedbulk_update_look_board_buttons
    • Addedbulk_update_look_boards
    • Addedbulk_update_looks
    • Addedbulk_update_looks_partial
    • Addedclear_operation_history
    • Addedcopy_fixtures_to_looks
    • Changedcreate_cue_sequence3 fields changed
      • addedInput schema / properties / lookIds
        Added value: +{
        +  "description": "Look IDs to include in sequence",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / sceneIds
        Removed value: -{
        -  "description": "Scene IDs to include in sequence",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "projectId",
        -  "scriptContext",
        -  "sceneIds",
        -  "sequenceName"
        -]New value: +[
        +  "projectId",
        +  "scriptContext",
        +  "lookIds",
        +  "sequenceName"
        +]
    • Addedcreate_look_board
    • Addedcreate_look_board_with_buttons
    • Changedcreate_project1 field changed
      • addedInput schema / properties / groupId
        Added value: +{
        +  "description": "Group ID to own this project (optional, defaults to user's personal group)",
        +  "type": "string"
        +}
    • Addeddelete_cue_list
    • Addeddelete_fixture_instance
    • Addeddelete_look_board
    • Addedensure_fixtures_in_look
    • Addedexport_data_table
    • Addedexport_data_workbook
    • Addedexport_eos_ascii
    • Addedfade_to_black
    • Changedgenerate_act_cues2 fields changed
      • addedInput schema / properties / existingLooks
        Added value: +{
        +  "description": "Optional existing look IDs to reference",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / existingScenes
        Removed value: -{
        -  "description": "Optional existing scene IDs to reference",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
    • Addedgenerate_look
    • Removedgenerate_scene
    • Addedget_build_info
    • Addedget_cue
    • Changedget_cue_list_details8 fields changed
      • addedInput schema / properties / filterBy / properties / lookNameContains
        Added value: +{
        +  "description": "Filter cues where look name contains this text (case-insensitive)",
        +  "type": "string"
        +}
      • removedInput schema / properties / filterBy / properties / sceneNameContains
        Removed value: -{
        -  "description": "Filter cues where scene name contains this text (case-insensitive)",
        -  "type": "string"
        -}
      • addedInput schema / properties / includeLookDetails
        Added value: +{
        +  "default": false,
        +  "description": "Include full look data for each cue (default: false for performance)",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / includeSceneDetails
        Removed value: -{
        -  "default": true,
        -  "description": "Include detailed scene information for each cue",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page number for pagination (min 1)",
        +  "type": "number"
        +}
      • addedInput schema / properties / perPage
        Added value: +{
        +  "default": 50,
        +  "description": "Items per page (min 1, max 100)",
        +  "type": "number"
        +}
      • changedInput schema / properties / sortBy / description
        Previous value: -"Sort cues by cue number, name, or scene name"New value: +"Sort cues by cue number, name, or look name"
      • changedInput schema / properties / sortBy / enum
        Previous value: -[
        -  "cueNumber",
        -  "name",
        -  "sceneName"
        -]New value: +[
        +  "cueNumber",
        +  "name",
        +  "lookName"
        +]
    • Addedget_cue_list_status
    • Addedget_current_active_look
    • Addedget_fade_update_rate
    • Addedget_fixture
    • Addedget_group_details
    • Addedget_look
    • Addedget_look_board
    • Addedget_look_fixture_values
    • Addedget_look_fixtures
    • Addedget_operation_history
    • Addedget_project
    • Addedget_undo_redo_status
    • Addedgo_to_cue
    • Addedimport_eos_ascii
    • Addedinvite_to_group
    • Addedjump_to_operation
    • Addedlist_cue_lists
    • Addedlist_data_export_tables
    • Addedlist_fixtures
    • Addedlist_groups
    • Addedlist_look_boards
    • Addedlist_looks
    • Addedlist_my_invitations
    • Changedlist_projects1 field changed
      • changedInput schema / properties / includeDetails / description
        Previous value: -"Include fixture and scene counts"New value: +"Include fixture/look/cue counts"
    • Addednext_cue
    • Addedoptimize_look
    • Removedoptimize_scene
    • Addedprevious_cue
    • Addedqlc_import_guidance
    • Addedredo
    • Addedremove_fixtures_from_look
    • Addedremove_look_from_board
    • Addedset_fade_update_rate
    • Addedstart_cue_list
    • Addedstop_cue_list
    • Addedtoggle_cue_skip
    • Addedundo
    • Changedupdate_cue3 fields changed
      • addedInput schema / properties / lookId
        Added value: +{
        +  "description": "New look ID",
        +  "type": "string"
        +}
      • removedInput schema / properties / sceneId
        Removed value: -{
        -  "description": "New scene ID",
        -  "type": "string"
        -}
      • addedInput schema / properties / skip
        Added value: +{
        +  "description": "When true, this cue is skipped during playback but remains visible in the UI",
        +  "type": "boolean"
        +}
    • Changedupdate_cue_list1 field changed
      • addedInput schema / properties / loop
        Added value: +{
        +  "description": "Whether to loop the cue list (restart from first cue after last cue finishes)",
        +  "type": "boolean"
        +}
    • Addedupdate_look
    • Addedupdate_look_board
    • Addedupdate_look_board_button
    • Addedupdate_look_board_button_positions
    • Addedupdate_look_partial
    • Removedupdate_scene
  2. 24 tool updatesv1.0.0
    • First observedadd_cue_to_list
    • First observedanalyze_cue_structure
    • First observedanalyze_fixture_capabilities
    • First observedanalyze_script
    • First observedcreate_cue_sequence
    • First observedcreate_fixture_instance
    • First observedcreate_project
    • First observeddelete_project
    • First observedgenerate_act_cues
    • First observedgenerate_scene
    • First observedget_channel_map
    • First observedget_cue_list_details
    • First observedget_fixture_inventory
    • First observedget_project_details
    • First observedlist_projects
    • First observedoptimize_cue_timing
    • First observedoptimize_scene
    • First observedremove_cue_from_list
    • First observedreorder_cues
    • First observedsuggest_channel_assignment
    • First observedupdate_cue
    • First observedupdate_cue_list
    • First observedupdate_fixture_instance
    • First observedupdate_scene

TDQS

C2.9/5.0

Scored across 102 tools

Disambiguation3/5

Many tools target distinct resources, but the set contains numerous near-duplicate pairs such as update_look vs update_look_partial, bulk_update_looks vs bulk_update_looks_partial, and get_look vs get_look_fixtures vs get_look_fixture_values. Long descriptions often help, but the sheer number of bulk_-prefixed variants and subtle semantic differences creates real misselection risk.

Naming Consistency4/5

Nearly all tool names use snake_case with a consistent verb_noun or verb_noun_prep_noun pattern, including the bulk_ prefix. A few names deviate from the pattern (undo, redo, next_cue, previous_cue, qlc_import_guidance), but the overall convention is predictable.

Tool Count1/5

102 tools is far beyond a reasonable scope for an MCP server and is bloated with redundant bulk operations and many near-duplicate single/bulk/partial variants. This extreme count creates severe cognitive load and makes tool selection unnecessarily difficult.

Completeness3/5

Core lighting entities (projects, fixtures, looks, cues, cue lists, look boards) have extensive CRUD, bulk, import/export, undo/redo, and playback coverage. However, there are notable gaps: group invitations cannot be accepted or declined, and descriptions reference get_fixture_usage and get_look_usage tools that are not present, leaving dead ends in access-control and usage analysis.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    An MCP server that lets AI assistants control grandMA2 lighting consoles via Telnet, exposing 41 high-level tools for cue management, fixture control, preset management, executor control, macro editing, appearance assignment, bulk operations, console state queries, show file management, read-back verification, and music show workflows.
    100
    16
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Transforms an ETC Eos lighting console into a service controllable by AI assistants and automation tools via MCP and OSC, enabling cue management, preset recall, and channel level control.
    2
    AGPL 3.0
  • A
    license
    D
    quality
    D
    maintenance
    Enables AI-driven control of MADRIX LED lighting software, providing over 100 tools for storage, layer, cue list, timeline, audio, output, and color management via the MADRIX Remote HTTP interface.
    100
    4
    Apache 2.0