Skip to main content
Glama

bluesound-mcp

An MCP server for Bluesound/BluOS players — transport control, volume, multi-room grouping, presets, and search/play from streaming services (TIDAL, TuneIn, Deezer, ...). Built for wiring into Hermes the same way you've wired up ah-mcp.

Built on:

  • pyblu — the same library Home Assistant's own Bluesound integration uses — for status, transport, volume, presets, and grouping.

  • A small direct client (bluos_client.py) for the /Browse endpoint, which pyblu doesn't cover, used for search and playing search results. Implemented against the official BluOS Custom Integration API v1.7.

Install

cd bluesound-mcp
pip install -e .

Related MCP server: sonos-ts-mcp

Configure your players

Players are referred to by name everywhere (never by IP), so Hermes can say "woonkamer" instead of an address.

Zero config: auto-discovery

If no players.json is set up, tools fall back to scanning the local network for BluOS players — via SSDP/UPnP plus a direct port-11000 sweep of the local subnet — and confirming/naming each responder through its BluOS /SyncStatus endpoint. Both are needed: some players never answer SSDP at all, so the port sweep is what actually finds them, while SSDP just gets faster results for players that do respond. Either way, list_players() and every other tool work out of the box, using whatever name you've already given the player in the BluOS Controller app. Call discover_players() any time to run this scan directly, e.g. to find IPs to pin in players.json.

This requires being on the same subnet as the players — it won't find anything across routers/VLANs, or from most container network setups without host networking.

Pinning players explicitly

Create ~/.config/bluesound-mcp/players.json:

{
  "players": {
    "woonkamer": "192.168.1.50",
    "keuken": "192.168.1.51",
    "slaapkamer": "192.168.1.52:11000"
  }
}

Port defaults to 11000 (standard for all BluOS players) if omitted.

Alternatives, if you'd rather not use a file (e.g. containerized):

  • BLUESOUND_MCP_CONFIG=/path/to/players.json

  • BLUESOUND_MCP_PLAYERS='{"woonkamer": "192.168.1.50"}' (inline JSON, takes priority)

You already have these IPs in Home Assistant's Bluesound integration device list if you need to look them up again.

Run

Stdio (default — for local subprocess-style MCP clients):

bluesound-mcp

SSE or streamable-http (for a networked setup, matching however you ended up running ah-mcp):

BLUESOUND_MCP_TRANSPORT=sse BLUESOUND_MCP_HOST=0.0.0.0 BLUESOUND_MCP_PORT=8765 bluesound-mcp
# or
BLUESOUND_MCP_TRANSPORT=streamable-http BLUESOUND_MCP_HOST=0.0.0.0 BLUESOUND_MCP_PORT=8765 bluesound-mcp

BLUESOUND_MCP_HOST defaults to 127.0.0.1 — set it to 0.0.0.0 if Hermes reaches this over the network rather than as a local subprocess (same reasoning as API_SERVER_HOST=0.0.0.0 for the Hermes API server itself).

Wire it into Hermes's MCP config the same way as ah-mcp — point it at the command (stdio) or URL (sse/streamable-http) above.

Tools

Tool

What it does

list_players()

List player names + host/port (configured, or auto-discovered if no config)

discover_players(timeout=3.0)

Scan the network for BluOS players directly, regardless of config

get_status(player)

Current track, artist, state, volume, etc.

get_group_status(player)

Grouping info: leader/follower, who's grouped

play / pause / stop / skip / back(player)

Transport control

set_shuffle(player, enabled)

Toggle shuffle

set_volume(player, level, mute, tell_followers)

Get/set volume (0-100)

group_players(leader, followers)

Group players for synced multi-room playback

ungroup_players(leader, followers)

Remove specific followers from a group

ungroup_player(player)

Remove a player from its group, leader or follower

list_presets(player) / load_preset(player, id)

BluOS presets

browse(player, key=None)

Navigate sources (top-level if no key)

search_service(player, service, query)

Search a service, e.g. search_service("woonkamer", "TIDAL", "Miles Davis")

play_item(player, play_url)

Play a play_url from browse()/search_service() results

A typical "play something from TIDAL" flow

  1. search_service("woonkamer", "TIDAL", "Kind of Blue")

  2. Pick a result — an album/track item will have a play_url; some items (an artist, say) only have a browse_key and need another browse() call to get to something playable.

  3. play_item("woonkamer", <that play_url>)

