Zeltor Music Tools

Check if two songs mix (Camelot key, BPM), read shared song DNA reports, tempo and nightcore math.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
98%
Naming quality
83%
Poisoning risk
80%
Permission match
100%
Protocol compliance
100%

Findings (2)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains URL to non-standard domainin song_report

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,276Tokens (tool definitions)
~1.1 KBTypical response size
Moderate attention impact (1.00% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "music-tools": {
      "url": "https://zeltorlabs.com/mcp"
    }
  }
}

Remote endpoints

https://zeltorlabs.com/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢check_mix(key_a, bpm_a, key_b, bpm_b)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "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\"."
    },
    "bpm_a": {
      "type": "number",
      "minimum": 20,
      "maximum": 400,
      "description": "Track A tempo in BPM."
    },
    "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\"."
    },
    "bpm_b": {
      "type": "number",
      "minimum": 20,
      "maximum": 400,
      "description": "Track B tempo in BPM."
    }
  },
  "required": [
    "key_a",
    "bpm_a",
    "key_b",
    "bpm_b"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢camelot(key)

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).

Input Schema

{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "description": "Musical key: a name like \"A minor\", \"Am\", \"F#m\", \"Bb major\", \"C\", or a Camelot code like \"8A\"."
    }
  },
  "required": [
    "key"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tempo_change(from_bpm, to_bpm)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "from_bpm": {
      "type": "number",
      "minimum": 20,
      "maximum": 400,
      "description": "Current tempo in BPM."
    },
    "to_bpm": {
      "type": "number",
      "minimum": 20,
      "maximum": 400,
      "description": "Target tempo in BPM."
    }
  },
  "required": [
    "from_bpm",
    "to_bpm"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢speed_pitch(style, speed, bpm)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "style": {
      "description": "Which effect; sets the default speed.",
      "type": "string",
      "enum": [
        "nightcore",
        "slowed"
      ]
    },
    "speed": {
      "description": "Playback speed, e.g. 1.25 for 25% faster or 0.8 for 20% slower.",
      "type": "number",
      "minimum": 0.5,
      "maximum": 2
    },
    "bpm": {
      "description": "Original tempo, to report the new BPM.",
      "type": "number",
      "minimum": 20,
      "maximum": 400
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢transpose(key, semitones)

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.

Input Schema

{
  "type": "object",
  "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",
      "minimum": -12,
      "maximum": 12,
      "description": "Semitones to move, negative is down."
    }
  },
  "required": [
    "key",
    "semitones"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢song_report(link)

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).

Input Schema

{
  "type": "object",
  "properties": {
    "link": {
      "type": "string",
      "description": "The report share link, e.g. https://zeltorlabs.com/report/r/abc123def456, or its code."
    }
  },
  "required": [
    "link"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools