Listed from the MCP registry; nobody on Odel publishes it.

MCP server: One MCP server.

Spotify

@jamiewMCP server · External

MCP server connecting LLMs to Spotify, with smart-batching and large-playlist tools

Music listeningv0.9.2MITPython
Freeno charge per call

Runs on your machine from its package; the steps are below.

Spotify MCP, Python local server
From the README

What it does

  1. Reads
  2. Writes
  3. High impact

At most: creates or changes data: records, files, settings.

What it costs

Free

Odel charges nothing per call. The publisher may charge for its own service.

Runs locally over stdio

This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).

PyPIspotify-mcp-jamiewv0.9.2

Run

uvx spotify-mcp-jamiew

MCP client config

{
  "mcpServers": {
    "spotify": {
      "command": "uvx",
      "args": [
        "spotify-mcp-jamiew"
      ]
    }
  }
}
README6 min read

Spotify MCP, Python local server

spotify-mcp

mcp-name: io.github.jamiew/spotify-mcp

A local Python MCP server for searching Spotify, controlling playback, and managing playlists and Liked Songs from your MCP client. Runs over stdio with your Spotify account. This is a supported fork of varunneal/spotify-mcp.

The TypeScript edition supports local and hosted use, with a different MCP surface.

Setup

Requires Python 3.12+, uv, and Spotify Premium for playback.

  1. Create an app in the Spotify developer dashboard.
  2. Register http://127.0.0.1:8888 as its redirect URI, exactly as written.
  3. Copy the app's Client ID and Client Secret into your MCP client's configuration:
json
{
  "mcpServers": {
    "spotify": {
      "command": "uvx",
      "args": ["spotify-mcp-jamiew"],
      "env": {
        "SPOTIFY_CLIENT_ID": "your_client_id",
        "SPOTIFY_CLIENT_SECRET": "your_client_secret",
        "SPOTIFY_REDIRECT_URI": "http://127.0.0.1:8888"
      }
    }
  }
}

Restart the client. On first use, a browser opens for Spotify authorization; the token is cached locally. Keep the client secret and token cache private. Playback needs an available Spotify Connect device, so open Spotify on the device you want to control.

Client-specific setup: Claude Desktop, Claude Code, and Codex. Use the same command and environment variables in each client's format.

Run from source

The package command above uses the published package, which may lag this README's source changes. To run the current checkout:

bash
git clone https://github.com/jamiew/spotify-mcp.git
cd spotify-mcp
uv sync

In the config above, change command to uv and args to ["--directory", "/absolute/path/to/spotify-mcp", "run", "spotify-mcp"]. Keep the same environment variables. Without cloning, use uvx --from git+https://github.com/jamiew/spotify-mcp.git spotify-mcp.

Reauthorization: artist-follow checks need user-follow-read, and following or unfollowing artists and playlists needs user-follow-modify. Existing grants do not receive new scopes automatically. Restart and complete Spotify authorization when prompted; if access is still denied, review the app's grant in your Spotify account and reauthorize. Do not automatically delete the auth cache.

Features

48 tools, six resources (user, playback, track, playlist, artist, album), and five prompts. Tools provide typed outputs and behavior annotations; large playlist reads report progress. Playlist removal asks for confirmation where supported, reordering uses snapshot guards, and playback control attempts best-effort read-after-write confirmation, not guaranteed success.

Tools

