Spotify MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SPOTIPY_CLIENT_ID | No | Your Spotify app client ID. Required for write operations (add_to_playlist, save_tracks, remove_saved_tracks). If not set, bundled client ID is used which only allows read and playback control. |
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
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| playA | Play or resume music. No arguments: resume. A track: give uri. An album, playlist or artist: give context_uri. One of the user's playlists: give playlist. Use URIs from search. |
| play_likedB | Play the user's Liked Songs (their favourites), shuffled unless shuffle=false. |
| pauseC | Pause playback. |
| nextB | Skip to the next track. |
| previousC | Go back to the previous track. |
| seekC | Jump to a position in the current track. Needs position_ms. |
| set_volumeC | Set the volume. Needs volume, 0 to 100. |
| shuffleC | Turn shuffle on or off. Needs state. |
| repeatC | Set repeat mode. Needs state. |
| get_current_trackB | The track playing now. |
| get_playback_stateB | Player state: device, volume, shuffle, repeat, track. |
| get_queueC | The next tracks in the queue. |
| get_devicesA | List Spotify devices: id, name, active, volume. |
| searchA | Search Spotify. Needs query. Returns URIs for play and add_to_queue. |
| add_to_queueC | Add a track to the queue. Needs uri. |
| get_playlistsC | List the user's playlists. |
| get_playlist_tracksC | List a playlist's tracks. Needs playlist_id. |
| add_to_playlistC | Add tracks to a playlist. Needs playlist_id and uris. |
| save_tracksC | Add tracks to Liked Songs. Needs track_ids. |
| remove_saved_tracksB | Remove tracks from Liked Songs. Needs track_ids. |
| get_saved_tracksB | List Liked Songs, newest first. |
| like_currentA | Save the playing track to Liked Songs. Changes the user's library. |
| add_current_to_playlistA | Add the playing track to one of the user's playlists. Needs playlist. Skipped if already there. Changes the user's library. |
| find_playlistA | Find the user's playlists by name. Needs query. Returns id and uri. |
| remove_from_playlistA | Remove a track from one of the user's playlists. Needs playlist and track. Destructive: changes the user's library. |
| create_playlistA | Create a playlist. Needs name. Private unless public=true. Changes the user's library. |
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 26 tools
Most tools target a distinct resource or action, and descriptions specify required inputs (uri, track_ids, playlist_id). The main overlap is get_current_track vs get_playback_state, plus several convenience wrappers (like_current, add_current_to_playlist) that duplicate broader tools, but inputs make them distinguishable.
All names use snake_case and are readable. Playback controls use bare verbs (play, pause, next, seek) while most others follow verb_noun (get_devices, add_to_queue), a minor deviation that does not impair predictability.
26 tools is borderline heavy for a Spotify integration. Playback, queue, search, playlist, and library operations are broad, but several convenience wrappers (like_current, add_current_to_playlist) duplicate functionality of more general tools, so the set could be trimmed.
Core playback, queue, search, Liked Songs, and playlist creation/addition/removal are well covered. Gaps include playlist update/delete and explicit device transfer, but the main workflows are supported without dead ends.