A Model Context Protocol server for Spotify integration
The server provides 18 well-structured tools with consistent naming conventions (verb-first pattern) and detailed parameter schemas using Zod validation. Descriptions are generally present and informative. However, there are significant gaps: output schemas are not documented (critical for LLM chaining), several tools lack descriptions for return values, error handling is present but often generic, and some parameter descriptions could be more precise about constraints and dependencies. The average tool definition quality is Fair (C grade), with strong schema validation but weaker LLM-facing documentation.
Add tracks or podcast episodes to a Spotify playlist. Accepts Spotify track IDs, episode IDs, or full Spotify URIs (e.g. spotify:episode:xxx).
Check if albums are saved in the user's "Your Music" library
Create a new playlist on Spotify
Get tracks from a specific album with pagination support
Get detailed information about one or more albums by their Spotify IDs
Get a list of the current user's playlists on Spotify
No output schemas documented for any tool. LLMs cannot infer return value structures, forcing them to guess what fields are available for downstream tool chaining. This violates the fundamental tool composition pattern.
Parameter descriptions in some tools lack constraint documentation. For example, playMusic accepts 'uri', 'context_uri', 'type', and 'id' but the description does not clearly specify mutual exclusivity: should the LLM pass uri OR (type+id), not both? This creates ambiguity.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 63 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 51 | - | v1 |
Get information about the currently playing track on Spotify, including device and volume info
Get details of a specific Spotify playlist including tracks count, description and owner
Pause Spotify playback on the active device
Start playing a Spotify track, album, artist, or playlist. Pass a Spotify URI (e.g. spotify:track:xxx, spotify:album:xxx) via "uri". For albums/playlists you can also use "context_uri". Device is selected automatically — "deviceId" or "device_id" are optional.
Remove one or more tracks from a Spotify playlist (max 100 tracks per request)
Reorder a range of tracks within a Spotify playlist by moving them to a new position
Save or remove albums from the user's "Your Music" library
Search for tracks, albums, artists, playlists, podcast episodes, or shows on Spotify. For episodes and shows, the query matches against title, description, and publisher. Use type "episode" to find individual podcast episodes by topic or guest name, and type "show" to find podcast series.
Skip to the next track in the current Spotify playback queue
Skip to the previous track in the current Spotify playback queue
Remove a playlist from the current user's library (unfollow). Note: Spotify does not allow permanent deletion of playlists via the API.
Update the details of a Spotify playlist (name, description, public/private, collaborative)
Alias parameters (e.g., 'album_id' as alias for 'albumId', 'ids' as alias for 'albumIds') introduce unnecessary complexity and increase cognitive load on LLMs. The server should normalize to one canonical name per parameter.
Error handling is present (try-catch blocks visible in source) but generic. Error responses like 'Error getting albums: <message>' do not guide the LLM on what to do next. No recovery suggestions or error classification (retryable vs. fatal).
getNowPlaying has empty input schema (no parameters), but the description does not clarify whether this returns data for the active device, the current user's primary device, or all devices. Schema score is 60 due to lack of clarity.
No rate limiting or timeout configuration visible in the code. Token refresh is proactively managed (45-minute interval), but no per-tool timeouts or rate guards exist. An agent in a retry loop could hammer the Spotify API.
Pagination is supported (limit, offset parameters) but the maximum result set is not enforced by the tools themselves. The Spotify SDK may return large result sets; tools should cap responses at 20-50 items and document this in descriptions.