lms-mcp
This is an MCP server for controlling a Lyrion Music Server (LMS), letting you manage playback, players, the music queue, and the library.
List players and see their state
Show now playing info (track, mode, volume, queue position)
Control playback: play, pause, toggle, stop, next, previous
Set volume absolutely (0–100) or relatively (e.g. +5, -10)
Seek to a specific time in the current track
Power players on or off
Search the music library for artists, albums, tracks, playlists, etc.
Play music by library ID or direct URL, with modes to load, add, or insert into the queue
Display the current play queue
Edit the queue: clear, remove by index, move tracks, or jump to an index
Set repeat (off/one/all) and shuffle (off/songs/albums)
Run arbitrary raw LMS CLI commands as an escape hatch
Controls a Lyrion Music Server (formerly Logitech Media Server), providing tools for playback control, volume and seek, power management, library search, queue management, and raw LMS CLI commands.
Click on "Deploy 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., "@lms-mcp Play a jazz playlist on the bedroom speaker"
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.
lms-mcp
An MCP server for controlling a Lyrion Music Server (GitHub, docs).
Lyrion Music Server (LMS) is a self-hosted music server — the open-source descendant of Logitech's SlimServer / Squeezebox Server. It streams your own library and internet radio to hardware Squeezebox players and software ones like squeezelite or the Material skin.
This server talks to LMS over its JSON-RPC (CLI-over-HTTP) API on port 9000 and
exposes playback control, favorites/library search and queue management as MCP
tools.
Requirements
Node.js ≥ 20
A reachable Lyrion Music Server with the web interface enabled
Related MCP server: Sound
Setup
npm install
npm run buildConfigure via environment variables (see .env.example):
Variable | Required | Description |
| yes | Base URL, e.g. |
| no | HTTP basic auth user (only if password protection is on) |
| no | HTTP basic auth password |
| no | MAC or exact name of the player to target by default |
| no |
|
| no | HTTP transport port (default |
| no | Bearer token required on the HTTP endpoint |
The server supports two transports:
stdio — for running locally, launched by the MCP client as a child process.
Streamable HTTP — a long-running endpoint at
/mcp, used for the always-on Docker deployment. This is the image's default.
Local use (stdio)
npm install && npm run build{
"mcpServers": {
"lms": {
"command": "node",
"args": ["/absolute/path/to/lms-mcp/dist/index.js"],
"env": { "LMS_URL": "http://192.168.1.10:9000" }
}
}
}During development: npm run dev.
Server use (Docker, HTTP)
Multi-arch images (linux/amd64, linux/arm64) are published to the GitHub
Container Registry on every push to main and every v* tag:
ghcr.io/eggs-gd/lms-mcp:latestRun it with the bundled compose.yaml:
cp .env.example .env # set LMS_URL and MCP_AUTH_TOKEN
docker compose up -dThen point the MCP client at the URL:
{
"mcpServers": {
"lms": {
"url": "http://your-server:3000/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}GET /health returns a plain JSON liveness check.
Tools
Tool | What it does |
| List players and their state |
| Current track, mode, volume, queue position |
| play / pause / toggle / stop / next / previous |
| Absolute (0–100) or relative ( |
| Seek to N seconds in the current track |
| Turn a player on/off |
| Search artists / albums / tracks, returns ids |
| Load / add / insert by library id or URL |
| List the current play queue |
| clear / remove / move / jump |
| Set repeat and shuffle modes |
| Escape hatch for any LMS CLI command |
Reference
Lyrion Music Server: https://lyrion.org · source
LMS CLI API docs:
http://<your-server>:9000/html/docs/cli-api.htmlDocker image for LMS itself:
lmscommunity/lyrionmusicserver
License
MIT
Available Tools
12 toolslist_playersList playersA
List all Squeezebox / squeezelite players known to the server and their state.
Inputs: no named parameters.
now_playingNow playingA
Show the current track, playback mode, volume and queue position for a player.
Inputs: player.
playback_controlPlayback controlB
Control transport: play, pause, toggle, stop, next or previous track.
Inputs: action (required), player.
play_musicPlay musicA
Load or queue music by library id (from search_library) or by direct URL. mode 'load' replaces the queue and plays, 'add' appends, 'insert' plays next.
Inputs: url, mode, player, albumId, +4 more.
queue_editEdit queueC
Clear the queue, remove a track by index, move a track, or jump to an index.
Inputs: action (required), index, player, toIndex.
raw_commandRaw CLI commandB
Escape hatch: run an arbitrary LMS CLI command. See http://:9000/html/docs/cli-api.html. Example command: ["mixer","muting","1"].
Inputs: command (required), player.
search_librarySearch libraryA
Search the music library. Returns matching artists, albums and tracks with the ids used by play_music.
Inputs: query (required), limit.
seekSeekA
Seek to a position (seconds from start) in the current track.
Inputs: seconds (required), player.
set_powerSet powerB
Turn a player on or off.
Inputs: on (required), player.
set_repeat_shuffleSet repeat / shuffleB
Set repeat (off/one/all) and/or shuffle (off/songs/albums) for a player.
Inputs: player, repeat, shuffle.
set_volumeSet volumeA
Set absolute volume (0-100) or a relative change like +5 / -10.
Inputs: volume (required), player.
show_queueShow queueB
List the current play queue (playlist) for a player.
Inputs: limit, player.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
Each tool targets a distinct function (search, playback, queue editing, volume, etc.), and raw_command is clearly an escape hatch. Minor overlap exists between play_music's 'insert/add' modes and queue_edit's queue manipulation, but the descriptions make the boundary clear.
Most tools follow a consistent snake_case verb_noun pattern like search_library, set_volume, and show_queue. A few exceptions such as raw_command, seek, and now_playing break the pattern slightly but remain readable and predictable.
Twelve tools is within the ideal range for a media server control surface. Each tool addresses a core playback or queue function without unnecessary duplication.
The set covers the full playback lifecycle: discovering content, controlling transport, managing the queue, adjusting volume/seek/repeat/shuffle/power, and querying status. The raw_command escape hatch also covers edge operations missing from the curated surface.
Related MCP Connectors
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for Yoto: manage cards, tracks, icons and family devices from any MCP client.
MCP server for Producer/Riffusion AI music generation
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAllows controlling Apple Music on macOS through an MCP server that supports playback control, volume adjustment, and music search functionality.2MIT
- AlicenseNot gradedqualityCmaintenanceApple Music playback control, library search, playlist management, and queue operations via MCP.2MIT
- AlicenseBqualityDmaintenanceMCP server that provides LLM tools to interact with Lyrion Music Server (LMS), enabling player control, playback management, playlist operations, and music library search.5521 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables LLMs to control a Lyrion Music Server (LMS/Squeezebox) for playback, search, library browsing, and player management.-