Skip to main content
Glama

spotify-dj MCP

A Spotify DJ MCP server: real DJ metadata plus full playlist control, in one local server. Spotify removed audio-features in 2024, so pure Spotify MCPs cannot give BPM anymore. This one rebuilds it from free sources, with per-field provenance, and pairs it with staged playlist writes.

What it does

  • DJ metadata for any track: BPM, key plus Camelot, energy, danceability, valence. Multi-tier free chain (cache, ReccoBeats, Deezer, AcousticBrainz, TheAudioDB, optional local analysis), every value tagged with provider.

  • Transition scoring 0-100 (harmonic plus octave-aware tempo plus energy), next-track suggestions, energy-arc setlist planning, Rekordbox-friendly export.

  • Full Spotify control: search, playlists (list, read, create, edit, add, remove, reorder with snapshot rollback), playback, queue, devices, library, top items, history.

  • Safety first: every stored-data mutation stages a preview with an operation_id, then a single-use commit revalidates before applying. Writes need resolved Spotify IDs, never guesses.

Related MCP server: Heavenly Health Protocol

Quick start

Requires Python 3.14, a Spotify account with Premium (app owner), and uv.

git clone https://github.com/cikeyz/spotify-dj.git
Set-Location spotify-dj
uv venv --python 3.14
.\.venv\Scripts\Activate.ps1
uv pip install -r requirements.txt

Create a Spotify app (2 min, free): open the dashboard, Create app, add exactly http://127.0.0.1:8888/callback to Redirect URIs, check Web API only, then add yourself under User Management. Copy the Client ID, then:

$env:SPOTIFY_DJ_HOME = "$env:LOCALAPPDATA\spotify-dj"
.\.venv\Scripts\python.exe setup\setup.py --client-id '<your-client-id>'
.\.venv\Scripts\python.exe setup\setup.py --auth-url
# open the printed URL, approve, then:
.\.venv\Scripts\python.exe setup\setup.py --auth-code '<pasted-redirect-url>'
.\.venv\Scripts\python.exe setup\tests\verify_server.py

Expect RESULT: ALL CHECKS PASSED. Full walkthrough in docs/SETUP.md.

MCP client config (stdio only)

{
  "mcpServers": {
    "spotify-dj": {
      "command": "C:\\path\\to\\.venv\\Scripts\\python.exe",
      "args": ["C:\\path\\to\\server.py"],
      "env": { "SPOTIFY_DJ_HOME": "C:\\path\\to\\state" }
    }
  }
}

Launch the .venv Python directly, never through uv's runner. Tokens, cache, and audit logs live in SPOTIFY_DJ_HOME, never in this repo.

Tools (31) and prompts (3)

Family

Tools

Search and library

spotify_search, spotify_get_track, spotify_library_tracks, spotify_library_albums, spotify_top_items, spotify_history_recent

Playlists

spotify_playlists_list, spotify_playlist_get, spotify_playlist_create, spotify_playlist_edit, spotify_playlist_add, spotify_playlist_remove, spotify_playlist_reorder

Playback

spotify_devices_list, spotify_playback_get, spotify_play, spotify_pause, spotify_skip, spotify_queue

DJ intelligence

dj_audio_features, dj_compare_tracks, dj_score_transition, dj_suggest_next, dj_audit_playlist, dj_plan_set, dj_apply_plan, dj_export_setlist

Infra

spotify_auth_status, spotify_write_commit, spotify_write_cancel, spotify_write_list_staged

Prompts: build-set (crate to ordered setlist), audit-crate (drift and duplicate report), organize-playlist (dedupe, sort, split).

Reads return cursor envelopes (items, next_page_token, has_more) capped at 30KB. Mutations stage first, commit once. Details and live API discoveries in docs/ARCHITECTURE.md.

Optional: local analysis tier

Without it the server uses keyless catalogs only. To measure BPM and key from audio as a last resort (proves out at ~5s per track):

.\.venv\Scripts\python.exe -m pip install librosa
$env:SPOTIFY_DJ_LOCAL_ANALYSIS = "1"

Tests

.\.venv\Scripts\python.exe setup\tests\verify_server.py
.\.venv\Scripts\python.exe setup\tests\test_server.py

verify_server.py is offline plus static. test_server.py runs live against your account with self-cleaning SPOTIFYDJ-TEST- playlists and must end with RESULT: ALL CHECKS PASSED and zero residue.

Layout

  • server.py: thin shell (tools, registration, stdio entry)

  • core.py: state, staged store, Spotify client, envelopes

  • playlists.py, collection.py, dj.py, prompts.py: feature modules

  • setup/setup.py: PKCE grant, refresh, status

  • setup/tests/: verify plus live batteries

  • docs/: SETUP.md guide, ARCHITECTURE.md design plus discoveries

Released under the MIT License.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    Aggregates and analyzes fitness data from multiple sources like Whoop and Strava through a modular adapter architecture. It enables users to monitor health metrics, track activities, and gain insights into sleep, recovery, and training performance.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI clients to securely access, query, and mutate normalized user-controlled health data (e.g., from Apple Health or Supabase) through a bounded set of MCP tools, with optional OAuth and sandboxed deployment.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    A personal health and fitness MCP server that provides tools for managing profile data, goals, body measurements, nutrition, workouts, sleep, check-ins, life events, analytics, and coach memories via Supabase Postgres.
    1
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP clients to connect to a privacy-first, self-hostable workout planning and training log, allowing coaching agents to preview and apply program changes while accessing training data through OAuth-protected endpoints.
    AGPL 3.0