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: GMA2 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

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

Required Environment Variables

  • OPENAI_API_KEY - OpenAI API key for AI-powered lighting generation

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

Optional Environment Variables

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

  • CHROMA_PORT - ChromaDB port (default: 8000)

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

    • Ensure your OPENAI_API_KEY is set in the .env file

    • 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

24 tools
add_cue_to_listB

Add a new cue to an existing cue list

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the new cue
notesNoNotes or description for the cue
sceneIdYesScene 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

B3.1/5.0
Behavior2/5

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

Without annotations, the description carries full burden for behavioral disclosure. It only states 'Add a new cue,' implying mutation, but omits details like whether the cue list must exist, validation of cue number uniqueness, error handling, 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.

Conciseness4/5

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

The description is a single concise sentence with no redundant information. While it is efficient, it could benefit from slightly more detail without becoming verbose.

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 tool with 10 parameters and no output schema, the description is too brief. It does not explain return values, prerequisites, or side effects, leaving significant gaps for an agent to use correctly.

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

Parameters3/5

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

Schema coverage is 100%, so the input schema already describes all 10 parameters thoroughly. The description adds no additional meaning beyond the schema, warranting the baseline score of 3.

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

Purpose5/5

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

The description clearly states the tool adds a new cue to an existing cue list, using a specific verb and resource. This distinguishes it from sibling tools like update_cue, remove_cue_from_list, or create_cue_sequence.

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. For example, it does not specify whether to use this for single cue addition vs create_cue_sequence for bulk operations.

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
includeRecommendationsNoInclude improvement recommendations
projectIdYesProject ID containing the cue list

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
analysisTypeNoType of capability analysisgeneral
fixtureIdNoSingle fixture ID to analyze
fixtureIdsNoMultiple fixture IDs 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 '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
extractLightingCuesNoExtract specific lighting cues from the script
scriptTextYesThe theatrical script text to analyze
suggestScenesNoGenerate scene suggestions based on analysis

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 analyzes scripts for lighting information but doesn't describe what the analysis entails, how results are returned, or any constraints like processing time or error handling. For a tool with 3 parameters and no output schema, 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 front-loads the core purpose without unnecessary words. It directly states what the tool does, making it easy to parse and understand quickly. Every word earns its place, with no redundancy or fluff.

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 analyzing theatrical scripts with 3 parameters, no annotations, and no output schema, the description is incomplete. It lacks details on what 'lighting-relevant information' includes, how analysis results are structured, or any behavioral traits like error handling. This makes it inadequate for an agent to fully understand the tool's operation and output.

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 ('scriptText', 'extractLightingCues', 'suggestScenes') with clear descriptions. The description adds no additional meaning beyond implying that 'lighting-relevant information' relates to the parameters, but it doesn't explain their interplay or provide examples. 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 tool's purpose: 'Analyze a theatrical script to extract lighting-relevant information.' It specifies the verb ('analyze'), resource ('theatrical script'), and scope ('lighting-relevant information'), which distinguishes it from siblings like 'analyze_cue_structure' or 'generate_scene'. However, it doesn't explicitly differentiate from all siblings, such as 'generate_act_cues' or 'optimize_scene', which might also involve script analysis for lighting.

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 a script text input, or compare it to siblings like 'analyze_cue_structure' for cue-specific analysis or 'generate_scene' for scene generation. Without this context, an agent might struggle to choose between related tools.

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 scenes

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID to create cue sequence in
sceneIdsYesScene IDs to include in sequence
scriptContextYesScript context for the cue sequence
sequenceNameYesName 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?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool creates a sequence but doesn't cover critical aspects like permissions required, whether it's idempotent, error handling, or what the output looks like (no output schema). This is a significant gap for a creation tool with multiple parameters.

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

Given the complexity (5 parameters, nested objects, no output schema, and no annotations), the description is inadequate. It lacks details on behavioral traits, output expectations, and usage context, leaving the agent with insufficient information to invoke the tool confidently in a real-world scenario.

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%, providing a solid baseline. The description adds minimal value beyond the schema by implying 'sceneIds' are used to build the sequence, but it doesn't explain parameter interactions (e.g., how 'transitionPreferences' affect the sequence) or provide additional context like format examples.

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') and resource ('sequence of lighting cues from existing scenes'), making the purpose evident. It distinguishes from siblings like 'generate_scene' or 'update_cue' by focusing on sequence creation from existing scenes, though it doesn't explicitly contrast with tools like 'generate_act_cues' or 'reorder_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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing existing scenes), exclusions (e.g., not for modifying sequences), or comparisons to siblings like 'generate_act_cues' or 'reorder_cues', 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.

