MCP server for CastBreeze functionality - control Sonos speakers and play audio streams
Critical gaps across all dimensions. Tool descriptions are present but minimal (10-50 chars, well below the 194-char baseline). Input schemas exist but lack parameter descriptions entirely, every parameter is undescribed, violating the 100% A+ baseline. No output schemas documented. Parameters lack enums, ranges, and constraints. Error handling is absent. Security concerns: authenticate/logout tools expose OAuth flow without secret injection guidance. No tool annotations (readOnlyHint/destructiveHint). Naming is verb-forward but generic (e.g., 'play_audio', 'stream_audio_file' are similar and could confuse LLM selection). No composition guidance or chaining IDs in responses.
Authenticate with CastBreeze API using OAuth 2.0 authorization code flow
Create a broadcast stream for audio streaming to Sonos devices
Get list of available Sonos devices from CastBreeze API
Clear stored authentication tokens and log out from CastBreeze
Play audio from a URL on a specified Sonos device
Set the volume level on a specified Sonos device
Stop audio playback on a specified Sonos device
Stream an audio file to a WebSocket endpoint for broadcast
All 8 tools lack parameter descriptions. Schema shows properties but zero documentation of what each parameter controls, expected format, or constraints. Violates 100% A+ baseline (all params must have descriptions).
No output schemas documented. LLMs cannot infer what fields get_devices, create_broadcast, or stream_audio_file return. Violates 100% A+ baseline (all tools must document return types).
Tool descriptions are 10 - 50 characters (well below 194-char baseline). 'Authenticate with CastBreeze API using OAuth 2.0 authorization code flow' is 68 chars but lacks WHEN to use, prerequisites, or what happens on success/failure. Descriptions must answer: What? When? What does it return?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 32 | 2026-07-28+ | v2 |
No error handling guidance. Tools like play_audio and stream_audio_file can fail (invalid device_id, unreachable URL, WebSocket timeout) but provide no recovery hints. LLM has no actionable next step on failure.
Naming ambiguity: play_audio and stream_audio_file both handle audio but differ in scope (device vs WebSocket endpoint). LLM may conflate them. Descriptions do not clarify when to use each.