Spotify MCP Server for Claude and other AI assistants
Project description
Spotify MCP Server
A Model Context Protocol (MCP) server that provides tools for interacting with the Spotify Web API. Enables AI assistants like Claude to search music, control playback, manage playlists, and more.
Features
- Search - Find tracks, albums, artists, playlists, shows, episodes, and audiobooks
- Playback Control - Play, pause, skip, seek, volume, shuffle, repeat, queue management
- Playlists - Create, update, add/remove/reorder tracks
- Library - View and manage saved tracks, albums, shows, episodes, and audiobooks
- Browse - Get album details, artist info, track metadata
- Podcasts & Audiobooks - Browse shows, episodes, audiobooks, and chapters
- User Profile - View profile, top artists/tracks, followed artists
- 44 tools covering non-deprecated Spotify Web API endpoints
Prerequisites
- uv — install with
curl -LsSf https://astral.sh/uv/install.sh | sh - A Spotify Developer account
- A Spotify app with Client ID and Client Secret
Getting Your Spotify Credentials
- Go to the Spotify Developer Dashboard
- Click Create App
- Fill in the app details:
- App name: Choose any name (e.g., "My MCP Server")
- App description: Optional
- Redirect URI:
http://127.0.0.1:8888/callback - Which API/SDKs are you planning to use?: Select Web API
- Click Save
- On your app's page, find your Client ID
- Click Show client secret to reveal your Client Secret
Important: The redirect URI must exactly match
http://127.0.0.1:8888/callback(or whatever you set inSPOTIFY_REDIRECT_URI). Do not uselocalhost— use127.0.0.1.
Installation
Pick your client below. All examples use uvx to fetch the server on demand — no clone, no manual install.
Claude Code
claude mcp add spotify \
-e SPOTIFY_CLIENT_ID=your_client_id \
-e SPOTIFY_CLIENT_SECRET=your_client_secret \
-- uvx mcp-server-spotify
Other MCP clients
Most MCP clients configure servers via a JSON file. Add this entry to your client's MCP config:
{
"mcpServers": {
"spotify": {
"command": "uvx",
"args": ["mcp-server-spotify"],
"env": {
"SPOTIFY_CLIENT_ID": "your_client_id",
"SPOTIFY_CLIENT_SECRET": "your_client_secret"
}
}
}
}
Running from a local checkout
For development, or if you want to run a modified copy:
git clone https://github.com/llyfn/spotify-mcp.git
cd spotify-mcp && uv sync
Then point your client at the local checkout instead of uvx:
"command": "uv",
"args": ["--directory", "/absolute/path/to/spotify-mcp", "run", "mcp-server-spotify"]
Configuration
| Variable | Required | Default | Description |
|---|---|---|---|
SPOTIFY_CLIENT_ID |
Yes | — | Your Spotify app's Client ID |
SPOTIFY_CLIENT_SECRET |
Yes | — | Your Spotify app's Client Secret |
SPOTIFY_REDIRECT_URI |
No | http://127.0.0.1:8888/callback |
OAuth redirect URI |
Authentication
The server uses Spotify's Authorization Code flow:
- On first use, the server opens your browser to Spotify's login page
- Spotify will ask you to approve access — the server requests all scopes needed for the full tool set (playback, library, playlists, and user data)
- After you authorize, Spotify redirects to the local callback server
- The server exchanges the authorization code for access/refresh tokens
- Tokens are stored securely in
~/.spotify-mcp/credentials.json - Tokens are automatically refreshed when they expire
If running in a headless environment (SSH, Docker), the auth URL will be printed to stderr — copy and paste it into a browser manually.
Re-authenticating
To re-authenticate (e.g., after revoking access), delete the stored credentials:
rm ~/.spotify-mcp/credentials.json
Available Tools
Search
| Tool | Description |
|---|---|
search |
Search for tracks, albums, artists, playlists, shows, episodes, or audiobooks |
Albums
| Tool | Description |
|---|---|
get_album |
Get album details by ID |
get_album_tracks |
Get tracks in an album |
Artists
| Tool | Description |
|---|---|
get_artist |
Get artist details by ID |
get_artist_albums |
Get albums by an artist |
Tracks
| Tool | Description |
|---|---|
get_track |
Get track details by ID |
Playlists
| Tool | Description |
|---|---|
get_playlist |
Get playlist details |
update_playlist |
Update playlist name, description, or visibility |
get_playlist_items |
Get items in a playlist |
add_playlist_items |
Add tracks/episodes to a playlist |
remove_playlist_items |
Remove items from a playlist |
reorder_playlist_items |
Reorder items in a playlist |
get_my_playlists |
Get the current user's playlists |
create_playlist |
Create a new playlist |
Library
| Tool | Description |
|---|---|
get_saved_tracks |
Get saved tracks |
get_saved_albums |
Get saved albums |
get_saved_shows |
Get saved shows |
get_saved_episodes |
Get saved episodes |
get_saved_audiobooks |
Get saved audiobooks |
save_to_library |
Save items to library |
remove_from_library |
Remove items from library |
check_saved_in_library |
Check if items are in library |
Player
| Tool | Description |
|---|---|
get_playback_state |
Get current playback state |
get_currently_playing |
Get the currently playing track |
play |
Start or resume playback |
pause |
Pause playback |
next_track |
Skip to next track |
previous_track |
Skip to previous track |
seek |
Seek to position in track |
set_repeat |
Set repeat mode (track/context/off) |
set_volume |
Set playback volume |
toggle_shuffle |
Toggle shuffle mode |
transfer_playback |
Transfer playback to another device |
get_devices |
Get available devices |
add_to_queue |
Add item to playback queue |
get_queue |
Get the playback queue |
get_recently_played |
Get recently played tracks |
Shows & Podcasts
| Tool | Description |
|---|---|
get_show |
Get show details |
get_show_episodes |
Get episodes of a show |
Audiobooks
| Tool | Description |
|---|---|
get_audiobook |
Get audiobook details |
get_audiobook_chapters |
Get chapters of an audiobook |
get_chapter |
Get chapter details |
Users
| Tool | Description |
|---|---|
get_my_profile |
Get current user's profile |
get_my_top_items |
Get top artists or tracks |
Following artists/users uses the same
save_to_library/remove_from_library/check_saved_in_librarytools — pass an artist or user URI.
Contributing
See CONTRIBUTING.md for development setup and guidelines.
License
MIT - see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_server_spotify-0.1.1.tar.gz.
File metadata
- Download URL: mcp_server_spotify-0.1.1.tar.gz
- Upload date:
- Size: 54.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b9d7d900d09ecbd4241143cbf229d9a533c247b9de7dd9a274407580130c500
|
|
| MD5 |
24bba88f4220b01eb603f674427d2db9
|
|
| BLAKE2b-256 |
0f85f098c83b6bfe6df3f5324b31d3a24067ed0a9b2e81503d46736054a76d4b
|
Provenance
The following attestation bundles were made for mcp_server_spotify-0.1.1.tar.gz:
Publisher:
publish.yml on llyfn/spotify-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_server_spotify-0.1.1.tar.gz -
Subject digest:
8b9d7d900d09ecbd4241143cbf229d9a533c247b9de7dd9a274407580130c500 - Sigstore transparency entry: 1438054238
- Sigstore integration time:
-
Permalink:
llyfn/spotify-mcp@0950e2fed4fcc4337096df6e947ba8173a9d88b5 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/llyfn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0950e2fed4fcc4337096df6e947ba8173a9d88b5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mcp_server_spotify-0.1.1-py3-none-any.whl.
File metadata
- Download URL: mcp_server_spotify-0.1.1-py3-none-any.whl
- Upload date:
- Size: 25.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78275965169d6c15935f211b287dfb9bbbf9c7c6adfaf9cad5571921f4e1caa0
|
|
| MD5 |
b39274806c353f8f67b36dcf0b3003dc
|
|
| BLAKE2b-256 |
50f585016d81cfad2e3bb6262da43fa23499d13f5309d159910415800faee7ac
|
Provenance
The following attestation bundles were made for mcp_server_spotify-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on llyfn/spotify-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_server_spotify-0.1.1-py3-none-any.whl -
Subject digest:
78275965169d6c15935f211b287dfb9bbbf9c7c6adfaf9cad5571921f4e1caa0 - Sigstore transparency entry: 1438054244
- Sigstore integration time:
-
Permalink:
llyfn/spotify-mcp@0950e2fed4fcc4337096df6e947ba8173a9d88b5 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/llyfn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0950e2fed4fcc4337096df6e947ba8173a9d88b5 -
Trigger Event:
push
-
Statement type: