Tool tree
gradeNot graded
get_patchAnswer
Read the selected editable patch before refinement. Preserve unrelated settings. For unresolved subjective, exploratory, or character-choice directions, compare A/B with create_variant; for a settled precise change, use a direct edit even when its impact is large. A/B is simultaneous judgment, while undo reverses a committed transaction.
View tool JSON
{
"name": "get_patch",
"kind": "answer",
"impl": "imperative",
"description": "Read the selected editable patch before refinement. Preserve unrelated settings. For unresolved subjective, exploratory, or character-choice directions, compare A/B with create_variant; for a settled precise change, use a direct edit even when its impact is large. A/B is simultaneous judgment, while undo reverses a committed transaction.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}get_sectionAnswer
Read full detail for one patch section. voice.mode is derived from voice.polyphony and is not writable.
View tool JSON
{
"name": "get_section",
"kind": "answer",
"impl": "imperative",
"description": "Read full detail for one patch section. voice.mode is derived from voice.polyphony and is not writable.",
"inputSchema": {
"type": "object",
"properties": {
"section": {
"type": "string",
"enum": [
"osc1",
"osc2",
"osc3",
"amp_env",
"mod_env",
"lfo1",
"lfo2",
"filter",
"effects",
"voice"
]
}
},
"required": [
"section"
],
"additionalProperties": false
}
}get_capabilitiesAnswer
Read valid values and units before choosing operations or raw paths. voice.mode is derived; write voice.polyphony instead.
View tool JSON
{
"name": "get_capabilities",
"kind": "answer",
"impl": "imperative",
"description": "Read valid values and units before choosing operations or raw paths. voice.mode is derived; write voice.polyphony instead.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}apply_patchAction
The V1 operation vocabulary. Arguments are normalized 0..1 unless noted; right-hand sides are PatchState values in musical units. ### tone { op: "tone", brightness: 0..1, keep_air?: bool, resonance?: 0..1 } filter.enabled = true filter.type = "lowpass" filter.slope = keep_air ? 12 : 24 filter.cutoffHz = cutoffHz(0.12 + brightness*0.80 + (keep_air ? 0.06 : 0)) if resonance given: filter.resonance = resonance ### articulation { op: "articulation", kind: "pluck" | "stab" | "percussive" | "keys" | "bell" | "pad" | "swell" | "sustain" | "reverse", speed?: 0..1 } Values are seconds; sustainLevel and decayCurve are unscaled. kind delay attack hold decay sustain release decayCurve pluck 0 0.00 0 0.18 0.00 0.12 -0.6 stab 0 0.00 0 0.10 0.00 0.06 -0.7 percussive 0 0.00 0 0.06 0.00 0.04 -0.8 keys 0 0.00 0 0.35 0.45 0.25 -0.5 bell 0 0.00 0 0.55 0.00 0.50 -0.8 pad 0 0.45 0 0.40 0.85 0.62 0.0 swell 0 0.72 0 0.30 0.90 0.70 +0.3 sustain 0 0.02 0 0.10 1.00 0.15 0.0 reverse 0 0.85 0.05 0.05 0.00 0.02 +0.5 writes ampEnvelope.{delaySeconds,attackSeconds,holdSeconds,decaySeconds,sustainLevel,releaseSeconds,decayCurve} speed (default 0.5): t' = t * (0.25 + speed*1.5), applied to delay/attack/hold/decay/release only ### timbre { op: "timbre", character: "pure" | "warm" | "bright" | "hollow" | "vocal" | "metallic" | "glassy" | "harsh" | "digital", position?: 0..1, target?: 1 | 2 | 3 | "both" | "all" } target defaults to 1; "both" = oscillators 1-2; "all" = oscillators 1-3. character wavetableId defaultPosition: pure sine 0.00; warm warm-saw 0.35; bright airy 0.70; hollow soft-square 0.30; vocal vocal 0.45; metallic metallic 0.55; glassy glass 0.40; harsh harsh 0.75; digital digital 0.50. Also sets oscillators.N.enabled = true. ### width { op: "width", amount: 0..1, method?: "unison" | "pan" | "stereo_fx" | "auto" } auto (default): unison below 0.6; unison + stereo_fx at or above 0.6 unison: oscillators.0.unisonVoices = clamp(round(1 + amount*8), 1, 8) oscillators.0.unisonDetune = amount*0.7 oscillators.0.stereoSpread = 0.3 + amount*0.7 pan: oscillators.0.pan = 0.5 - amount*0.3; oscillators.1.pan = 0.5 + amount*0.3 stereo_fx: effects.chorus.enabled = amount > 0.2; effects.chorus.mix = amount*0.5 delay.time_right offset is dropped in V1. ### space { op: "space", amount: 0..1, size?: 0..1, delay_amount?: 0..1, predelay?: 0..1 } effects.reverb.enabled = amount > 0.02 effects.reverb.mix = amount*0.75 effects.reverb.size = size ?? (0.3 + amount*0.5) effects.reverb.decaySeconds = revDecay(0.3 + amount*0.5) effects.reverb.predelay = predelay ?? 0.1 if delay_amount given: effects.delay.enabled = delay_amount > 0.02; effects.delay.mix = delay_amount*0.6; effects.delay.mode = "sync"; effects.delay.division = "1/8"; effects.delay.feedback = 0.2 + delay_amount*0.4 ### drive { op: "drive", amount: 0..1, character?: "soft" | "hard" | "fold" | "crush" } effects.distortion.enabled = amount > 0.02 effects.distortion.type = {soft:"soft_clip", hard:"hard_clip", fold:"sine_fold", crush:"bit_crush"}[character ?? "soft"] effects.distortion.drive = amount effects.distortion.mix = 0.4 + amount*0.6 filter.drive = amount*0.4 ### movement { op: "movement", amount: 0..1, rate?: 0..1, target?: "level" | "position" | "pitch" | "cutoff", scope?: "all" | 1 | 2 | 3, shape?: "sine" | "triangle" | "ramp_up" | "ramp_down" | "random" | "smooth_random" } movement is continuous modulation; gate is stepped and rhythmic. Both can target level. Target defaults to position; scope defaults to all and is forced to all for cutoff; shape defaults to sine. lfo2.enabled = true; lfo2.points = SHAPES[shape ?? "sine"] lfo2.rate = {mode:"sync", division:divisionFor(rate ?? 0.25)} lfo2.smoothing = 0.4; lfo2.target = target; lfo2.scope = scope; lfo2.depth = amount. ### gate { op: "gate", pattern: "even_8" | "even_16" | "offbeat" | "long_short" | "short_long" | "triplet" | "dotted" | "swung" | "stutter" | "none", division?: "1/1" | "1/2" | "1/4" | "1/8" | "1/8T" | "1/16" | "1/16T" | "1/32" | "1/64", depth?: 0..1, smoothing?: 0..1, target?: "level" | "position" | "pitch" | "cutoff", scope?: "all" | 1 | 2 | 3 } gate is stepped and rhythmic modulation; movement is continuous. Both can target level. Target defaults to level; scope defaults to all and is forced to all for cutoff. lfo1.enabled = true; lfo1.points = PATTERNS[pattern]; lfo1.rate = {mode:"sync", division:division ?? "1/1"}; lfo1.smoothing = smoothing ?? 0.08 lfo1.target = target; lfo1.scope = scope; lfo1.depth = depth ?? 0.85 pattern none sets lfo1.points = [{x:0,y:1},{x:1,y:1}]. ### balance { op: "balance", osc1?: 0..1, osc2?: 0..1, osc3?: 0..1 } oscillators.N.level = value oscillators.N.enabled = value > 0 for osc2/osc3. ### layer { op: "layer", role: "sub" | "octave_up" | "fifth" | "unison_detune" | "none", level?: 0..1, wavetable?: string } Role table (transpose, default level, voices, detune, wavetableId): sub (-12, 0.35, 1, 0, sine); octave_up (+12, 0.22, 1, 0, inherit); fifth (+7, 0.18, 1, 0, inherit); unison_detune (0, 0.45, 3, 0.4, inherit); none disables oscillator 2 at level 0. wavetable and level override the role table; otherwise the role's default level is written. ### pitch { op: "pitch", octave?: -3..3, semitones?: -12..12, glide?: 0..1, mono?: bool, legato?: bool } voice.transposeSemitones = clamp((octave ?? 0)*12 + (semitones ?? 0), -36, 36) voice.glideSeconds = glideSeconds(glide ?? 0) voice.polyphony = mono ? 1 : 8 voice.legato = legato ?? (mono ?? false) ### response { op: "response", velocity_to_level?: 0..1, velocity_to_cutoff?: 0..1, keytrack?: 0..1 } if velocity_to_level given: voice.velocitySensitivity = velocity_to_level if velocity_to_cutoff given: filter.velocityToCutoff = velocity_to_cutoff if keytrack given: filter.keytrack = keytrack Routing is derived from filter.velocityToCutoff; zero emits no velocity route. Prefer operations over raw paths. Use a path only for a precise correction or for a parameter no operation covers. Use this direct-edit path for settled, unambiguous intent, including a high-impact replacement. When a subjective, exploratory, or character-choice direction leaves judgment unresolved, preserve A and use create_variant to compare B instead. Comparison is simultaneous judgment; undo reverses an already committed transaction.
View tool JSON
{
"name": "apply_patch",
"kind": "act",
"impl": "imperative",
"description": "The V1 operation vocabulary. Arguments are normalized 0..1 unless noted; right-hand sides are PatchState values in musical units.\n\n### tone\n{ op: \"tone\", brightness: 0..1, keep_air?: bool, resonance?: 0..1 }\nfilter.enabled = true\nfilter.type = \"lowpass\"\nfilter.slope = keep_air ? 12 : 24\nfilter.cutoffHz = cutoffHz(0.12 + brightness*0.80 + (keep_air ? 0.06 : 0))\nif resonance given: filter.resonance = resonance\n\n### articulation\n{ op: \"articulation\", kind: \"pluck\" | \"stab\" | \"percussive\" | \"keys\" | \"bell\" | \"pad\" | \"swell\" | \"sustain\" | \"reverse\", speed?: 0..1 }\nValues are seconds; sustainLevel and decayCurve are unscaled.\nkind delay attack hold decay sustain release decayCurve\npluck 0 0.00 0 0.18 0.00 0.12 -0.6\nstab 0 0.00 0 0.10 0.00 0.06 -0.7\npercussive 0 0.00 0 0.06 0.00 0.04 -0.8\nkeys 0 0.00 0 0.35 0.45 0.25 -0.5\nbell 0 0.00 0 0.55 0.00 0.50 -0.8\npad 0 0.45 0 0.40 0.85 0.62 0.0\nswell 0 0.72 0 0.30 0.90 0.70 +0.3\nsustain 0 0.02 0 0.10 1.00 0.15 0.0\nreverse 0 0.85 0.05 0.05 0.00 0.02 +0.5\nwrites ampEnvelope.{delaySeconds,attackSeconds,holdSeconds,decaySeconds,sustainLevel,releaseSeconds,decayCurve}\nspeed (default 0.5): t' = t * (0.25 + speed*1.5), applied to delay/attack/hold/decay/release only\n\n### timbre\n{ op: \"timbre\", character: \"pure\" | \"warm\" | \"bright\" | \"hollow\" | \"vocal\" | \"metallic\" | \"glassy\" | \"harsh\" | \"digital\", position?: 0..1, target?: 1 | 2 | 3 | \"both\" | \"all\" }\ntarget defaults to 1; \"both\" = oscillators 1-2; \"all\" = oscillators 1-3.\ncharacter wavetableId defaultPosition: pure sine 0.00; warm warm-saw 0.35; bright airy 0.70; hollow soft-square 0.30; vocal vocal 0.45; metallic metallic 0.55; glassy glass 0.40; harsh harsh 0.75; digital digital 0.50.\nAlso sets oscillators.N.enabled = true.\n\n### width\n{ op: \"width\", amount: 0..1, method?: \"unison\" | \"pan\" | \"stereo_fx\" | \"auto\" }\nauto (default): unison below 0.6; unison + stereo_fx at or above 0.6\nunison: oscillators.0.unisonVoices = clamp(round(1 + amount*8), 1, 8)\n oscillators.0.unisonDetune = amount*0.7\n oscillators.0.stereoSpread = 0.3 + amount*0.7\npan: oscillators.0.pan = 0.5 - amount*0.3; oscillators.1.pan = 0.5 + amount*0.3\nstereo_fx: effects.chorus.enabled = amount > 0.2; effects.chorus.mix = amount*0.5\ndelay.time_right offset is dropped in V1.\n\n### space\n{ op: \"space\", amount: 0..1, size?: 0..1, delay_amount?: 0..1, predelay?: 0..1 }\neffects.reverb.enabled = amount > 0.02\neffects.reverb.mix = amount*0.75\neffects.reverb.size = size ?? (0.3 + amount*0.5)\neffects.reverb.decaySeconds = revDecay(0.3 + amount*0.5)\neffects.reverb.predelay = predelay ?? 0.1\nif delay_amount given: effects.delay.enabled = delay_amount > 0.02; effects.delay.mix = delay_amount*0.6; effects.delay.mode = \"sync\"; effects.delay.division = \"1/8\"; effects.delay.feedback = 0.2 + delay_amount*0.4\n\n### drive\n{ op: \"drive\", amount: 0..1, character?: \"soft\" | \"hard\" | \"fold\" | \"crush\" }\neffects.distortion.enabled = amount > 0.02\neffects.distortion.type = {soft:\"soft_clip\", hard:\"hard_clip\", fold:\"sine_fold\", crush:\"bit_crush\"}[character ?? \"soft\"]\neffects.distortion.drive = amount\neffects.distortion.mix = 0.4 + amount*0.6\nfilter.drive = amount*0.4\n\n### movement\n{ op: \"movement\", amount: 0..1, rate?: 0..1, target?: \"level\" | \"position\" | \"pitch\" | \"cutoff\", scope?: \"all\" | 1 | 2 | 3, shape?: \"sine\" | \"triangle\" | \"ramp_up\" | \"ramp_down\" | \"random\" | \"smooth_random\" }\nmovement is continuous modulation; gate is stepped and rhythmic. Both can target level.\nTarget defaults to position; scope defaults to all and is forced to all for cutoff; shape defaults to sine.\nlfo2.enabled = true; lfo2.points = SHAPES[shape ?? \"sine\"]\nlfo2.rate = {mode:\"sync\", division:divisionFor(rate ?? 0.25)}\nlfo2.smoothing = 0.4; lfo2.target = target; lfo2.scope = scope; lfo2.depth = amount.\n\n### gate\n{ op: \"gate\", pattern: \"even_8\" | \"even_16\" | \"offbeat\" | \"long_short\" | \"short_long\" | \"triplet\" | \"dotted\" | \"swung\" | \"stutter\" | \"none\", division?: \"1/1\" | \"1/2\" | \"1/4\" | \"1/8\" | \"1/8T\" | \"1/16\" | \"1/16T\" | \"1/32\" | \"1/64\", depth?: 0..1, smoothing?: 0..1, target?: \"level\" | \"position\" | \"pitch\" | \"cutoff\", scope?: \"all\" | 1 | 2 | 3 }\ngate is stepped and rhythmic modulation; movement is continuous. Both can target level.\nTarget defaults to level; scope defaults to all and is forced to all for cutoff.\nlfo1.enabled = true; lfo1.points = PATTERNS[pattern]; lfo1.rate = {mode:\"sync\", division:division ?? \"1/1\"}; lfo1.smoothing = smoothing ?? 0.08\nlfo1.target = target; lfo1.scope = scope; lfo1.depth = depth ?? 0.85\npattern none sets lfo1.points = [{x:0,y:1},{x:1,y:1}].\n\n### balance\n{ op: \"balance\", osc1?: 0..1, osc2?: 0..1, osc3?: 0..1 }\noscillators.N.level = value\noscillators.N.enabled = value > 0 for osc2/osc3.\n\n### layer\n{ op: \"layer\", role: \"sub\" | \"octave_up\" | \"fifth\" | \"unison_detune\" | \"none\", level?: 0..1, wavetable?: string }\nRole table (transpose, default level, voices, detune, wavetableId): sub (-12, 0.35, 1, 0, sine); octave_up (+12, 0.22, 1, 0, inherit); fifth (+7, 0.18, 1, 0, inherit); unison_detune (0, 0.45, 3, 0.4, inherit); none disables oscillator 2 at level 0.\nwavetable and level override the role table; otherwise the role's default level is written.\n\n### pitch\n{ op: \"pitch\", octave?: -3..3, semitones?: -12..12, glide?: 0..1, mono?: bool, legato?: bool }\nvoice.transposeSemitones = clamp((octave ?? 0)*12 + (semitones ?? 0), -36, 36)\nvoice.glideSeconds = glideSeconds(glide ?? 0)\nvoice.polyphony = mono ? 1 : 8\nvoice.legato = legato ?? (mono ?? false)\n\n### response\n{ op: \"response\", velocity_to_level?: 0..1, velocity_to_cutoff?: 0..1, keytrack?: 0..1 }\nif velocity_to_level given: voice.velocitySensitivity = velocity_to_level\nif velocity_to_cutoff given: filter.velocityToCutoff = velocity_to_cutoff\nif keytrack given: filter.keytrack = keytrack\nRouting is derived from filter.velocityToCutoff; zero emits no velocity route.\n\nPrefer operations over raw paths. Use a path only for a precise correction or for a parameter no operation covers. Use this direct-edit path for settled, unambiguous intent, including a high-impact replacement. When a subjective, exploratory, or character-choice direction leaves judgment unresolved, preserve A and use create_variant to compare B instead. Comparison is simultaneous judgment; undo reverses an already committed transaction.",
"inputSchema": {
"type": "object",
"examples": [
{
"reason": "Make the held patch darker",
"changes": [
{
"path": "filter.cutoffHz",
"value": 3200
}
]
}
],
"properties": {
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Concise musical intent for this one transaction."
},
"changes": {
"type": "array",
"minItems": 1,
"maxItems": 32,
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "tone"
},
"brightness": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"keep_air": {
"type": "boolean"
},
"resonance": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"op",
"brightness"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "articulation"
},
"kind": {
"type": "string",
"enum": [
"pluck",
"stab",
"percussive",
"keys",
"bell",
"pad",
"swell",
"sustain",
"reverse"
]
},
"speed": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"op",
"kind"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "timbre"
},
"character": {
"type": "string",
"enum": [
"pure",
"warm",
"bright",
"hollow",
"vocal",
"metallic",
"glassy",
"harsh",
"digital"
]
},
"position": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"target": {
"enum": [
1,
2,
3,
"both",
"all"
]
}
},
"required": [
"op",
"character"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "width"
},
"amount": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"method": {
"type": "string",
"enum": [
"unison",
"pan",
"stereo_fx",
"auto"
]
}
},
"required": [
"op",
"amount"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "space"
},
"amount": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"size": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"delay_amount": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"predelay": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"op",
"amount"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "drive"
},
"amount": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"character": {
"type": "string",
"enum": [
"soft",
"hard",
"fold",
"crush"
]
}
},
"required": [
"op",
"amount"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "movement"
},
"amount": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"rate": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"target": {
"type": "string",
"enum": [
"level",
"position",
"pitch",
"cutoff"
]
},
"scope": {
"enum": [
"all",
1,
2,
3
]
},
"shape": {
"type": "string",
"enum": [
"sine",
"triangle",
"ramp_up",
"ramp_down",
"random",
"smooth_random"
]
}
},
"required": [
"op",
"amount"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "gate"
},
"pattern": {
"type": "string",
"enum": [
"even_8",
"even_16",
"offbeat",
"long_short",
"short_long",
"triplet",
"dotted",
"swung",
"stutter",
"none"
]
},
"division": {
"type": "string",
"enum": [
"1/1",
"1/2",
"1/4",
"1/8",
"1/8T",
"1/16",
"1/16T",
"1/32",
"1/64"
]
},
"depth": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"smoothing": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"target": {
"type": "string",
"enum": [
"level",
"position",
"pitch",
"cutoff"
]
},
"scope": {
"enum": [
"all",
1,
2,
3
]
}
},
"required": [
"op",
"pattern"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "balance"
},
"osc1": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"osc2": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"osc3": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"op"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "layer"
},
"role": {
"type": "string",
"enum": [
"sub",
"octave_up",
"fifth",
"unison_detune",
"none"
]
},
"level": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"wavetable": {
"type": "string",
"minLength": 1
}
},
"required": [
"op",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "pitch"
},
"octave": {
"type": "integer",
"minimum": -3,
"maximum": 3
},
"semitones": {
"type": "integer",
"minimum": -12,
"maximum": 12
},
"glide": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"mono": {
"type": "boolean"
},
"legato": {
"type": "boolean"
}
},
"required": [
"op"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "response"
},
"velocity_to_level": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"velocity_to_cutoff": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"keytrack": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"op"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"path": {
"type": "string",
"enum": [
"metadata.name",
"metadata.category",
"metadata.description",
"metadata.tags",
"oscillators.0.enabled",
"oscillators.0.wavetableId",
"oscillators.0.wavetablePosition",
"oscillators.0.level",
"oscillators.0.transposeSemitones",
"oscillators.0.fineTuneCents",
"oscillators.0.unisonVoices",
"oscillators.0.unisonDetune",
"oscillators.0.stereoSpread",
"oscillators.0.randomPhase",
"oscillators.0.pan",
"oscillators.1.enabled",
"oscillators.1.wavetableId",
"oscillators.1.wavetablePosition",
"oscillators.1.level",
"oscillators.1.transposeSemitones",
"oscillators.1.fineTuneCents",
"oscillators.1.unisonVoices",
"oscillators.1.unisonDetune",
"oscillators.1.stereoSpread",
"oscillators.1.randomPhase",
"oscillators.1.pan",
"oscillators.2.enabled",
"oscillators.2.wavetableId",
"oscillators.2.wavetablePosition",
"oscillators.2.level",
"oscillators.2.transposeSemitones",
"oscillators.2.fineTuneCents",
"oscillators.2.unisonVoices",
"oscillators.2.unisonDetune",
"oscillators.2.stereoSpread",
"oscillators.2.randomPhase",
"oscillators.2.pan",
"ampEnvelope.delaySeconds",
"ampEnvelope.attackSeconds",
"ampEnvelope.holdSeconds",
"ampEnvelope.decaySeconds",
"ampEnvelope.sustainLevel",
"ampEnvelope.releaseSeconds",
"ampEnvelope.attackCurve",
"ampEnvelope.decayCurve",
"ampEnvelope.releaseCurve",
"modEnvelope.delaySeconds",
"modEnvelope.attackSeconds",
"modEnvelope.holdSeconds",
"modEnvelope.decaySeconds",
"modEnvelope.sustainLevel",
"modEnvelope.releaseSeconds",
"modEnvelope.attackCurve",
"modEnvelope.decayCurve",
"modEnvelope.releaseCurve",
"filter.enabled",
"filter.type",
"filter.cutoffHz",
"filter.resonance",
"filter.slope",
"filter.drive",
"filter.keytrack",
"filter.velocityToCutoff",
"lfo1.enabled",
"lfo1.points",
"lfo1.rate",
"lfo1.phase",
"lfo1.smooth",
"lfo1.smoothing",
"lfo1.target",
"lfo1.scope",
"lfo1.depth",
"lfo2.enabled",
"lfo2.points",
"lfo2.rate",
"lfo2.phase",
"lfo2.smooth",
"lfo2.smoothing",
"lfo2.target",
"lfo2.scope",
"lfo2.depth",
"voice.polyphony",
"voice.legato",
"voice.glideSeconds",
"voice.velocitySensitivity",
"voice.transposeSemitones",
"effects.order",
"effects.distortion.enabled",
"effects.distortion.type",
"effects.distortion.drive",
"effects.distortion.mix",
"effects.compressor.enabled",
"effects.compressor.bands",
"effects.compressor.amount",
"effects.compressor.attack",
"effects.compressor.release",
"effects.compressor.mix",
"effects.chorus.enabled",
"effects.chorus.voices",
"effects.chorus.rate",
"effects.chorus.depth",
"effects.chorus.feedback",
"effects.chorus.mix",
"effects.delay.enabled",
"effects.delay.mode",
"effects.delay.division",
"effects.delay.timeSeconds",
"effects.delay.feedback",
"effects.delay.mix",
"effects.reverb.enabled",
"effects.reverb.mix",
"effects.reverb.decaySeconds",
"effects.reverb.size",
"effects.reverb.predelay",
"effects.reverb.lowCut",
"effects.reverb.highCut"
]
},
"value": {
"description": "JSON value for the selected path. The path-specific type and bounds are validated before commit.",
"oneOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array"
},
{
"type": "object"
}
]
}
},
"required": [
"path",
"value"
],
"additionalProperties": false
}
],
"examples": [
{
"path": "filter.cutoffHz",
"value": 3200
}
]
}
}
},
"required": [
"reason",
"changes"
],
"additionalProperties": false
}
}set_lfo_shapeAction
Edit LFO 1 or LFO 2 points for a focused shape change. The lfo argument defaults to 1. Preserve enabled state, rate, target, scope, and depth. The optional boolean smooth setting controls interpolation between shape points; output slew is the separate lfoN.smoothing path edited by gate, movement, or apply_patch.
View tool JSON
{
"name": "set_lfo_shape",
"kind": "act",
"impl": "imperative",
"description": "Edit LFO 1 or LFO 2 points for a focused shape change. The lfo argument defaults to 1. Preserve enabled state, rate, target, scope, and depth. The optional boolean smooth setting controls interpolation between shape points; output slew is the separate lfoN.smoothing path edited by gate, movement, or apply_patch.",
"inputSchema": {
"type": "object",
"examples": [
{
"reason": "Shorten the second pulse while preserving the current rate",
"lfo": 1,
"points": [
{
"x": 0,
"y": 0
},
{
"x": 0.02,
"y": 1
},
{
"x": 0.2,
"y": 0
},
{
"x": 0.27,
"y": 0.9
},
{
"x": 0.36,
"y": 0
},
{
"x": 0.52,
"y": 1
},
{
"x": 0.7,
"y": 0
},
{
"x": 1,
"y": 0
}
]
}
],
"properties": {
"lfo": {
"type": "integer",
"enum": [
1,
2
],
"description": "LFO slot to edit. Defaults to 1."
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Concise structural intent for this one LFO transaction."
},
"points": {
"type": "array",
"minItems": 2,
"maxItems": 32,
"description": "Normalized LFO points sorted by x, with the first pinned at x=0 and the last pinned at x=1.",
"items": {
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"y": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"power": {
"type": "number",
"minimum": -1,
"maximum": 1
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
}
},
"smooth": {
"type": "boolean",
"description": "Optional boolean shape interpolation change, not continuous output slew. Omit to preserve it."
}
},
"required": [
"reason",
"points"
],
"additionalProperties": false
}
}set_lfo_pointAction
Edit one zero-based point in LFO 1 or LFO 2 in a single transaction. The lfo argument defaults to 1. Omitted coordinates are preserved; x is clamped between neighboring points, and endpoint x positions remain pinned at 0 and 1. Power controls the curve leading from this point and cannot be set on the final point.
View tool JSON
{
"name": "set_lfo_point",
"kind": "act",
"impl": "imperative",
"description": "Edit one zero-based point in LFO 1 or LFO 2 in a single transaction. The lfo argument defaults to 1. Omitted coordinates are preserved; x is clamped between neighboring points, and endpoint x positions remain pinned at 0 and 1. Power controls the curve leading from this point and cannot be set on the final point.",
"inputSchema": {
"type": "object",
"examples": [
{
"reason": "Shorten the second pulse",
"index": 2,
"x": 0.16
}
],
"properties": {
"lfo": {
"type": "integer",
"enum": [
1,
2
],
"description": "LFO slot to edit. Defaults to 1."
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Concise intent for this one-point LFO transaction."
},
"index": {
"type": "integer",
"minimum": 0,
"maximum": 31,
"description": "Zero-based index of the existing LFO point."
},
"x": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"y": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"power": {
"type": "number",
"minimum": -1,
"maximum": 1
}
},
"required": [
"reason",
"index"
],
"additionalProperties": false
}
}create_variantAction
Default comparison and refinement path when musical judgment is unresolved: clone the selected patch to B and contrast one named comparisonAxis while preserving A for simultaneous audition. Use direct apply_patch edits instead for settled, precise changes, even when they are high-impact. Replacing B starts a new comparison on the supplied axis; this is not undo.
View tool JSON
{
"name": "create_variant",
"kind": "act",
"impl": "imperative",
"description": "Default comparison and refinement path when musical judgment is unresolved: clone the selected patch to B and contrast one named comparisonAxis while preserving A for simultaneous audition. Use direct apply_patch edits instead for settled, precise changes, even when they are high-impact. Replacing B starts a new comparison on the supplied axis; this is not undo.",
"inputSchema": {
"type": "object",
"examples": [
{
"description": "Create a wider B alternative while preserving the tone",
"comparisonAxis": "stereo width",
"changes": [
{
"path": "metadata.name",
"value": "Ethereal Gate Wide B"
},
{
"path": "oscillators.0.stereoSpread",
"value": 1
},
{
"path": "oscillators.0.unisonVoices",
"value": 7
}
]
}
],
"properties": {
"description": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Concise intent for B, framed as a useful alternative to A."
},
"comparisonAxis": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Required musical dimension being judged, such as harmonic profile, motion character, or stereo width."
},
"changes": {
"type": "array",
"minItems": 1,
"maxItems": 32,
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "tone"
},
"brightness": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"keep_air": {
"type": "boolean"
},
"resonance": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"op",
"brightness"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "articulation"
},
"kind": {
"type": "string",
"enum": [
"pluck",
"stab",
"percussive",
"keys",
"bell",
"pad",
"swell",
"sustain",
"reverse"
]
},
"speed": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"op",
"kind"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "timbre"
},
"character": {
"type": "string",
"enum": [
"pure",
"warm",
"bright",
"hollow",
"vocal",
"metallic",
"glassy",
"harsh",
"digital"
]
},
"position": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"target": {
"enum": [
1,
2,
3,
"both",
"all"
]
}
},
"required": [
"op",
"character"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "width"
},
"amount": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"method": {
"type": "string",
"enum": [
"unison",
"pan",
"stereo_fx",
"auto"
]
}
},
"required": [
"op",
"amount"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "space"
},
"amount": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"size": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"delay_amount": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"predelay": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"op",
"amount"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "drive"
},
"amount": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"character": {
"type": "string",
"enum": [
"soft",
"hard",
"fold",
"crush"
]
}
},
"required": [
"op",
"amount"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "movement"
},
"amount": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"rate": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"target": {
"type": "string",
"enum": [
"level",
"position",
"pitch",
"cutoff"
]
},
"scope": {
"enum": [
"all",
1,
2,
3
]
},
"shape": {
"type": "string",
"enum": [
"sine",
"triangle",
"ramp_up",
"ramp_down",
"random",
"smooth_random"
]
}
},
"required": [
"op",
"amount"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "gate"
},
"pattern": {
"type": "string",
"enum": [
"even_8",
"even_16",
"offbeat",
"long_short",
"short_long",
"triplet",
"dotted",
"swung",
"stutter",
"none"
]
},
"division": {
"type": "string",
"enum": [
"1/1",
"1/2",
"1/4",
"1/8",
"1/8T",
"1/16",
"1/16T",
"1/32",
"1/64"
]
},
"depth": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"smoothing": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"target": {
"type": "string",
"enum": [
"level",
"position",
"pitch",
"cutoff"
]
},
"scope": {
"enum": [
"all",
1,
2,
3
]
}
},
"required": [
"op",
"pattern"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "balance"
},
"osc1": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"osc2": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"osc3": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"op"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "layer"
},
"role": {
"type": "string",
"enum": [
"sub",
"octave_up",
"fifth",
"unison_detune",
"none"
]
},
"level": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"wavetable": {
"type": "string",
"minLength": 1
}
},
"required": [
"op",
"role"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "pitch"
},
"octave": {
"type": "integer",
"minimum": -3,
"maximum": 3
},
"semitones": {
"type": "integer",
"minimum": -12,
"maximum": 12
},
"glide": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"mono": {
"type": "boolean"
},
"legato": {
"type": "boolean"
}
},
"required": [
"op"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "response"
},
"velocity_to_level": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"velocity_to_cutoff": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"keytrack": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"op"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"path": {
"type": "string",
"enum": [
"metadata.name",
"metadata.category",
"metadata.description",
"metadata.tags",
"oscillators.0.enabled",
"oscillators.0.wavetableId",
"oscillators.0.wavetablePosition",
"oscillators.0.level",
"oscillators.0.transposeSemitones",
"oscillators.0.fineTuneCents",
"oscillators.0.unisonVoices",
"oscillators.0.unisonDetune",
"oscillators.0.stereoSpread",
"oscillators.0.randomPhase",
"oscillators.0.pan",
"oscillators.1.enabled",
"oscillators.1.wavetableId",
"oscillators.1.wavetablePosition",
"oscillators.1.level",
"oscillators.1.transposeSemitones",
"oscillators.1.fineTuneCents",
"oscillators.1.unisonVoices",
"oscillators.1.unisonDetune",
"oscillators.1.stereoSpread",
"oscillators.1.randomPhase",
"oscillators.1.pan",
"oscillators.2.enabled",
"oscillators.2.wavetableId",
"oscillators.2.wavetablePosition",
"oscillators.2.level",
"oscillators.2.transposeSemitones",
"oscillators.2.fineTuneCents",
"oscillators.2.unisonVoices",
"oscillators.2.unisonDetune",
"oscillators.2.stereoSpread",
"oscillators.2.randomPhase",
"oscillators.2.pan",
"ampEnvelope.delaySeconds",
"ampEnvelope.attackSeconds",
"ampEnvelope.holdSeconds",
"ampEnvelope.decaySeconds",
"ampEnvelope.sustainLevel",
"ampEnvelope.releaseSeconds",
"ampEnvelope.attackCurve",
"ampEnvelope.decayCurve",
"ampEnvelope.releaseCurve",
"modEnvelope.delaySeconds",
"modEnvelope.attackSeconds",
"modEnvelope.holdSeconds",
"modEnvelope.decaySeconds",
"modEnvelope.sustainLevel",
"modEnvelope.releaseSeconds",
"modEnvelope.attackCurve",
"modEnvelope.decayCurve",
"modEnvelope.releaseCurve",
"filter.enabled",
"filter.type",
"filter.cutoffHz",
"filter.resonance",
"filter.slope",
"filter.drive",
"filter.keytrack",
"filter.velocityToCutoff",
"lfo1.enabled",
"lfo1.points",
"lfo1.rate",
"lfo1.phase",
"lfo1.smooth",
"lfo1.smoothing",
"lfo1.target",
"lfo1.scope",
"lfo1.depth",
"lfo2.enabled",
"lfo2.points",
"lfo2.rate",
"lfo2.phase",
"lfo2.smooth",
"lfo2.smoothing",
"lfo2.target",
"lfo2.scope",
"lfo2.depth",
"voice.polyphony",
"voice.legato",
"voice.glideSeconds",
"voice.velocitySensitivity",
"voice.transposeSemitones",
"effects.order",
"effects.distortion.enabled",
"effects.distortion.type",
"effects.distortion.drive",
"effects.distortion.mix",
"effects.compressor.enabled",
"effects.compressor.bands",
"effects.compressor.amount",
"effects.compressor.attack",
"effects.compressor.release",
"effects.compressor.mix",
"effects.chorus.enabled",
"effects.chorus.voices",
"effects.chorus.rate",
"effects.chorus.depth",
"effects.chorus.feedback",
"effects.chorus.mix",
"effects.delay.enabled",
"effects.delay.mode",
"effects.delay.division",
"effects.delay.timeSeconds",
"effects.delay.feedback",
"effects.delay.mix",
"effects.reverb.enabled",
"effects.reverb.mix",
"effects.reverb.decaySeconds",
"effects.reverb.size",
"effects.reverb.predelay",
"effects.reverb.lowCut",
"effects.reverb.highCut"
]
},
"value": {
"description": "JSON value for the selected path. The path-specific type and bounds are validated before commit.",
"oneOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array"
},
{
"type": "object"
}
]
}
},
"required": [
"path",
"value"
],
"additionalProperties": false
}
]
}
},
"replaceExisting": {
"type": "boolean",
"description": "Set true only when explicitly replacing an existing B alternative."
}
},
"required": [
"description",
"comparisonAxis",
"changes"
],
"additionalProperties": false
}
}select_variantAction
Select A or B for immediate audition, editing, undo/redo, and export. Selection does not add history.
View tool JSON
{
"name": "select_variant",
"kind": "act",
"impl": "imperative",
"description": "Select A or B for immediate audition, editing, undo/redo, and export. Selection does not add history.",
"inputSchema": {
"type": "object",
"properties": {
"variant": {
"type": "string",
"enum": [
"A",
"B"
],
"description": "Variant to select."
}
},
"required": [
"variant"
],
"additionalProperties": false
}
}undoAction
Undo one complete transaction on the selected variant without changing the other variant.
View tool JSON
{
"name": "undo",
"kind": "act",
"impl": "imperative",
"description": "Undo one complete transaction on the selected variant without changing the other variant.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}redoAction
Redo one undone transaction on the selected variant without changing the other variant.
View tool JSON
{
"name": "redo",
"kind": "act",
"impl": "imperative",
"description": "Redo one undone transaction on the selected variant without changing the other variant.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}create_patchAction
Create contrasting A/B proposals by default so unresolved, subjective, exploratory, or character-choice directions can be auditioned simultaneously rather than guessed. Examples include warm bass harmonic profile (rounded sub-heavy sine versus saturated analog saw) and dreamy pad motion (slow strings versus gated ambient). A high-impact but unambiguous replacement may be direct: set singleProposal to true only for an exact, settled, or explicitly single request. Paired creation requires a named comparisonAxis, replaces any prior B, and leaves A active. This is comparison, not undo; use undo only to reverse an already committed transaction.
View tool JSON
{
"name": "create_patch",
"kind": "act",
"impl": "imperative",
"description": "Create contrasting A/B proposals by default so unresolved, subjective, exploratory, or character-choice directions can be auditioned simultaneously rather than guessed. Examples include warm bass harmonic profile (rounded sub-heavy sine versus saturated analog saw) and dreamy pad motion (slow strings versus gated ambient). A high-impact but unambiguous replacement may be direct: set singleProposal to true only for an exact, settled, or explicitly single request. Paired creation requires a named comparisonAxis, replaces any prior B, and leaves A active. This is comparison, not undo; use undo only to reverse an already committed transaction.",
"inputSchema": {
"examples": [
{
"description": "Warm bass A - harmonic profile: rounded sub-heavy sine",
"attributes": {
"category": "bass",
"brightness": 0.2,
"drive": 0.1
},
"comparisonAxis": "harmonic profile",
"alternative": {
"description": "Warm bass B - harmonic profile: saturated analog saw",
"attributes": {
"category": "lead",
"brightness": 0.55,
"drive": 0.75
}
}
},
{
"description": "One pluck with a short attack and medium release",
"attributes": {
"category": "pluck",
"attack": 0.05,
"release": 0.5
},
"singleProposal": true
}
],
"oneOf": [
{
"type": "object",
"description": "Default paired contract for subjective or exploratory musical judgment.",
"properties": {
"description": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Proposal A intent."
},
"attributes": {
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": [
"bass",
"pad",
"pluck",
"lead",
"keys",
"strings",
"brass",
"vocal",
"bell",
"arp",
"ambient",
"cinematic",
"fx",
"percussion"
]
},
"brightness": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"movement": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"width": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"space": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"drive": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"attack": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"release": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false
},
"comparisonAxis": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The concise musical dimension A and B deliberately contrast, such as harmonic profile or motion character."
},
"alternative": {
"type": "object",
"description": "Required B proposal for comparison. Give subjective, exploratory, and character-choice requests two musically useful interpretations.",
"properties": {
"description": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"attributes": {
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": [
"bass",
"pad",
"pluck",
"lead",
"keys",
"strings",
"brass",
"vocal",
"bell",
"arp",
"ambient",
"cinematic",
"fx",
"percussion"
]
},
"brightness": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"movement": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"width": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"space": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"drive": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"attack": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"release": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false
}
},
"required": [
"description"
],
"additionalProperties": false
}
},
"required": [
"description",
"comparisonAxis",
"alternative"
],
"additionalProperties": false
},
{
"type": "object",
"description": "A-only contract for an exact, settled, or explicitly single request.",
"properties": {
"description": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Exact single proposal intent."
},
"attributes": {
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": [
"bass",
"pad",
"pluck",
"lead",
"keys",
"strings",
"brass",
"vocal",
"bell",
"arp",
"ambient",
"cinematic",
"fx",
"percussion"
]
},
"brightness": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"movement": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"width": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"space": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"drive": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"attack": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"release": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false
},
"singleProposal": {
"type": "boolean",
"const": true,
"description": "Explicitly confirms that only A should be created."
}
},
"required": [
"description",
"singleProposal"
],
"additionalProperties": false
}
]
}
}list_presetsAnswer
List validated musical starts and the A–H browser/Vital calibration ladder. Optionally filter by category, then use load_preset before conservative refinement.
View tool JSON
{
"name": "list_presets",
"kind": "answer",
"impl": "imperative",
"description": "List validated musical starts and the A–H browser/Vital calibration ladder. Optionally filter by category, then use load_preset before conservative refinement.",
"inputSchema": {
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": [
"pad",
"bass",
"lead",
"pluck",
"keys",
"atmosphere",
"rhythmic",
"other"
],
"description": "Optional patch category."
}
},
"additionalProperties": false
}
}load_presetAction
Load one generated curated patch into the selected variant as one undoable transaction. Read it with get_patch before applying a focused refinement.
View tool JSON
{
"name": "load_preset",
"kind": "act",
"impl": "imperative",
"description": "Load one generated curated patch into the selected variant as one undoable transaction. Read it with get_patch before applying a focused refinement.",
"inputSchema": {
"type": "object",
"properties": {
"presetId": {
"type": "string",
"enum": [
"ethereal-gate",
"midnight-pad",
"warm-mono-bass",
"glass-pluck",
"wide-lead",
"rhythmic-pulse",
"calibration-a-osc1-sine",
"calibration-b-custom-wavetable",
"calibration-c-amp-envelope",
"calibration-d-unison",
"calibration-e-filter",
"calibration-f-lfo-gate",
"calibration-g-osc2",
"calibration-h-delay-reverb"
],
"description": "Curated preset id from list_presets."
}
},
"required": [
"presetId"
],
"additionalProperties": false
}
}describe_patchAnswer
Return deterministic musical prose derived only from the current PatchState.
View tool JSON
{
"name": "describe_patch",
"kind": "answer",
"impl": "imperative",
"description": "Return deterministic musical prose derived only from the current PatchState.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}export_patchAction
Validate, serialize, and download the current patch as a .vital preset.
View tool JSON
{
"name": "export_patch",
"kind": "act",
"impl": "imperative",
"description": "Validate, serialize, and download the current patch as a .vital preset.",
"inputSchema": {
"type": "object",
"properties": {
"filename": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}
}