create_fixture_instanceC

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

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

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_projectC

Create a new lighting project

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNoProject description
nameYesProject name

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. 'Create a new lighting project' implies a write operation, but it doesn't disclose permissions needed, side effects, error conditions, or what happens on success (e.g., returns a project ID). This is a significant gap 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 with zero waste. It's front-loaded with the core action and resource, making it easy to scan and understand quickly without unnecessary elaboration.

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 creation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns, how to handle errors, or any behavioral nuances, leaving the agent with insufficient information to use it effectively beyond the basic 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 description coverage is 100%, so the schema already documents both parameters ('name' and 'description') with their types and requirements. The description adds no parameter-specific information beyond what the schema provides, such as constraints or examples, so it meets 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 ('Create') and resource ('new lighting project'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'create_cue_sequence' or 'create_fixture_instance' that also create resources, so it lacks sibling 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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context, or exclusions, such as when to use 'create_project' versus 'update_project' (if it existed) or how it relates to sibling tools like 'list_projects' or 'delete_project'.

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
confirmDeleteYesConfirm deletion of project and all its data
projectIdYesProject ID to delete

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.

generate_act_cuesC

Generate cue suggestions for an entire act based on script analysis

ParametersJSON Schema
NameRequiredDescriptionDefault
actNumberYesAct number to generate cues for
cueListNameNoOptional name for the cue list
existingScenesNoOptional existing scene IDs to reference
projectIdYesProject ID to work with
scriptTextYesScript text for the act

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 tool 'generates' suggestions, implying a read-only or analysis operation, but doesn't clarify whether this creates persistent data, requires specific permissions, or has side effects. No rate limits, error conditions, or output format are mentioned.

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?

For a tool with 5 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what 'cue suggestions' entail, how they're generated from 'script analysis', or what format the output takes. The agent lacks critical context about the tool's behavior and results.

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 thoroughly. The description doesn't add any meaningful parameter context beyond what's in the schema, such as explaining relationships between parameters or providing usage examples.

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 ('generate cue suggestions') and target ('for an entire act based on script analysis'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'create_cue_sequence' or 'update_cue_list', which appear related to cue management but have different purposes.

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 offers no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, appropriate contexts, or exclusions, leaving the agent to infer usage from the tool name and parameters alone.

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

generate_sceneC

Generate a lighting scene based on script context and design preferences

ParametersJSON Schema
NameRequiredDescriptionDefault
designPreferencesNo
fixtureFilterNo
projectIdYesProject ID to create scene in
sceneDescriptionYesDescription of the scene to light
sceneTypeNoType of scene: 'full' uses all fixtures (default), 'additive' only modifies specified fixturesfull
scriptContextNoOptional script context for the scene

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 generates a scene but doesn't clarify whether this is a read-only operation, if it modifies existing data, what permissions are required, or the output format. For a tool with 6 parameters and no annotations, this leaves significant behavioral gaps, such as whether it creates persistent data or returns a temporary design.

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. It directly states what the tool does ('Generate a lighting scene') and the key inputs ('based on script context and design preferences'), making it easy to parse. Every part of the sentence contributes to understanding, with no redundancy or fluff.

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 (6 parameters, nested objects, no output schema, and no annotations), the description is incomplete. It doesn't address behavioral aspects like mutation effects, error conditions, or output format, and it lacks usage guidelines. While concise, it fails to provide sufficient context for an AI agent to confidently invoke this tool without relying heavily on the schema, which has gaps in coverage.

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 67%, with parameters like 'sceneDescription' and 'projectId' well-documented in the schema. The description adds minimal value beyond the schema, mentioning 'script context and design preferences' which map to parameters but without extra details. It doesn't explain interactions between parameters (e.g., how 'sceneType' affects generation) or compensate for the 33% coverage gap, so it meets the baseline for adequate but not enhanced semantics.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Generate a lighting scene based on script context and design preferences.' It specifies the verb ('Generate') and resource ('lighting scene'), and distinguishes it from siblings like 'optimize_scene' or 'update_scene' by focusing on creation rather than modification. However, it doesn't explicitly differentiate from 'create_cue_sequence' or 'generate_act_cues', which are also generation tools, preventing 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. It doesn't mention prerequisites (e.g., needing a project created first), compare it to siblings like 'optimize_scene' (for refining) or 'create_cue_sequence' (for sequential cues), or specify scenarios where it's appropriate. Usage is implied only through the tool name and parameters, lacking explicit context.

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
projectIdYesProject ID to analyze
universeNoSpecific universe to analyze (if not provided, shows all)

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_cue_list_detailsC

Query and analyze cues in a cue list with filtering, sorting, and lookup tables

ParametersJSON Schema
NameRequiredDescriptionDefault
cueListIdYesCue list ID to query
filterByNoOptional filters to apply to the cue list
includeSceneDetailsNoInclude detailed scene information for each cue
sortByNoSort cues by cue number, name, or scene namecueNumber

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 but offers minimal behavioral disclosure. It mentions 'query and analyze' but doesn't specify whether this is read-only, what permissions are needed, how results are returned, or any rate limits. For a tool with filtering/sorting capabilities and 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.

Conciseness4/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. It avoids redundancy and wastes no words, though it could be slightly more structured by separating query vs. analyze aspects.

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 (4 parameters with nested objects, no output schema, and no annotations), the description is incomplete. It doesn't explain what 'analyze' entails, what 'lookup tables' refers to, or how results are structured. For a query/analysis tool with rich filtering options, 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 already documents all parameters thoroughly. The description adds marginal value by mentioning 'filtering, sorting, and lookup tables', which aligns with the schema's filterBy and sortBy parameters, but doesn't provide additional syntax or format details beyond what the schema provides. Baseline 3 is appropriate when 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 tool's purpose as 'Query and analyze cues in a cue list with filtering, sorting, and lookup tables', which specifies the verb (query/analyze) and resource (cues in a cue list). It distinguishes from siblings like 'list_projects' or 'get_project_details' by focusing on cue list details, though it doesn't explicitly differentiate from similar tools like 'analyze_cue_structure'.

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, when-not-to-use scenarios, or compare it to siblings like 'analyze_cue_structure' or 'get_project_details'. The agent must infer usage from the purpose alone.

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
fixtureTypeNoOptional fixture type filter
includeDefinitionsNoInclude available fixture definitions
projectIdNoOptional project ID to filter fixtures

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_project_detailsC

Get detailed information about a specific project

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID to get details for

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 'Get detailed information,' implying a read-only operation, but doesn't specify what details are included, if authentication is required, or how errors are handled. This is a significant gap for a tool with no 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 for a simple retrieval tool, with no wasted 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 no annotations and no output schema, the description is incomplete. It doesn't explain what 'detailed information' includes, potential return formats, or error conditions. For a tool in a context with many siblings and no structured output, 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, with 'projectId' documented as 'Project ID to get details for.' The description adds no additional parameter semantics beyond this, such as format examples or constraints. 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 verb ('Get') and resource ('detailed information about a specific project'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'list_projects' or 'create_project', which would require specifying it retrieves existing project details rather than listing or creating.

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 ID), exclusions, or comparisons to siblings like 'list_projects' for overviews or 'create_project' for new projects, leaving usage context unclear.

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

list_projectsC

List all available lighting projects

ParametersJSON Schema
NameRequiredDescriptionDefault
includeDetailsNoInclude fixture and scene counts

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 states 'List all available lighting projects' but doesn't mention whether this is a read-only operation, if it requires authentication, what the return format looks like, or any pagination/rate limits. For a list operation with zero annotation coverage, this leaves critical behavioral traits unspecified.

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, 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?

Given the lack of annotations and output schema, the description is incomplete for a list operation. It doesn't explain what 'list' returns (e.g., project names, IDs, metadata), how results are structured, or any constraints like permissions or limits. This leaves the agent with insufficient context to 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?

The input schema has 100% description coverage, with the single parameter 'includeDetails' documented as 'Include fixture and scene counts'. The description adds no additional parameter information beyond what the schema provides, so it meets the baseline score of 3 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 ('List') and target resource ('all available lighting projects'), making the purpose immediately understandable. However, it doesn't differentiate this tool from sibling tools like 'get_project_details' or 'get_fixture_inventory' that might also retrieve project-related information, preventing 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. With siblings like 'get_project_details' (likely for specific projects) and 'create_project' (for creation), the agent must infer usage context without explicit direction, which is a significant gap.

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
optimizationStrategyNoOptimization strategy to applysmooth_transitions
projectIdYesProject ID containing the cue list

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_sceneC

Optimize an existing scene for specific goals

ParametersJSON Schema
NameRequiredDescriptionDefault
optimizationGoalsNoGoals for optimization
projectIdYesProject ID containing the scene
sceneIdYesScene ID to optimize

TDQS

C2.6/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 but lacks behavioral details. It doesn't disclose whether this is a read-only or destructive operation, what permissions are needed, how long it takes, or what happens to the original scene. The phrase 'optimize' implies mutation but without specifics.

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 a single, clear sentence with no wasted words. It's front-loaded with the core action, though it could be more specific to improve usefulness without adding length.

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 doesn't explain what optimization does, what the output looks like, or potential side effects, leaving significant gaps for an agent to understand the tool's behavior and results.

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 parameters like 'optimizationGoals' with its enum values. The description adds no extra meaning beyond implying goals guide optimization, but doesn't explain trade-offs or interactions between goals, 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.

Purpose3/5

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

The description 'Optimize an existing scene for specific goals' states the verb (optimize) and resource (scene), but it's vague about what optimization entails. It doesn't specify whether this adjusts lighting, timing, or other scene properties, nor does it distinguish from sibling tools like 'optimize_cue_timing' 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 scene), exclusions, or comparisons to tools like 'update_scene' or 'optimize_cue_timing', leaving the agent to guess based on context.

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.

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.

suggest_channel_assignmentC

Suggest optimal channel assignments for multiple fixtures

ParametersJSON Schema
NameRequiredDescriptionDefault
fixtureSpecsYesList of fixtures to assign channels for
groupingStrategyNoHow to group fixture assignmentssequential
projectIdYesProject ID
startingChannelNoChannel to start assignments from
universeNoUniverse to assign channels in

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.

update_cueC

Update properties of an existing cue

ParametersJSON Schema
NameRequiredDescriptionDefault
cueIdYesID of the cue to update
cueNumberNoNew cue number
fadeInTimeNoNew fade in time in seconds
fadeOutTimeNoNew fade out time in seconds
followTimeNoNew follow time (null to remove auto-follow)
nameNoNew name for the cue
notesNoNew notes or description
sceneIdNoNew scene ID

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 but only states it updates properties without disclosing behavioral traits. It doesn't mention permissions needed, whether changes are reversible, rate limits, or what happens to unspecified properties (e.g., partial updates). 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 function without unnecessary words. It's front-loaded and wastes no space, 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?

Given the complexity of an 8-parameter mutation tool with no annotations and no output schema, the description is insufficient. It lacks details on behavioral aspects, usage context, and return values, leaving significant gaps for an agent to understand the tool's full implications.

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 8 parameters. The description adds no additional meaning beyond implying that properties can be updated, which doesn't enhance the schema's details. This meets the baseline for high schema coverage but doesn't compensate with extra insights.

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 ('Update') and resource ('properties of an existing cue'), making the purpose unambiguous. However, it doesn't differentiate this tool from sibling tools like 'update_cue_list' or 'update_scene', which also modify cue-related entities, so it doesn't reach the highest 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. It doesn't mention prerequisites (e.g., needing an existing cue ID), exclusions, or comparisons to siblings like 'update_cue_list' or 'reorder_cues', leaving the agent with minimal context for selection.

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
cueListIdYesCue list ID to update
descriptionNoNew description for the cue list
nameNoNew name for the cue list

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 'Update' which implies a mutation operation, but doesn't specify required permissions, whether changes are reversible, error conditions, or what happens to unspecified fields. For a mutation tool with zero annotation coverage, 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 with zero wasted words. It's front-loaded with the core action ('Update cue list') and specifies the updatable attributes ('name or description') directly. Every word earns its place, 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 this is a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't cover behavioral aspects like permissions, side effects, or error handling, nor does it explain return values. For a 3-parameter update operation in a context with multiple sibling tools, more contextual information is needed to be fully helpful.

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 (cueListId, description, name) and their types. The description adds marginal value by confirming that name and description are updatable fields, but doesn't provide additional syntax, constraints, or examples beyond what the schema provides. Baseline 3 is appropriate when 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 the resource 'cue list', specifying what can be updated ('name or description'). It distinguishes from siblings like 'update_cue' (which updates individual cues) and 'reorder_cues' (which changes cue order), but doesn't explicitly contrast them. The purpose is specific but lacks explicit 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. It doesn't mention prerequisites (e.g., needing an existing cue list), exclusions (e.g., not for creating new cue lists), or comparisons to siblings like 'create_cue_sequence' or 'update_cue'. Usage is implied from the action but not explicitly defined.

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
descriptionNoNew description for the fixture
fixtureIdYesID of the fixture instance to update
manufacturerNoNew manufacturer (will find/create new definition if changed)
modeNoNew mode name
modelNoNew model (will find/create new definition if changed)
nameNoNew name for the fixture
startChannelNoNew starting DMX channel
tagsNoNew tags array
universeNoNew DMX universe number

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_sceneC

Update an existing scene with new values

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNoOptional new description for the scene
fixtureValuesNoOptional fixture values to update
nameNoOptional new name for the scene
sceneIdYesScene 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 provided, the description carries full burden for behavioral disclosure. It states this is an update operation (implying mutation) but doesn't describe what happens: whether updates are partial or complete, if they're reversible, what permissions are required, or what the response looks like. For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps unaddressed.

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 states the core purpose without any wasted words. It's front-loaded with the essential information ('Update an existing scene') and adds just enough specificity ('with new values'). Every word earns its place in this minimal but complete statement of 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?

For a mutation tool with 4 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what 'updating' entails operationally, what happens to unspecified fields, whether there are side effects, or what format the response takes. The agent must rely entirely on the input schema and guess about behavior and outputs.

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 4 parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema - it doesn't explain relationships between parameters, provide examples, or clarify edge cases. The baseline of 3 is appropriate when the schema does all the parameter documentation 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?

The description clearly states the verb ('Update') and resource ('an existing scene'), making the purpose immediately understandable. It distinguishes from sibling tools like 'generate_scene' (create) and 'optimize_scene' (modify algorithmically), though it doesn't explicitly contrast with them. The description is specific about updating with 'new values' rather than just saying 'modify 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?

The description provides no guidance on when to use this tool versus alternatives like 'update_cue' or 'update_cue_list'. It doesn't mention prerequisites (e.g., needing an existing scene ID) or exclusions (e.g., what can't be updated). The agent must infer usage from the tool name and schema alone, with no explicit context about appropriate scenarios.

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. Dates show when Glama detected each change.

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

