Spotify MCP has clear naming conventions (verb_noun pattern) and all 10 tools are explicitly registered with descriptions and Zod schemas. However, descriptions are minimal (avg ~60 chars, well below the 194-char baseline), parameter descriptions lack detail about constraints and formats, and output schemas are not documented. Error handling is absent, tools return raw API responses without recovery guidance. The 'spotify-search-and-play' and 'spotify-find-playlist' tools violate single-responsibility principle by combining search+action. No input validation, rate limiting, or permission checks.
Get the currently playing track
Debug Spotify configuration and connection
Get available Spotify playback devices
Find a playlist by name and play it (with optional shuffle)
Play a specific track by ID or URI
Play a specific playlist (with optional shuffle)
Get tracks from a specific playlist
Descriptions are too brief (avg 60 chars vs 194-char baseline). 'Search for tracks on Spotify by query' lacks context on when to use vs other tools, what fields are returned, or prerequisites.
No output schemas documented. Tools return raw API responses (e.g., searchTracks, playTrack) without specifying field names, types, or structure. LLMs cannot plan downstream calls or extract data reliably.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Get a list of the user's Spotify playlists
Search for tracks on Spotify by query (artist, track name, etc.)
Search for a track and play the top result
Parameter descriptions lack constraints. 'limit' params have no min/max bounds (e.g., spotify-search limit could be 0, 1000000, or negative). 'query' and 'name' params have no length limits or format guidance.
Composite tools violate single-responsibility principle. 'spotify-search-and-play' combines search + play; 'spotify-find-playlist' combines list + search + play. These should be split so agents can compose them independently.
No error handling or recovery guidance. Tools return raw errors (e.g., 'No tracks found') without suggesting next steps. Agents cannot distinguish retryable vs fatal errors or self-correct.