spotify-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SPOTIFY_CLIENT_ID | Yes | Spotify Client ID from your Spotify app (required for OAuth PKCE login). No secret needed since this uses PKCE. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pingA | Health-check tool: confirms the MCP server is reachable and tools can be called. |
| liked_songsA | List the user's saved ("Liked Songs") tracks. limit is capped at 50 by Spotify — pass a higher offset in a follow-up call to page through more (the user may have hundreds or thousands of saved tracks). |
| like_tracksA | Save one or more tracks to the user's Liked Songs. track_ids come from search_track / playlist_tracks / top_tracks. Note: Spotify restricts this endpoint to apps with "Extended Quota Mode" approval — it may fail with a permissions error on apps that don't have it. |
| unlike_tracksA | Remove one or more tracks from the user's Liked Songs. Note: Spotify restricts this endpoint to apps with "Extended Quota Mode" approval — it may fail with a permissions error on apps that don't have it. |
| top_tracksA | Get the user's most-listened-to tracks. time_range: short_term (~4 weeks), medium_term (~6 months, default), or long_term (years). |
| top_artistsA | Get the user's most-listened-to artists. time_range: short_term (~4 weeks), medium_term (~6 months, default), or long_term (years). |
| recently_playedA | Get the user's most recently played tracks, most recent first. |
| now_playingA | Get the track currently playing on the user's Spotify account, if any. |
| pauseA | Pause playback on the user's active Spotify device. |
| resumeA | Resume/start playback on the user's active Spotify device. |
| skip_nextA | Skip to the next track on the user's active Spotify device. |
| skip_previousA | Skip to the previous track on the user's active Spotify device. |
| set_playback_volumeA | Set playback volume on the user's active Spotify device. volume_percent: 0-100. |
| queue_trackA | Add a track to the playback queue. track_id comes from search_track. |
| shuffleA | Turn shuffle mode on or off on the user's active Spotify device. |
| repeat_modeA | Set repeat mode on the user's active Spotify device. mode: "track" (repeat the current track), "context" (repeat the current playlist/album), or "off". |
| seekA | Seek to a position (in milliseconds) in the currently playing track. |
| list_devicesA | List the Spotify devices currently known to the user's account (phone, desktop app, web player, speakers, ...), including which one (if any) is active. Use this to see what's available before calling activate_device — the Spotify API can only control a device that's already open somewhere, it can't launch Spotify from nothing. |
| activate_deviceA | Switch playback to a specific device (from list_devices) and optionally start playing on it. |
| list_user_playlistsA | List the logged-in user's Spotify playlists. |
| playlist_tracksA | List the tracks in a playlist, including each track's id (needed by add_tracks / remove_tracks_from_playlist). playlist_id comes from list_user_playlists. |
| create_user_playlistA | Create a new playlist in the logged-in user's Spotify account. ⚠️ |
| add_tracksA | Add one or more tracks to a playlist. playlist_id and track_ids come from create_user_playlist / list_user_playlists and search_track. |
| remove_tracksA | Remove one or more tracks from a playlist. playlist_id and track_ids come from list_user_playlists and playlist_tracks. |
| find_playlistsA | Search Spotify for existing curated playlists matching a query (e.g. 'lofi coding beats'). Use this to recommend/discover an existing playlist. Note: tracks inside a playlist you don't own can't be read via this API (only its name/description/owner) — playlist_tracks only works on your own playlists. |
| search_trackA | Search Spotify's catalog for tracks matching a query (song name, artist, etc.). Each result includes its id, for use with add_tracks / queue_track. |
| import_youtube_playlistA | Extract a tracklist from a YouTube video's chapters or description (for videos that list their songs — mixes, compilations, study/focus playlists, etc.), look each one up on Spotify, and add whatever matches to a new playlist. Best-effort: only works for videos with a written tracklist (no audio recognition); entries are skipped rather than guessed when the Spotify result's artist doesn't match the tracklist entry's artist (common for "unreleased"/"coming soon" tracks that aren't on Spotify at all). ⚠️ |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| build_playlist | Build a Spotify playlist around a theme, using the model's own music knowledge instead of generic search phrases. |
| listening_recap | Summarize the user's current Spotify listening: now playing, top tracks, and recently played. |
| import_youtube_mix | Import a YouTube mix/compilation video's tracklist into a new Spotify playlist. |
| start_listening | Get music playing: check what's already active, or help pick a device if nothing is. |
| curate_from_liked | Build a new playlist from a subset of the user's Liked Songs that fits some criteria (mood, era, genre feel, ...). |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| now_playing_resource | The track currently playing on the logged-in user's account, if any. |
| playlists_resource | The logged-in user's Spotify playlists. |
| profile_resource | The logged-in user's basic Spotify profile (id, display name, follower count, profile URL/image). |
| dashboard_resource | A one-shot snapshot of the user's Spotify state — what's playing, available devices, top tracks, and recently played — everything a host might want to show at a glance, without several separate tool calls. |
TDQS
Scored across 27 tools
Most tools clearly target a distinct resource and action: devices, playlists, playback modes, liked songs, and search are easy to tell apart. The only minor overlaps are resume vs activate_device (both can start playback) and add_tracks vs queue_track, but their targets are clearly described.
Snake_case is used consistently and many tools follow a verb_noun pattern such as list_devices, create_user_playlist, and unlike_tracks. However, several tools are noun or state phrases instead of commands (playlist_tracks, liked_songs, top_tracks, repeat_mode), and similar operations use different verbs like list_user_playlists vs find_playlists.
27 tools is heavy and just past the 25 threshold, but Spotify's domain spans playback, playlists, library, and search, so most tools have a distinct purpose. A few tools like ping and the many single-purpose playback controls add bulk and could be consolidated.
Core workflows are covered: searching tracks, creating and editing playlists, controlling playback, and viewing listening history. Obvious gaps include no playlist update/delete/reorder, no ability to play a specific playlist or album context, and no artist/album search, so some lifecycle flows dead-end.