A Spotify playlist, saved as files on your Mac

Paste a link and the tracks arrive in your Downloads folder, tagged and in playlist order. Everything runs on your own machine, and the tools it needs are bundled, so there is nothing to install and no terminal to open.

Download for Claude Desktop spotify-playlist-downloader.mcpb · 92 MB · macOS, Apple Silicon

Use it for music you have the right to copy. Your own recordings, a promo pool you subscribe to, Creative Commons releases, or anything you have licensed. Downloading commercial releases you do not hold rights to is copyright infringement, and this tool does not change that.

What it actually does

Spotify's own audio is copy-protected and is never touched. The link is read for metadata only, using Spotify's public API: track titles, artists, and durations. The audio itself is then located on public sources and downloaded from there.

~/Downloads/Late Night Set/
01 - Artist Name - First Track.mp3
02 - Artist Name - Second Track.mp3
03 - Another Artist - Third Track.mp3
download-report.txt

320kbps MP3 by default, with artwork and tags embedded, numbered so the folder sorts in playlist order rather than alphabetically. The report lists anything that could not be found and why.

Installing it

Two ways. Pick the one that matches how you work.

Claude Desktop, no terminal

1

Download the extension and double-click it. Claude Desktop installs it.

2

Restart Claude Desktop.

3

Paste a Spotify link into a conversation and ask for it. Then ask how it is going whenever you like, or ask Claude to open the folder.

Signed and notarized with Apple, so it just opens. No terminal, no security warning to click through.

Terminal, one command

git clone https://github.com/adampaulwalker/spotify-to-mp3-skill
cd spotify-to-mp3-skill/mcpb
npm install && node scripts/fetch-binaries.mjs

Then:

node cli.js "https://open.spotify.com/playlist/..." --watch

# or check on something already running
node cli.js --list
node cli.js --status <jobId>
node cli.js --cancel <jobId>

The terminal version keeps running after you close the window, and --watch shows a live counter. Both share the same job records, so you can start a download in one and check on it from the other.

What you need

RequirementWhy
A Mac with Apple SiliconThe audio engine is only published as an Apple Silicon build. Intel Macs cannot run it
Claude Desktop, any planOnly for the extension. The terminal version needs neither
Nothing elseThe engines are bundled. No Homebrew, no Python, no Spotify developer account

Where it runs, and where it does not

SurfaceWorks
Claude DesktopYes, through this extension
TerminalYes, no Claude involved
Claude CodeYes, as a skill
Claude in a browserNo. A web page cannot run programs on your machine

Questions

Does it take the audio from Spotify?

No. Spotify's streams are copy-protected and are never accessed. The link is used to read the track list. The audio is found on public sources by matching title, artist, and duration.

Do I need a Spotify developer account?

No. There is an optional setting for your own API credentials, which only matters if you hit a rate limit on the shared default connection. Most people never need it.

Some tracks did not download. Why?

A track can be unavailable everywhere the tool looks, or age-restricted, or blocked in your country. The report in the output folder names each one and the reason, rather than quietly giving you a short folder.

Can I use it on Windows or Intel Macs?

Not currently. The audio engine ships only as an Apple Silicon binary, and Rosetta translates in the other direction, so an Intel Mac genuinely cannot run it. Windows has not been built or tested.

Does anything leave my machine?

Only the request to Spotify's public API for the track list, and the requests to fetch the audio. Files are written straight to your disk. There is no server in the middle.

Will Claude always agree to run it?

Not necessarily. Claude reads what you ask and decides whether to use a tool, so a request to download commercial releases may well be declined. The terminal version has no model involved.