B3.2/5.0
Disambiguation4/5

Most tools have distinct purposes targeting specific lighting design tasks (e.g., analyze_script, create_cue_sequence, optimize_scene), but some overlap exists between analyze_cue_structure and get_cue_list_details, which could cause confusion. Overall, descriptions help clarify boundaries, but a few tools might be misselected.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (e.g., analyze_script, create_project, update_cue). This predictable naming scheme makes it easy for agents to understand and navigate the tool set without ambiguity.

Tool Count3/5

With 23 tools, the count is borderline high for a lighting design server, feeling slightly heavy but still manageable. It covers many aspects of the domain, but could potentially be streamlined without losing functionality.

Completeness5/5

The tool set provides comprehensive coverage for lighting design workflows, including project management (create/delete/list/get), fixture handling (create/update/get), cue and scene operations (create/update/optimize/generate), and analysis tools. There are no obvious gaps, enabling full CRUD/lifecycle support.

Maintenance

ActivityInactive
ResponsivenessWithin a week

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables control of LIFX smart lights through natural language, including power control, color adjustment, lighting effects, and scene management using the LIFX HTTP API.
    9
    9
    2
    ISC
  • A
    license
    B
    quality
    C
    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
    14
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    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.
    1
    AGPL 3.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bbernstein/lacylights-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server