From spotify
Spotify Web API client — playback control, catalog search, listening history, top artists/tracks, and playlist management. Use when the user asks about Spotify — playing music, what they listen to, top artists, recent plays, queue, playlists. Triggers on 'spotify', 'play music', 'pause', 'what's playing', 'top artists', 'top tracks', 'most listened', 'recently played', 'queue', 'playlist'.
How this skill is triggered — by the user, by Claude, or both
Slash command
/spotify:spotifyThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Full Web API access — playback, listening history, top artists/tracks, library, and playlists.
Full Web API access — playback, listening history, top artists/tracks, library, and playlists.
Credentials and tokens live in ~/.claude-spotify/ (configurable via CLAUDE_SPOTIFY_HOME). The plugin itself ships none — each user runs /spotify:setup to create their own Spotify developer app and authorize.
python3 ${CLAUDE_PLUGIN_ROOT}/skills/spotify/spotify.py <command> [args]
All commands output JSON on stdout.
spotify.py top artists --range medium_term --limit 20
spotify.py top tracks --range long_term --limit 20
spotify.py recent --limit 50
spotify.py liked --limit 20 # top artists by liked-track count
spotify.py tenure --limit 20 # artists by earliest Liked Songs add date
--range values: short_term (~4 weeks), medium_term (~6 months, default), long_term (~years).
spotify.py status
spotify.py play [spotify:track|album|playlist|artist:...]
spotify.py pause
spotify.py next
spotify.py prev
spotify.py queue spotify:track:<id>
spotify.py volume 40
spotify.py devices
Playback control requires Spotify Premium + an active device. Returns 404 if no device.
spotify.py search "bonobo black sands" --type track --limit 5
spotify.py search "tycho" --type artist
--type one of track | album | artist | playlist. Grab uri from results to feed into play or queue.
spotify.py playlists --limit 50
spotify.py raw GET /me -p market=US
spotify.py raw PUT /me/player/shuffle -p state=true
Use the /spotify:setup slash command — it guides the user through creating the Spotify developer app, pasting credentials, and running the OAuth flow.
Manual equivalent:
http://127.0.0.1:8888/callback~/.claude-spotify/.env:
SPOTIFY_CLIENT_ID=<id>
SPOTIFY_CLIENT_SECRET=<secret>
python3 ${CLAUDE_PLUGIN_ROOT}/skills/spotify/spotify.py authstatus returns {"playing": false, "reason": "no active device"} when no device is active — handle that before reading track fields.open.spotify.com/playlist/37i9... → URI spotify:playlist:37i9..../audio-features and /audio-analysis return 403 for apps created after Nov 2024. Deprecated for new apps. No workaround via Web API — for danceability/energy/valence data, request the Extended Streaming History dump from Spotify's Privacy settings./me/top/* gives ranks, not play counts or durations. Extended Streaming History is the only source.localhost for new apps — always use http://127.0.0.1:8888/callback.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub kaushalvivek/plugins --plugin spotify