xLights MCP Server
Allows interaction with the xLights MCP server through Windsurf (by Codeium) for music analysis and light show sequence generation.
Allows interaction with the xLights MCP server through GitHub Copilot CLI for music analysis and light show sequence generation.
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., "@xLights MCP Serveranalyze beats.mp3 and generate a Halloween sequence"
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.
⚠️ 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
.xsqfiles that open directly in xLights — no xLights GUI required during generationReads 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
.xsqor.zippackage from the xLights community and remap it to your show layoutIntelligent 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: flai-mcp
Prerequisites
Python 3.11+
uv (recommended) or pip
ffmpeg — for audio format handling (
brew install ffmpegon macOS,apt install ffmpegon 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-serverStep 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]"Step 3: Show folder configuration
On first run, the server auto-detects your xLights show folders by scanning common locations:
OS | Locations checked |
macOS |
|
Windows |
|
Linux |
|
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:
uvArgs:
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: stdioReplace /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" sequenceAnalyze 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 itWhen 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" modelThe 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:
Exact name match → identical model names
Similar words → shared words like "snowflake", "arch", "tree"
Model type → same
display_astype (e.g., both Arches)Pixel count → within 70% of each other
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 playbackAvailable Tools
Show Management
Tool | Description |
| List all configured xLights show folders |
| Switch the active show folder |
| List all light models with type, controller, and category info |
| List controllers with IPs, protocols, and channel counts |
| List all |
| Show song info, duration, effects, and models used in a sequence |
| List all available xLights effects with descriptions |
Audio Analysis
Tool | Description |
| Full audio analysis: beats, structure, spectrum, energy |
| Detect verse/chorus/bridge/intro/outro sections |
| Get beat timestamps, downbeats, tempo, and onsets |
| Get loudness curve and bass/mid/high frequency band energy |
Sequence Generation
Tool | Description |
| Generate a |
| Preview the generation plan without writing a file |
Sequence Import & Remapping
Tool | Description |
| Import a |
FPP Integration
Tool | Description |
| Check FPP connection and playback state |
| Upload |
| List all playlists on FPP |
| Start a playlist (with optional repeat) |
| 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
--directorypath points to the repo root (wherepyproject.tomlis)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.xmlin 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.xmlandxlights_rgbeffects.xmlUse
list_showsto 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
.xsqis a starting point — tweak effects, timing, and palettes in xLightsUse
inspect_sequenceto 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.jsonFPP tools gracefully report connection errors; core generation works fully offline
License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- 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/JohnBreault/xlights-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server