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? - Confidence scoring - Batch searches return HIGH/MEDIUM/LOW confidence for each match - Human-in-the-loop - Uncertain matches are exported for review, then re-imported - Bulk operations - Handle 500+ so
Add this skill
npx mdskills install khglynn/spotify-bulk-actions-mcpComprehensive Spotify bulk operations server with excellent tool variety and human-in-the-loop workflows
1<p align="center">2 <img src="logo.png" alt="Spotify Bulk Actions MCP" width="200">3</p>45# Spotify Bulk Actions MCP67<!-- mcp-name: io.github.khglynn/spotify-bulk-actions-mcp -->89A Model Context Protocol (MCP) server for bulk Spotify operations - **batch playlist creation, library exports, and large-scale library management.**1011**What makes this different from other Spotify MCPs?**12- **Confidence scoring** - Batch searches return HIGH/MEDIUM/LOW confidence for each match13- **Human-in-the-loop** - Uncertain matches are exported for review, then re-imported14- **Bulk operations** - Handle 500+ songs efficiently with rate limiting built-in15- **Library exports** - Export your complete library data16- **Podcast playlist focused** - Built specifically for importing song lists from podcast show notes1718---1920## Support This Project2122Made cause I can't not have headphones on, support my 80k+ pocast subscriptions. [](https://buymeacoffee.com/kevinhg)2324---2526## Listed On2728| Directory | Link |29|-----------|------|30| PyPI | [pypi.org/project/spotify-bulk-actions-mcp](https://pypi.org/project/spotify-bulk-actions-mcp/) |31| mcp.so | [mcp.so/server/spotify-bulk-actions-mcp](https://mcp.so/server/spotify-bulk-actions-mcp/khglynn) |32| awesome-mcp-servers | [PR #1541](https://github.com/punkpeye/awesome-mcp-servers/pull/1541) *(pending)* |3334---3536## Projects I've Built With This3738| Project | Description | Links |39|---------|-------------|-------|40| **recordOS** | Which albums do you love most? A visual album collection app | [Live](https://record-os.khglynn.com) · [Repo](https://github.com/khglynn/recordOS) |41| **Festival Navigator** | Navigate multi-day festivals with friends | [Repo](https://github.com/khglynn/festival-navigator) |4243### Playlists Maintained With This MCP44*Coming soon: Switched On Pop, This American Life, and more podcast playlists*4546---4748## What This Does4950**Library Analysis:**51- Get all your followed artists52- Get all saved/liked songs (handles libraries up to 10k songs)53- Find unique artists from your library ranked by song count54- Find albums where you have 6+ saved songs (great for vinyl shopping!)55- Export your complete library summary5657**Bulk Playlist Creation:**58- Import song lists from CSV files (for podcast playlists, etc.)59- Batch search with confidence scoring (HIGH/MEDIUM/LOW)60- Automatic handling of uncertain matches for human review61- Create playlists from search results6263## Quick Start6465### 1. Prerequisites6667- Python 3.10+68- A Spotify account69- Spotify Developer credentials ([get them here](https://developer.spotify.com/dashboard))7071### 2. Clone & Setup7273```bash74# Clone the repo75git clone https://github.com/khglynn/spotify-bulk-actions-mcp.git76cd spotify-bulk-actions-mcp7778# Create and activate virtual environment79python -m venv venv80source venv/bin/activate # On Windows: venv\Scripts\activate8182# Install the package83pip install -e .8485# Copy env example and add your credentials86cp .env.example .env87# Edit .env with your SPOTIFY_CLIENT_ID and SPOTIFY_CLIENT_SECRET88```8990> **Also on PyPI:** `pip install spotify-bulk-actions-mcp` - but you'll still need local `.env` and auth setup.9192### 3. Authenticate with Spotify (One-Time)9394This opens a browser for you to log in:9596```bash97python setup_auth.py98```99100After login, your token is saved locally in `.spotify_cache/`.101102### 4. Test It Works103104```bash105source venv/bin/activate106python -c "from src.utils.auth import is_authenticated; print('Auth OK!' if is_authenticated() else 'Not authenticated')"107```108109### 5. Connect to Claude Code110111Add this to your Claude Code settings (`~/.claude/settings.local.json`):112113```json114{115 "mcpServers": {116 "spotify": {117 "command": "/path/to/spotify-bulk-actions-mcp/venv/bin/python",118 "args": ["/path/to/spotify-bulk-actions-mcp/src/server.py"]119 }120 }121}122```123124Restart Claude Code after adding this.125126## Available Tools (18)127128### Library Analysis129| Tool | Description |130|------|-------------|131| `check_auth_status` | Verify Spotify auth is working |132| `get_followed_artists` | Get all artists you follow |133| `get_saved_tracks` | Get all your liked songs |134| `get_library_artists` | Artists from saved songs, ranked by count |135| `get_albums_by_song_count` | Albums with N+ saved songs |136| `export_library_summary` | Complete library export |137138### Search139| Tool | Description |140|------|-------------|141| `search_track` | Search for a single track |142| `search_track_fuzzy` | Broader search when exact fails |143| `batch_search_tracks` | Search many tracks with confidence scores |144| `get_track_preview_url` | Get 30-second preview URL |145146### Playlists147| Tool | Description |148|------|-------------|149| `create_playlist` | Create a new playlist |150| `add_tracks_to_playlist` | Add tracks to existing playlist |151| `import_and_create_playlist` | Full CSV → playlist workflow |152| `create_playlist_from_search_results` | Create from batch search |153| `add_reviewed_tracks` | Add reviewed/corrected tracks |154| `get_playlist_info` | Get playlist details |155156### Utilities157| Tool | Description |158|------|-------------|159| `parse_song_list_csv` | Validate a song CSV |160| `export_review_csv` | Export uncertain matches for review |161162## Example Workflows163164### Get Your Library Stats165166Ask Claude:167> "What artists do I have the most saved songs from?"168169Claude will use `get_library_artists` and show you.170171### Find Albums for Vinyl172173Ask Claude:174> "Find albums where I have 6 or more saved songs"175176Claude will use `get_albums_by_song_count` with `min_songs=6`.177178### Create Playlist from Song List1791801. Create a CSV file:181```csv182title,artist183Bohemian Rhapsody,Queen184Hotel California,Eagles185Billie Jean,Michael Jackson186```1871882. Ask Claude:189> "Create a playlist called 'My Mix' from this CSV: [paste CSV]"190191Claude will:1921. Parse the CSV1932. Search each song with confidence scoring1943. Create the playlist with high-confidence matches1954. Show you uncertain matches to review196197### Bulk Podcast Playlist198199For large lists (500+ songs):2001. Ask Claude to use `batch_search_tracks` with your song list2012. Review the results (HIGH goes in automatically)2023. Use `export_review_csv` to get uncertain matches2034. Review/correct in a spreadsheet2045. Use `add_reviewed_tracks` to add your corrections205206## Rate Limits207208The server handles Spotify's rate limits automatically:209- Small delays between API calls210- Automatic retry on 429 errors211- Caching to reduce repeat calls212213For 10k songs, expect the initial library fetch to take 2-3 minutes.214215## Files & Data216217| Location | Purpose |218|----------|---------|219| `.env` | Your Spotify credentials (gitignored) |220| `.spotify_cache/` | Auth tokens and cached data (gitignored) |221| `src/server.py` | Main MCP server |222| `src/tools/` | Tool implementations |223224## Troubleshooting225226**"Not authenticated" error:**227```bash228python setup_auth.py229```230231**Rate limit errors:**232Wait a few minutes and try again. The server will auto-retry.233234**Token expired:**235The server auto-refreshes tokens. If issues persist, re-run `setup_auth.py`.236237## Security Notes238239- Your credentials are in `.env` (gitignored, never committed)240- Auth tokens are stored locally in `.spotify_cache/`241- Never share your `.env` or token files242- If credentials are exposed, rotate them in Spotify Dashboard243244## License245246MIT247248---249250Made cause I can't not have headphones on. If this helps you, [buy me a coffee](https://buymeacoffee.com/kevinhg)!251
Full transparency — inspect the skill content before installing.