TIDAL (or any other service) has to already be set up and signed in on the player via the BluOS Controller app — this only searches/plays within what's already configured, it doesn't handle auth.

Notes on grouping

BluOS uses leader/follower ("primary"/"secondary") terminology. Only the leader accepts source-selection and most control commands are proxied to it, so if you group keuken under woonkamer, you're steering the group through woonkamer. ungroup_player looks this up for you so you can just say "take the keuken out of the group" without knowing which side it's on.

Errors

pyblu raises PlayerUnreachableError (offline/timeout) and PlayerUnexpectedResponseError (unexpected response — likely a pyblu bug) — these surface as tool call failures with their message intact, which is enough for Hermes to explain to you what went wrong. Unknown player names raise a PlayerNotFoundError listing what is configured.

Available Tools

19 tools
backB

Go back to the previous track (or restart the current one, if it just started).

ParametersJSON Schema
NameRequiredDescriptionDefault
playerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose side effects such as what happens if there is no previous track, whether playback state changes, or error behavior. The restart condition is mentioned but edge cases are omitted.

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, clear sentence with no redundant words. It efficiently conveys the primary action and a specific conditional.

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?

While the tool is simple, the missing parameter explanation and lack of edge-case handling (e.g., no previous track) create ambiguity. The expected output is not mentioned, but the main gap is the parameter semantics.

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

Parameters1/5

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

The only parameter 'player' is a string with no description in the schema or the tool description. Its meaning (ID, name, etc.) is completely unspecified, leaving the agent to guess.

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 clearly states the action: 'Go back to the previous track' with a specific condition 'or restart the current one, if it just started'. This distinguishes it from siblings like 'skip' and 'pause'.

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 description gives a conditional for restart, but does not explicitly state when to prefer this over other controls or mention any prerequisites. It relies on implicit understanding of media controls.

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNo
playerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output 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 carries the burden. It discloses that the tool returns top-level sources or descends into a given key, and implies the response contains browse_keys for further navigation. It doesn't explicitly state read-only behavior or side-effect absence, but the name and context imply a safe browsing operation. It doesn't mention rate limits or auth, but these are not typical for such a 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 sentences, front-loaded with the core purpose and then the key usage pattern. No redundant wording, and the most important information (modes of operation) comes first. Every word 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?

The description covers the main workflow: listing top-level sources and descending via keys. It mentions the source of keys (previous browse or search_service), which is essential. While there is an output schema that likely details the return structure, the description doesn't cover edge cases or error conditions, but for a browse tool this is adequate. It's slightly incomplete in not mentioning that the player must be a valid one, but that's common knowledge.

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 explains the key parameter well: it's optional, can be null, and should be a browse_key from previous results. However, it doesn't add meaning for the player parameter beyond the schema's name, though it's self-explanatory from the tool's purpose. The description partially compensates for the coverage gap.

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 clearly states the tool's function: browsing a player's music sources, with two modes (top-level listing without a key, and descending with a key). It distinguishes itself from siblings by referencing browse_key from search_service results, implying navigation vs search, and its examples (TIDAL, TuneIn, Library) make the purpose concrete.

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 description provides clear usage context: with no key it lists top-level sources, and with a key it descends. It also tells users to pass a browse_key from previous browse() or search_service() calls, giving a workflow. It doesn't explicitly contrast with alternatives like search_service, but the distinction is implicit in the key sourcing.

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

The description discloses the network scanning behavior, protocol (SSDP/UPnP), and limitations across routers/VLANs and container setups. It implies a read-only operation and clearly states what will and will not be found, giving a transparent view of the tool's behavior.

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

Conciseness5/5

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

The description is concise and well-structured, covering purpose, return data, use cases, and network requirements in three sentences. It contains no redundant or extraneous information.

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?

The description covers the tool's purpose, output fields, and operational constraints, which is sufficient for most callers. However, it does not explain the timeout parameter, and while an output schema may exist, the description's mention of returned fields helps fill the gap.

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

Parameters2/5

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

