Skip to main content
Glama

āš ļø Beta: This project is currently in beta. Features may change, and you may encounter bugs. Feedback and contributions are welcome!

xLights MCP Server

An MCP (Model Context Protocol) server that analyzes music and generates xLights light show sequences. Works with any MCP-compatible AI tool — GitHub Copilot CLI, Claude Desktop, Cursor, VS Code + Copilot Chat, Windsurf, Cline, and more.

Give it an .mp3, and it will analyze the beats, song structure, and energy — then generate a valid .xsq sequence file with effects placed across all of your light models, synced to the music


What It Does

šŸŽµ Audio Analysis

  • Beat & tempo detection — identifies every beat, downbeat, and bar boundary

  • Song structure — detects intro, verse, chorus, bridge, and outro sections

  • Frequency spectrum — bass, mid, and high energy curves over time

  • Energy profiling — loudness dynamics, peak detection, dynamic range

  • Source separation — isolate vocals, drums, bass, and other stems via Demucs (optional)

šŸ’” Sequence Generation

  • Generates valid .xsq files that open directly in xLights — no xLights GUI required during generation

  • Reads your actual show config — knows your models, controllers, channel counts, and model types

  • Intelligent effect selection — picks effects based on model type (arches get chases, trees get spirals, etc.) and musical features (beats → shockwaves, choruses → high energy, verses → gentle)

  • Theme-aware palettes — Christmas (red/green/gold) and Halloween (orange/purple) color schemes

  • Three generation modes:

    • Automatic — AI picks everything, you review in xLights

    • Guided — AI shows song structure, you choose effects per section

    • Template — define reusable effect recipes, AI places them on beat

  • Never overwrites — existing sequences are safe; generated files get a (generated N) suffix

šŸ“¦ Sequence Import & Remapping

  • Import community sequences — take any .xsq or .zip package from the xLights community and remap it to your show layout

  • Intelligent model matching — automatically maps imported models to yours by name, type, and pixel count

  • Zip package support — extracts audio, video, shader, and image assets; rewrites hardcoded file paths

  • Singing model awareness — singing face models only match to other singing models

  • Full mapping report — see exactly what matched, how, and what was skipped

  • Manual overrides — correct any mapping before the remapped sequence is generated

šŸ“” FPP Integration

  • Check status of your Falcon Pi Player

  • Upload sequences (.fseq + audio) to FPP

  • Manage playlists — list, start, stop

  • Works with FPP's REST API


Related MCP server: io.github.peterkolbe/ableton-for-ai

Prerequisites

  • Python 3.11+

  • uv (recommended) or pip

  • ffmpeg — for audio format handling (brew install ffmpeg on macOS, apt install ffmpeg on Linux)

  • xLights — installed with at least one show folder configured


Installation

Step 1: Clone the repository

git clone https://github.com/JohnBreault/xlights-mcp-server.git
cd xlights-mcp-server

Step 2: Create a virtual environment and install

uv venv
uv pip install -e .

Optional extras for enhanced features:

# Stem separation — isolates vocals/drums/bass for smarter sequencing (~2GB model download)
uv pip install -e ".[separation]"

# Lyrics/singing faces — transcribes vocals for lip-sync animation
uv pip install -e ".[lyrics]"

# Better beat detection
uv pip install -e ".[beats]"

# Everything
uv pip install -e ".[all]"

The legacy madmom dependency in beats (and all) may not build on modern Python/NumPy, including Windows with Python 3.14. Default installs do not build or install it; core beat detection uses librosa. The uv metadata override only avoids building madmom during dependency resolution, not when explicitly installing these extras.

Step 3: Show folder configuration

On first run, the server auto-detects your xLights show folders by scanning common locations:

OS

Locations checked

macOS

~/Library/Mobile Documents/com~apple~CloudDocs/xLights/, ~/Documents/xLights/

Windows

~/Documents/xLights/

Linux

~/Documents/xLights/, ~/xLights/, /opt/xLights/

It looks for directories containing xlights_rgbeffects.xml (the file xLights creates in every show folder).

If auto-detection doesn't find your folders, create or edit ~/.xlights-mcp/config.json:

{
  "show_folders": {
    "christmas": "/path/to/your/xLights/Christmas",
    "halloween": "/path/to/your/xLights/Halloween"
  },
  "active_show": "christmas",
  "fpp": {
    "host": "fpp.local",
    "port": 80
  }
}

Step 4: Connect to your AI tool

The server uses stdio transport — your AI tool launches it as a subprocess.

Add to ~/.copilot/mcp-config.json:

{
  "mcpServers": {
    "xlights": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/xlights-mcp-server", "xlights-mcp-server"]
    }
  }
}

Restart Copilot CLI after saving.

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "xlights": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/xlights-mcp-server", "xlights-mcp-server"]
    }
  }
}

Restart Claude Desktop after saving.

Add to your VS Code settings.json:

{
  "mcp": {
    "servers": {
      "xlights": {
        "command": "uv",
        "args": ["run", "--directory", "/path/to/xlights-mcp-server", "xlights-mcp-server"]
      }
    }
  }
}

Add to Cursor MCP settings (Settings → MCP Servers → Add):

  • Name: xlights

  • Command: uv

  • Args: run --directory /path/to/xlights-mcp-server xlights-mcp-server

Any tool that supports the Model Context Protocol can use this server. Point it at:

command: uv
args: run --directory /path/to/xlights-mcp-server xlights-mcp-server
transport: stdio

Replace /path/to/xlights-mcp-server with the actual path where you cloned the repo.


Usage

Once connected, interact with the server through natural language in your AI tool. Here are some example workflows:

Explore your show

> List my xLights shows
> Switch to the Halloween show
> List all my light models
> Show me the controllers
> What sequences do I have?
> Inspect the "Deck The Halls" sequence

Analyze a song

