The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Spotify Bulk Actions MCP listing page.
A Model Context Protocol (MCP) server for bulk Spotify operations - batch playlist creation, library exports, and large-scale library management.
What makes this different from other Spotify MCPs?
Made cause I can't not have headphones on, support my 80k+ pocast subscriptions.
| Directory | Link |
|---|---|
| PyPI | pypi.org/project/spotify-bulk-actions-mcp |
| mcp.so | mcp.so/server/spotify-bulk-actions-mcp |
| awesome-mcp-servers | PR #1541 (pending) |
| Project | Description | Links |
|---|---|---|
| recordOS | Which albums do you love most? A visual album collection app | Live · Repo |
| Festival Navigator | Navigate multi-day festivals with friends | Repo |
Coming soon: Switched On Pop, This American Life, and more podcast playlists
Library Analysis:
Listening Insights:
Bulk Playlist Creation:
Playlist Maintenance:
Bulk Library Actions:
Also on PyPI:
pip install spotify-bulk-actions-mcp- but you'll still need local.envand auth setup.
This opens a browser for you to log in:
After login, your token is saved locally in .spotify_cache/.
This server also runs as a remote MCP over streamable HTTP (MCP_TRANSPORT=http),
fronted by OAuth 2.1 (WorkOS AuthKit) with a fail-closed user allowlist. That's how
the author runs it: Cloud Run + Secret Manager for the Spotify refresh token, added
to claude.ai as a custom connector. Tools carry readOnlyHint/destructiveHint
annotations so clients can group read vs write actions. See Dockerfile and the
deploy notes in the parent collection repo.
Add this to your Claude Code settings (~/.claude/settings.local.json):
Restart Claude Code after adding this.
| Tool | Description |
|---|---|
check_auth_status | Verify Spotify auth is working |
get_followed_artists | Get all artists you follow |
get_saved_tracks | Get all your liked songs |
get_library_artists | Artists from saved songs, ranked by count |
get_albums_by_song_count | Albums with N+ saved songs |
export_library_summary | Complete library export |
| Tool | Description |
|---|---|
get_top_artists | Your top artists (short/medium/long term) |
get_top_tracks | Your top tracks (short/medium/long term) |
get_recently_played | Recently played tracks |
| Tool | Description |
|---|---|
follow_artists | Follow artists in bulk |
unfollow_artists | Unfollow artists in bulk |
save_tracks | Like/save tracks in bulk |
unsave_tracks | Un-like tracks in bulk |
| Tool | Description |
|---|---|
search_track | Search for a single track |
search_track_fuzzy | Broader search when exact fails |
batch_search_tracks | Search many tracks with confidence scores |
get_track_preview_url | Get 30-second preview URL |
| Tool | Description |
|---|---|
create_playlist | Create a new playlist |
add_tracks_to_playlist | Add tracks to existing playlist |
import_and_create_playlist | Full CSV → playlist workflow |
create_playlist_from_search_results | Create from batch search |
add_reviewed_tracks | Add reviewed/corrected tracks |
| Tool | Description |
|---|---|
get_playlist_info | Get playlist details |
update_playlist | Update name, description, public status |
get_playlist_tracks | Get all tracks in a playlist |
export_playlist_to_csv | Export a playlist to CSV |
compare_playlists | Shared vs unique tracks between two playlists |
find_duplicate_tracks | Find duplicates in a playlist |
remove_duplicate_tracks | Remove duplicates, keeping first occurrence |
remove_tracks_from_playlist | Bulk remove specific tracks |
reorder_playlist_tracks | Move tracks within a playlist |
| Tool | Description |
|---|---|
parse_song_list_csv | Validate a song CSV |
export_review_csv | Export uncertain matches for review |
Claude has an official Spotify connector (built by Spotify, April 2026). It's excellent at what it does — but its tool surface is small, and this MCP exists for everything it doesn't cover. As of August 2026 the official connector exposes 8 tools: Search Spotify, Create Playlist, Get Currently Playing, Add to Library, Remove from Library, Fetch Playlist Tracks, and two auth utilities.
| Capability | Official connector | This MCP |
|---|---|---|
| Search, playback context, mood playlists | ✅ | Search only |
| Create a playlist | ✅ | ✅ (plus CSV import w/ confidence scoring) |
| Add/remove Liked Songs | ✅ (one at a time) | ✅ bulk |
| Read your full library (saved tracks, followed artists) | ❌ | ✅ |
| Listening insights (top artists/tracks, recently played) | ❌ | ✅ |
| Edit existing playlists (bulk remove, reorder, update details) | ❌ | ✅ |
| Dedupe / compare / export playlists to CSV | ❌ | ✅ |
| Bulk follow/unfollow artists | ❌ | ✅ |
One more difference: the official connector runs on Spotify's partner-gated MCP gateway (no dynamic client registration; tokens from ordinary developer apps are rejected), so it's only usable inside partnered AI surfaces. This MCP runs under your own Spotify developer app — Development Mode limits apply (5 allowlisted users per Client ID as of February 2026), but you control it end to end.
Ask Claude:
"What artists do I have the most saved songs from?"
Claude will use get_library_artists and show you.
Ask Claude:
"Find albums where I have 6 or more saved songs"
Claude will use get_albums_by_song_count with min_songs=6.
"Create a playlist called 'My Mix' from this CSV: [paste CSV]"
Claude will:
For large lists (500+ songs):
batch_search_tracks with your song listexport_review_csv to get uncertain matchesadd_reviewed_tracks to add your correctionsThe server handles Spotify's rate limits automatically:
For 10k songs, expect the initial library fetch to take 2-3 minutes.
| Location | Purpose |
|---|---|
.env | Your Spotify credentials (gitignored) |
.spotify_cache/ | Auth tokens and cached data (gitignored) |
spotify_bulk_actions_mcp/server.py | Main MCP server |
spotify_bulk_actions_mcp/tools/ | Tool implementations |
"Not authenticated" error:
Rate limit errors: Wait a few minutes and try again. The server will auto-retry.
Token expired:
The server auto-refreshes tokens. If issues persist, re-run setup_auth.py.
.env (gitignored, never committed).spotify_cache/.env or token filesMIT
Made cause I can't not have headphones on. If this helps you, buy me a coffee!