The only parameter, timeout, has no description in the schema and is not mentioned in the tool description. While its name and default value suggest a timeout in seconds, the description does not clarify units, effect, or whether it controls the overall scan duration or per-response waiting.

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 clearly states the tool scans the local network for BluOS players via SSDP/UPnP and returns each player's name, host, port, and model. It also distinguishes this from configured players by noting it is independent of players.json, making the purpose unambiguous.

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 description provides practical usage guidance, such as being handy for finding IPs to add to players.json or checking current network presence. It also notes the same-subnet requirement, which helps set expectations, though it does not explicitly contrast with sibling tools like list_players.

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

get_group_statusC

Get a player's grouping info: whether it's leading or following a group, and who's in it.

ParametersJSON Schema
NameRequiredDescriptionDefault
playerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

There are no annotations, and the description only implies a read-only operation through the word 'Get'. It does not explicitly state that the tool has no side effects, does not modify state, or describe error conditions or required permissions.

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 concise and to the point, using a single sentence to convey the core functionality. It avoids unnecessary words and is easy to parse, though it could be slightly more structured with bullet points for the two aspects (leading/following and membership).

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?

The tool is simple with one parameter, but the description does not specify the output format or structure of the 'grouping info'. While it mentions 'who's in it', it does not clarify whether the return is a list, object, or other type. Since no output schema is provided, this omission leaves the agent uncertain about the expected response.

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

Parameters1/5

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

The only parameter 'player' has no description in the schema or in the tool description. The description does not clarify whether it expects a player ID, name, or other identifier, nor does it explain the expected format or constraints. Schema coverage is 0%, and the description adds no meaning.

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 clearly states the tool's function: 'Get a player's grouping info' and specifies it covers leading/following status and group membership. This is distinct from sibling tools like get_status, which likely addresses a broader status, though it does not explicitly name alternatives.

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 is provided on when to use this tool versus alternatives. It does not mention any conditions, prerequisites, or comparison with other status or grouping tools, leaving the agent to infer usage from the description alone.

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

get_statusC

Get what a player is currently doing: track, artist, playback state, volume, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
playerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

The description implies a read-only operation but does not explicitly state that it has no side effects, nor does it mention any permissions, rate limits, or destructive potential. Without annotations, this lack of explicit behavioral transparency leaves the agent to infer safety.

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 concise and to the point, using a single sentence with a clear structure. It avoids unnecessary verbiage, though it could be slightly more specific about the output format.

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?

The description provides some context about the output (track, artist, playback state, volume), but it is incomplete. It does not mention possible errors, the exact shape of the response, or what 'etc.' includes. However, given the simplicity of the operation, it is adequate but not comprehensive.

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

Parameters1/5

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

The parameter 'player' is completely undefined in the schema or description. The description does not explain what a player identifier is, how it should be formatted, or whether it refers to a name, ID, or object. This severe lack of semantic detail hinders correct usage.

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 clearly states the tool's purpose: getting a player's current status, listing specific attributes like track, artist, playback state, and volume. It uses a clear verb ('Get') and identifies the resource ('player'), though it does not explicitly differentiate it from sibling tools like 'get_group_status'.

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 use this tool versus alternatives such as 'get_group_status' or other player-related tools. The description does not mention any prerequisites or contextual cues for selecting this tool.

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

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().

ParametersJSON Schema
NameRequiredDescriptionDefault
leaderYes
followersYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

There are no annotations, so the description must carry the burden. It indicates a state-changing action via 'Group', but does not mention side effects, reversibility, required permissions, or failure conditions. The description is minimally transparent but lacks depth about what changes occur.

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 extremely concise, consisting of two short sentences that convey the action, purpose, and parameter meaning without unnecessary words. It is well-structured and front-loads the core verb.

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?

Given the absence of annotations, the description covers the essential context: what the tool does and how to interpret the parameters. It does not mention output or error scenarios, but for a simple grouping operation this is sufficient. The reference to list_players() provides necessary cross-tool context.

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 input schema provides no descriptions for the parameters, but the description clarifies that both parameters are player names and specifically that 'followers' are grouped under a 'leader'. This adds semantic meaning beyond the bare schema, though it could be more explicit about the relationship (e.g., leader is the primary player).

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 clearly states the verb 'Group' and the resource 'players', and adds purpose with 'for synchronized multi-room playback', making the tool's intent unmistakable. It also implicitly distinguishes from sibling tools like ungroup_players by describing the grouping action.

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 description explains that 'leader and followers are player names as returned by list_players()', giving direct guidance on how to fill the parameters. It doesn't explicitly state when to use versus alternatives, but the action and context make the appropriate usage clear.

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 full responsibility. It discloses the fallback mechanism ('uses players.json if configured; otherwise falls back to a live network scan') and implies read-only behavior ('works with zero setup'). No hidden side effects or errors are mentioned, but the behavior is described honestly enough for an agent to anticipate results.

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 two sentences with no redundant words. It front-loads the main action, then provides the fallback context. Every sentence contributes value.

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?

