io.github.khglynn/spotify-bulk-actions-mcp
PYPI · SPOTIFY-BULK-ACTIONS-MCP · SCANNED SEP 20
MCP server for bulk Spotify operations - batch playlist creation, exports, management
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 2 of 33 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency31
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: the license (MIT License) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 281 days ago).Pass
- Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability79
- AI-judged instruction clarity (excellent).Pass
- Tool/resource definitions use about 1811 tokens (~56/item across 32 items; 32 tools + 0 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management87
- Stability observed for 26 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "unsave_tracks" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 33 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
How do I install the io.github.khglynn/spotify-bulk-actions-mcp server?
io.github.khglynn/spotify-bulk-actions-mcp runs locally as a PyPI package, launched with uvx spotify-bulk-actions-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · spotify-bulk-actions-mcp
claude mcp add khglynn-spotify-bulk-actions-mcp -- uvx spotify-bulk-actions-mcp
{
"mcpServers": {
"khglynn-spotify-bulk-actions-mcp": {
"command": "uvx",
"args": [
"spotify-bulk-actions-mcp"
]
}
}
} {
"servers": {
"khglynn-spotify-bulk-actions-mcp": {
"command": "uvx",
"args": [
"spotify-bulk-actions-mcp"
]
}
}
} codex mcp add khglynn-spotify-bulk-actions-mcp -- uvx spotify-bulk-actions-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"khglynn-spotify-bulk-actions-mcp": {
"type": "local",
"command": [
"uvx",
"spotify-bulk-actions-mcp"
],
"enabled": true
}
}
} openclaw mcp add khglynn-spotify-bulk-actions-mcp --command uvx --arg spotify-bulk-actions-mcp
mcp_servers:
khglynn-spotify-bulk-actions-mcp:
command: "uvx"
args: ["spotify-bulk-actions-mcp"] {
"McpServers": {
"khglynn-spotify-bulk-actions-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"spotify-bulk-actions-mcp"
]
}
}
} assistant mcp add khglynn-spotify-bulk-actions-mcp -t stdio -c uvx -a spotify-bulk-actions-mcp
{
"mcpServers": {
"khglynn-spotify-bulk-actions-mcp": {
"command": "uvx",
"args": [
"spotify-bulk-actions-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 19 Sept 26 +1
- Security disclosure: fail → unverified ▼ functional
- 18 Sept 26 −3
- Stability: pass → 0.80 functional
- 17 Sept 26 0
- Stability: 0.97 → pass security
- 16 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Sept 26 0
- Security disclosure: unverified → fail ▼ functional
- 14 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.
- 13 Sept 26 0
- Security disclosure: fail → unverified ▼ functional
- 12 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed pypi/spotify-bulk-actions-mcp@0.1.1
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 33 packages
| Packages resolved | 33 |
|---|---|
| Stale | 2 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_reviewed_tracks Add Reviewed Tracks ~99
Add tracks from a reviewed CSV to an existing playlist. Use this after reviewing uncertain matches from a batch search. The CSV should have an 'action' column: - 'approve': Add the matched track - 'reject': Skip this track - spotify:track:xxx: Use this specific URI instead
| Name | Type | Req | Description |
|---|---|---|---|
| playlist_id | string | yes | Existing playlist ID |
| reviewed_csv | string | yes | Reviewed CSV content with 'action' column |
Structured output declared, but exposes no named fields.
No examples provided.
add_tracks_to_playlist Add Tracks To Playlist ~56
Add tracks to an existing playlist. Handles batching automatically (Spotify max 100 per request).
| Name | Type | Req | Description |
|---|---|---|---|
| playlist_id | string | yes | Playlist ID (not URI) |
| track_uris | array | yes | List of Spotify track URIs |
Structured output declared, but exposes no named fields.
No examples provided.
batch_search_tracks Batch Search Tracks ~106
Search for multiple tracks with confidence scoring. Categorizes results: - HIGH (>= 90%): Safe to auto-add - MEDIUM (70-89%): Should review - LOW (< 70%): Needs attention - NOT FOUND: No results
| Name | Type | Req | Description |
|---|---|---|---|
| delay_seconds | number | – | Delay between API calls (default 0.2s for rate limiting) |
| songs | array | yes | List of {"title": "...", "artist": "..."} dicts |
Structured output declared, but exposes no named fields.
No examples provided.
check_auth_status Check Auth Status ~26
Check if Spotify authentication is set up and working. Returns current user info if authenticated.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
compare_playlists Compare Playlists ~45
Compare two playlists to find shared and unique tracks.
| Name | Type | Req | Description |
|---|---|---|---|
| playlist_id_1 | string | yes | First playlist ID |
| playlist_id_2 | string | yes | Second playlist ID |
Structured output declared, but exposes no named fields.
No examples provided.
create_playlist Create Playlist ~46
Create a new Spotify playlist.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Playlist description |
| name | string | yes | Playlist name |
| public | boolean | – | Whether playlist is public (default False) |
Structured output declared, but exposes no named fields.
No examples provided.
create_playlist_from_search_results Create Playlist From Search Results ~112
Create a playlist from batch search results.
| Name | Type | Req | Description |
|---|---|---|---|
| batch_results | object | yes | Results from batch_search_tracks |
| description | string | – | Playlist description |
| include_confidence | string | – | Which confidence levels to include: - "high": Only >= 90% matches (safest) - "high_medium": >= 70% matches - "all": All matches (use with caution) |
| name | string | yes | Playlist name |
| public | boolean | – | Whether playlist is public |
Structured output declared, but exposes no named fields.
No examples provided.
export_library_summary Export Library Summary ~53
Export a complete summary of your Spotify library. Includes: - Followed artists - Top artists by saved song count - Albums with most saved songs
| Name | Type | Req | Description |
|---|---|---|---|
| use_cache | boolean | – | Use cached data if available |
Structured output declared, but exposes no named fields.
No examples provided.
export_playlist_to_csv Export Playlist To Csv ~37
Export a playlist to CSV format. Great for backing up playlists or sharing song lists.
| Name | Type | Req | Description |
|---|---|---|---|
| playlist_id | string | yes | Playlist ID |
Structured output declared, but exposes no named fields.
No examples provided.
export_review_csv Export Review Csv ~35
Export medium/low confidence matches to a CSV for human review.
| Name | Type | Req | Description |
|---|---|---|---|
| batch_results | object | yes | Results from batch_search_tracks |
Structured output declared, but exposes no named fields.
No examples provided.
find_duplicate_tracks Find Duplicate Tracks ~26
Find duplicate tracks in a playlist.
| Name | Type | Req | Description |
|---|---|---|---|
| playlist_id | string | yes | Playlist ID |
Structured output declared, but exposes no named fields.
No examples provided.
follow_artists Follow Artists ~29
Follow artists on Spotify.
| Name | Type | Req | Description |
|---|---|---|---|
| artist_ids | array | yes | List of Spotify artist IDs to follow |
Structured output declared, but exposes no named fields.
No examples provided.
get_albums_by_song_count Get Albums By Song Count ~64
Find albums where you have N or more saved songs. Great for finding albums worth buying on vinyl!
| Name | Type | Req | Description |
|---|---|---|---|
| min_songs | integer | – | Minimum saved songs to include album (default 6) |
| use_cache | boolean | – | Use cached data if available |
Structured output declared, but exposes no named fields.
No examples provided.
get_followed_artists Get Followed Artists ~38
Get all artists you follow on Spotify.
| Name | Type | Req | Description |
|---|---|---|---|
| use_cache | boolean | – | Use cached data if available (faster, default True) |
Structured output declared, but exposes no named fields.
No examples provided.
get_library_artists Get Library Artists ~59
Get unique artists from your saved songs, sorted by song count. This shows artists you have saved songs from (even if not followed), ranked by how many songs you've saved.
| Name | Type | Req | Description |
|---|---|---|---|
| use_cache | boolean | – | Use cached data if available |
Structured output declared, but exposes no named fields.
No examples provided.
get_playlist_info Get Playlist Info ~25
Get information about a playlist.
| Name | Type | Req | Description |
|---|---|---|---|
| playlist_id | string | yes | Playlist ID |
Structured output declared, but exposes no named fields.
No examples provided.
get_playlist_tracks Get Playlist Tracks ~26
Get all tracks from a playlist.
| Name | Type | Req | Description |
|---|---|---|---|
| playlist_id | string | yes | Playlist ID |
Structured output declared, but exposes no named fields.
No examples provided.
get_recently_played Get Recently Played ~31
Get your recently played tracks.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Number of results (max 50) |
Structured output declared, but exposes no named fields.
No examples provided.
get_saved_tracks Get Saved Tracks ~56
Get all your liked/saved songs on Spotify. Note: This may take 1-2 minutes for large libraries (10k songs).
| Name | Type | Req | Description |
|---|---|---|---|
| use_cache | boolean | – | Use cached data if available (faster, default True) |
Structured output declared, but exposes no named fields.
No examples provided.
get_top_artists Get Top Artists ~85
Get your top artists based on listening history. Great for understanding your music taste and finding festival lineups.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Number of results (max 50) |
| time_range | string | – | Time period: - "short_term": Last 4 weeks - "medium_term": Last 6 months (default) - "long_term": All time |
Structured output declared, but exposes no named fields.
No examples provided.
get_top_tracks Get Top Tracks ~72
Get your top tracks based on listening history.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Number of results (max 50) |
| time_range | string | – | Time period: - "short_term": Last 4 weeks - "medium_term": Last 6 months (default) - "long_term": All time |
Structured output declared, but exposes no named fields.
No examples provided.
get_track_preview_url Get Track Preview Url ~42
Get the 30-second preview URL for a track.
| Name | Type | Req | Description |
|---|---|---|---|
| track_uri | string | yes | Spotify track URI (e.g., "spotify:track:xxx") |
Structured output declared, but exposes no named fields.
No examples provided.
import_and_create_playlist Import And Create Playlist ~104
Full workflow: Parse song list CSV, search all tracks, create playlist. This is the main tool for bulk playlist creation from a list of songs.
| Name | Type | Req | Description |
|---|---|---|---|
| csv_content | string | yes | CSV content with columns: title, artist |
| description | string | – | Playlist description |
| include_confidence | string | – | "high", "high_medium", or "all" |
| name | string | yes | Playlist name |
| public | boolean | – | Whether playlist is public |
Structured output declared, but exposes no named fields.
No examples provided.
parse_song_list_csv Parse Song List Csv ~42
Parse a CSV of songs into a structured list. Use this to validate your CSV before batch searching.
| Name | Type | Req | Description |
|---|---|---|---|
| csv_content | string | yes | CSV content as string |
Structured output declared, but exposes no named fields.
No examples provided.
remove_duplicate_tracks Remove Duplicate Tracks ~55
Remove duplicate tracks from a playlist, keeping the first occurrence. For safety, returns a preview unless confirm=True.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | Set to True to actually remove duplicates |
| playlist_id | string | yes | Playlist ID |
Structured output declared, but exposes no named fields.
No examples provided.
remove_tracks_from_playlist Remove Tracks From Playlist ~67
Remove specific tracks from a playlist. For safety, returns a preview unless confirm=True.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | Set to True to actually remove |
| playlist_id | string | yes | Playlist ID |
| track_uris | array | yes | List of Spotify track URIs to remove |
Structured output declared, but exposes no named fields.
No examples provided.
reorder_playlist_tracks Reorder Playlist Tracks ~76
Move tracks within a playlist.
| Name | Type | Req | Description |
|---|---|---|---|
| insert_before | integer | yes | Position to insert before (0-indexed) |
| playlist_id | string | yes | Playlist ID |
| range_length | integer | – | Number of tracks to move (default 1) |
| range_start | integer | yes | Position of first track to move (0-indexed) |
Structured output declared, but exposes no named fields.
No examples provided.
save_tracks Save Tracks ~35
Save tracks to your Spotify library (like/heart them).
| Name | Type | Req | Description |
|---|---|---|---|
| track_ids | array | yes | List of Spotify track IDs to save |
Structured output declared, but exposes no named fields.
No examples provided.
search_track Search Track ~53
Search for a single track and get matches with confidence scores.
| Name | Type | Req | Description |
|---|---|---|---|
| artist | string | yes | Artist name |
| limit | integer | – | Max results to return (default 5) |
| title | string | yes | Track title |
Structured output declared, but exposes no named fields.
No examples provided.
search_track_fuzzy Search Track Fuzzy ~77
Broader fuzzy search when exact match fails. Tries multiple strategies: 1. Exact title + artist 2. Title only 3. Simplified title (removing parentheses, etc.)
| Name | Type | Req | Description |
|---|---|---|---|
| artist | string | yes | Artist name |
| limit | integer | – | Max results per strategy |
| title | string | yes | Track title |
Structured output declared, but exposes no named fields.
No examples provided.
unfollow_artists Unfollow Artists ~61
Unfollow artists on Spotify. For safety, returns a preview unless confirm=True.
| Name | Type | Req | Description |
|---|---|---|---|
| artist_ids | array | yes | List of Spotify artist IDs to unfollow |
| confirm | boolean | – | Set to True to actually unfollow (default False for preview) |
Structured output declared, but exposes no named fields.
No examples provided.
unsave_tracks Unsave Tracks ~59
Remove tracks from your Spotify library. For safety, returns a preview unless confirm=True.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | Set to True to actually remove (default False for preview) |
| track_ids | array | yes | List of Spotify track IDs to remove |
Structured output declared, but exposes no named fields.
No examples provided.
What is the io.github.khglynn/spotify-bulk-actions-mcp server?
io.github.khglynn/spotify-bulk-actions-mcp is listed in the public MCP registry as io.github.khglynn/spotify-bulk-actions-mcp. MCP server for bulk Spotify operations - batch playlist creation, exports, management. This page covers its PyPI package (spotify-bulk-actions-mcp).
Is the io.github.khglynn/spotify-bulk-actions-mcp server safe to use?
io.github.khglynn/spotify-bulk-actions-mcp scores 64 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.khglynn/spotify-bulk-actions-mcp server expose?
io.github.khglynn/spotify-bulk-actions-mcp exposes 32 tools: check_auth_status, get_top_artists, get_top_tracks, get_recently_played, get_followed_artists, and 27 more. Their descriptions and schemas cost roughly 1,797 tokens of context every time the server is loaded.
Is the io.github.khglynn/spotify-bulk-actions-mcp server still maintained?
io.github.khglynn/spotify-bulk-actions-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.