MCP server for controlling Renoise via OSC. Lets Claude compose music by writing patterns, triggering notes, and controlling playback.
cd osc-mcp
uv syncOr with pip:
pip install -e .- Open Renoise
- Go to
Edit > Preferences > OSC - Enable OSC server
- Set protocol to UDP
- Set port to 8000 (or configure via environment variable)
Add to your ~/.claude.json or Claude Desktop MCP settings:
{
"mcpServers": {
"renoise": {
"command": "uv",
"args": ["--directory", "/path/to/osc-mcp", "run", "renoise-mcp"],
"env": {
"RENOISE_HOST": "127.0.0.1",
"RENOISE_PORT": "8000"
}
}
}
}play()- Start playbackstop()- Stop playbackpanic()- Stop all sounds immediatelyset_bpm(bpm)- Set tempo (20-999)set_lpb(lpb)- Set lines per beat
trigger_note(instrument, note, velocity, track)- Play a note (real-time, not recorded)stop_note(instrument, note, track)- Stop a triggered noteset_note(pattern, track, line, note, instrument, volume, column)- Write note to patternset_effect(pattern, track, line, effect, value, column)- Write effect command
mute_track(track, muted)- Mute/unmute tracksolo_track(track, soloed)- Solo/unsolo trackset_track_volume(track, volume)- Set track volume (0-1)
clear_pattern(pattern)- Clear all data from patternset_pattern_length(pattern, lines)- Set pattern length (1-512)jump_to_pattern(position)- Jump to sequence positionschedule_pattern(position)- Schedule next pattern
generate_breakbeat(pattern, track, style, lines, bpm, instrument, intensity, variation, add_chops)- Generate a breakbeat patterngenerate_bass_pattern(pattern, track, root_note, scale, lines, instrument, density)- Generate a basslineadd_drum_fill(pattern, track, start_line, length, instrument, intensity)- Add a drum fill
evaluate_lua(code)- Execute arbitrary Lua code in Renoise
set_bpm(174)
set_lpb(4)
set_pattern_length(0, 64)
generate_breakbeat(
pattern=0,
track=0,
style="amen",
bpm=174,
intensity=0.8,
variation=0.3
)
generate_bass_pattern(
pattern=0,
track=1,
root_note=36, # C2
scale="minor_pentatonic",
density=0.6
)
# Kick on beat 1
set_note(pattern=0, track=0, line=0, note=36, instrument=0)
# Snare on beat 2
set_note(pattern=0, track=0, line=4, note=38, instrument=0)
# Add sample offset effect
set_effect(pattern=0, track=0, line=8, effect="09", value=64)
evaluate_lua("""
local song = renoise.song()
song:pattern(1):track(1):line(1):note_column(1).note_value = 48
""")
amen- Classic amen break pattern with ghost notestwo_step- Syncopated two-step dnb patternthink- Think break style with characteristic syncopationstraight- Four-on-floor influenced pattern
minor- Natural minorminor_pentatonic- Minor pentatonic (great for dnb bass)dorian- Dorian modephrygian- Phrygian mode (dark, Middle Eastern feel)major- Major scale
Common Renoise effect commands:
09xx- Sample offset (xx = position, 00-FF)0Rxy- Retrigger (x = volume change, y = speed)0Qxx- Delay note by xx ticks0Dxx- Pitch slide down0Uxx- Pitch slide up0Bxx- Play sample backwards0Yxx- Probability (xx% chance to play)
Claude Code
│
│ MCP Protocol
▼
renoise-mcp server (Python)
│
│ OSC (UDP)
▼
Renoise
The server translates MCP tool calls into OSC messages that Renoise understands. Complex operations use the /renoise/evaluate endpoint to run Lua code directly in Renoise.
# Install dev dependencies
uv sync --extra dev
# Run tests
uv run pytest
# Format/lint
uv run ruff check --fix
uv run ruff formatMIT