The description gives enough context for the agent to decide when to use it: a simple list with zero setup. It mentions the fallback and references discover_players for deeper scanning. The output fields are implied by the description ('by name, with their host and port'), so the agent knows what to expect even without reading the output schema.

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?

The tool has no parameters, so there is nothing to describe beyond the schema. The description correctly omits parameter details. The score is high because the absence of parameters is clear and no additional meaning is needed.

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 clearly states the verb 'List' and the resource 'Bluesound players', and specifies the output fields (name, host, port). It also distinguishes itself from the sibling tool discover_players by mentioning the fallback, so the agent can easily tell them apart.

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 description explains when to use the tool: when a simple list is needed and zero setup is desired. It also indicates the fallback behavior and references discover_players for more details. It doesn't explicitly state when not to use it, but the 'zero setup' phrasing implies the typical use case.

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

list_presetsA

List the saved presets (radio stations, playlists, inputs) available on a player.

ParametersJSON Schema
NameRequiredDescriptionDefault
playerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description must convey behavior. The verb 'list' clearly indicates a read-only operation with no side effects, but it does not explicitly state that no modifications occur. Given the inherent safety of listing, this is adequately transparent.

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, compact sentence with no redundant words. It conveys all necessary information efficiently, earning full marks for conciseness and structure.

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?

For a simple list operation, the description fully covers what the tool does, including the target (player) and the types of presets. Output details are handled by the output schema, so no additional context is needed.

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 single parameter 'player' has no schema description, but the tool description references 'on a player,' providing sufficient context to infer its role. This adds meaning beyond the raw schema, though a direct description of the parameter's expected format would improve clarity.

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 clearly states the action (list), the resource (presets), and the scope (on a player). It also enumerates the types of presets (radio stations, playlists, inputs), making the purpose unambiguous and distinguishable from sibling tools like load_preset.

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 description implies usage (list presets for a player) but does not explicitly contrast with alternatives or state when not to use it. While the context is clear, it lacks direct guidance on choosing this over other tools like browse or load_preset.

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

load_presetB

Start playing a preset by its numeric id (see list_presets()).

ParametersJSON Schema
NameRequiredDescriptionDefault
playerYes
preset_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are present, and the description only states the intended effect. It does not disclose side effects, error conditions, idempotency, or what happens if the player or preset is invalid.

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 brief and free of unnecessary words, while still conveying the primary purpose and pointing to a related tool.

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?

The tool is simple, but the player parameter is essential and unexplained. Without knowing how to specify the player, an agent may not be able to invoke the tool correctly.

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

Parameters2/5

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

preset_id is explained as numeric, but player is left completely undefined. The schema provides only types, so the description does not clarify whether player is a name, UUID, or other identifier.

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?

Clearly states the action ('Start playing') and the target resource ('a preset by its numeric id'). It also references list_presets() to distinguish from the listing tool.

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?

Provides some guidance by pointing to list_presets() for obtaining the preset id, but does not explicitly contrast with the sibling 'play' tool or specify when loading a preset is preferred.

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

pauseC

Pause playback on a player.

ParametersJSON Schema
NameRequiredDescriptionDefault
playerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It only states the action without describing side effects, reversibility, or state requirements. For instance, it does not say what happens if the player is already paused or if playback is stopped. This is a significant gap for a state-changing tool.

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

Conciseness3/5

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

The description is a single concise sentence, which is efficient, but it lacks any additional structure or information that could be included without verbosity. It is not overlong, but it is under-specified, so it earns a middle score.

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?

Given the simple nature of the tool (one parameter) and the presence of an output schema, the description is barely adequate. It does not mention how to identify the player, what happens if the player is unavailable, or any error conditions. For an agent to use it correctly, it would need to rely on the parameter name and the tool's name, which is insufficient.

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

Parameters1/5

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

