{"ok":true,"site":{"host":"mysynote.vercel.app","url":"https://mysynote.vercel.app/","type":"live","desc":"A browser-native sound-design studio where a human and an AI agent collaboratively manipulate the same live Web Audio graph via WebMCP.","tools":[{"name":"get_audio_graph_state","kind":"answer","impl":"imperative","description":"Returns the complete current state of the Mysynote synth graph: every module, its type, position, parameter values, lock states, all cable connections, the sequencer pattern, and transport state. Call this before making any changes so you never operate on stale information.","title":"Get audio graph state","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"spawn_module","kind":"act","impl":"imperative","description":"Creates a new synth module (oscillator, filter, lfo, distortion, delay, reverb, or gain) at a given canvas position, wires up its real Web Audio node, and animates its appearance.","title":"Spawn module","inputSchema":{"type":"object","properties":{"moduleType":{"type":"string","enum":["oscillator","filter","lfo","distortion","delay","reverb","gain"]},"positionX":{"type":"number"},"positionY":{"type":"number"}},"required":["moduleType","positionX","positionY"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_module","kind":"act","impl":"imperative","description":"Deletes a module and any cables connected to it.","title":"Remove module","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{"moduleId":{"type":"string"}},"required":["moduleId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"patch_cable","kind":"act","impl":"imperative","description":"Connects one module's output port to another module's input port, updating both the visual graph and the real Web Audio routing. Some inputs are modulation targets (e.g. a filter's \"cutoff\" input) rather than audio-signal inputs — check get_audio_graph_state for each module's inputs.","title":"Patch cable","inputSchema":{"type":"object","properties":{"sourceModuleId":{"type":"string"},"sourceOutput":{"type":"string"},"targetModuleId":{"type":"string"},"targetInput":{"type":"string"}},"required":["sourceModuleId","sourceOutput","targetModuleId","targetInput"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_cable","kind":"act","impl":"imperative","description":"Removes a single cable connection by its id.","title":"Remove cable","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{"connectionId":{"type":"string"}},"required":["connectionId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_module_param","kind":"act","impl":"imperative","description":"Sets a parameter on a module (e.g. filter cutoff, oscillator frequency). Fails with PARAMETER_LOCKED if the human has locked that parameter — the agent must not bypass this and should find another route to its goal. Values are clamped to the parameter's valid range. Value may be a number or a string, depending on the parameter (e.g. waveform names are strings).","title":"Set module parameter","inputSchema":{"type":"object","properties":{"moduleId":{"type":"string"},"paramName":{"type":"string"},"value":{"type":"string","description":"A number (e.g. \"440\") or a string enum value (e.g. \"sawtooth\")."}},"required":["moduleId","paramName","value"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"lock_parameter","kind":"act","impl":"imperative","description":"Locks a parameter so the agent cannot modify it until unlocked. Typically invoked by the human, but exposed so the agent can confirm a lock state change requested in conversation.","title":"Lock parameter","inputSchema":{"type":"object","properties":{"moduleId":{"type":"string"},"paramName":{"type":"string"}},"required":["moduleId","paramName"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"unlock_parameter","kind":"act","impl":"imperative","description":"Unlocks a previously locked parameter. Fails with LOCK_OWNED_BY_HUMAN if a human locked it — that lock can only be cleared from the UI, never by the agent.","title":"Unlock parameter","inputSchema":{"type":"object","properties":{"moduleId":{"type":"string"},"paramName":{"type":"string"}},"required":["moduleId","paramName"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_spectrum_analysis","kind":"answer","impl":"imperative","description":"Returns a real-time quantitative snapshot of the current audio output from the actual AnalyserNode: peak frequency, low/mid/high band energy (0-1), peak amplitude, and whether the signal is clipping. Use this to verify how a change actually affected the sound.","title":"Get spectrum analysis","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_sequencer_state","kind":"answer","impl":"imperative","description":"Returns the current 8-step sequencer pattern, tempo, and transport state.","title":"Get sequencer state","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_sequencer_step","kind":"act","impl":"imperative","description":"Edits a single step of the 8-step sequence (note, octave, velocity, active).","title":"Set sequencer step","inputSchema":{"type":"object","properties":{"index":{"type":"number"},"note":{"type":"string"},"octave":{"type":"number"},"velocity":{"type":"number"},"active":{"type":"boolean"}},"required":["index"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"clear_graph","kind":"act","impl":"imperative","description":"Removes all modules and cables. Use sparingly — mainly for starting over on explicit human request.","title":"Clear graph","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Media & Personal","favicon":"/favicons/mysynote.vercel.app.svg","apiSurface":"spec","toolCount":12}}