Epistemic DJ
OfficialClick on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Epistemic DJGenerate a pattern for epistemic state: know=0.7, uncertainty=0.2, engagement=0.9"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
š§ Epistemic DJ
TL;DR: Most music tools are one of two things ā an app that just plays
you stuff (Spotify), or a full production studio you need years to learn
(a DAW). Nothing in between for people who want to shape their
listening without becoming a producer. epistemic-dj is that middle
ground: it learns what you actually like ā not by watching what you
skip, but by asking you and by really listening to your tracks ā and
keeps a record of why, so "why did you play me this" has a real
answer instead of a shrug. With that, it can find you more of what
you'd genuinely want, and build actual mashups: match the tempo, line
up the beats, even pull the vocals off one track and lay them over
another track's instrumental. Every step is checked against the real
audio, never a genre-tag guess standing in for actually listening. Full
story: docs/human/overview.md.
Status: alpha, developers only. This is a working local MCP server you run from source and drive via Claude ā not a packaged app, no installer, no stability guarantees between commits. Expect rough edges. See
docs/human/setup.mdfor the real setup process.
Music taste profiling & AI-driven mashup generation system.
Analyze, curate, and create music grounded in learned epistemic profiles. epistemic-dj builds taste models from real music analysis and listener preferences, then uses a calibrated AI (predict ā measure ā resolve, Brier-scored ā the same discipline Empirica uses on itself) to curate and render actual mashups: not a lookup table, and never a metadata/genre guess standing in for listening to the track.
Three core workflows:
Epistemic ā Sound (original, JS side): Transform your cognitive state into music. High uncertainty? Dissonant, chaotic patterns. Deep focus? Clean, driving beats. Celebrating a win? Full-on euphoric build-ups.
Taste Profiling & Curation (Python side): Build epistemic profiles of musical taste from your real Bandcamp collection and YouTube library/playlists, then:
Analyze real audio (tempo, energy, valence ā never metadata alone)
Curate tracks matching your taste profile, with the why attached
Calibrate every prediction against real measurement, Brier-scored, so confidence means something
Mashup Rendering (Python side, new): Beatmatch and overlay real tracks into an actual rendered mashup ā tempo-matched via pitch-preserving time-stretch, alignment-scored via real audio cross-correlation (not a guess), auto-corrected against its own measurement. Offline, calibrated composition ā not a real-time DJ-booth tool (see
docs/human/overview.mdfor that distinction). Full-track overlay and selective stem overlay (vocals from one track over another's instrumental, via Demucs) both work today.
Features
Epistemic State ā Sound (JS)
MCP Tools for Claude Code integration
Pattern Generator - 13 epistemic vectors ā Strudel live coding patterns
Mood Presets - focus, energize, reflect, debug, celebrate
Web UI - Interactive sliders + embedded Strudel REPL
Music Taste Profiling & Curation (Python)
Bandcamp + YouTube integration - real collection/library ingestion, cookie/header auth (no official personal-collection API exists for either)
Real audio analysis - tempo, energy (
kinetic_energy), mood (valence) fit via a DEAM-trained regression, and key/mode (Krumhansl-Schmuckler correlation over chroma) ā never metadata guessingCalibration loop - every prediction (energy, tempo, tempo compatibility, key compatibility) is logged, resolved against real measurement, and Brier-scored ā self-correcting confidence, not a static number
Taste profiling - findings/patterns/anti-patterns as real Empirica- style artifacts, so "why did you play me this" has an actual answer
Mashup Rendering (Python, new)
Beatmatching - pitch-preserving time-stretch (librosa phase vocoder) to a real measured target tempo, octave-aware (half/double-time) compatibility scoring
Harmonic mixing - real key/mode detection (chroma + Krumhansl-Schmuckler correlation), Camelot-wheel compatibility scoring between two tracks, same predict/measure/resolve calibration loop as tempo
Real renders - full-track overlay (
render_mashup), fixed vocals-over-instrumental stem overlay (render_stem_mashup), and arbitrary independent stem combination from both tracks (render_multistem_mashup, e.g. drums+bass from one track under vocals+other from another) all write actual audio files (epistemic-dj/renders/)Alignment scoring - genuine cross-correlation of onset-strength envelopes measures how well two tracks' beats actually line up, not a guess ā and the render auto-corrects using its own signal
Beat-snapped render start (
render_mashuponly, not yet the stem-based renders) - the offset snaps to the nearest real detected beat instead of trusting an arbitrary fixed-second position (default on,snap_offset_to_beat=Falseto disable) ā not full downbeat/phrase detection, that needs a heavier modelStem-separation quality, calibrated - real measured leakage score (pairwise onset-envelope correlation across a track's own separated stems) surfaced on every stem-based render, AND closed through the same predict ā measure ā resolve ā Brier loop as tempo/key (cheap short-excerpt separation predicts the worst-leaking stem pair, verified this session to hold up on real audio unlike a metadata guess)
EQ-aware overlay (
render_mashup'shighpass_b_hz, opt-in) - high-passes the overlaid track's sub-bass before summing (standard DJ "bass swap"), instead of a flat gain-sum ā measured 56-60% reduction in bass-band spectral clash on real audio (mixing.render. spectral_band_overlap), reported before/after so the effect is checkable, not just assertedRobust tempo measurement - checkpoint spread beyond threshold triggers a denser re-measure rather than trusting a single-window octave guess (two signal-processing octave-correction heuristics were tried and both made things worse on real audio ā more real measurements won, not cleverness)
Next: YouTube upload pipeline; Bandcamp export (lowest priority, no confirmed public upload API)
Generative Composition (upcoming, JS)
Strudel Integration - Algorithmic music composition via live-coding
Profile-Driven Generation - Generate original music grounded in taste models
Cross-Fade Patterns - Smooth transitions between epistemic states
Related MCP server: MCP Music Studio
Quick Start
# JS side: Epistemic State -> Sound
npm install
node src/generator/epistemic-to-strudel.js --mood celebrate # pattern generator
node src/mcp/server.js # MCP server
npx serve src/web # web UI
# Python side: taste profiling, calibration, mashup rendering
cd python
uv sync
uv run epistemic-dj-mcp
# Optional: stem separation (render_stem_mashup) needs the extra --
# heavy, GPU-dependent deps kept out of the default install
uv sync --extra separationSee docs/human/setup.md for connecting your real
Bandcamp/YouTube accounts (both need a one-time manual credential step ā
there's no OAuth flow for either).
MCP Tools (JS side)
generate_pattern
Generate a Strudel pattern from epistemic vectors.
{
"vectors": {
"know": 0.7,
"uncertainty": 0.3,
"engagement": 0.8,
"clarity": 0.6,
"coherence": 0.7,
"signal": 0.5,
"completion": 0.4
},
"mode": "full"
}generate_mood
Generate a pattern for a mood preset.
{
"mood": "focus"
}explain_mapping
Understand how vectors map to music.
crossfade_pattern
Generate transition patterns between states.
MCP Tools (Python side)
The full tool list is large (Bandcamp/YouTube search+ingestion, taste
findings/patterns/mixtapes, audio analysis, calibration, rendering) ā see
python/epistemic_dj/mcp_server.py for the authoritative, documented list.
Highlights:
bandcamp_get_collection/youtube_get_playlist_tracksā real source ingestionaudio_analyze_trackā real tempo/energy/valence from actual audiocalibration_predict_tempo/calibration_resolve/calibration_brierā the predict ā measure ā resolve ā score loopcalibration_predict_tempo_compatibility/calibration_resolve_tempo_compatibilityā pairwise mixability, audio-grounded on both endsaudio_analyze_keyā real key/mode/Camelot code from actual audiocalibration_predict_key_compatibility/calibration_resolve_key_compatibilityā pairwise harmonic mixability (Camelot wheel distance), same calibration discipline as tempocalibration_predict_stem_leakage/calibration_resolve_stem_leakageā worst pairwise stem-separation leakage, predicted from a cheap excerpt, resolved against a fuller one, Brier-scoredrender_mashupā real time-stretched, beat-aligned overlay render, writes actual.wavoutput;highpass_b_hzopts into EQ-aware overlayrender_stem_mashupā Demucs-separated vocals overlaid on another track's instrumental, same beatmatch/alignment machinery asrender_mashup(requiresuv sync --extra separation)render_multistem_mashupā arbitrary stem selection from BOTH tracks (e.g. drums+bass from A, vocals+other from B), same machinery, independent overlay control instead of a fixed vocals/instrumental split (requiresuv sync --extra separation)
Epistemic ā Musical Mappings (JS side)
Vector | Musical Parameter |
know | Scale consonance (pentatonic ā diminished) |
uncertainty | Pattern degradation, probability |
engagement | Tempo (60-140 BPM), drum intensity |
clarity | Filter cutoff (dark ā bright) |
coherence | Rhythmic stability |
signal | Note density, hi-hat patterns |
state | Reverb/room size |
change | Pattern variation (jux, rev) |
completion | Build-up intensity |
impact | Overall volume |
Claude Code Integration
Add to your Claude Code MCP config:
{
"mcpServers": {
"epistemic-dj": {
"command": "node",
"args": ["/path/to/epistemic-dj/src/mcp/server.js"]
}
}
}Then in Claude:
Generate a pattern for my current epistemic state:
- know: 0.6 (decent understanding)
- uncertainty: 0.4 (some unknowns)
- engagement: 0.8 (highly focused)Roadmap
Epistemic State ā Sound (JS, stable)
Pattern generator (vectors ā Strudel)
MCP server with tools
Web UI with sliders
WebSocket bridge for real-time updates
Empirica integration for automatic state tracking
Taste Profiling & Curation (Python, in progress)
Bandcamp + YouTube source integration (real ingestion, not mocked)
Real audio analysis (tempo/energy/valence from actual audio)
Calibration loop (predict ā measure ā resolve ā Brier score), generalized beyond a single quantity
Full onboarding-interview taste profile builder
LLM curator matching profiles to sources at scale
Mashup Rendering (Python, in progress)
Full phase-by-phase detail: docs/dev/architecture.md.
Tempo prediction + pairwise compatibility, audio-grounded
Real time-stretched, beat-aligned overlay renders + auto-alignment
Stem separation (Demucs) for selective overlay ā
render_stem_mashupRobust tempo measurement (adaptive checkpoint densification on instability, rather than a single-window octave-correction guess)
Independent multi-stem overlay (
render_multistem_mashup) + stem-separation leakage diagnosticHarmonic mixing: key/mode detection + Camelot-wheel compatibility scoring, calibrated (predict ā measure ā resolve)
Beat-snapped render offset (nearest real detected beat, not an arbitrary fixed second) ā true downbeat/phrase detection remains a stretch goal (needs madmom or similar, not plain librosa)
Calibrate stem-separation leakage: worst pairwise leakage score, predict ā measure ā resolve ā Brier, cheap-excerpt tolerance (0.15) set from real measured deltas, not guessed
EQ-aware overlay: high-pass the overlaid track's sub-bass before summing (
render_mashup'shighpass_b_hz, opt-in), measured 56-60% bass-band clash reduction on real audioYouTube upload pipeline
Bandcamp export (lowest priority ā no confirmed public upload API)
Generative Composition (planned)
Profile-driven music generation (compose new tracks from taste models)
Feedback loop (music influences cognition?)
Cross-practice composition (mix epistemic state with taste profiles)
Empirica artifact integration (log music as a form of thought)
Project structure
Two languages, on purpose ā see docs/dev/architecture.md for why:
src/ā existing JS/ESM MCP server: epistemic vectors ā Strudel patterns (this doc, above)python/ā Python MCP server: Bandcamp + YouTube integration, real audio analysis, calibration loop, mashup rendering. Quickstart:cd python && uv sync && uv run epistemic-dj-mcpdocs/human/ā product narrative and vision, for peopledocs/dev/ā technical architecture, for engineers and future Claude sessions
License
MIT
Credits
Built with:
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server that connects Claude Code to Sonic Pi for AI-assisted beat making, enabling live code execution and pattern management.21MIT
- AlicenseNot gradedqualityCmaintenanceTwo-mode creative music studio for AI: scored composition (ABC notation with sheet music) and live performance (Strudel live coding with TidalCycles), with interactive UI rendering inline in Claude Desktop and other MCP clients.8464MIT
- AlicenseAqualityCmaintenanceMCP server that bridges Ableton Live with AI models, enabling real-time project inspection and control such as track overview, device parameters, and audio analysis.12MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that exposes a synthesizer composer's command catalog as tools, enabling Claude to compose, sound-design, and mix in a live browser session.MIT
Related MCP Connectors
MCP server for Producer/Riffusion AI music generation
Music studio: ABC notation composition and Strudel live coding with ext-apps UI.
Create, co-edit, analyze, publish, and export collaborative step-sequencer sessions through MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Nubaeon/epistemic-dj'
If you have feedback or need assistance with the MCP directory API, please join our Discord server