The schema defines a single 'player' parameter but the description adds no explanation of its format or how to obtain a valid player ID. Since schema description coverage is 0%, the description should compensate, but it merely repeats 'on a player' without clarifying the parameter semantics.

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 clear verb ('Pause') and resource ('playback on a player'), which distinguishes it from sibling transport controls like play, stop, and skip. It is unambiguous about the action, so an agent knows exactly what the tool does.

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 no guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., a playing player), nor does it contrast with stop or skip. An agent would have to infer the appropriate context from the tool name alone.

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

playA

Resume playback on a player. Only works from paused, not from stopped.

ParametersJSON Schema
NameRequiredDescriptionDefault
playerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

It mentions the key behavioral constraint that it only works from paused state, not stopped, which is important given no annotations. But it does not disclose what happens if the condition is violated or any other side effects.

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 two short sentences with no redundant information. It is tightly written and directly states the essential constraint.

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 simple play control, it provides the essential condition but lacks parameter details and error behavior. The output schema presumably covers return values, but the description alone is not fully complete for an agent to invoke it correctly.

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

Parameters1/5

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

The schema has 0% description coverage, and the description does not explain the 'player' parameter beyond saying 'on a player'. It fails to specify whether it's an ID, name, or how to obtain it, leaving the parameter ambiguous.

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 clearly states the action (resume playback) and the target (a player), and it specifies the precondition from paused state. This differentiates it from 'play_item' which likely plays a specific item rather than resuming.

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?

It provides a clear precondition ('Only works from paused') which guides when to use it. However, it does not explicitly compare against alternatives like play_item or pause, so the decision boundary is not fully explicit.

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
playerYes
play_urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states that the tool 'clears the current queue and starts playing immediately,' which is a significant side effect. It does not mention error handling or prerequisites like valid player/URL, but the main destructive behavior is disclosed.

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 two sentences, front-loaded with the core action and key side effect. Every word adds value, and the structure is clean and scannable.

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?

While the tool is simple, the lack of parameter documentation and no mention of return behavior (despite an output schema) leaves gaps. The description covers the purpose and main side effect but omits details about how to obtain play_url and what the player parameter expects. An agent could still call it correctly if it already knows the schema, but the description alone is incomplete.

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

Parameters2/5

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

The schema provides no descriptions and the description mentions only 'play_url' but does not explain its format or how it relates to browse()/search_service() results. The 'player' parameter is not mentioned at all. With 0% schema description coverage, the description fails to compensate, leaving agents guessing about parameter requirements.

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 clearly states the action ('Start playing') and the specific resource ('an item found via browse() or search_service()'), and explicitly ties it to the play_url parameter. This distinguishes it from the sibling 'play' tool, which likely handles general playback control rather than playing a specific discovered item.

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?

It indicates the tool is intended for items obtained from browse() or search_service(), providing a clear usage context. It does not explicitly name alternatives or state when not to use it, but the reference to the discovery functions and the queue-clearing behavior gives enough guidance for typical use cases.

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
playerYes
serviceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description must disclose behavior. It does so by explaining that service matching is case-insensitive and partial, and that results carry either a play_url or browse_key depending on item type. It does not mention error cases (e.g., service not configured) or confirm read-only nature, but the provided details cover key usage behaviors.

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 concise, using two sentences to convey purpose, example, matching behavior, and result handling. It is front-loaded with the primary action and includes a practical example, avoiding unnecessary fluff. The structure is efficient and easy to parse.

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 search tool with three parameters and an output schema, the description covers essential aspects: what to do with results, how service is matched, and a reference to browse() for available services. It does not explicitly mention the source of the player parameter or error handling, but it provides enough for correct invocation in most scenarios. The existence of an output schema reduces the need to describe return values in detail.

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 explain all parameters. The example search_service(player, "TIDAL", "Miles Davis") clarifies the order and gives a sense of each parameter, and service matching is explained. However, it does not explain how to obtain a valid player identifier (e.g., from list_players) or what format the query should take, leaving some ambiguity.

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 clearly states the tool searches within a streaming service on a player, provides a concrete example, and differentiates itself from browse() and play_item() by explaining how results are used. The verb 'search' and resource 'service' are specific, making the purpose unambiguous.

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?

It gives a clear use case with an example and explains how to handle results (pass to play_item or browse). It implies the service names come from browse(), which suggests a workflow, but does not explicitly state when to use this tool versus alternatives like browse. Still, the context is strong enough for an agent to decide correctly.

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

set_shuffleB

