Spotify MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SPOTIFY_CLIENT_ID | Yes | Your Spotify Client ID from developer.spotify.com | |
| SPOTIFY_REDIRECT_URI | No | The redirect URI configured in your Spotify app | http://localhost:8888 |
| SPOTIFY_CLIENT_SECRET | Yes | Your Spotify Client Secret from developer.spotify.com |
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 |
|---|---|
| get_meA | Get the signed-in user's Spotify profile. |
| get_playback_stateA | Get the current playback state: track, device, progress, shuffle and repeat. |
| control_playbackA | Control Spotify playback. Requires Premium and an active device. |
| list_devicesA | List the user's available Spotify devices. |
| transfer_playbackA | Move playback to a different device (see list_devices). |
| search_musicA | Search Spotify for tracks, albums, artists, or playlists. |
| add_to_queueB | Add a track or podcast episode to the playback queue. |
| get_queueB | Get the current playback queue. Returns: Currently playing track and queue of upcoming tracks |
| get_tracksA | Get detailed information about one or more Spotify tracks. |
| get_artistA | Get details for one or more Spotify artists, batched into a single request. |
| get_playlistA | Get basic information about a Spotify playlist. |
| create_playlistB | Create a new Spotify playlist. |
| add_tracks_to_playlistB | Add tracks or podcast episodes to a playlist. |
| list_playlistsA | Get current user's playlists with pagination support. |
| get_playlist_tracksA | Get tracks from a playlist with full pagination support. |
| remove_tracks_from_playlistB | Remove tracks or podcast episodes from a playlist. |
| update_playlist_detailsC | Modify playlist details. |
| reorder_playlistA | Move a contiguous block of tracks to a new position within a playlist. |
| get_albumA | Get details for one or more Spotify albums, batched into a single request. |
| get_saved_tracksA | Get user's saved/liked tracks (Liked Songs library). |
| save_tracksA | Save (like) tracks to the user's library. |
| remove_saved_tracksA | Remove tracks from the user's saved (liked) tracks. |
| check_saved_tracksA | Check which tracks are already liked, without paging the whole library. |
| check_saved_albumsA | Check which albums are already saved to the library. |
| check_following_artistsA | Check up to 50 artist follows in upstream chunks of at most 40. |
| get_saved_albumsB | Get albums saved in the user's library. |
| save_albumsB | Save albums to the user's library. |
| remove_saved_albumsB | Remove albums from the user's library. |
| get_followed_artistsA | Get the artists the user follows. Paged by cursor, not offset. |
| follow_artistsA | Follow artists. Requires user-follow-modify; reauthorize if it is missing. |
| unfollow_artistsA | Unfollow artists. Requires user-follow-modify; reauthorize if it is missing. |
| follow_playlistA | Follow (save) a playlist so it appears in the user's library. |
| unfollow_playlistA | Unfollow a playlist, removing it from the user's library. |
| get_saved_showsA | Get the podcast shows saved in the user's library. |
| save_showsB | Save (follow) podcast shows to the user's library. |
| remove_saved_showsB | Remove podcast shows from the user's library. |
| check_saved_showsA | Check which podcast shows are already saved, in upstream chunks of 40. |
| check_saved_episodesA | Check which podcast episodes are already saved, in upstream chunks of 40. |
| get_show_episodesA | Get a podcast show's episodes, with the user's resume point for each. |
| get_saved_episodesA | Get the podcast episodes saved in the user's library. |
| save_episodesA | Save podcast episodes to the user's library. |
| remove_saved_episodesB | Remove podcast episodes from the user's library. |
| get_saved_audiobooksB | Get the audiobooks saved in the user's library. |
| check_saved_audiobooksA | Check which audiobooks are already saved, in upstream chunks of 40. |
| save_audiobooksB | Save audiobooks to the user's library. |
| remove_saved_audiobooksB | Remove audiobooks from the user's library. |
| get_recently_playedB | Get recently played tracks, most recent first. |
| get_top_itemsA | Get the user's top artists or tracks over a time range. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| discover_similar | Find artists similar to one you name, without a recommendations endpoint. |
| taste_profile | Summarize listening habits from top items and recent plays. |
| create_mood_playlist | Create a playlist based on mood and preferences. |
| analyze_large_playlist | Analyze a large playlist efficiently using pagination. |
| discover_music_systematically | Systematically discover music using search pagination. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| current_user | Current user's profile. |
| current_playback_resource | Current playback state. |
TDQS
Scored across 48 tools
Most tools target a clear resource+action pair (save_tracks vs check_saved_tracks vs get_saved_tracks, follow_artists vs check_following_artists), and descriptions explicitly cross-reference each other. The main soft spots are control_playback being a multi-action mega-tool that partly overlaps transfer_playback and add_to_queue, and the large family of save/remove/check/get library tools for six resource types that a hurried agent could mix up.
Nearly everything follows a verb_noun pattern (get_tracks, save_albums, remove_saved_shows, list_playlists, check_saved_episodes), with predictable get_/save_/remove_/check_ prefixes per resource. Minor deviations like get_me and control_playback (verb-only, multiplexed) are the only breaks in the pattern.
48 tools is heavy for a single MCP surface; the library-management matrix (get/save/remove/check for tracks, albums, shows, episodes, audiobooks, artists, playlists) alone accounts for ~20 tools. It mirrors the Spotify API faithfully, but many of these will rarely be selected and inflate the decision space for an agent.
Coverage is broad: playback control, queue, playlists with reorder, library CRUD across all media types, podcasts, audiobooks, and personalization. Gaps are mostly read-side detail endpoints — no get_show, get_episode, or get_audiobook metadata tools, and playlist deletion is only reachable via unfollow_playlist — but agents can work around these.