{"ok":true,"site":{"host":"xiehuanyi.github.io","url":"https://xiehuanyi.github.io/sidejam/","type":"live","desc":"A browser groovebox that you and your AI agent play together. The page registers WebMCP tools; the agent composes, you listen and steer.","tools":[{"name":"get_song","kind":"answer","impl":"imperative","description":"Read the whole song: tempo, swing, playback state, and every track with its 16-step pattern (\".\" rest, \"x\" hit, \"X\" accent) and notes for melodic tracks. Call this first, and again after edits to verify.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sidejam/","pages":["/sidejam/"]},{"name":"set_pattern","kind":"act","impl":"imperative","description":"Replace a track's 16-step pattern. \".\" = rest, \"x\" = hit, \"X\" = accented hit. Example: \"X...x...X...x...\" is four-on-the-floor. Spaces and | are ignored, so \"X.x. x.x. | X.x. x.x.\" also works. On melodic tracks existing pitches are kept; use set_notes to choose pitches.","inputSchema":{"type":"object","properties":{"track":{"type":"string","description":"Track id (\"t1\"), name (\"Bass\"), or instrument (\"kick\") — see get_song."},"pattern":{"type":"string","description":"16 steps of . x X","minLength":16}},"required":["track","pattern"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sidejam/","pages":["/sidejam/"]},{"name":"set_notes","kind":"act","impl":"imperative","description":"Write pitched notes on a bass or lead track. Each entry places a note at a step (0-15); note: null clears that step. Notes use scientific pitch (\"C2\", \"F#3\", \"Bb1\"). Bass range C1..C4, lead range C3..C6 (out-of-range notes are clamped).","inputSchema":{"type":"object","properties":{"track":{"type":"string","description":"Track id (\"t1\"), name (\"Bass\"), or instrument (\"kick\") — see get_song."},"notes":{"type":"array","minItems":1,"maxItems":16,"items":{"type":"object","properties":{"step":{"type":"integer","minimum":0,"maximum":15},"note":{"type":["string","null"],"description":"e.g. \"C2\"; null clears the step"},"accent":{"type":"boolean"}},"required":["step","note"],"additionalProperties":false}}},"required":["track","notes"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sidejam/","pages":["/sidejam/"]},{"name":"set_tempo","kind":"act","impl":"imperative","description":"Set tempo (bpm 40-220) and/or swing (0-60 percent shift of off-beat 16ths).","inputSchema":{"type":"object","properties":{"bpm":{"type":"number","minimum":40,"maximum":220},"swing":{"type":"number","minimum":0,"maximum":60}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sidejam/","pages":["/sidejam/"]},{"name":"set_track","kind":"act","impl":"imperative","description":"Mix a track: volume (0-100), mute (true/false), and/or rename it.","inputSchema":{"type":"object","properties":{"track":{"type":"string","description":"Track id (\"t1\"), name (\"Bass\"), or instrument (\"kick\") — see get_song."},"volume":{"type":"number","minimum":0,"maximum":100},"mute":{"type":"boolean"},"name":{"type":"string","maxLength":24}},"required":["track"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sidejam/","pages":["/sidejam/"]},{"name":"add_track","kind":"act","impl":"imperative","description":"Add an instrument track (current: 4/8). Drums: kick, snare, hihat, clap. Melodic: bass, lead. New tracks start empty — follow up with set_pattern or set_notes.","inputSchema":{"type":"object","properties":{"instrument":{"type":"string","enum":["kick","snare","hihat","clap","bass","lead"]},"name":{"type":"string","maxLength":24}},"required":["instrument"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sidejam/","pages":["/sidejam/"]},{"name":"clear_track","kind":"act","impl":"imperative","description":"Erase every step on one track. Asks the person at the keyboard to approve first.","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{"track":{"type":"string","description":"Track id (\"t1\"), name (\"Bass\"), or instrument (\"kick\") — see get_song."}},"required":["track"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sidejam/","pages":["/sidejam/"]},{"name":"remove_track","kind":"act","impl":"imperative","description":"Delete a track and its pattern. Asks the person at the keyboard to approve first.","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{"track":{"type":"string","description":"Track id (\"t1\"), name (\"Bass\"), or instrument (\"kick\") — see get_song."}},"required":["track"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sidejam/","pages":["/sidejam/"]},{"name":"play","kind":"act","impl":"imperative","description":"Start looping the song out loud so the human can hear it. (You cannot hear it — ask them how it sounds.)","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/sidejam/","pages":["/sidejam/"]}],"category":"Media & Personal","favicon":"/favicons/xiehuanyi.github.io.svg","apiSurface":"spec","toolCount":9}}