Turn shuffle on or off for the current play queue.

ParametersJSON Schema
NameRequiredDescriptionDefault
playerYes
enabledYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description bears the burden of explaining behavior. It correctly states the primary action (enabling or disabling shuffle) but does not mention any side effects (e.g., whether playback restarts, whether the setting persists, or how it interacts with the current queue). This is partially transparent but not fully detailed.

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, efficient sentence that communicates the tool's purpose without any redundant or extraneous information. It is well-structured and directly to the point.

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?

Given the tool's simplicity and the presence of an output schema (presumably a void or confirmation response), the description is adequate for understanding the core action. However, it omits any mention of errors, edge cases (e.g., invalid player), or the exact nature of the 'current play queue', which prevents it from being fully complete in broader contexts.

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

Parameters1/5

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

The input schema lists two required parameters ('player' and 'enabled') with no descriptions, and the tool description adds no explanation of their meaning or expected formats. For instance, it does not clarify whether 'player' is an ID, name, or resource identifier, nor what values 'enabled' accepts beyond boolean. This leaves the agent to guess parameter semantics.

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 clearly states that the tool toggles shuffle on or off for the current play queue, using the explicit verb 'turn' and identifying the resource. It is unambiguous and concise, leaving little room for misinterpretation.

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 does not provide any guidance on when to use this tool versus alternatives among the sibling tools (e.g., play, pause, skip). It only states what the tool does, without contextual cues or conditions for selection.

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
muteNo
levelNo
playerYes
tell_followersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations provided, the description must carry the behavioral burden, but it omits key side effects such as the mute parameter, potential errors, or idempotency. The statement about calling with no arguments directly conflicts with the schema, further reducing transparency.

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

Conciseness3/5

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

The description is brief and mostly to the point, but the inclusion of the inaccurate 'no arguments' clause adds unnecessary confusion. A clearer structure that explicitly distinguishes read vs. set operations would improve it without adding length.

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 tool with four parameters and no annotations, the description is incomplete. It omits the mute behavior, does not clarify the relationship between level and volume, and fails to mention the requirement for player, leaving the agent with ambiguous operational context.

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

Parameters2/5

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

The description explains tell_followers and implies player through context, but leaves level and mute completely unaddressed. Given the schema provides no descriptions, the description fails to compensate for the majority of parameters, making it hard to know which parameter maps to which behavior.

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

Purpose3/5

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

The description clearly states the tool gets or sets a player's volume with a 0-100 range, but is undermined by the contradictory phrase 'Call with no arguments' given that 'player' is a required parameter. The core purpose is evident but muddled by this inconsistency.

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 provides conditional usage guidance for reading vs. setting volume and explains tell_followers for grouped players. However, it does not mention when to prefer this over sibling tools like get_status, nor does it address the required player parameter in the usage context.

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

skipC

Skip to the next track in the play queue.

ParametersJSON Schema
NameRequiredDescriptionDefault
playerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/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 states the action but does not disclose side effects, failure conditions (e.g., no next track), or whether the operation mutates state irreversibly. It also does not mention what the tool returns or if it requires a pre-existing player session.

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 a single concise sentence that clearly states the core action. It is front-loaded and easy to parse. However, its brevity borders on under-specification, but for conciseness it is appropriately compact.

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?

Despite being a simple tool with one parameter, the description fails to explain the required 'player' parameter, any usage constraints, or behavioral details. An output schema exists but is not visible, so the description does not clarify return values. Overall, the description is incomplete for an agent to call it correctly.

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

Parameters1/5

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

The schema defines a required 'player' parameter with type string and no description. Schema description coverage is 0%, so the description must compensate by explaining what 'player' refers to (e.g., player ID, name, or handle). The description does not mention the parameter at all, leaving the agent to guess its meaning and format.

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 ('skip') and resource ('next track in the play queue'), which clearly distinguishes it from sibling tools like back (previous track), pause, and stop. The action is unambiguous and easily identifiable.

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 no explicit guidance on when to use this tool versus alternatives like back or play. It does not mention conditions such as whether a player must be active, what happens at the end of the queue, or any prerequisites. The usage context is implied but not stated.

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

stopA

