
A fork of the original Spotify MCP that adds smart batching and large playlist tools on top of standard playback control, search, and queue management. The enhancements let you add or remove up to 100 tracks per API call and efficiently paginate through thousand-track playlists, cutting API usage by 60-80% for bulk operations. Built on FastMCP with typed schemas, progress notifications, and destructive action confirmations. Requires a Spotify Premium account and OAuth setup through the developer dashboard. Useful when you need Claude to build or reorganize large playlists, bulk-add search results to a queue, or handle discovery workflows that would otherwise hammer the Spotify API with dozens of single-track calls.
Public tool metadata for what this MCP can expose to an agent.
track.statsGet stream count and metadata for a Spotify track. Returns title, artist, total play count, duration in ms, content rating, track number, album info, and artist info.1 paramsGet stream count and metadata for a Spotify track. Returns title, artist, total play count, duration in ms, content rating, track number, album info, and artist info.
track_idstringalbum.statsGet album statistics with per-track stream counts. Returns album name, type, release date, label, copyright, cover art, per-track stream counts and durations, and related albums.1 paramsGet album statistics with per-track stream counts. Returns album name, type, release date, label, copyright, cover art, per-track stream counts and durations, and related albums.
album_idstringartist.statsGet artist statistics including monthly listeners and top tracks. Returns monthly listeners, follower count, world rank, top 5 listener cities, top 10 tracks with stream counts, biography, external links, albums, singles, and verified status.1 paramsGet artist statistics including monthly listeners and top tracks. Returns monthly listeners, follower count, world rank, top 5 listener cities, top 10 tracks with stream counts, biography, external links, albums, singles, and verified status.
artist_idstringsearchSearch Spotify for artists, albums, tracks, and playlists. Returns matching results across all types. Track results include current stream counts.1 paramsSearch Spotify for artists, albums, tracks, and playlists. Returns matching results across all types. Track results include current stream counts.
qstringartist.getGet metadata for one or more artists in a single request. Returns artist names, images, genres, and follower counts.1 paramsGet metadata for one or more artists in a single request. Returns artist names, images, genres, and follower counts.
idsstringartist.overviewGet overview data for an artist. Returns detailed artist profile including biography, images, top tracks, discography summary, and related artists.1 paramsGet overview data for an artist. Returns detailed artist profile including biography, images, top tracks, discography summary, and related artists.
artist_idstringartist.albumsGet all albums in an artist's discography, paginated. Returns album names, IDs, types, release dates, and cover art.3 paramsGet all albums in an artist's discography, paginated. Returns album names, IDs, types, release dates, and cover art.
artist_idstringlimitintegeroffsetintegerartist.singlesGet all singles in an artist's discography, paginated. Returns single names, IDs, release dates, and cover art.3 paramsGet all singles in an artist's discography, paginated. Returns single names, IDs, release dates, and cover art.
artist_idstringlimitintegeroffsetintegerartist.relatedGet artists similar to the given artist. Returns a list of related artists with their names, IDs, images, and follower counts.1 paramsGet artists similar to the given artist. Returns a list of related artists with their names, IDs, images, and follower counts.
artist_idstringalbum.getGet metadata for one or more albums in a single request. Returns album names, artists, release dates, track listings, and cover art.1 paramsGet metadata for one or more albums in a single request. Returns album names, artists, release dates, track listings, and cover art.
idsstringtrack.getGet metadata for one or more tracks in a single request. Returns track names, artists, albums, durations, and preview URLs.1 paramsGet metadata for one or more tracks in a single request. Returns track names, artists, albums, durations, and preview URLs.
idsstringtrack.previewGet preview audio URL for a Spotify track. Returns a short preview URL that can be used to listen to a snippet of the track.1 paramsGet preview audio URL for a Spotify track. Returns a short preview URL that can be used to listen to a snippet of the track.
track_idstringplaylist.getGet metadata for a Spotify playlist. Returns playlist name, description, owner, follower count, and cover image.1 paramsGet metadata for a Spotify playlist. Returns playlist name, description, owner, follower count, and cover image.
playlist_idstringplaylist.tracksGet tracks in a Spotify playlist, paginated. Returns track names, artists, albums, durations, and add dates.3 paramsGet tracks in a Spotify playlist, paginated. Returns track names, artists, albums, durations, and add dates.
limitintegeroffsetintegerplaylist_idstringplaylist.permissionsGet permissions for a Spotify playlist. Returns whether the playlist is collaborative, public, and who can modify it.1 paramsGet permissions for a Spotify playlist. Returns whether the playlist is collaborative, public, and who can modify it.
playlist_idstring
mcp-name: io.github.jamiew/spotify-mcp
A local Python MCP server for searching Spotify, controlling playback, and managing playlists and Liked Songs from your MCP client. Runs over stdio with your Spotify account. This is a supported fork of varunneal/spotify-mcp.
The TypeScript edition supports local and hosted use, with a different MCP surface.
Requires Python 3.12+, uv, and Spotify Premium for playback.
http://127.0.0.1:8888 as its redirect URI, exactly as written.{
"mcpServers": {
"spotify": {
"command": "uvx",
"args": ["spotify-mcp-jamiew"],
"env": {
"SPOTIFY_CLIENT_ID": "your_client_id",
"SPOTIFY_CLIENT_SECRET": "your_client_secret",
"SPOTIFY_REDIRECT_URI": "http://127.0.0.1:8888"
}
}
}
}
Restart the client. On first use, a browser opens for Spotify authorization; the token is cached locally. Keep the client secret and token cache private. Playback needs an available Spotify Connect device, so open Spotify on the device you want to control.
Client-specific setup: Claude Desktop, Claude Code, and Codex. Use the same command and environment variables in each client's format.
The package command above uses the published package, which may lag this README's source changes. To run the current checkout:
git clone https://github.com/jamiew/spotify-mcp.git
cd spotify-mcp
uv sync
In the config above, change command to uv and args to
["--directory", "/absolute/path/to/spotify-mcp", "run", "spotify-mcp"].
Keep the same environment variables. Without cloning, use
uvx --from git+https://github.com/jamiew/spotify-mcp.git spotify-mcp.
Reauthorization: artist-follow checks need user-follow-read. Existing grants do not
receive new scopes automatically. Restart and complete Spotify authorization when prompted;
if access is still denied, review the app's grant in your Spotify account and reauthorize.
Do not automatically delete the auth cache.
28 tools, six resources (user, playback, track, playlist, artist, album), and five prompts. Tools provide typed outputs and behavior annotations; large playlist reads report progress. Playlist removal asks for confirmation where supported, reordering uses snapshot guards, and playback control attempts best-effort read-after-write confirmation, not guaranteed success.
| Tool | Does |
|---|---|
get_me | Read your profile |
search_music | Search tracks, albums, artists, or playlists with filters and pagination |
get_tracks | Read up to 50 tracks; individual reads when batching is unavailable |
get_artist | Read up to 50 artists; top tracks for a single artist |
get_album | Read up to 20 albums; track list for a single album |
get_playback_state | Read current track, device, progress, shuffle, and repeat |
control_playback | Play, pause, skip, seek, volume, shuffle, and repeat |
list_devices | List Spotify Connect devices |
transfer_playback | Move playback to another device |
get_queue | Read now playing and upcoming tracks |
add_to_queue | Queue a track |
list_playlists | List your playlists with pagination |
get_playlist | Read playlist metadata without tracks |
get_playlist_tracks | Read playlist tracks with pagination |
create_playlist | Create a private playlist; set public=true to publish |
update_playlist_details | Change name, description, or visibility |
add_tracks_to_playlist | Add up to 100 tracks |
remove_tracks_from_playlist | Remove tracks with confirmation where supported |
reorder_playlist | Move a block of tracks |
unfollow_playlist | Unfollow a playlist, including your own |
get_saved_tracks | Read Liked Songs with pagination |
save_tracks | Like tracks |
remove_saved_tracks | Unlike tracks |
check_saved_tracks | Check up to 50 tracks against Liked Songs |
check_saved_albums | Check up to 20 saved albums |
check_following_artists | Check up to 50 followed artists |
get_top_items | Read top artists or tracks over a time range |
get_recently_played | Read recently played tracks with timestamps |
offset + limit, not
the requested size. Individual-track fallback can make up to 50 Spotify requests.id: null. Local files also set is_local; positions remain valid for reordering.QUOTA_EXCEEDED and ordinary
rate limits with Retry-After when provided. No guaranteed quota reset time is specified.Shared versions and tool names do not imply drop-in compatibility with other implementations. Check arguments, limits, and result shapes before switching. Preserve any workflow that relies on this server's resources, five prompts, snapshot guards, removal confirmation, or playback confirmation; those behaviors are not universal.
MIT license, copyright 2025 Varun Neal Srivastava. Thanks to @varunneal for the original project, @jamiew, @jonico, @tedeuxx, and @karimStekelenburg.
Banner made with Glif.
SPOTIFY_CLIENT_ID*secretSpotify app Client ID from developer.spotify.com
SPOTIFY_CLIENT_SECRET*secretSpotify app Client Secret from developer.spotify.com
SPOTIFY_REDIRECT_URI*default: http://127.0.0.1:8888OAuth redirect URI registered in your Spotify app
com.transcriptapi/youtube-transcript-and-youtube-search