> Analyze the song ~/Music/Jingle Bell Rock.mp3
> Show me the song structure for ~/Music/Monster Mash.mp3
> Get the beat map for this song
> What's the energy profile look like?

Generate a sequence

> Create a sequence for ~/Music/Jingle Bell Rock.mp3
> Create a sequence for ~/Music/Jingle Bell Rock.mp3 using red and green colors
> Preview what a sequence would look like for this song before creating it

When generating, you'll be asked to choose a mode:

  • auto — fully automatic, AI picks effects and colors

  • guided — see the song structure first, then choose effects per section

  • template — apply saved effect recipes to detected sections

Import a community sequence

> Import the sequence ~/Downloads/Holly Jolly Christmas SD.zip to my show
> Import ~/Downloads/Christmas Time.xsq and show me the model mapping
> Import this sequence but map "Arch Left" to my "Arches-1" model

The importer supports both standalone .xsq files and .zip packages (which include audio, video assets, and the source show's model data). It automatically matches models from the imported sequence to your layout using:

  1. Exact name match → identical model names

  2. Similar words → shared words like "snowflake", "arch", "tree"

  3. Model type → same display_as type (e.g., both Arches)

  4. Pixel count → within 70% of each other

  5. Manual overrides → you choose specific mappings

Manage FPP (when controllers are online)

> Check the FPP status
> List playlists on FPP
> Start the Christmas playlist
> Stop playback

Available Tools

Show Management

Tool

Description

list_shows

List all configured xLights show folders

switch_show

Switch the active show folder

list_models

List all light models with type, controller, and category info

list_controllers

List controllers with IPs, protocols, and channel counts

list_sequences

List all .xsq sequence files in the active show

inspect_sequence

Show song info, duration, effects, and models used in a sequence

list_effects

List all available xLights effects with descriptions

Audio Analysis

Tool

Description

analyze_song

Full audio analysis: beats, structure, spectrum, energy

get_song_structure

Detect verse/chorus/bridge/intro/outro sections

get_beat_map

Get beat timestamps, downbeats, tempo, and onsets

get_energy_profile

Get loudness curve and bass/mid/high frequency band energy

Sequence Generation

Tool

Description

create_sequence

Generate a .xsq file from an .mp3 with effects on all models

preview_plan

Preview the generation plan without writing a file

Sequence Import & Remapping

Tool

Description

import_sequence

Import a .xsq or .zip sequence package and remap models to your layout

FPP Integration

Tool

Description

fpp_status

Check FPP connection and playback state

fpp_upload_sequence

Upload .fseq and audio to FPP

fpp_list_playlists

List all playlists on FPP

fpp_start_playlist

Start a playlist (with optional repeat)

fpp_stop

Stop current playback


How It Works

Effect Selection Logic

The server maps model types to appropriate effects:

Model Type

Best Effects

Arches

SingleStrand, Chase, ColorWash, Morph

Tree

Spirals, Pinwheel, Meteors, Circles

Single Line

Chase, Morph, SingleStrand, Shimmer

Poly Line

Chase, SingleStrand, Twinkle, Morph

Window Frame

Marquee, ColorWash, On, Curtain

Custom shapes

Shockwave, Circles, Plasma, Twinkle, Warp

And maps musical features to effect choices:

Musical Feature

Effects

Strong beats

Shockwave, Morph, Strobe

Rhythmic passages

SingleStrand, Chase, Bars, Marquee

High energy (chorus)

Chase, Meteors, SingleStrand

Low energy (verse)

Twinkle, Shimmer, ColorWash, Snowflakes

Sustained notes

Plasma, Pinwheel, Spirals, Galaxy

Transitions

Warp, Curtain, Morph

Intro/Outro

Curtain, ColorWash, Twinkle

File Format

Generated .xsq files are standard xLights XML containing:

  • <head> — song metadata, media file path, duration, timing (25ms frames)

  • <ColorPalettes> — themed color palettes for effects

  • <EffectDB> — deduplicated effect parameter definitions

  • <DisplayElements> — all models included in the sequence

  • <ElementEffects> — effect placements per model, per layer, with timing


Project Structure

xlights-mcp-server/
ā”œā”€ā”€ pyproject.toml
ā”œā”€ā”€ README.md
ā”œā”€ā”€ src/xlights_mcp/
│   ā”œā”€ā”€ server.py              # MCP server entry point & tool definitions
│   ā”œā”€ā”€ config.py              # Configuration management
│   ā”œā”€ā”€ audio/
│   │   ā”œā”€ā”€ analyzer.py        # Full analysis pipeline orchestrator
│   │   ā”œā”€ā”€ beats.py           # Beat/tempo/onset detection (librosa + madmom)
│   │   ā”œā”€ā”€ structure.py       # Song section detection (verse/chorus/bridge)
│   │   ā”œā”€ā”€ spectrum.py        # Frequency band & energy analysis
│   │   └── separator.py       # Demucs stem separation (optional)
│   ā”œā”€ā”€ xlights/
│   │   ā”œā”€ā”€ show.py            # Show folder parser (networks + models XML)
│   │   ā”œā”€ā”€ xsq_reader.py     # Parse existing .xsq sequences
│   │   ā”œā”€ā”€ xsq_writer.py     # Generate .xsq XML files
│   │   ā”œā”€ā”€ effects.py         # Effect library & model/music mappings
│   │   ā”œā”€ā”€ palettes.py        # Color palette definitions & themes
│   │   └── models.py          # Data models (Controller, LightModel, etc.)
│   ā”œā”€ā”€ sequencer/
│   │   └── engine.py          # Sequence generation engine (auto/guided/template)
│   └── fpp/
│       ā”œā”€ā”€ client.py          # FPP REST API client
│       ā”œā”€ā”€ upload.py          # Sequence upload to FPP
│       └── schedule.py        # Schedule management
└── tests/

Troubleshooting

MCP server not loading

  • Verify your MCP config file is valid JSON (no comments, no trailing commas)

  • Check the --directory path points to the repo root (where pyproject.toml is)

  • Restart your AI tool after config changes

  • Test manually: cd /path/to/xlights-mcp-server && uv run xlights-mcp-server — should start without errors

"No xLights show folders found"

  • Make sure xLights is installed and you've opened it at least once (it creates xlights_rgbeffects.xml in each show folder)

  • If your show folder is in a non-standard location, add it to ~/.xlights-mcp/config.json

"No models found" error

  • Verify the show folder contains xlights_networks.xml and xlights_rgbeffects.xml

  • Use list_shows to check which show is active and whether the path exists

Audio analysis is slow

  • First run downloads librosa data (~10MB); subsequent runs are faster

  • Demucs stem separation takes 30-60s per song on CPU; results are cached

  • Without optional deps, analysis takes ~5s per song

Generated sequence looks wrong in xLights

  • The .xsq is a starting point — tweak effects, timing, and palettes in xLights

  • Use inspect_sequence to review what was generated before opening

FPP connection fails

  • Verify FPP is powered on and on the same network

  • Check the hostname/IP in ~/.xlights-mcp/config.json

  • FPP tools gracefully report connection errors; core generation works fully offline


License

MIT

Available Tools

20 tools
add_show_folderA

Add an xLights show folder by path.

Use this to confirm a detected show folder or provide a custom path. The folder must contain an xlights_rgbeffects.xml file.

Args: path: Full filesystem path to the xLights show folder name: Optional display name for the show (derived from folder name if omitted)

NameRequiredDescriptionDefault
nameNo
pathYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It adds one important behavioral requirement (the folder must contain xlights_rgbeffects.xml), but does not describe side effects, permissions, or what happens on success/failure—critical for a mutation tool.

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

Conciseness5/5

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

The description is front-loaded with purpose, then usage, then prerequisite, then parameter details. Every sentence earns its place; no waste or redundancy.

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

Completeness4/5

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

For a simple two-parameter tool with no output schema, the description covers purpose, usage, prerequisite, and parameter semantics. It could mention whether adding a folder switches to it or persists immediately, but the essentials are present.

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

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates by explaining both parameters: 'path: Full filesystem path to the xLights show folder' and 'name: Optional display name for the show (derived from folder name if omitted).' This gives clear meaning beyond the bare schema.

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

Purpose4/5

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

States a specific verb and resource: 'Add an xLights show folder by path.' Clear what the tool does, but it does not explicitly differentiate from sibling tools like switch_show or list_shows, so it falls short of a 5.

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

Usage Guidelines4/5

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

Provides clear when-to-use guidance: 'Use this to confirm a detected show folder or provide a custom path.' It also states a prerequisite (folder must contain xlights_rgbeffects.xml). However, no explicit alternatives or exclusions are mentioned, keeping it at a 4.

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

analyze_songB

Analyze a music file for light show sequencing.

Performs full audio analysis: beat detection, song structure, frequency spectrum, energy profile, and optionally source separation.

Args: mp3_path: Path to the .mp3 file to analyze

NameRequiredDescriptionDefault
mp3_pathYes

TDQS

B3.3/5.0
Behavior3/5

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

No annotations exist, so the description carries the full load. It does disclose the analysis dimensions, which is real behavioral content, but omits whether results are persisted and reusable, how long a full song analysis takes, and what happens on unsupported/corrupt files. It also mentions 'optionally source separation' with no parameter to enable it, leaving a dangling ambiguity.

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

Conciseness4/5

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

Front-loaded with the purpose, then the analysis list, then the arg. The Args block mostly restates the schema but is short enough to be harmless. Slightly clipped line breaks aside, every sentence contributes.

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

Completeness3/5

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

With no output schema and no annotations, the description must cover both safety profile and return shape. It names the analysis categories but not the structure of what comes back (maps, timings, keyed by second?), and never says whether the result is cached for the sibling getters. Adequate to invoke, insufficient to use the result confidently.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate — and for a single parameter it largely does, clarifying that mp3_path is a filesystem path and that the format must be .mp3. It does not say whether relative or absolute paths are accepted or whether the file must be pre-uploaded.

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

Purpose4/5

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

States a specific verb+resource (analyze a music file) and enumerates the concrete artifacts produced: beat detection, structure, spectrum, energy profile, optional source separation. This distinguishes it from the narrower sibling getters (get_beat_map, get_song_structure, get_energy_profile), though it never explicitly says it is the upstream step that feeds them.

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

Usage Guidelines2/5

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

No when-to-use guidance at all. With siblings like get_beat_map and get_energy_profile present, an agent needs to know whether analyze_song must run first or whether those tools read an existing analysis — nothing here says. No preconditions, no cost/latency warning for what is clearly an expensive operation.

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

create_sequenceA

Create an xLights sequence from a music file.

Analyzes the audio and generates a .xsq file with effects placed on your light models according to the selected generation mode.

Args: mp3_path: Path to the .mp3 file mode: Generation mode — "auto" (AI picks everything), "guided" (interactive), or "template" (apply saved recipes) palette_hint: Optional color hint (e.g., "red and green", "orange and purple") theme: Optional theme hint (e.g., "christmas", "halloween", "energetic") vocal_assignments: Optional mapping of model names to vocal track names. Use {"all": "<track_name>"} to assign one track to all singing models, or map individual models like {"Snowman": "Vocals", "Bulb Blue": "Full Mix Vocals"}. If omitted and singing models are detected, returns available models and tracks so you can prompt the user for assignments. show_name: Which show folder to generate the sequence in (e.g., "christmas", "halloween"). If omitted and multiple shows exist, returns available shows so you can ask the user which one to use.

NameRequiredDescriptionDefault
modeNoauto
themeNo
mp3_pathYes
show_nameNo
palette_hintNo
vocal_assignmentsNo

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose real behavior: audio analysis happens, a .xsq file is written, and omitting show_name/vocal_assignments triggers a multi-turn clarification response rather than a failure. However, it never says whether an existing sequence is overwritten, what permissions or show-folder preconditions apply, or that audio analysis is long-running — meaningful gaps for a file-writing operation.

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

Conciseness4/5

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

Front-loaded with the one-line purpose, then a behavioral sentence, then per-parameter detail — good ordering. The vocal_assignments entry is the longest but its length is justified by two distinct formats; overall there is little filler.

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

Completeness4/5

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

For a six-parameter generative tool with no annotations and no output schema, the description covers inputs, mode semantics, and the clarification-return behavior well. It is only slightly incomplete on the success return (path to the generated .xsq, effect summary) and on overwrite semantics.

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

Parameters5/5

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

Schema description coverage is 0%, yet the description documents all six parameters: mode's three accepted values (which the schema does not enumerate), palette_hint and theme with example strings, show_name with example folder names, and vocal_assignments with two concrete mapping formats ('{"all": ...}' vs per-model). It fully compensates for the empty schema.

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

Purpose5/5

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

States a specific verb and resource ('Create an xLights sequence') plus the source input (music file) and the concrete artifact produced (.xsq with effects on light models). This clearly separates it from siblings such as remap_sequence, preview_plan, analyze_song, and inspect_sequence.

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

Usage Guidelines4/5

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

The mode parameter is explained in terms of intent — 'auto' (AI picks everything), 'guided' (interactive), 'template' (apply saved recipes) — which is genuine when-to-use guidance. It also explains the fallback flow when show_name or vocal_assignments are omitted. It stops short of naming alternatives like preview_plan for a dry run or analyze_song for analysis-only.

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

fpp_list_playlistsA

List all playlists on the Falcon Pi Player.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. 'List' strongly implies a safe read-only operation, but nothing is said about return shape, ordering, pagination, or what happens with an empty player. For a zero-parameter read tool this is a modest gap, not a severe one.

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

Conciseness5/5

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

A single front-loaded sentence with no filler. Every word contributes to identifying the resource and the action.

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

Completeness4/5

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

For a parameterless lister with no output schema and no annotations, the definition covers the essentials. It could add one line on what a returned playlist contains (name, track count) or ordering, but an agent can invoke it correctly as written.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter meaning for the description to add; the baseline of 4 applies.

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

Purpose4/5

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

The description gives a specific verb ('List') and resource ('playlists on the Falcon Pi Player'), which is enough to separate it from siblings like list_shows, list_sequences, and fpp_start_playlist. It stops short of explicitly naming a sibling boundary, so it lands at 4 rather than 5.

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

Usage Guidelines3/5

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

Usage is only implied: 'List all playlists' suggests discovery before fpp_start_playlist, but the description never says when to use this versus the other list_* tools or when it is unnecessary. 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.

fpp_start_playlistC

Start a playlist on the Falcon Pi Player.

Args: playlist_name: Name of the playlist to start repeat: Whether to loop the playlist

NameRequiredDescriptionDefault
repeatNo
playlist_nameYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden and falls well short. It does not say whether starting a playlist interrupts currently playing media, whether it fails or queues when one is already running, whether the call blocks or returns immediately, or what errors occur for an unknown playlist name.

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

Conciseness4/5

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

The purpose sentence is front-loaded and the args block is compact and scannable. The args section duplicates parameter names rather than adding much, but it costs little space.

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

Completeness2/5

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

With no annotations and no output schema, the description is the only source of behavioral detail, and it omits playback-interruption semantics and return/error information entirely. For a device-control action tool, an agent cannot tell what happens on success or failure.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate; it does list both parameters and clarifies the non-obvious one ('repeat' means loop the playlist). However, 'playlist_name: Name of the playlist to start' is nearly a restatement, and nothing is said about expected name format, case sensitivity, or whether the playlist must pre-exist.

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

Purpose4/5

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

The first sentence states a specific verb and resource: start a playlist on the Falcon Pi Player. That is enough to distinguish it from fpp_stop and fpp_list_playlists, though the description never names those siblings explicitly to reinforce the routing.

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

Usage Guidelines2/5

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

There is no statement of when to use this versus fpp_stop, fpp_list_playlists, or switch_show, and no prerequisites such as the playlist needing to already exist on the device. The agent must infer all usage conditions from the name alone.

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

fpp_statusA

Check Falcon Pi Player connection status and current state.

Returns FPP version, current playlist, scheduler state, etc.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden; 'Check' correctly signals a read-only operation, and it names some returned fields (version, playlist, scheduler state). It says nothing about what happens when the FPP device is unreachable, whether it blocks/times out, or what error shape returns — meaningful gaps for a connectivity probe.

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

Conciseness4/5

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

Two short sentences, front-loaded with the action and resource, with the return summary immediately after. The 'etc.' is the only loose thread and slightly undercuts the otherwise tight phrasing.

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

Completeness3/5

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

There is no output schema, so the description must define the return value, and it only partially does ('FPP version, current playlist, scheduler state, etc.'). For a simple zero-param status check this is nearly sufficient, but the 'etc.' and the absence of any offline/failure behavior leave the agent guessing about the result shape.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The description correctly implies no arguments are needed by framing this as a pure status read.

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

Purpose4/5

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

States a specific verb ('Check') and resource ('Falcon Pi Player connection status and current state'), which clearly separates it from the mutation siblings fpp_start_playlist, fpp_stop, and fpp_upload_sequence. The trailing 'etc.' leaves the exact state surface slightly fuzzy, but the core purpose is unambiguous.

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

Usage Guidelines3/5

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

No explicit when-to-use or when-not-to-use statement and no named alternative. Usage is only implied: an agent would infer it should call this to verify connectivity or current playback state before issuing start/stop commands. That inference is reasonable but not stated.

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

fpp_stopB

Stop current playback on the Falcon Pi Player.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It signals a state-changing control action but says nothing about whether it is graceful or immediate, what happens to the playlist position or queue, whether playback can be resumed, or what is returned or errors when nothing is playing.

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

Conciseness4/5

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

A single front-loaded sentence with zero waste. It is efficient, though arguably too terse given the missing behavioral context noted elsewhere.

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

Completeness3/5

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

For a zero-parameter control command with no output schema, the definition is minimally adequate — the agent knows what it triggers. It is incomplete about effects on playback state and on the relationship to the start/status siblings, which matters for correct invocation sequencing.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4; the empty schema means there is nothing further for the description to disambiguate. No hidden inputs are implied by the text.

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

Purpose4/5

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

Specific verb plus resource: 'Stop current playback on the Falcon Pi Player.' An agent can distinguish it from fpp_status (query state) and fpp_start_playlist (start). It stops short of naming any sibling explicitly, so it earns a 4 rather than a 5.

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

Usage Guidelines2/5

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

No when-to-use, prerequisites, or alternatives are offered. It doesn't say how this relates to fpp_start_playlist/fpp_list_playlists, or whether it halts a playlist, an uploaded sequence, or any active playback indiscriminately. Usage is only weakly implied by the verb.

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

fpp_upload_sequenceC

Upload a sequence (.fseq) and optional audio to Falcon Pi Player.

Args: fseq_path: Path to the .fseq file to upload audio_path: Optional path to the audio file (.mp3/.ogg)

NameRequiredDescriptionDefault
fseq_pathYes
audio_pathNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations, so the description carries the full burden. It does not disclose that this is a mutating remote upload, whether an existing sequence with the same name is overwritten, where files land on the device, whether auth/network access is required, or what happens on partial failure (e.g., sequence succeeds but audio fails).

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

Conciseness4/5

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

Two short lines plus an Args block, front-loaded with the verb and resource. Efficient and scannable, with no filler.

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

Completeness2/5

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

For a write operation against a remote device with no annotations and no output schema, the description should say something about the result (does it return a confirmation or path?) and about overwrite/destination semantics. Those gaps leave the agent guessing about side effects.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate; it does document both parameters and adds format constraints (.mp3/.ogg) that the schema lacks. However, it never clarifies whether paths are on the local machine or the FPP device, nor whether the audio must match sequence length or naming.

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

Purpose4/5

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

States a specific verb and resource: upload a .fseq sequence (plus optional audio) to a Falcon Pi Player. It is clearly distinguishable from the read-oriented FPP siblings (fpp_status, fpp_list_playlists, fpp_start_playlist), though it never explicitly names how it differs.

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

Usage Guidelines2/5

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

No statement of when to use this versus alternatives, no prerequisites (must the sequence exist locally? must a playlist/show exist first?), and no note on ordering relative to fpp_start_playlist. Usage is only inferable from the tool name.

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

get_beat_mapC

Get beat and downbeat timestamps for a song.

Args: mp3_path: Path to the .mp3 file

NameRequiredDescriptionDefault
mp3_pathYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries full behavioral burden and discloses very little: it doesn't say whether this performs expensive audio analysis, whether results are cached, or what the return looks like. Only 'beat and downbeat timestamps' hints at output content.

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

Conciseness4/5

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

One-sentence purpose plus a short args block, front-loaded with the core action. No filler, though the 'Args:' boilerplate is slightly redundant for a single self-named parameter.

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

Completeness3/5

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

A simple one-parameter tool, but with no output schema the description should at least sketch the return shape (e.g. list of timestamps in seconds). The gap is noticeable but not crippling.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate; it adds that mp3_path is a path to a .mp3 file, which is useful format specificity beyond the bare 'Mp3 Path' title. It does not clarify absolute vs relative paths or whether the file must be local.

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

Purpose4/5

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

States a specific verb and resource: fetch beat and downbeat timestamps for a song. That is distinguishable from analysis siblings like get_energy_profile and get_song_structure, though it doesn't name them explicitly.

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

Usage Guidelines2/5

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

No indication of when to call this versus analyze_song, get_song_structure, or get_energy_profile, and no prerequisites such as whether the file must exist or be pre-analyzed.

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

get_energy_profileB

Get energy and frequency band analysis for a song.

Returns loudness curve and bass/mid/high energy over time.

Args: mp3_path: Path to the .mp3 file

NameRequiredDescriptionDefault
mp3_pathYes

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the shape of the output (loudness curve plus bass/mid/high energy over time), implying a read-only analysis. It says nothing about runtime cost (audio analysis is typically slow), file-read requirements, or failure modes for invalid paths, which are the meaningful behavioral gaps here.

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

Conciseness4/5

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

Two sentences of substance, front-loaded with the purpose, followed by the return summary. The trailing Args block is mild boilerplate that restates the single parameter, but the whole definition is short enough that nothing is costly.

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

Completeness3/5

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

There is no output schema, so the description must convey return values, and it does so only at a high level — no units, no data structure, no indication of time resolution or sampling. For a one-parameter analysis tool this is workable but leaves the agent guessing what it will actually receive back.

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

Parameters3/5

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

Schema coverage is 0% — the property carries only a title, no description — so the docstring's 'mp3_path: Path to the .mp3 file' is the sole documentation, adding the file-type constraint. It does not clarify whether the path is absolute or relative, or whether the file must already be uploaded/registered with the host application.

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

Purpose4/5

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

States a specific verb and resource ('Get energy and frequency band analysis for a song') and adds what the output covers (loudness curve, bass/mid/high energy over time), which separates it from siblings like get_beat_map or get_song_structure. It never explicitly contrasts itself with analyze_song, which is the closest neighbor, so it stops short of a 5.

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

Usage Guidelines2/5

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

No guidance on when to choose this over analyze_song, get_beat_map, or get_song_structure, all of which plausibly operate on the same mp3_path input. The reader must infer the distinction from the noun 'energy' alone.

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

get_song_structureC

Get the verse/chorus/bridge structure of a song.

Args: mp3_path: Path to the .mp3 file

NameRequiredDescriptionDefault
mp3_pathYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries full behavioral burden and discloses almost nothing: no statement that this is a read-only/local analysis, no cost or runtime hints for audio processing, no requirements about the file existing or supported formats. Only the .mp3 extension expectation is implied.

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

Conciseness4/5

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

The core sentence is front-loaded and wastes no words. The 'Args:' block is a thin docstring artifact rather than harmful padding, but it is slightly redundant formatting.

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

Completeness3/5

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

For a one-parameter analysis tool with no output schema, the description should clarify what the returned 'structure' looks like (e.g., labeled sections with timestamps). That return-shape gap is the main missing piece; inputs are adequately covered.

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

Parameters3/5

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

Schema coverage is 0% and the single parameter has no schema description, so the description must compensate. It does state the parameter is a path to the .mp3 file, adding the format constraint, but gives no detail on relative vs absolute paths or validation behavior.

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

Purpose4/5

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

The description names a specific verb and resource ('get the verse/chorus/bridge structure of a song'), which is concrete enough to separate it from siblings like get_energy_profile or get_beat_map. It stops short of explicitly naming those alternatives, so it doesn't reach a 5.

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

Usage Guidelines2/5

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

There is no guidance on when to choose this over analyze_song, get_beat_map, or get_energy_profile, all of which operate on songs. An agent must infer the boundary from the tool names alone.

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

inspect_sequenceA

Inspect an existing xLights sequence file.

Shows the song info, duration, models used, and effect summary.

Args: sequence_name: Name of the sequence (without .xsq extension)

NameRequiredDescriptionDefault
sequence_nameYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden; it does signal a non-mutating operation ("Inspect", "Shows") and names the categories of information returned. It does not say what happens if the file is missing, whether effects are truncated/summarized, or anything about cost or size for large sequences.

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

Conciseness4/5

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

Two short sentences front-load the purpose and output content, then the argument note. The docstring-style "Args:" block is slightly redundant for a single parameter but carries real format information, so it earns its place.

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

Completeness4/5

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

For a one-parameter read tool with no output schema, the description tells the agent what the response will contain and how to format the filename, which is sufficient to call it correctly. Only the error/precondition behavior is left unstated.

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

Parameters4/5

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

Schema description coverage is 0% and the schema only labels the field "Sequence Name", so the description must compensate. It does: the only parameter is explained as the sequence name without the .xsq extension, which is the crucial format detail an agent would otherwise get wrong.

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

Purpose4/5

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

States a specific verb (inspect) and resource (an existing xLights sequence file), then enumerates what it returns: song info, duration, models used, effect summary. This clearly separates it from sibling write/list tools like create_sequence, remap_sequence and list_sequences, though it never names an alternative explicitly.

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

Usage Guidelines3/5

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

The word "existing" implies the sequence must already be present and that this is the read/detail path, but there is no explicit when-to-use, when-not-to-use, or pointer to a sibling such as list_sequences for discovery. Usage is inferable rather than stated.

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

list_controllersA

List all controllers configured in the active xLights show.

Returns controller names, IPs, protocols, and channel counts.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses the return contents (names, IPs, protocols, channel counts), which implies a read-only operation, but it says nothing about whether the tool contacts controllers over the network (and could be slow or time out) or about behavior when no show is configured.

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

Conciseness5/5

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

Two tight sentences: the action and scope first, then the return shape. Nothing is wasted and the important information is front-loaded.

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

Completeness4/5

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

For a zero-parameter listing tool with no output schema, the description covers the essential gap by enumerating the returned fields. The only omission is edge-case behavior, such as what is returned when no show is active.

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

Parameters4/5

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

The tool takes zero parameters and the schema is empty, so there is nothing for the description to elaborate on. Baseline 4 applies for a parameterless tool.

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

Purpose4/5

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

The description gives a specific verb and resource ("List all controllers") and scopes it to the active xLights show, which distinguishes it from siblings like list_models or list_sequences by the resource noun. It does not explicitly contrast itself with those siblings, so it stops just short of a 5.

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

Usage Guidelines3/5

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

Usage is only implied by the phrase "active xLights show" — the agent can infer a show must be loaded first, but there is no explicit when-to-use, no named alternative, and no statement about what happens when no show is active.

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

list_effectsA

List all available xLights effects with descriptions.

Returns effect names, descriptions, and which model types they work best on.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

There are no annotations, so the description carries the burden. It discloses the return contents (names, descriptions, model compatibility), which is useful, but says nothing about whether the catalog is static or version-dependent, or whether effects vary by show or license, and there is no output schema to fall back on.

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

Conciseness5/5

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

Two short sentences, purpose first and return content second, with no filler or repetition.

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

Completeness4/5

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

For a zero-argument, read-only list tool with no output schema, the description covers what the agent needs to call it and what comes back. The missing piece is whether the effect catalog is static or varies by xLights version or environment.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. The description correctly implies the call needs no arguments and is a full enumeration rather than filtered.

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

Purpose4/5

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

States a specific verb and resource: 'List all available xLights effects'. The domain is clear and it is not confusable with list_models, list_controllers, or list_sequences, though it never explicitly differentiates itself from them.

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

Usage Guidelines3/5

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

It describes a discovery/catalog lookup but gives no explicit when-to-use condition, no exclusions, and no pointer to a sibling such as inspect_sequence for effect usage data. Usage is only implied by 'all available'.

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

list_modelsB

List all light models in the active xLights show.

Returns model names, types, controller assignments, and channel info.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full behavioral burden. It implies a read-only listing via 'List' and scopes to the active show, but does not state permissions, pagination, ordering, or any failure modes.

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

Conciseness4/5

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

The description is two tight sentences and front-loads the primary action. The second sentence adds useful return-field context without padding, though it could be slightly more structured.

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

Completeness3/5

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

For a zero-parameter listing tool with no annotations and no output schema, the description gives the core scope and a partial return-value summary. It is minimally adequate, but without annotations it should explicitly confirm read-only behavior and say more about the returned data.

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

Parameters4/5

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

The tool has zero parameters, so parameter semantics has a baseline of 4. The description appropriately does not waste space discussing parameters.

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

Purpose4/5

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

The description uses a specific verb and resource ('List all light models') and scopes it to the active xLights show. It clearly distinguishes models from other listed resources like controllers, sequences, and effects, though it does not explicitly contrast with sibling list tools.

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

Usage Guidelines2/5

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

Usage is only implied by 'List all light models in the active xLights show.' There is no explicit guidance on when to use this versus list_controllers, list_sequences, or inspecting a sequence, nor any exclusions or prerequisites.

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

list_sequencesA

List all sequences (.xsq files) in the active show folder.

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must carry behavioral disclosure. "List" implies a read-only operation and the active show folder scope is useful, but the description does not state prerequisites such as an active show being selected, what happens if none is active, or the return shape.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no wasted words. It states the action, file type, and scope immediately.

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

Completeness4/5

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

For a zero-parameter listing tool with no output schema, the description is nearly complete: it says what is listed and where. It could be improved by mentioning the return format or the active-show prerequisite, but the core call context is sufficient.

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

Parameters4/5

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

The tool has zero parameters, so there are no parameter semantics to document. Per the baseline for parameterless tools, a 4 is appropriate because the schema burden is minimal.

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

Purpose5/5

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

The description uses a specific verb and resource: "List all sequences (.xsq files)" and scopes it to the "active show folder." This clearly distinguishes it from show-level tools like list_shows and sequence-detail tools like inspect_sequence without requiring the schema.

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

Usage Guidelines3/5

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

Usage is implied by the scoped phrasing "in the active show folder," but the description does not explicitly say when to use this versus inspect_sequence, list_shows, or create_sequence. It provides enough context to infer the basic use case, but no explicit alternatives or exclusions.

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

list_showsA

List all configured xLights show folders.

Returns the available show folders (e.g., Christmas, Halloween) and indicates which one is currently active.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations exist, so the description carries the full disclosure burden. 'List' implies a non-mutating read, and the description usefully discloses what is returned, but it says nothing about side effects, permissions, or how 'active' is determined. Adequate but with clear gaps for a zero-annotation tool.

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

Conciseness5/5

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

Two short sentences with zero waste: the first states the action, the second front-loads the return shape. Nothing is redundant or padded.

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

Completeness5/5

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

Although there is no output schema, the description compensates by describing exactly what the call yields (available show folders and the active one). For a parameterless read tool, an agent has everything needed to call and interpret it.

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

Parameters4/5

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

The tool takes zero parameters and the schema is an empty object, so there is nothing to disambiguate. The baseline for a parameterless tool applies, with no parameter-level confusion possible.

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

Purpose4/5

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

The description states a specific verb and resource ('List all configured xLights show folders') and even characterizes the return payload (folder names plus which is active). It does not explicitly name a sibling such as switch_show, so there is no direct sibling differentiation, but the read-only inspection scope is unambiguous.

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

Usage Guidelines3/5

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

Usage is implied: an agent can infer this is the discovery step before switch_show, since the result reveals the active show. However, no explicit when-to-use statement or named alternative (e.g., 'use switch_show to change the active show') is provided.

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

preview_planA

Preview the sequence generation plan without creating a file.

Shows what effects would be placed on which models, based on the audio analysis and selected mode.

Args: mp3_path: Path to the .mp3 file mode: Generation mode — "auto", "guided", or "template" show_name: Which show folder to preview against. If omitted and multiple shows exist, returns available shows so you can ask the user.

NameRequiredDescriptionDefault
modeNoauto
mp3_pathYes
show_nameNo

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral disclosure. It usefully states that no file is created and that omitting show_name with multiple shows returns available shows instead of a plan, but it does not describe permissions, error behavior, or output structure beyond a high-level summary.

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

Conciseness4/5

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

The description is front-loaded with the core purpose and the no-file behavior, then uses a concise Args block. It is appropriately sized for a preview tool, though the parameter block could be slightly tighter.

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

Completeness3/5

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

There is no output schema and no annotations, so the description should do more to explain what the preview returns. It says the plan shows effects on models, but does not describe the output shape or whether it includes counts, warnings, or validation details, leaving an agent only partially prepared to interpret the result.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It documents all three parameters: mp3_path as a path to an .mp3, mode with the otherwise undocumented values 'auto', 'guided', and 'template', and show_name including the important fallback behavior when omitted.

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

Purpose5/5

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

The description states a specific verb and resource ('Preview the sequence generation plan') and immediately clarifies the key scope distinction: it does not create a file. The second sentence explains what the preview contains ('what effects would be placed on which models'), making the purpose distinct from write-oriented siblings like create_sequence.

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

Usage Guidelines3/5

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

The phrase 'without creating a file' implies this is the safe inspection step before generation, but the description never explicitly names create_sequence or says when to prefer this tool over analyzing the song directly. The show_name fallback guidance is useful, but overall usage guidance is implied rather than stated.

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

remap_sequenceA

Import a sequence from a different show layout and remap it to your models.

Accepts a .xsq file or .zip package from the xLights community. Automatically matches imported models to your show's models using name similarity, model type, and pixel count. Generates a new .xsq with effects remapped to your layout.

Args: import_path: Path to the .xsq or .zip file to import. overrides: Optional dict mapping imported model names to your model names. These take precedence over automatic matching. pixel_threshold: Similarity threshold for pixel count matching (0.0-1.0). Default 0.70 means models must have at least 70% pixel count similarity. show_name: Which show folder to import into (e.g., "christmas", "halloween"). If omitted and multiple shows exist, returns available shows so you can ask the user which one to use.

Returns: Dict with mapping report, output path, and summary statistics.

NameRequiredDescriptionDefault
overridesNo
show_nameNo
import_pathYes
pixel_thresholdNo

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the matching algorithm (name similarity, model type, pixel count), that overrides take precedence over automatic matching, and that a new .xsq is generated rather than an existing one modified. It omits whether an existing output file can be overwritten, where the file is written, and whether the operation is reversible.

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

Conciseness5/5

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

Purpose is front-loaded in the first sentence, then structured Args/Returns blocks for the detail. No sentence is filler — even the algorithm note and the multiple-shows fallback earn their place by changing agent behavior.

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

Completeness4/5

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

No output schema exists, but the Returns section describes the mapping report, output path, and summary statistics, so the agent knows what comes back. Remaining gaps are about file-system side effects (output location, overwrite policy) for what is effectively a write operation.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate entirely, and it does: each of the four parameters gets meaning, the pixel_threshold gets a range and default rationale (0.70 = at least 70% pixel similarity), and overrides gets precedence semantics. This is meaningfully more than the bare schema titles provide.

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

Purpose5/5

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

States a specific verb+resource ("Import a sequence ... and remap it to your models") with the precise scope: from a different show layout into the user's own models. This clearly distinguishes it from siblings like create_sequence and inspect_sequence, which do not perform cross-layout remapping.

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

Usage Guidelines4/5

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

The opening sentence establishes the use case (importing a sequence authored against another show's layout), and the show_name text explains the fallback behavior when multiple shows exist. It never names an explicit alternative or a when-not-to-use condition, so the agent must infer routing versus create_sequence.

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

switch_showC

Switch the active xLights show folder.

Args: show_name: Name of the show to activate (e.g., "christmas", "halloween")

NameRequiredDescriptionDefault
show_nameYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden. It implies a state mutation ("switch the active show folder") but says nothing about persistence, whether the prior show stays configured, what happens if show_name is unknown, or whether the change requires the app to be running. For a mutation tool with zero annotation coverage these are significant gaps.

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

Conciseness4/5

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

The core sentence is front-loaded and wastes nothing; the examples add useful specificity. The "Args:" block is boilerplate but small enough not to be a burden.

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

Completeness3/5

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

With no annotations, no output schema, and no parameter documentation in the schema, the description is the sole source of information. It covers the happy path but omits failure modes and side effects, leaving the agent unable to predict the result of a bad or missing show name.

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

Parameters3/5

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

Schema description coverage is 0%, but there is only one parameter and the description explains it as the name of the show to activate, with concrete examples ("christmas", "halloween"). This compensates partially, though it does not say whether the name must match an existing folder exactly or whether case matters.

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

Purpose4/5

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

The description gives a specific verb and resource ("Switch the active xLights show folder"), which unambiguously describes what the tool does. It contrasts implicitly with siblings like list_shows and add_show_folder, though it never names an alternative. Clear purpose but no explicit sibling differentiation.

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

Usage Guidelines2/5

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

The description provides example show names but no guidance on when to use this tool versus list_shows (to discover names) or add_show_folder (to create one first). No prerequisites or error conditions are stated. The agent must infer the workflow.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 20 tool updatesv0.1.0
    • First observedadd_show_folder
    • First observedanalyze_song
    • First observedcreate_sequence
    • First observedfpp_list_playlists
    • First observedfpp_start_playlist
    • First observedfpp_status
    • First observedfpp_stop
    • First observedfpp_upload_sequence
    • First observedget_beat_map
    • First observedget_energy_profile
    • First observedget_song_structure
    • First observedinspect_sequence
    • First observedlist_controllers
    • First observedlist_effects
    • First observedlist_models
    • First observedlist_sequences
    • First observedlist_shows
    • First observedpreview_plan
    • First observedremap_sequence
    • First observedswitch_show

TDQS

B3.4/5.0

Scored across 20 tools

Disambiguation4/5

Most tools target clearly distinct resources or actions (show management, sequence inspection, FPP control). The main overlap is analyze_song, which aggregates beat, structure, and energy analysis that are also exposed as separate tools, though the descriptions clarify the distinction.

Naming Consistency4/5

The set predominantly uses snake_case verb_noun names such as switch_show, list_models, create_sequence, and remap_sequence. Minor deviations like fpp_status and fpp_stop are acceptable because the fpp_ prefix consistently groups FPP-related tools.

Tool Count3/5

With 20 tools, the surface is broad but near the heavy end for a single MCP server. The tools are mostly justified by the domain, but the aggregate/granular audio-analysis tools add some duplication that inflates the count.

Completeness4/5

The server covers the core workflow well: audio analysis, show/model/sequence inspection, sequence generation and preview, remapping, upload to FPP, and playlist control. Minor gaps remain, such as no sequence deletion/update, no FPP playlist creation, and no explicit fseq rendering/export step.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    Connects Ableton Live to AI through MCP, enabling prompt-assisted music production with extended tools and a 33-personality style system for generating parts in various artist styles.
    62
    50 PyPI
    5
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Connects AI/LLM tools to Ableton Live through 440+ MCP tools spanning tracks, clips, devices, mixer, MIDI mapping, plugin management, video integration, setlists, performance monitoring, and audio analysis. Enables natural-language music production and real-time live show control, including scene firing, preset recall, and emergency stop.
    MIT
  • A
    license
    C
    quality
    A
    maintenance
    Enables Claude or any AI agent to operate Live 12 Intro end to end: creating tracks and scenes, writing and quantizing MIDI clips, loading audio onto the Arrangement timeline, setting device parameters in real units, drawing clip automation, mixing with real sidechain, and rendering or analyzing audio so the agent can check its own work. It exposes 57 tools over MCP or a local JSON socket, working within the stock Intro edition's 16-track, 16-scene limits.
    57
    MIT