{"ok":true,"site":{"host":"webmcp-synth-creator.vercel.app","url":"https://webmcp-synth-creator.vercel.app/","type":"live","desc":"A browser wavetable synthesizer with transactional WebMCP editing and Vital preset export.","tools":[{"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.","title":"Read current synth patch","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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.","title":"Read one patch section","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"section":{"type":"string","enum":["osc1","osc2","osc3","amp_env","mod_env","lfo1","lfo2","filter","effects","voice"]}},"required":["section"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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.","title":"Read synth capabilities","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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.","title":"Apply one patch transaction","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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.","title":"Edit the point-based LFO shape","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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.","title":"Edit one point in the LFO shape","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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.","title":"Create one B alternative","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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.","title":"Select patch variant A or B","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"variant":{"type":"string","enum":["A","B"],"description":"Variant to select."}},"required":["variant"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"undo","kind":"act","impl":"imperative","description":"Undo one complete transaction on the selected variant without changing the other variant.","title":"Undo the selected variant","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"redo","kind":"act","impl":"imperative","description":"Redo one undone transaction on the selected variant without changing the other variant.","title":"Redo the selected variant","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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.","title":"Create contrasting A/B proposals or one explicit patch","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"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}]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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.","title":"List patch starts","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"category":{"type":"string","enum":["pad","bass","lead","pluck","keys","atmosphere","rhythmic","other"],"description":"Optional patch category."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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.","title":"Load a curated patch start","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"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},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"describe_patch","kind":"answer","impl":"imperative","description":"Return deterministic musical prose derived only from the current PatchState.","title":"Describe the current patch","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"export_patch","kind":"act","impl":"imperative","description":"Validate, serialize, and download the current patch as a .vital preset.","title":"Export current patch to Vital","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"filename":{"type":"string","minLength":1}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Media & Personal","apiSurface":"spec","toolCount":15}}