{"ok":true,"site":{"host":"webmcp-eight.vercel.app","url":"https://webmcp-eight.vercel.app/","type":"live","desc":"Jam Agent Studio","tools":[{"name":"capture_sound","kind":"act","impl":"imperative","description":"Start the microphone and record a short voice clip that can become a sampler track. Recording stops automatically after durationMs.","inputSchema":{"type":"object","properties":{"durationMs":{"type":"number","description":"Recording length in milliseconds, 500-8000. Default 2500."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"capture_found_sound","kind":"act","impl":"imperative","description":"Record a short clip from a named everyday object, such as a mug or spoon, so it can become a sampler track.","inputSchema":{"type":"object","properties":{"objectId":{"type":"string","enum":["mug","spoon","table","bottle","keys","desk"],"description":"Object to capture from."},"sourceLabel":{"type":"string","description":"Optional human-readable source label."},"trackName":{"type":"string","description":"Optional track name."},"durationMs":{"type":"number","description":"Recording length in milliseconds, 500-8000. Default 2500."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"compose_found_object_jam","kind":"act","impl":"imperative","description":"Capture an everyday object sound, turn it into a playable sampler, map it musically, and add a complementary backing layer in one step.","inputSchema":{"type":"object","properties":{"objectId":{"type":"string","enum":["mug","spoon","table","bottle","keys","desk"],"description":"Object to capture from."},"durationMs":{"type":"number","description":"Recording length in milliseconds, 500-8000. Default 2500."},"addBacking":{"type":"boolean","description":"Add a complementary layer automatically. Default true."},"play":{"type":"boolean","description":"Start playback after composing."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"create_sampler_node","kind":"act","impl":"imperative","description":"Turn the most recently captured sound into a new playable sampler track/node.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Optional display name for the new track."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"map_sample_to_keys","kind":"act","impl":"imperative","description":"Pitch-map a sample node so it can be played melodically across the keyboard, by assigning its native root note.","inputSchema":{"type":"object","properties":{"nodeId":{"type":"string","description":"Track/node id. Defaults to the currently selected node."},"rootNote":{"type":"string","description":"Note the raw sample plays at natively, e.g. 'C4'."},"rangeLow":{"type":"string"},"rangeHigh":{"type":"string"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"play_note","kind":"act","impl":"imperative","description":"Play a specific note on a given node right now.","inputSchema":{"type":"object","properties":{"nodeId":{"type":"string","description":"Track/node id. Defaults to the currently selected node."},"note":{"type":"string","description":"Note name, e.g. 'C4', 'F#3'."},"velocity":{"type":"number","description":"0-100."},"sustain":{"type":"boolean"}},"required":["note"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"generate_melody","kind":"act","impl":"imperative","description":"Create a short call-and-response melody/pattern on a node so it plays automatically in the loop, instead of a flat repeating pattern.","inputSchema":{"type":"object","properties":{"nodeId":{"type":"string"},"scale":{"type":"string","enum":["major","minor","majorPentatonic","minorPentatonic"],"description":"Scale to generate from. Default majorPentatonic."},"density":{"type":"string","enum":["sparse","medium","busy"],"description":"How busy the rhythm feels. Default medium."},"referenceNodeId":{"type":"string","description":"Id of another node to rhythmically answer - the new pattern will avoid stepping on that node's onsets instead of colliding with it."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"suggest_next_layer","kind":"act","impl":"imperative","description":"Propose a complementary layer/instrument that's missing from the current jam (e.g. bass, drums, harmony, lead). Speak the suggestion to the user before calling add_complementary_node.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_complementary_node","kind":"act","impl":"imperative","description":"Actually create and add the suggested (or specified) layer as a new node with a generated melody, so it's audible immediately.","inputSchema":{"type":"object","properties":{"instrument":{"type":"string","description":"Instrument name/id to use. If omitted, uses the last suggestion from suggest_next_layer."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"transform_instrument","kind":"act","impl":"imperative","description":"Change the character/instrument of a node, e.g. to Sub Bass, Pluck, or Keys.","inputSchema":{"type":"object","properties":{"nodeId":{"type":"string"},"instrument":{"type":"string","description":"Target instrument name, e.g. 'Sub Bass', 'Pluck', 'Keys'."}},"required":["instrument"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"mute_node","kind":"act","impl":"imperative","description":"Mute or unmute a node.","inputSchema":{"type":"object","properties":{"nodeId":{"type":"string"},"muted":{"type":"boolean","description":"If omitted, toggles the current state."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_tempo","kind":"act","impl":"imperative","description":"Change the global tempo (BPM) of the jam.","inputSchema":{"type":"object","properties":{"bpm":{"type":"number","description":"Target tempo, 40-220."}},"required":["bpm"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"create_demo_jam","kind":"act","impl":"imperative","description":"Replace the current session with a complete judge-ready multi-layer jam that demonstrates human + agent music collaboration.","inputSchema":{"type":"object","properties":{"mood":{"type":"string","enum":["neon","moody"],"description":"Overall feel of the demo jam."},"bpm":{"type":"number","description":"Target tempo, 40-220. Default 132."},"root":{"type":"string","description":"Root note such as C4 or A3. Default C4."},"play":{"type":"boolean","description":"Start playback after creating the jam."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"move_node","kind":"act","impl":"imperative","description":"Reposition a node on the timeline and/or reorder it in the track list.","inputSchema":{"type":"object","properties":{"nodeId":{"type":"string"},"startPct":{"type":"number","description":"New horizontal position on the timeline, 0-100."},"toIndex":{"type":"number","description":"New position in the track list, 0-based."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"export_project","kind":"act","impl":"imperative","description":"Export the complete project state as structured JSON so the agent can summarize, save, or verify the jam.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"share_project","kind":"act","impl":"imperative","description":"Create a compact share URL for the current jam and copy it to the clipboard when the browser allows clipboard access.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"validate_studio","kind":"act","impl":"imperative","description":"Run a readiness check over instruments, tracks, role coverage, and WebMCP demo quality.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_studio_state","kind":"answer","impl":"imperative","description":"List the current tempo and every node (id, name, instrument, type, mute state) so you know what exists before calling other tools by id.","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Media & Personal","favicon":"/favicons/webmcp-eight.vercel.app.svg","apiSurface":"spec","toolCount":18}}