bluesound-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BLUESOUND_MCP_HOST | No | Host to bind for sse/streamable-http transports. Defaults to 127.0.0.1. | 127.0.0.1 |
| BLUESOUND_MCP_PORT | No | Port to use for sse/streamable-http transports (e.g., 8765). | |
| BLUESOUND_MCP_CONFIG | No | Path to a players.json file mapping player names to host:port, alternative to the default ~/.config/bluesound-mcp/players.json. | |
| BLUESOUND_MCP_PLAYERS | No | Inline JSON string mapping player names to host:port, e.g. '{"woonkamer": "192.168.1.50"}'. Takes priority over configuration files. | |
| BLUESOUND_MCP_TRANSPORT | No | Transport type: stdio (default), sse, or streamable-http. | stdio |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_playersA | List Bluesound players by name, with their host and port. Uses players.json if configured; otherwise falls back to a live network scan (see discover_players()), so this works with zero setup. |
| discover_playersA | Scan the local network for BluOS players via SSDP/UPnP, independent of players.json. Returns each player's own name (as set in the BluOS Controller app), host, port, and model - handy for finding IPs to put in players.json, or for checking what's on the network right now. Requires being on the same subnet as the players; won't find anything across routers/VLANs or most container network setups without host networking. |
| get_statusC | Get what a player is currently doing: track, artist, playback state, volume, etc. |
| get_group_statusC | Get a player's grouping info: whether it's leading or following a group, and who's in it. |
| playA | Resume playback on a player. Only works from paused, not from stopped. |
| pauseC | Pause playback on a player. |
| stopA | Stop playback on a player. Stopped playback can't be resumed with play() - start something new instead. |
| skipC | Skip to the next track in the play queue. |
| backB | Go back to the previous track (or restart the current one, if it just started). |
| set_shuffleB | Turn shuffle on or off for the current play queue. |
| set_volumeC | Get or set a player's volume (0-100). Call with no arguments to just read the current volume. Set tell_followers=True to also change grouped players' volume. |
| group_playersA | Group one or more players under a leader, for synchronized multi-room playback. leader and followers are player names as returned by list_players(). |
| ungroup_playersA | Remove one or more followers from a leader's group. Leader and followers remain reachable individually. |
| ungroup_playerA | Fully remove a player from whatever group it's in, whether it's the leader (this disbands the group) or a follower (this just detaches it). |
| list_presetsA | List the saved presets (radio stations, playlists, inputs) available on a player. |
| load_presetB | Start playing a preset by its numeric id (see list_presets()). |
| browseA | Browse a player's music sources. With no key, lists top-level sources (TIDAL, TuneIn, Library, Playlists, inputs, ...). Pass a browse_key from a previous browse() or search_service() result to descend into it. |
| search_serviceA | Search within a streaming service configured on the player, e.g. search_service(player, "TIDAL", "Miles Davis"). service is matched (case-insensitive, partial) against the top-level source names from browse(). Results carry a play_url (pass to play_item()) or a browse_key (pass to browse(), e.g. to see an album's tracks) depending on the item type. |
| play_itemA | Start playing an item found via browse() or search_service(), using its play_url. This clears the current queue and starts playing immediately. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 19 tools
Most tools have clear, distinct purposes. The only potential confusion is between list_players and discover_players, but their descriptions clearly differentiate config-based vs network-scan discovery.
All tool names follow a consistent verb_noun pattern with lowercase and underscores (e.g., list_players, load_preset, set_shuffle). The naming is uniform and predictable.
With 19 tools, the set is slightly larger than the typical 3-15 range but still reasonable for a music-control server covering discovery, playback, presets, browsing, searching, and grouping. No tools feel redundant.
The tool surface covers core operations: player discovery, playback control, preset management, music browsing/searching, and grouping. Missing queue management or detailed track info, but the essential functionality is present.