Spotify Model Context Protocol (MCP) Server for LLM Playback Control, Curation & Discovery
23 tools with consistent naming (verb_noun pattern) and reasonable descriptions (avg ~120 chars). All tools have input schemas with type definitions and parameter descriptions. However, output schemas are not documented in the source code, LLMs cannot predict return structures. Parameter descriptions lack constraints (enums, ranges, formats) for many fields. Error handling and recovery guidance are absent. No tool annotations (readOnlyHint/destructiveHint) despite clear risk stratification (13 READ_ONLY, 10 WRITE). Missing idempotency guidance for write operations.
Add a track or episode to the user's playback queue.
Fetch metadata and complete tracklist for a Spotify album including name, artists, release date, label, popularity, and tracks list.
Fetch metadata for a specific Spotify artist including bio, genres, popularity score, follower count, and external URLs.
Fetch top 10 tracks for a specific artist by country market.
Retrieve all available Spotify Connect devices connected to the user's account.
Fetch currently playing track/episode metadata.
Output schemas not documented. LLMs cannot predict return structures or plan downstream tool calls. No documentation of pagination, field names, or data types returned by any tool.
Missing tool annotations. 10 WRITE tools (spotify_play, spotify_pause, spotify_skip_to_next, etc.) lack destructiveHint annotation. 13 READ_ONLY tools lack readOnlyHint. Agents cannot distinguish safe from risky operations without explicit hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Fetch current playback state including active device, progress, and track.
Fetch the user's current playback queue including currently playing track and upcoming tracks.
Fetch user's recently played tracks with optional limit for pagination.
Fetch user's saved ('Liked Songs') tracks with optional limit and offset for pagination.
Fetch user's top listened artists over a specified time range with optional limit and offset for pagination.
Fetch user's top listened tracks over a specified time range with optional limit and offset for pagination.
Fetch current authenticated user's profile details including display name, email, product subscription, country, followers, and profile image.
Pause playback on the active Spotify device.
Start a new context/tracklist or resume current playback.
Search the Spotify catalog across tracks, artists, albums, playlists, etc.
Seek to a specific timestamp in the currently playing track.
Set the playback repeat mode ('off', 'track', 'context').
Set the playback volume percentage on the active device.
Skip to the next track in the user's queue or active context.
Skip to the previous track in the user's active context.
Toggle shuffle mode on or off.
Transfer active playback to a specified Spotify Connect device.
Parameter constraints missing. 'time_range' accepts 'long_term'|'medium_term'|'short_term' but no enum constraint shown. 'limit' and 'offset' lack min/max bounds. 'repeat_mode' state values ('off'|'track'|'context') not formalized as enum. LLMs will hallucinate invalid values.
No error handling or recovery guidance. Tools lack descriptions of failure modes, retryability, or next steps. E.g., 'device_id not found' or 'no active playback' errors will not guide the LLM toward recovery.
Idempotency not documented for write operations. Tools like spotify_play, spotify_add_to_queue lack guidance on whether repeated calls with identical parameters are safe. Agents may retry on ambiguous failures, causing duplicate side effects.