Stop playback on a player. Stopped playback can't be resumed with play() - start something new instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
playerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of disclosing behavior. It explicitly states that stopped playback cannot be resumed, which is a critical behavioral trait. However, it does not mention other effects such as clearing the queue or whether group players are affected. For a simple stop operation, the disclosed trait is significant, so a score of 4 is appropriate.

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 two sentences long, front-loads the core action, and adds a concise, important caveat. Every word earns its place; there is no redundancy or unnecessary detail.

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?

Despite the tool's simplicity, the description fails to explain what the 'player' parameter expects (e.g., an ID from list_players, a name, a URL). The output schema exists, so return format is not needed, but the input parameter is entirely unexplained. An agent cannot correctly call this tool without external knowledge, making the description incomplete for a tool with a required parameter.

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

Parameters1/5

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

The schema has a single required parameter 'player' with 0% description coverage, and the description provides no explanation of what 'player' refers to, its format, or how to obtain a valid value. Since the schema provides no help, the description must compensate, but it does not. This is a major gap for a tool with only one parameter.

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 clearly states the tool's action: 'Stop playback on a player.' It uses a specific verb and resource, and the caveat about non-resumability differentiates it from pause (which is resumable) and other playback controls. This is sufficient for an agent to distinguish it from siblings.

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 description gives a behavioral caveat ('can't be resumed with play() - start something new instead') but does not explicitly tell the agent when to use this vs. pause or other alternatives. It implies that stop is final, but it does not name pause as the resumable alternative. This is clear context but lacks explicit exclusions or alternative guidance.

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

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
playerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the burden of explaining side effects. It explicitly says that removing a leader disbands the group and removing a follower detaches it, which is clear behavioral transparency, though it does not cover error cases like a player not in any group.

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, well-structured sentence that front-loads the main action and uses a parenthetical to efficiently explain the leader/follower distinction. No unnecessary words are included.

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 one-parameter tool, the description covers the core behavior and conditional side effects. It does not address output or failure behavior, but that is not essential given the tool's simplicity and lack of an output schema.

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

Parameters2/5

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

The only parameter, `player`, has no schema description and the tool description does not clarify what format or identifier is expected (e.g., player ID, name, or UUID). The description adds little beyond the parameter name itself.

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 clearly states the action: fully remove a single player from its group. It also distinguishes leader versus follower outcomes, making the tool's purpose 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?

The description implies when to use the tool—when a single player should be removed from a group—but it does not explicitly contrast it with the sibling `ungroup_players` tool or state when one should be preferred over the other.

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

ungroup_playersA

Remove one or more followers from a leader's group. Leader and followers remain reachable individually.

ParametersJSON Schema
NameRequiredDescriptionDefault
leaderYes
followersYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

The description discloses a meaningful side effect ('Leader and followers remain reachable individually'), but with no annotations, it does not cover potential error cases, idempotency, or behavior when the leader or followers do not exist.

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 two concise sentences with no redundant or extraneous information, making it easy to parse.

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?

The description covers the basic purpose and a key behavioral outcome, but the lack of parameter semantics and explicit usage distinctions leaves minor gaps for an agent deciding how to call it correctly.

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

Parameters2/5

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

The schema provides no descriptions for 'leader' or 'followers', and the description only repeats the property names without specifying the expected identifier format or how followers are referenced, so it adds little beyond the 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?

The description clearly states the action ('Remove') and the object ('one or more followers from a leader's group'), and the plural form 'ungroup_players' distinguishes it from the singular sibling 'ungroup_player'.

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 description implies use when removing followers from a group but does not explicitly contrast with the sibling 'ungroup_player' or other grouping tools, leaving the selection criteria partially implicit.

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. 19 tool updatesv0.1.0
    • First observedback
    • First observedbrowse
    • First observeddiscover_players
    • First observedget_group_status
    • First observedget_status
    • First observedgroup_players
    • First observedlist_players
    • First observedlist_presets
    • First observedload_preset
    • First observedpause
    • First observedplay
    • First observedplay_item
    • First observedsearch_service
    • First observedset_shuffle
    • First observedset_volume
    • First observedskip
    • First observedstop
    • First observedungroup_player
    • First observedungroup_players

TDQS

A3.5/5.0

Scored across 19 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to control Sonos audio devices over a local network using UPnP/SOAP protocols, supporting playback, volume, queue management, zone grouping, and music library browsing.
    59
    22 npm
    15
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables LLMs to control a Lyrion Music Server (LMS/Squeezebox) for playback, search, library browsing, and player management.
    -