Tool tree
gradeNot graded
get_songAnswer
Read the song as text: tempo, swing, bars, key/scale, tracks, transport and human selection. Call this first; use get_recent_changes for later human edits. Long note lists are shortened here — pass track to read that one track in full. Steps are 0-indexed 16ths, 16 per bar. Drums: X accent, x hit, o soft, . rest. Melodic notes: step:Note(length).
View tool JSON
{
"name": "get_song",
"kind": "answer",
"impl": "imperative",
"description": "Read the song as text: tempo, swing, bars, key/scale, tracks, transport and human selection. Call this first; use get_recent_changes for later human edits. Long note lists are shortened here — pass track to read that one track in full. Steps are 0-indexed 16ths, 16 per bar. Drums: X accent, x hit, o soft, . rest. Melodic notes: step:Note(length).",
"inputSchema": {
"type": "object",
"properties": {
"track": {
"type": "string",
"maxLength": 64,
"description": "Omit for the whole song. Pass a track id (preferred), exact track name, instrument id, or 1-based position to read that track's notes in full."
}
},
"additionalProperties": false
}
}get_recent_changesAnswer
Read what the human changed since the agent last observed the song with get_song or this tool. Returns up to 10 session-log entries in chronological order; call get_song afterwards when you need the full current notes or patterns.
View tool JSON
{
"name": "get_recent_changes",
"kind": "answer",
"impl": "imperative",
"description": "Read what the human changed since the agent last observed the song with get_song or this tool. Returns up to 10 session-log entries in chronological order; call get_song afterwards when you need the full current notes or patterns.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}list_instrumentsAnswer
List the available instruments: id, drum or melodic, character and recommended pitch range. Drums take patterns, melodic instruments take notes.
View tool JSON
{
"name": "list_instruments",
"kind": "answer",
"impl": "imperative",
"description": "List the available instruments: id, drum or melodic, character and recommended pitch range. Drums take patterns, melodic instruments take notes.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}get_scale_notesAnswer
Music theory helper: list the notes of a scale within a pitch range, so melodies and basslines stay in key.
View tool JSON
{
"name": "get_scale_notes",
"kind": "answer",
"impl": "imperative",
"description": "Music theory helper: list the notes of a scale within a pitch range, so melodies and basslines stay in key.",
"inputSchema": {
"type": "object",
"properties": {
"root": {
"type": "string",
"maxLength": 3,
"description": "Root pitch class, e.g. \"A\", \"F#\", \"Bb\". Defaults to the song key."
},
"scale": {
"type": "string",
"enum": [
"major",
"minor",
"dorian",
"phrygian",
"lydian",
"mixolydian",
"harmonic_minor",
"pentatonic_major",
"pentatonic_minor",
"blues"
],
"description": "Defaults to the song scale."
},
"low_note": {
"type": "string",
"maxLength": 4,
"description": "Lowest note to include, e.g. \"A1\". Default C2."
},
"high_note": {
"type": "string",
"maxLength": 4,
"description": "Highest note to include, e.g. \"A4\". Default C5."
}
},
"additionalProperties": false
}
}set_tempoAction
Change tempo (BPM) and/or swing. Swing is 0 (straight) to 0.6 (heavy shuffle), applied to off-beat 16ths.
View tool JSON
{
"name": "set_tempo",
"kind": "act",
"impl": "imperative",
"description": "Change tempo (BPM) and/or swing. Swing is 0 (straight) to 0.6 (heavy shuffle), applied to off-beat 16ths.",
"inputSchema": {
"type": "object",
"properties": {
"bpm": {
"type": "number",
"minimum": 40,
"maximum": 240
},
"swing": {
"type": "number",
"minimum": 0,
"maximum": 0.6
}
},
"additionalProperties": false
}
}set_playbackAction
Start or stop playback. The loop plays continuously and picks up edits live. Audio can only start after the human has clicked somewhere on the page at least once.
View tool JSON
{
"name": "set_playback",
"kind": "act",
"impl": "imperative",
"description": "Start or stop playback. The loop plays continuously and picks up edits live. Audio can only start after the human has clicked somewhere on the page at least once.",
"inputSchema": {
"type": "object",
"properties": {
"playing": {
"type": "boolean"
}
},
"required": [
"playing"
],
"additionalProperties": false
}
}set_song_metaAction
Set the song title, key, scale and/or length in bars (1, 2 or 4). Growing the song tiles existing material; shrinking drops the extra bars.
View tool JSON
{
"name": "set_song_meta",
"kind": "act",
"impl": "imperative",
"description": "Set the song title, key, scale and/or length in bars (1, 2 or 4). Growing the song tiles existing material; shrinking drops the extra bars.",
"inputSchema": {
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 60
},
"key": {
"type": "string",
"maxLength": 3,
"description": "Pitch class such as \"A\" or \"F#\""
},
"scale": {
"type": "string",
"enum": [
"major",
"minor",
"dorian",
"phrygian",
"lydian",
"mixolydian",
"harmonic_minor",
"pentatonic_major",
"pentatonic_minor",
"blues"
]
},
"bars": {
"type": "integer",
"enum": [
1,
2,
4
]
}
},
"additionalProperties": false
}
}add_trackAction
Add a new track. Drum tracks take an optional pattern string (X accent, x hit, o soft, . rest; - _ 0 also read as rest and 1 as hit; 16 chars per bar, short patterns repeat). Melodic tracks take optional notes. Returns the new track id.
View tool JSON
{
"name": "add_track",
"kind": "act",
"impl": "imperative",
"description": "Add a new track. Drum tracks take an optional pattern string (X accent, x hit, o soft, . rest; - _ 0 also read as rest and 1 as hit; 16 chars per bar, short patterns repeat). Melodic tracks take optional notes. Returns the new track id.",
"inputSchema": {
"type": "object",
"properties": {
"instrument": {
"type": "string",
"enum": [
"kick",
"snare",
"hat_closed",
"hat_open",
"clap",
"tom",
"rim",
"cowbell",
"shaker",
"bass",
"lead",
"pad",
"pluck",
"keys"
]
},
"name": {
"type": "string",
"maxLength": 32,
"description": "Display name, defaults to the instrument label"
},
"pattern": {
"type": "string",
"maxLength": 96,
"description": "Drums only, e.g. \"x.x.x.x.x.x.x.x.\""
},
"notes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"step": {
"type": "integer",
"minimum": 0,
"description": "0-indexed 16th-note step (0-15 in bar 1, 16-31 in bar 2, ...)"
},
"note": {
"type": [
"string",
"integer"
],
"description": "Scientific pitch such as \"A2\", \"C#3\", \"Bb1\", or a MIDI number"
},
"length": {
"type": "integer",
"description": "Length in steps, default 1",
"minimum": 1,
"maximum": 64
},
"velocity": {
"type": "number",
"description": "0.05-1, default 0.8",
"minimum": 0.05,
"maximum": 1
}
},
"required": [
"step",
"note"
],
"additionalProperties": false
},
"maxItems": 256,
"description": "Melodic only"
}
},
"required": [
"instrument"
],
"additionalProperties": false
}
}remove_trackAction
Remove a track from the song.
View tool JSON
{
"name": "remove_track",
"kind": "act",
"impl": "imperative",
"description": "Remove a track from the song.",
"inputSchema": {
"type": "object",
"properties": {
"track": {
"type": "string",
"maxLength": 64,
"description": "Track id (preferred), exact track name, instrument id, or 1-based position from get_song"
}
},
"required": [
"track"
],
"additionalProperties": false
}
}update_trackAction
Rename a track or change its mixer settings: volume (0-1), mute, solo.
View tool JSON
{
"name": "update_track",
"kind": "act",
"impl": "imperative",
"description": "Rename a track or change its mixer settings: volume (0-1), mute, solo.",
"inputSchema": {
"type": "object",
"properties": {
"track": {
"type": "string",
"maxLength": 64,
"description": "Track id (preferred), exact track name, instrument id, or 1-based position from get_song"
},
"name": {
"type": "string",
"maxLength": 32
},
"volume": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"mute": {
"type": "boolean"
},
"solo": {
"type": "boolean"
}
},
"required": [
"track"
],
"additionalProperties": false
}
}set_drum_patternAction
Replace a drum track using either a pattern string (X accent, x hit, o soft, . rest; - _ 0 also read as rest and 1 as hit) or euclid { hits, steps, rotate? }. Short patterns repeat across the song; `bar` targets one 16-step bar.
View tool JSON
{
"name": "set_drum_pattern",
"kind": "act",
"impl": "imperative",
"description": "Replace a drum track using either a pattern string (X accent, x hit, o soft, . rest; - _ 0 also read as rest and 1 as hit) or euclid { hits, steps, rotate? }. Short patterns repeat across the song; `bar` targets one 16-step bar.",
"inputSchema": {
"type": "object",
"properties": {
"track": {
"type": "string",
"maxLength": 64,
"description": "Track id (preferred), exact track name, instrument id, or 1-based position from get_song"
},
"pattern": {
"type": "string",
"maxLength": 96,
"description": "e.g. \"X...x...X...x...\" or \"x.x.x.x.x.x.x.x.\""
},
"euclid": {
"type": "object",
"properties": {
"hits": {
"type": "integer",
"minimum": 0,
"maximum": 64
},
"steps": {
"type": "integer",
"minimum": 1,
"maximum": 64
},
"rotate": {
"type": "integer",
"minimum": -64,
"maximum": 64
}
},
"required": [
"hits",
"steps"
],
"additionalProperties": false,
"description": "Evenly distribute hits across steps; rotate moves the pattern right"
},
"bar": {
"type": "integer",
"minimum": 1,
"maximum": 4,
"description": "Only write this bar (1-based)"
}
},
"required": [
"track"
],
"additionalProperties": false
}
}set_notesAction
Write exact notes on a melodic track (bass, lead, pad, pluck, keys). mode 'replace' (default) rewrites the whole track; 'merge' adds notes. Stack notes at one step for custom chords; set_chords generates Roman progressions.
View tool JSON
{
"name": "set_notes",
"kind": "act",
"impl": "imperative",
"description": "Write exact notes on a melodic track (bass, lead, pad, pluck, keys). mode 'replace' (default) rewrites the whole track; 'merge' adds notes. Stack notes at one step for custom chords; set_chords generates Roman progressions.",
"inputSchema": {
"type": "object",
"properties": {
"track": {
"type": "string",
"maxLength": 64,
"description": "Track id (preferred), exact track name, instrument id, or 1-based position from get_song"
},
"notes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"step": {
"type": "integer",
"minimum": 0,
"description": "0-indexed 16th-note step (0-15 in bar 1, 16-31 in bar 2, ...)"
},
"note": {
"type": [
"string",
"integer"
],
"description": "Scientific pitch such as \"A2\", \"C#3\", \"Bb1\", or a MIDI number"
},
"length": {
"type": "integer",
"description": "Length in steps, default 1",
"minimum": 1,
"maximum": 64
},
"velocity": {
"type": "number",
"description": "0.05-1, default 0.8",
"minimum": 0.05,
"maximum": 1
}
},
"required": [
"step",
"note"
],
"additionalProperties": false
},
"maxItems": 256
},
"mode": {
"type": "string",
"enum": [
"replace",
"merge"
]
}
},
"required": [
"track",
"notes"
],
"additionalProperties": false
}
}set_chordsAction
Write a scale-relative Roman-numeral progression such as `i VI III VII` across the whole song. Uses close voice leading on a pad or keys track. Omit track to reuse the first pad/keys track or create a Chords pad.
View tool JSON
{
"name": "set_chords",
"kind": "act",
"impl": "imperative",
"description": "Write a scale-relative Roman-numeral progression such as `i VI III VII` across the whole song. Uses close voice leading on a pad or keys track. Omit track to reuse the first pad/keys track or create a Chords pad.",
"inputSchema": {
"type": "object",
"properties": {
"progression": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Space-separated Roman chords relative to the song scale, e.g. \"i VI III VII\""
},
"track": {
"type": "string",
"maxLength": 64,
"description": "Track id (preferred), exact track name, instrument id, or 1-based position from get_song"
},
"velocity": {
"type": "number",
"minimum": 0.05,
"maximum": 1,
"description": "Chord velocity, default 0.7"
}
},
"required": [
"progression"
],
"additionalProperties": false
}
}humanizeAction
Add natural velocity variation to one track (or every track). amount 0-1, default 0.3. Great for hats and shakers.
View tool JSON
{
"name": "humanize",
"kind": "act",
"impl": "imperative",
"description": "Add natural velocity variation to one track (or every track). amount 0-1, default 0.3. Great for hats and shakers.",
"inputSchema": {
"type": "object",
"properties": {
"track": {
"type": "string",
"maxLength": 64,
"description": "Track id (preferred), exact track name, instrument id, or 1-based position from get_song"
},
"amount": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false
}
}undoAction
Undo the last change (by anyone). Call get_song afterwards if you need the details.
View tool JSON
{
"name": "undo",
"kind": "act",
"impl": "imperative",
"description": "Undo the last change (by anyone). Call get_song afterwards if you need the details.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}redoAction
Redo the last undone change.
View tool JSON
{
"name": "redo",
"kind": "act",
"impl": "imperative",
"description": "Redo the last undone change.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}clear_songAction
Remove every track and start over. This asks the human for confirmation in the app and only proceeds if they approve.
View tool JSON
{
"name": "clear_song",
"kind": "act",
"impl": "imperative",
"description": "Remove every track and start over. This asks the human for confirmation in the app and only proceeds if they approve.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}