Tool definitions are present with schemas and basic descriptions, but fall short of production quality. All 14 tools have input schemas and descriptions, but descriptions are generic (avg ~40 chars, well below the 194-char baseline for A+ tools). Parameter descriptions are minimal or absent. No output schemas documented. No error handling guidance. No tool annotations (readOnlyHint/destructiveHint). Missing parameter constraints (enums, ranges, formats). The server exposes Spotify API complexity directly rather than abstracting it into chat-friendly interfaces.
Get available playback devices
Get the current playback queue
Skip to next track
Get the currently playing track
Pause playback
Start or resume playback
Get user playlists
Descriptions are generic and under 50 characters (avg ~35 chars vs 194-char baseline). Examples: 'Get the currently playing track', 'Pause playback'. These lack context for LLM tool selection, WHEN to use the tool, and what it returns.
No output schemas documented. LLMs cannot plan downstream calls or extract required fields (e.g., what does spotify_search return? track IDs? URIs? metadata?). This forces agents to guess and wastes tokens on trial-and-error.
Parameter constraints missing. spotify_volume accepts 0-100 but no min/max in schema. spotify_search 'limit' has no bounds (1-50 mentioned in description but not enforced). spotify_repeat 'state' should be an enum (track|context|off) not free-form string. Enums prevent hallucinated values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Go to previous track
Add a track to the queue
Set repeat mode
Search for tracks, albums, artists, or playlists
Toggle shuffle mode
Transfer playback to a different device
Set playback volume
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish safe reads from destructive writes. spotify_pause and spotify_next are writes but unmarked. This violates current MCP spec (2026-07-28) which requires annotations for proper agent planning.
No error handling guidance. If spotify_play fails (device offline, invalid URI), the response likely contains a raw API error. No recovery hints for the agent (e.g., 'Try spotify_devices() to find an active device'). Agents cannot self-correct.