
Spotify MCP
Control Spotify playback, search, queue, and playlists from Claude or any MCP client.
Add to your client
Copy the config for your MCP client and paste it into its config file.
Paste into ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"spotify-mcp": {
"command": "uvx",
"args": [
"--python",
"3.12",
"--from",
"git+https://github.com/varunneal/spotify-mcp",
"spotify-mcp"
],
"env": {
"SPOTIFY_CLIENT_ID": "YOUR_CLIENT_ID",
"SPOTIFY_CLIENT_SECRET": "YOUR_CLIENT_SECRET",
"SPOTIFY_REDIRECT_URI": "http://127.0.0.1:8080/callback"
}
}
}
}Requires `uv` (the Python package runner). Install it from https://docs.astral.sh/uv/ if `uvx` is not found.
Step-by-step guides: Add to Claude Desktop · Add to Cursor · Add to Windsurf
Before you start
- Spotify Premium account
- Spotify developer app with CLIENT_ID and CLIENT_SECRET (from developer.spotify.com dashboard)
- Redirect URI configured as an explicit loopback http address, e.g. http://127.0.0.1:8080/callback
- uv / uvx installed (recommended version >= 0.54)
About Spotify MCP
spotify-mcp is a Python MCP server that bridges an LLM and the Spotify Web API via spotipy. Once added to an MCP client (Claude Desktop, Cursor, etc.) with Spotify developer credentials, the model can control playback, search the catalog, inspect items, manage the queue, and manage playlists. It runs over stdio and can be launched with uvx directly from the GitHub repo, or run locally from a clone (recommended, to avoid the redirect URI opening on every tool call). A Spotify Premium account is required.
Tools & capabilities (5)
SpotifyPlaybackManage current playback: start (play a new item or resume), pause, skip, and get information about the currently playing track.
SpotifySearchSearch Spotify for tracks, albums, artists, or playlists.
SpotifyQueueManage the playback queue — get the current queue or add a track to it.
SpotifyGetInfoGet detailed information about a Spotify item (track, album, artist, or playlist); for a playlist or album, returns its tracks.
SpotifyPlaylistManage playlists: get the user's playlists, get a playlist's tracks, add/remove tracks, change details, and create a new playlist.
When to use it
- Ask your assistant to play, pause, or skip music on your active Spotify device
- Search for songs, albums, or artists and queue them up by voice/chat
- Build and curate playlists programmatically through natural language
- Look up metadata about tracks, albums, artists, and playlists
Security notes
Requires a Spotify developer app (CLIENT_ID/CLIENT_SECRET) and a redirect URI using an explicit loopback address over http (e.g. http://127.0.0.1:8080/callback). Uses OAuth; credentials are passed as environment variables in the MCP config. A Spotify Premium account is required to use the developer API. Running via uvx will open the Spotify redirect URI on every tool call — run locally to avoid this.
Spotify MCP FAQ
Do I need Spotify Premium?
Yes. A Spotify Premium account is required because the developer API used for playback control requires Premium.
How do I authenticate?
Create an app at developer.spotify.com, set the redirect URI to an explicit loopback http address (e.g. http://127.0.0.1:8080/callback), and pass SPOTIFY_CLIENT_ID, SPOTIFY_CLIENT_SECRET, and SPOTIFY_REDIRECT_URI as environment variables in your MCP config. The server uses OAuth.
Why does the Spotify login page open on every tool call?
That happens when running via uvx. To avoid it, clone the repo and run the project locally using uv with the --directory flag pointing at your clone.
Is the project actively maintained?
As of March 2026 the author marked it inactive and noted most PRs will not be merged. Some Spotify recommendation features were also deprecated by Spotify in late 2024.
Alternatives to Spotify MCP
Compare all alternatives →Control Blender from Claude and other LLMs for prompt-assisted 3D modeling, scene creation, and asset generation.
Popular community server that feeds Figma layout data to coding agents via a Figma API token.
Generate beautiful, modern UI components from natural-language descriptions inside your IDE.