ToolDoes
get_meRead your profile
search_musicSearch tracks, albums, artists, or playlists with filters and pagination
get_tracksRead up to 50 tracks; individual reads when batching is unavailable
get_artistRead up to 50 artists; top tracks for a single artist
get_albumRead up to 20 albums; track list for a single album
get_playback_stateRead current track or episode, device, progress, shuffle, and repeat
control_playbackPlay tracks, episodes or a context; pause, skip, seek, volume, shuffle, repeat
list_devicesList Spotify Connect devices
transfer_playbackMove playback to another device
get_queueRead now playing and upcoming tracks and episodes
add_to_queueQueue a track or podcast episode
list_playlistsList your playlists with pagination
get_playlistRead playlist metadata without tracks
get_playlist_tracksRead up to 1000 playlist tracks per call; continue from next_offset
create_playlistCreate a private playlist; set public=true to publish
update_playlist_detailsChange name, description, or visibility
add_tracks_to_playlistAdd up to 100 tracks or episodes
remove_tracks_from_playlistRemove tracks or episodes with confirmation where supported
reorder_playlistMove a block of tracks
follow_playlistFollow (save) a playlist
unfollow_playlistUnfollow a playlist, including your own
get_saved_tracksRead Liked Songs with pagination
save_tracksLike tracks
remove_saved_tracksUnlike tracks
check_saved_tracksCheck up to 50 tracks against Liked Songs
check_saved_albumsCheck up to 20 saved albums
check_following_artistsCheck up to 50 followed artists
get_saved_albumsRead saved albums with pagination
save_albumsSave up to 20 albums
remove_saved_albumsRemove up to 20 saved albums
get_followed_artistsRead followed artists with cursor pagination
follow_artistsFollow up to 50 artists
unfollow_artistsUnfollow up to 50 artists
get_saved_showsRead saved podcast shows with pagination
save_showsSave up to 50 podcast shows
remove_saved_showsRemove up to 50 saved podcast shows
check_saved_showsCheck up to 50 saved podcast shows
get_show_episodesRead a show's episodes with resume points and pagination
get_saved_episodesRead saved podcast episodes with pagination
check_saved_episodesCheck up to 50 saved podcast episodes
save_episodesSave up to 50 podcast episodes
remove_saved_episodesRemove up to 50 saved podcast episodes
get_saved_audiobooksRead saved audiobooks with pagination
check_saved_audiobooksCheck up to 50 saved audiobooks
save_audiobooksSave up to 50 audiobooks
remove_saved_audiobooksRemove up to 50 saved audiobooks
get_top_itemsRead top artists or tracks over a time range
get_recently_playedRead recently played tracks with timestamps

Behavior to know

  • New playlists default to private. Existing playlists are unchanged. Spotify can report unexpected visibility, so confirm sensitive playlists in the Spotify app.
  • Library writes (tracks, artists, shows, episodes, audiobooks) and membership checks accept 50 items, sent upstream in batches of 40. Album saves, removals and checks accept 20. Membership results preserve input alignment; incomplete chunks fail. Writes are not atomic across chunks: earlier changes may remain after an error. Check membership before retrying.
  • Restricted apps cap search pages at 10. Advance by the returned offset + limit, not the requested size. Individual-track fallback can make up to 50 Spotify requests.
  • Playlist pagination counts positions, including unresolved rows and local files with id: null. Local files also set is_local; positions remain valid for reordering.

Spotify access and policy

  • Permissions and app access mode determine available endpoints and playlist access. A 403 may mean missing permission, not a retired endpoint. Existing integrations' February restrictions were postponed; restricted apps use the February 2026 API routes.
  • Development Mode normally allows five allowlisted users and requires a Premium app owner; older larger allowlists may be grandfathered. Extended access is not routine hobby-project approval: criteria include an organization, a legal entity, a launched service, and 250,000 monthly active users. A public URL does not remove these limits.
  • All Development Mode apps on a developer account share one quota, even with the 25 permitted Client IDs. This server surfaces 429 errors without retries, including QUOTA_EXCEEDED and ordinary rate limits with Retry-After when provided. No guaranteed quota reset time is specified.
  • This server uses one local identity. Do not share its token cache or expose it as an unauthenticated public service. Other users should self-host and authorize their own accounts.
  • AI policy is a separate constraint. Spotify Developer Policy III.14 restricts training or otherwise ingesting Spotify Content into AI/ML models; "no training" or "metadata only" is not automatic clearance. III.13 restricts analysis and derived metrics; III.3 restricts voice-control assistants. Seek Spotify clarification or approval before public AI access. This is a risk notice, not legal advice or permission.

Moving between implementations

Shared versions and tool names do not imply drop-in compatibility with other implementations. Check arguments, limits, and result shapes before switching. Preserve any workflow that relies on this server's resources, five prompts, snapshot guards, removal confirmation, or playback confirmation; those behaviors are not universal.

Credits

MIT license, copyright 2025 Varun Neal Srivastava. Thanks to @varunneal for the original project, @jamiew, @jonico, @tedeuxx, and @karimStekelenburg.

Banner made with Glif.

Similar modules

Browse Music listening