rekordbox-serato-bridge
Click on "Deploy 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., "@rekordbox-serato-bridgepreview converting my Rekordbox set 'Friday' to Serato"
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.
Rekordbox ⇄ Serato Bridge
An MCP server that moves DJ library data — cues, loops, cue colors and playlists — between Rekordbox 6/7 and Serato DJ Pro, in both directions.
在 Rekordbox 6/7 与 Serato DJ Pro 之间双向搬运 DJ 资料库数据:Cue、Loop、Cue 颜色与播放列表。
Works with any MCP-compatible agent or client.
Features
Both directions. Rekordbox → Serato (a Serato-ready folder + crate) and Serato → Rekordbox (your local Rekordbox library, or a Rekordbox-compatible XML export).
Cues, loops and colors. Hot cues, memory cues, saved loops, beat-length loops and cue colors are carried over into the target app's native model.
Works with USB exports. Cues can be read straight from a Rekordbox device library (
PIONEER/USBANLZ), so a USB stick converts without the desktop library.Read-only by default. Nothing is written until you ask for it, and audio files are only ever touched in staging copies.
Every write is previewable. Dry runs plus a machine-readable report for each conversion.
Related MCP server: Rekordbox Smart MCP
Requirements
OS | macOS (tested with Rekordbox 7 and Serato DJ Pro 4.0) |
Python | 3.9 or newer |
Rekordbox | 6 or 7 (needed for the Serato → Rekordbox direction) |
Serato | Serato DJ Pro 4.x |
pyrekordbox is installed automatically with the plugin.
Install
As a Codex plugin
codex plugin marketplace add shadowroommusic/rekordbox-serato-bridge
codex plugin add rekordbox-serato-bridge@shadowroomIn any other MCP client
{
"mcpServers": {
"rekordbox-serato-bridge": {
"command": "python3",
"args": ["mcp_server.py"],
"cwd": "/path/to/rekordbox-serato-bridge"
}
}
}CLI only
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/shadow-rb-serato --helpConfiguration
Option | Default | Used for |
|
| reading/writing the Rekordbox library |
|
| Rekordbox settings + local analysis data |
|
| Serato crates and assets |
| – | a Rekordbox USB device, e.g. |
| – | where tagged copies are written |
Tools
Tool | What it does |
| Dry run: what a Rekordbox → Serato conversion would change |
| Dry run: what a Serato → Rekordbox conversion would change |
| Copy a track, write Serato cues into the copy, verify it, write a manifest |
| List the playlists in the local Rekordbox library |
| Rekordbox set → Serato-ready folder (copies + cues/loops + |
| Serato crate → Rekordbox (dry run, |
The same functionality is available from the CLI: preview-rb-to-serato, preview-serato-to-rb,
stage-cues, inspect-rekordbox, inspect-serato, list-sets, convert-set.
Usage
Rekordbox → Serato (gig folder or USB stick)
# from a Rekordbox device library (the cue data on the device is authoritative)
.venv/bin/shadow-rb-serato convert-set --to serato --name "My set" \
--out ~/Music/ShadowRoom-USB --device-root /Volumes/USB --with-cues-only
# or from a playlist in the local library
.venv/bin/shadow-rb-serato list-sets --rekordbox-database "$HOME/Library/Pioneer/rekordbox/master.db" \
--rekordbox-dir "$HOME/Library/Pioneer/rekordbox"The output is a folder Serato understands:
<out>/ShadowRoom/<set>/<tracks> # copies carrying Serato cues/loops + BeatGrid
<out>/ShadowRoom/<set>/manifest.json
<out>/_Serato_/Subcrates/<set>.crate # the crate Serato shows in its sidebarCopy the whole <out> folder to the root of your USB stick, or import the tracks into Serato —
either way the cues come along.
Serato → Rekordbox
SHADOW=.venv/bin/shadow-rb-serato
RB="$HOME/Library/Pioneer/rekordbox"
# 1) dry run
$SHADOW convert-set --to rekordbox --name "My set" \
--serato-database "$HOME/Library/Application Support/Serato/Library/master.sqlite" \
--rekordbox-database "$RB/master.db" --rekordbox-dir "$RB"
# 2) write (quit Rekordbox first; master.db is backed up automatically)
$SHADOW convert-set --to rekordbox --name "My set" --apply ...
# prefer not to touch the database? export Rekordbox-compatible XML instead
$SHADOW convert-set --to rekordbox --name "My set" --xml ~/Desktop/my-set.xml ...Previews and single-track staging
# side-by-side preview of both libraries
$SHADOW preview-rb-to-serato --rekordbox-database "$RB/master.db" --rekordbox-dir "$RB" \
--serato-database "$HOME/Library/Application Support/Serato/Library/master.sqlite" --output preview.json
# write cues into a verified staging copy only
$SHADOW stage-cues --track "/path/track.aiff" --cues cues.json --staging-dir ./stagingcues.json is either an array or {"cues": [...]}; each entry supports name, position_ms,
end_ms (loop) and color (#RRGGBB or an integer).
Supported file formats
Container | Read cues | Write cues |
MP3 | ✅ | ✅ |
AIFF / AIFC | ✅ | ✅ |
FLAC | ✅ | ✅ |
WAV | ✅ | – |
OGG | – | – |
Safety
Read-only unless you explicitly opt in (
--apply/"apply": true) or point a tool at a staging directory.Writes to the Rekordbox database back up
master.db(plus WAL/SHM) first and verify the result afterwards. Rekordbox must be closed while its database is written; the tool refuses otherwise.Audio files are never modified in place — new tags go into copies, and the report proves the source file is untouched.
Troubleshooting
Symptom | What to do |
| Quit Rekordbox and run the command again. |
Cues not visible in Serato | Reload the track (Serato reads tags when a track is loaded) and make sure the crate/folder was imported. |
Tracks listed as missing | The library points at a path that is not mounted (for example an unplugged USB stick). |
Device tracks not found | Mount the Rekordbox device, or convert from the local library instead. |
Contributing
See CONTRIBUTING.md. Implementation notes for maintainers live in docs/internals.md.
License
AGPL-3.0 — see LICENSE. Bundled dependency pyrekordbox is MIT licensed.
Available Tools
6 toolsconvert_setC
Convert a Rekordbox set into a Serato-ready output folder: copies with Serato Markers2 cues/loops, BeatGrid tags and a .crate playlist.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Set name; the crate file gets this name. | |
| tracks | No | Device track paths to convert. | |
| out_dir | Yes | Output folder to copy to the USB drive root. | |
| playlist | No | Playlist name from the local Rekordbox database. | |
| crate_dir | No | ||
| device_root | No | rekordbox USB device root, e.g. /Volumes/f379pro. | |
| rekordbox_dir | No | ||
| with_cues_only | No | ||
| write_beatgrid | No | ||
| rekordbox_database | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It describes output artifacts (cues/loops, BeatGrid tags, .crate) but does not disclose side effects such as whether it overwrites an existing output folder, requires a mounted USB device, or is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that packs the verb, source, destination, and generated artifacts without waste. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with no annotations and no output schema, the description is adequate but incomplete. It should clarify the required inputs, device-mounting expectations, and overwrite/error behavior to be fully useful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, the baseline case. The description mentions cues/loops and BeatGrid but does not clarify the under-documented parameters (crate_dir, rekordbox_dir, rekordbox_database) or the required/optional distinction among the 10 params, so it neither compensates nor detracts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (convert) and resource (Rekordbox set into Serato output folder), and names the artifact produced (.crate playlist). It distinguishes from siblings by directionality (Rekordbox→Serato) versus convert_set_to_rekordbox, though it doesn't explicitly name the reverse sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus preview_rekordbox_to_serato or convert_set_to_rekordbox. The agent gets no indication of prerequisites, whether a preview should come first, or what the alternative is.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_set_to_rekordboxA
Convert a Serato set back into Rekordbox: dry-run the database write, export a Rekordbox XML, or apply with automatic backup.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Rekordbox playlist name to create. | |
| apply | No | Write to the Rekordbox database (a backup is taken first). | |
| set_name | No | Serato crate name; omit to use all local tracks. | |
| xml_path | No | Write a rekordbox-compatible XML instead of touching the database. | |
| rekordbox_dir | No | ||
| serato_database | Yes | Serato master.sqlite. | |
| rekordbox_database | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It usefully states that apply writes to the database and takes an automatic backup, and that dry-run and XML export are non-writing alternatives, but it does not cover permissions, failure behavior, or what existing Rekordbox data may be changed beyond the backup note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with a colon and three-item list. Every clause contributes directly to understanding the tool, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter conversion/write tool with no annotations and no output schema, the description covers the core operation and its modes, which is the minimum viable context. It still leaves sibling choice guidance, parameter roles, and return/error behavior for the agent to infer, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 71%, which is neither high enough for a free baseline nor low enough to require full description compensation. The description's mode list loosely maps to apply and xml_path, but it adds no syntax or deeper meaning for name, set_name, rekordbox_dir, or rekordbox_database beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb, source resource, and destination: convert a Serato set into Rekordbox, with three named modes. It does not explicitly distinguish this tool from sibling tools such as preview_serato_to_rekordbox or convert_set, so it misses the top rubric for sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The three modes imply when each option is appropriate: dry-run for preview, xml_path for export, and apply for writing. However, there are no explicit when-to-use or when-not conditions, and no sibling alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_setsC
List the playlists (sets) in a local Rekordbox database.
| Name | Required | Description | Default |
|---|---|---|---|
| rekordbox_dir | Yes | ||
| rekordbox_database | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read-only operation but says nothing about return format, ordering, pagination, or failure modes when the database cannot be located. For a tool with zero annotation coverage this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the core operation front-loaded and no filler. It is appropriately sized for the scope it attempts to cover.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and 0% parameter description coverage, the description leaves the agent without return-value expectations or parameter guidance. It should do more work given the complete absence of structured documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and both parameters are required, yet the description never explains the difference between 'rekordbox_dir' and 'rekordbox_database' or the format each expects. No compensating detail is added beyond the phrase 'local Rekordbox database'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List the playlists') and clarifies the domain term that 'sets' means playlists, which is useful for a Rekordbox tool. However it does not distinguish itself from its siblings, which are all conversion tools, so an agent must infer that this is the discovery/read step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this versus the sibling conversion and preview tools, nor any prerequisite such as a database being mounted or unlocked. Usage is only implied by the verb 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_rekordbox_to_seratoB
Create a read-only Rekordbox to Serato conversion preview.
| Name | Required | Description | Default |
|---|---|---|---|
| rekordbox_dir | Yes | ||
| serato_database | Yes | ||
| rekordbox_database | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does disclose that the operation is 'read-only,' which usefully tells the agent nothing is mutated. Beyond that it says nothing about what the preview returns, whether it is persisted, or any auth/permission needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the read-only constraint and direction front-loaded; nothing is wasted. It is arguably under-specified rather than verbose, so it loses only marginally here.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a preview tool with three undocumented required parameters, no output schema, and no annotations, the description is too thin. Since no output schema exists, it should at least describe what the preview contains or how to interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Three required parameters exist at 0% schema description coverage, so the description must compensate and does not. The parameter names (rekordbox_dir, serato_database, rekordbox_database) are only loosely inferable from the stated purpose, with no format or path conventions explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Create) and resource (Rekordbox to Serato conversion preview), and the explicit direction cleanly distinguishes it from the sibling preview_serato_to_rekordbox. It stops short of naming that sibling directly, but an agent can still select correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Calling it a 'preview' implies it is a dry-run step to take before an actual conversion, which is reasonable implied usage. However, it never states when-not-to-use it, nor points to convert_set or convert_set_to_rekordbox as the committing alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_serato_to_rekordboxB
Create a read-only Serato to Rekordbox conversion preview.
| Name | Required | Description | Default |
|---|---|---|---|
| rekordbox_dir | Yes | ||
| serato_database | Yes | ||
| rekordbox_database | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral load; it does disclose one meaningful trait, namely that the operation is read-only and makes no changes, which matters for a tool whose siblings perform real conversions. Beyond that it says nothing about what the preview contains, whether it writes any artifacts, or what it returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence with the key qualifier ('read-only') front-loaded and zero filler. It is economical, though its brevity contributes to the coverage gaps noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a conversion tool with no annotations, no output schema, and fully undocumented parameters, this is thin: it never explains what the preview returns, how the agent should act on it, or what a subsequent real conversion step would be. The sibling convert_* tools go unmentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three required parameters (serato_database, rekordbox_database, rekordbox_dir) have 0% schema description coverage and the description adds no meaning beyond the self-explanatory names. An agent gets no guidance on expected path formats, whether these are files or directories, or how rekordbox_dir relates to rekordbox_database.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a read-only Serato to Rekordbox conversion preview'), and the directionality (Serato -> Rekordbox) implicitly separates it from the sibling preview_rekordbox_to_serato. It does not, however, explicitly contrast itself with the conversion siblings (convert_set, convert_set_to_rekordbox), so differentiation is inferable rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Read-only ... preview' implies this is the non-destructive inspection step to run before committing an actual conversion, which implicitly positions it against the convert_* siblings. But there is no explicit when-to-use statement, no stated prerequisites, and no named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stage_serato_cuesA
Write cues into a STAGING COPY of one track as Serato Markers2, then read them back to verify. The original file and both vendor databases are never touched.
| Name | Required | Description | Default |
|---|---|---|---|
| cues | Yes | ||
| track | Yes | Audio file to copy into staging. | |
| staging_dir | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does meaningful work: it discloses the write goes to a copy, that the original file and both vendor databases are untouched, and that results are read back to verify. It omits overwrite behavior, failure/rollback semantics, and where verified output is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action and immediately followed by the strongest constraint (originals untouched). Nothing is wasted or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, and only a third of parameters are documented, so the description should carry more. It covers intent and safety adequately but leaves the cues object shape and staging_dir lifecycle unexplained, which matters for a binary-format write.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only 33% schema coverage, and the description adds no parameter meaning at all. It does not explain what staging_dir is used for, the format of color, or the units/validity of position_ms and end_ms inside the cues array, leaving the undocumented parameters to guesswork.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource: writing Serato Markers2 cues into a staging copy of one track, plus a read-back verification step. The 'STAGING COPY' framing and 'originals never touched' implicitly separates it from the sibling conversion tools, but it does not name them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The staging/verification framing implies this is a safe pre-commit step, so usage is inferable. However, it never states when to prefer this over preview_serato_to_rekordbox or convert_set_to_rekordbox, nor what a caller should do after verification succeeds.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.2.0- First observed
convert_set - First observed
convert_set_to_rekordbox - First observed
list_sets - First observed
preview_rekordbox_to_serato - First observed
preview_serato_to_rekordbox - First observed
stage_serato_cues
TDQS
Scored across 6 tools
The two preview tools are clearly directional, stage_serato_cues and list_sets are distinct, but convert_set and convert_set_to_rekordbox are asymmetric: convert_set is really Rekordbox→Serato yet its name omits the direction, which could make an agent wonder if it is the generic/bidirectional counterpart to convert_set_to_rekordbox.
All snake_case, verb-first (preview_, stage_, list_, convert_), which is consistent; the only deviation is the asymmetric direction suffix where convert_set_to_rekordbox names its direction but convert_set does not, despite both being directional operations.
Six tools is well-scoped for a two-way format bridge: preview both directions, convert both directions, a staging write, and a set lister. Each tool earns its place with no redundancy.
Covers the full lifecycle for both directions (list, preview, convert, plus safe staging and backup-on-apply), but lacks any track-level inspection/listing or explicit rollback/undo tool, which agents might need for verification beyond the built-in backup.
Maintenance
Related MCP Connectors
Convert projects between Logic, Ableton, FL Studio and REAPER; generate, separate, transcribe
Convert subtitles, transcripts, broadcast captions (SCC/MCC/STL), EDLs, and Premiere files.
The media memory layer for AI agents and their humans. Your AI client gets 29 tools to search your collection, add items, update ratings, preview music, and find patterns across everything you've read, watched, and listened to.
Validate and convert JSONL fine-tuning data across 11 AI providers. 13 tools.
Related MCP Servers
- AlicenseCqualityCmaintenanceSyncs YouTube Music liked songs, analyzes them for DJ metadata like BPM and key, and enables creating playlists from previews.10MIT
- AlicenseCqualityDmaintenanceMCP server for DJs using Pioneer Rekordbox, offering 33 tools for library management, smart playlists, DJ analytics, and safe mutations with complete undo support.33MIT
- FlicenseNot gradedqualityBmaintenanceEnables safety-first live control of Rekordbox over a virtual MIDI port, with armed transitions, dry-run preview, and emergency stop.-
- FlicenseNot gradedqualityBmaintenanceEnables an MCP host to scan and catalog a local drum and bass library, search and analyze tracks, plan and validate ordered set lists, and render gapless DJ-style WAV mixes with beat-aligned crossfades and bass swaps.1-