LacyLights MCP Server
The LacyLights MCP Server provides AI-powered theatrical lighting design and control through natural language interactions.
Project Management: Create, list, retrieve details, and delete lighting projects, including QLC+ file imports.
Fixture Management: Add, update, and remove fixtures; analyze capabilities; manage DMX channel assignments and universes with optimal configuration suggestions.
Scene Creation & Optimization: Generate scenes from natural language descriptions or script analysis; optimize for energy efficiency, color accuracy, dramatic impact, or technical simplicity; update existing scenes with new fixture settings.
Cue Sequence Management: Build cue sequences from scenes; generate cue suggestions from script analysis; optimize timing with smooth transitions or dramatic strategies; analyze cue structure; add, remove, update, and reorder cues.
Live Performance Control: Start, stop, navigate, and jump to cues during performances; make real-time adjustments and updates.
Advanced Features: Script analysis for lighting extraction, collaborative workflows, partial scene updates, fixture merging, and comprehensive project analytics.
Supports running ChromaDB via Docker for persistent vector storage and advanced RAG capabilities when analyzing theatrical scripts
Connects to a GraphQL endpoint to access the LacyLights backend for fixture and scene management
Uses OpenAI's API for AI-powered lighting generation, script analysis, and intelligent scene creation based on artistic intent and lighting design principles
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@LacyLights MCP Servergenerate a dramatic sunset lighting scene for act 2"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
LacyLights MCP Server
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 countscreate_project- Create a new lighting project for a productionget_project_details- Get comprehensive details about a specific projectdelete_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 capabilitiesanalyze_fixture_capabilities- Deep analysis of fixture capabilities (color mixing, positioning, effects)create_fixture_instance- Add a new fixture to a project with manufacturer/model detailsget_channel_map- View DMX channel usage map for a projectsuggest_channel_assignment- Get optimal channel assignments for multiple fixturesupdate_fixture_instance- Modify existing fixture propertiesdelete_fixture_instance- Remove a fixture from a project (requires confirmation)
Look Creation & Management
generate_look- AI-powered look generation based on descriptions and contextanalyze_script- Extract lighting cues and suggestions from theatrical scriptsoptimize_look- Optimize looks for various goals (energy, impact, simplicity)update_look- Update look properties and fixture valuesactivate_look- Activate a look by name or IDfade_to_black- Fade all lights to black with customizable timingget_current_active_look- Get information about the currently active look
Advanced Look Operations
add_fixtures_to_look- Add fixtures to existing looksremove_fixtures_from_look- Remove specific fixtures from looksget_look_fixture_values- Read current fixture values in a lookensure_fixtures_in_look- Ensure fixtures exist with specific valuesupdate_look_partial- Partial look updates with fixture mergingbulk_update_looks_partial- Batch partial updates across multiple looks with fixture merging
Cue Sequence Management
create_cue_sequence- Build cue sequences from existing looksgenerate_act_cues- Generate complete cue lists for theatrical actsoptimize_cue_timing- Optimize cue timing for various strategiesanalyze_cue_structure- Analyze cue lists with recommendations
Cue List Operations
update_cue_list- Update cue list metadataadd_cue_to_list- Add new cues to existing listsremove_cue_from_list- Remove cues from listsupdate_cue- Modify individual cue propertiesbulk_update_cues- Update multiple cues simultaneouslyreorder_cues- Reorder cues with new numberingget_cue_list_details- Query cues with filtering and sortingdelete_cue_list- Delete entire cue lists (requires confirmation)
Cue Playback Control
start_cue_list- Begin playing a cue list from any pointnext_cue- Advance to the next cueprevious_cue- Go back to the previous cuego_to_cue- Jump to a specific cue by number or namestop_cue_list- Stop the currently playing cue listget_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 countsget_look_board- Get a specific look board with all buttons and layoutcreate_look_board- Create a new look board with custom canvas and grid settingsupdate_look_board- Update look board metadata and settingsdelete_look_board- Delete a look board and all its buttons (requires confirmation)bulk_create_look_boards- Create multiple look boards in a single operationbulk_update_look_boards- Update multiple look boards in a single operationbulk_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 positionupdate_look_board_button- Update button properties (position, size, color, label)remove_look_from_board- Remove a button from a look boardupdate_look_board_button_positions- Batch update button positions (drag-and-drop)bulk_create_look_board_buttons- Create multiple buttons in a single operationbulk_update_look_board_buttons- Update multiple buttons in a single operationbulk_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
Install dependencies:
npm installSet up environment variables:
cp .env.example .env
# Edit .env with your configurationBuild the project:
npm run buildConfiguration
Required Environment Variables
OPENAI_API_KEY- OpenAI API key for AI-powered lighting generationLACYLIGHTS_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 startYou should see:
RAG service initialized with in-memory patterns
LacyLights MCP Server running on stdioIntegration 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.jsin your configurationIf the above doesn't work, find your Node.js path with:
which nodeThe wrapper script ensures proper CommonJS module loading
Releases & Versioning
Release Channels
LacyLights MCP supports two release channels:
Stable Releases (e.g.,
1.4.0,1.5.0)Production-ready versions
Fully tested and validated
Listed as "Latest" on GitHub
Updates
latest.jsonfor automatic discovery
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
Install Latest Stable (Recommended)
# 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 startInstall 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 startInstall 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 startRelease Distribution
All releases are distributed through multiple channels:
GitHub Releases: https://github.com/bbernstein/lacylights-mcp/releases
Source code
Pre-built archives
Release notes
S3 Distribution: https://dist.lacylights.com/releases/mcp/
Direct archive downloads
SHA256 checksums
latest.jsonmetadata
DynamoDB Registry:
Version tracking
Release metadata
Prerelease flags
Beta Testing Program
Want to help test new features? Install beta releases:
Check for betas: Visit GitHub Releases
Look for releases marked "Pre-release"
Version format:
X.Y.Zb[N]
Install beta:
# See "Install Beta for Testing" aboveReport 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 sceneStep 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 clashesStep 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 soliloquiesStep 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 shiftStep 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 appearancesStep 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 progressionStep 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 fadeStep 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 changesAdvanced 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 projectCollaborative 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 satisfiedAI-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
Module import errors
Ensure Node.js version is 18+ as specified in package.json
Use the
run-mcp.jswrapper script, notdist/index.jsdirectly
GraphQL connection errors
Verify your
lacylights-gobackend is running on port 4000Check the
LACYLIGHTS_GRAPHQL_ENDPOINTenvironment variable
OpenAI API errors
Ensure your
OPENAI_API_KEYis set in the.envfileVerify the API key has access to GPT-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
"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:
Option 1: Docker (Recommended)
# Start ChromaDB with Docker
docker-compose up -d chromadb
# Verify it's running
curl http://localhost:8000/api/v2/heartbeatOption 2: Local Installation
# Install ChromaDB
pip install chromadb
# Start the server
chroma run --host localhost --port 8000Then update your .env file:
# Uncomment these lines in .env
CHROMA_HOST=localhost
CHROMA_PORT=8000Integration 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 pointAdding New Tools
Create tool implementation in appropriate file under
src/tools/Add tool definition to
src/index.tsin theListToolsRequestSchemahandlerAdd tool handler in the
CallToolRequestSchemahandlerUpdate this README with tool documentation
Testing
npm testMCP Directory
License
MIT
Available Tools
24 toolsadd_cue_to_listB
Add a new cue to an existing cue list
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the new cue | |
| notes | No | Notes or description for the cue | |
| sceneId | Yes | Scene ID to use for this cue | |
| position | No | Position relative to reference cue | |
| cueListId | Yes | Cue list ID to add cue to | |
| cueNumber | Yes | Cue number (e.g., 1.5, 2.0) | |
| fadeInTime | No | Fade in time in seconds | |
| followTime | No | Auto-follow time in seconds (null for manual) | |
| fadeOutTime | No | Fade out time in seconds | |
| referenceCueNumber | No | Cue number to insert before/after |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| cueListId | Yes | Cue list ID to analyze | |
| includeRecommendations | No | Include improvement recommendations | |
| projectId | Yes | Project ID containing the cue list |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| analysisType | No | Type of capability analysis | general |
| fixtureId | No | Single fixture ID to analyze | |
| fixtureIds | No | Multiple fixture IDs to analyze |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| extractLightingCues | No | Extract specific lighting cues from the script | |
| scriptText | Yes | The theatrical script text to analyze | |
| suggestScenes | No | Generate scene suggestions based on analysis |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID to create cue sequence in | |
| sceneIds | Yes | Scene IDs to include in sequence | |
| scriptContext | Yes | Script context for the cue sequence | |
| sequenceName | Yes | Name for the cue sequence | |
| transitionPreferences | No |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| channelAssignment | No | How to assign channels: auto=find next available, manual=use provided startChannel, suggest=recommend placement | auto |
| description | No | Description of where this fixture is placed or its purpose | |
| manufacturer | Yes | Fixture manufacturer (e.g., "Chauvet", "Martin", "ETC") | |
| mode | No | Specific mode if the fixture has multiple modes | |
| model | Yes | Fixture model name | |
| name | Yes | Name for this fixture instance | |
| projectId | Yes | Project ID to add fixture to | |
| startChannel | No | Starting DMX channel (1-512). If not provided, will auto-assign | |
| tags | No | Tags for organization (e.g., ["front", "wash", "blue"]) | |
| universe | No | DMX universe number (typically 1-4) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| description | No | Project description | |
| name | Yes | Project name |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| confirmDelete | Yes | Confirm deletion of project and all its data | |
| projectId | Yes | Project ID to delete |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| actNumber | Yes | Act number to generate cues for | |
| cueListName | No | Optional name for the cue list | |
| existingScenes | No | Optional existing scene IDs to reference | |
| projectId | Yes | Project ID to work with | |
| scriptText | Yes | Script text for the act |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| designPreferences | No | ||
| fixtureFilter | No | ||
| projectId | Yes | Project ID to create scene in | |
| sceneDescription | Yes | Description of the scene to light | |
| sceneType | No | Type of scene: 'full' uses all fixtures (default), 'additive' only modifies specified fixtures | full |
| scriptContext | No | Optional script context for the scene |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID to analyze | |
| universe | No | Specific universe to analyze (if not provided, shows all) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| cueListId | Yes | Cue list ID to query | |
| filterBy | No | Optional filters to apply to the cue list | |
| includeSceneDetails | No | Include detailed scene information for each cue | |
| sortBy | No | Sort cues by cue number, name, or scene name | cueNumber |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| fixtureType | No | Optional fixture type filter | |
| includeDefinitions | No | Include available fixture definitions | |
| projectId | No | Optional project ID to filter fixtures |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID to get details for |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| includeDetails | No | Include fixture and scene counts |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| cueListId | Yes | Cue list ID to optimize | |
| optimizationStrategy | No | Optimization strategy to apply | smooth_transitions |
| projectId | Yes | Project ID containing the cue list |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| optimizationGoals | No | Goals for optimization | |
| projectId | Yes | Project ID containing the scene | |
| sceneId | Yes | Scene ID to optimize |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| cueId | Yes | ID of the cue to remove |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| cueListId | Yes | Cue list ID containing the cues | |
| cueReordering | Yes | Array of cue ID and new number pairs |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| fixtureSpecs | Yes | List of fixtures to assign channels for | |
| groupingStrategy | No | How to group fixture assignments | sequential |
| projectId | Yes | Project ID | |
| startingChannel | No | Channel to start assignments from | |
| universe | No | Universe to assign channels in |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| cueId | Yes | ID of the cue to update | |
| cueNumber | No | New cue number | |
| fadeInTime | No | New fade in time in seconds | |
| fadeOutTime | No | New fade out time in seconds | |
| followTime | No | New follow time (null to remove auto-follow) | |
| name | No | New name for the cue | |
| notes | No | New notes or description | |
| sceneId | No | New scene ID |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| cueListId | Yes | Cue list ID to update | |
| description | No | New description for the cue list | |
| name | No | New name for the cue list |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| description | No | New description for the fixture | |
| fixtureId | Yes | ID of the fixture instance to update | |
| manufacturer | No | New manufacturer (will find/create new definition if changed) | |
| mode | No | New mode name | |
| model | No | New model (will find/create new definition if changed) | |
| name | No | New name for the fixture | |
| startChannel | No | New starting DMX channel | |
| tags | No | New tags array | |
| universe | No | New DMX universe number |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| description | No | Optional new description for the scene | |
| fixtureValues | No | Optional fixture values to update | |
| name | No | Optional new name for the scene | |
| sceneId | Yes | Scene ID to update |
TDQS
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.
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.
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.
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.
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.
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.
24 tool updates
v1.0.0- First observed
add_cue_to_list - First observed
analyze_cue_structure - First observed
analyze_fixture_capabilities - First observed
analyze_script - First observed
create_cue_sequence - First observed
create_fixture_instance - First observed
create_project - First observed
delete_project - First observed
generate_act_cues - First observed
generate_scene - First observed
get_channel_map - First observed
get_cue_list_details - First observed
get_fixture_inventory - First observed
get_project_details - First observed
list_projects - First observed
optimize_cue_timing - First observed
optimize_scene - First observed
remove_cue_from_list - First observed
reorder_cues - First observed
suggest_channel_assignment - First observed
update_cue - First observed
update_cue_list - First observed
update_fixture_instance - First observed
update_scene
TDQS
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.
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.
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.
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
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
AI story development, screenplay editing, review, media, and export tools for BeatBandit projects.
Read and build visual moodboards, shot lists and lookbooks from an AI assistant.
Create, test, publish, and manage Dreamlit notification workflows from AI clients.
AI film lab for filmmakers: generate and review images/clips with input provenance, cost preflight
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables control of LIFX smart lights through natural language, including power control, color adjustment, lighting effects, and scene management using the LIFX HTTP API.992ISC
- AlicenseBqualityCmaintenanceAn 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.10014Apache 2.0
- AlicenseNot gradedqualityCmaintenanceTransforms 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.1AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceAnalyzes music and generates xLights light show sequences, compatible with any MCP-compatible AI tool.6MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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