spotify-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SPOTIFY_CLIENT_ID | Yes | Your app's client id | |
| SPOTIFY_CLIENT_SECRET | Yes | Your app's client secret | |
| SPOTIFY_REFRESH_TOKEN | Yes | The token printed by auth_setup.py | |
| SPOTIFY_MCP_CONFIG_DIR | No | Where the token cache (tokens.json) lives | ~/.config/spotify-mcp |
| SPOTIFY_MCP_TOKEN_CACHE | No | Set to off to keep tokens in memory only | on |
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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| now_playingA | What's currently playing on Spotify (track, artist, album, progress). |
| playB | Resume playback, or play a specific track/album/playlist URI. |
| pauseB | Pause playback. |
| skipA | Skip to the next track. |
| previousB | Go to the previous track. |
| volumeB | Set playback volume 0-100. |
| seekB | Seek to a position (milliseconds) in the current track. |
| queueC | Add a track URI to the playback queue. |
| devicesA | List available playback devices (speakers, desktop apps, phone). |
| transferC | Move playback to a specific device by id. |
| searchC | Search tracks/artists/albums/playlists. Optional year & genre filters. |
| resolveB | Resolve a track name (e.g. 'Blinding Lights by The Weeknd') to its URI. |
| artist_catalogC | An artist's top tracks or album catalog (name/URI/URL accepted). |
| recommendationsB | Recommendations from seed tracks/artists/genres (Spotify has restricted this endpoint for newer apps; may return an explanatory error). |
| audio_featuresB | Audio features (tempo/energy/danceability) for a track (Spotify has restricted this endpoint for newer apps; may return an explanatory error). |
| recent_tracksC | Recently played tracks. |
| top_tracksC | Your top tracks over short/medium/long term. |
| playlist_listC | List your playlists (with ids + track counts). |
| playlist_getC | Get a playlist's details + tracks (paginated). |
| playlist_createC | Create a new playlist. |
| playlist_addB | Bulk-add songs (names or URIs) to a playlist. Auto-resolves names, dedupes, and chunks any number of songs up to Spotify's 10k/playlist ceiling. |
| playlist_removeA | Remove songs from a playlist. DESTRUCTIVE — needs confirm=true, else returns a dry-run preview. |
| playlist_reorderC | Move a track (or range) to a new position in a playlist. |
| playlist_renameC | Rename a playlist. |
| playlist_set_detailsC | Update a playlist's name / description / public flag. |
| playlist_emptyA | Remove ALL tracks from a playlist. DESTRUCTIVE — needs confirm=true. |
| playlist_deleteA | Delete (unfollow) a playlist. DESTRUCTIVE — needs confirm=true. |
| saved_tracksD | Your Liked Songs. |
| save_tracksB | Add songs (names or URIs) to Liked Songs. |
| unsave_tracksA | Remove songs from Liked Songs. DESTRUCTIVE — needs confirm=true. |
| saved_albumsC | Your saved albums. |
| save_albumsC | Save albums (ids/URIs/URLs). |
| unsave_albumsB | Remove saved albums. DESTRUCTIVE — needs confirm=true. |
| followed_artistsC | Artists you follow (needs follow scope — needs the user-follow-* scopes). |
| follow_artistsB | Follow artists (needs follow scope). |
| unfollow_artistsA | Unfollow artists. DESTRUCTIVE — needs confirm=true (needs follow scope). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 36 tools
Most tools target a clearly distinct resource or action, and the playback/library/playlist clusters are cleanly separated. The main overlap is playlist_rename versus playlist_set_details (both can change a playlist's name), and resolve versus search have related but distinguishable purposes.
Naming mixes conventions: single verbs (play, pause, skip), noun-first (saved_tracks, now_playing, top_tracks), verb_noun (save_albums, follow_artists), and noun_verb for the playlist_* family. The playlist_ prefix is internally consistent and everything stays readable, but there is no single predictable pattern across the server.
36 tools is on the heavy side, but the domain (playback control, library, discovery, and full playlist CRUD) genuinely warrants many operations. It sits at the borderline where a few tools (e.g. separate rename and set_details) could be consolidated.
Coverage is broad and coherent: playback, library management, search/discovery, and playlist lifecycle all have create/read/update/delete paths with sensible destructive guards. Minor gaps remain, e.g. shuffle/repeat mode toggles and dedicated album/artist detail retrieval.