Check if two songs mix (Camelot key, BPM), read shared song DNA reports, tempo and nightcore math.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Gives the Camelot wheel code for a key and the three other keys that mix cleanly with it (one step either way with the same letter, and the relative major or minor).
Musical key: a name like "A minor", "Am", "F#m", "Bb major", "C", or a Camelot code like "8A".
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http music-tools https://zeltorlabs.com/mcp
Gives the Camelot wheel code for a key and the three other keys that mix cleanly with it (one step either way with the same letter, and the relative major or minor).
| Argument | Type | Description |
|---|---|---|
| key* | string | Musical key: a name like "A minor", "Am", "F#m", "Bb major", "C", or a Camelot code like "8A". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"key"
],
"properties": {
"key": {
"type": "string",
"description": "Musical key: a name like \"A minor\", \"Am\", \"F#m\", \"Bb major\", \"C\", or a Camelot code like \"8A\"."
}
}
}Decides whether two songs will mix well, from their keys and BPMs, using the Camelot wheel and DJ tempo limits (about 3% sounds natural, up to about 16% is usable, half and double time count). Returns a verdict, the tempo change in percent and the target BPM for track B, the smallest key shift in semitones if the keys clash, and a link to make the matched audio.
| Argument | Type | Description |
|---|---|---|
| bpm_a* | number | Track A tempo in BPM. |
| bpm_b* | number | Track B tempo in BPM. |
| key_a* | string | Track A key. Musical key: a name like "A minor", "Am", "F#m", "Bb major", "C", or a Camelot code like "8A". |
| key_b* | string | Track B key (the one that would be changed). Musical key: a name like "A minor", "Am", "F#m", "Bb major", "C", or a Camelot code like "8A". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"key_a",
"bpm_a",
"key_b",
"bpm_b"
],
"properties": {
"bpm_a": {
"type": "number",
"maximum": 400,
"minimum": 20,
"description": "Track A tempo in BPM."
},
"bpm_b": {
"type": "number",
"maximum": 400,
"minimum": 20,
"description": "Track B tempo in BPM."
},
"key_a": {
"type": "string",
"description": "Track A key. Musical key: a name like \"A minor\", \"Am\", \"F#m\", \"Bb major\", \"C\", or a Camelot code like \"8A\"."
},
"key_b": {
"type": "string",
"description": "Track B key (the one that would be changed). Musical key: a name like \"A minor\", \"Am\", \"F#m\", \"Bb major\", \"C\", or a Camelot code like \"8A\"."
}
}
}Reads the song DNA from a MusicMind report the person made on zeltorlabs.com and shared: key and Camelot code with the keys that mix with it, BPM, genre mix, section structure with energy, and production DNA (energy profile, mood, arrangement density, compression, biggest moments). Takes the share link (https://zeltorlabs.com/report/r/<code>) or its code. Use the key and BPM with check_mix to compare it with another song. If the person has no report yet, they can make one free at https://zeltorlabs.com/analyze (the audio is analyzed in their browser).
| Argument | Type | Description |
|---|---|---|
| link* | string | The report share link, e.g. https://zeltorlabs.com/report/r/abc123def456, or its code. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"link"
],
"properties": {
"link": {
"type": "string",
"description": "The report share link, e.g. https://zeltorlabs.com/report/r/abc123def456, or its code."
}
}
}For a nightcore (faster and higher) or slowed (slower and lower) version: the pitch change in semitones for a speed, the new BPM if given, and typical settings. Defaults: nightcore 1.25x, slowed 0.80x.
| Argument | Type | Description |
|---|---|---|
| bpm | number | Original tempo, to report the new BPM. |
| speed | number | Playback speed, e.g. 1.25 for 25% faster or 0.8 for 20% slower. |
| style | string | Which effect; sets the default speed. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"bpm": {
"type": "number",
"maximum": 400,
"minimum": 20,
"description": "Original tempo, to report the new BPM."
},
"speed": {
"type": "number",
"maximum": 2,
"minimum": 0.5,
"description": "Playback speed, e.g. 1.25 for 25% faster or 0.8 for 20% slower."
},
"style": {
"enum": [
"nightcore",
"slowed"
],
"type": "string",
"description": "Which effect; sets the default speed."
}
}
}Percent change and playback rate to go from one BPM to another, how noticeable it will sound, the pitch change if it is not time-stretched, and the half and double time of the target.
| Argument | Type | Description |
|---|---|---|
| to_bpm* | number | Target tempo in BPM. |
| from_bpm* | number | Current tempo in BPM. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"from_bpm",
"to_bpm"
],
"properties": {
"to_bpm": {
"type": "number",
"maximum": 400,
"minimum": 20,
"description": "Target tempo in BPM."
},
"from_bpm": {
"type": "number",
"maximum": 400,
"minimum": 20,
"description": "Current tempo in BPM."
}
}
}Moves a key up or down by semitones and gives the new key name and Camelot code, with a note on how natural the shift will sound.
| Argument | Type | Description |
|---|---|---|
| key* | string | Musical key: a name like "A minor", "Am", "F#m", "Bb major", "C", or a Camelot code like "8A". |
| semitones* | integer | Semitones to move, negative is down. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"key",
"semitones"
],
"properties": {
"key": {
"type": "string",
"description": "Musical key: a name like \"A minor\", \"Am\", \"F#m\", \"Bb major\", \"C\", or a Camelot code like \"8A\"."
},
"semitones": {
"type": "integer",
"maximum": 12,
"minimum": -12,
"description": "Semitones to move, negative is down."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Oct 31, 2026.