← WebMCP Directory

Tool tree

webmcp-synth-creator.vercel.app

Media & PersonalTools verified
Website
A browser wavetable synthesizer with transactional WebMCP editing and Vital preset export.
Explore capabilities
    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
      }
    }