gradeNot graded
capture_soundAction
Start the microphone and record a short voice clip that can become a sampler track. Recording stops automatically after durationMs.
View tool JSON
{
"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."
}
}
}
}capture_found_soundAction
Record a short clip from a named everyday object, such as a mug or spoon, so it can become a sampler track.
View tool JSON
{
"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."
}
}
}
}compose_found_object_jamAction
Capture an everyday object sound, turn it into a playable sampler, map it musically, and add a complementary backing layer in one step.
View tool JSON
{
"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."
}
}
}
}create_sampler_nodeAction
Turn the most recently captured sound into a new playable sampler track/node.
View tool JSON
{
"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."
}
}
}
}map_sample_to_keysAction
Pitch-map a sample node so it can be played melodically across the keyboard, by assigning its native root note.
View tool JSON
{
"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"
}
}
}
}play_noteAction
Play a specific note on a given node right now.
View tool JSON
{
"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"
]
}
}generate_melodyAction
Create a short call-and-response melody/pattern on a node so it plays automatically in the loop, instead of a flat repeating pattern.
View tool JSON
{
"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."
}
}
}
}suggest_next_layerAction
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.
View tool JSON
{
"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": {}
}
}add_complementary_nodeAction
Actually create and add the suggested (or specified) layer as a new node with a generated melody, so it's audible immediately.
View tool JSON
{
"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."
}
}
}
}transform_instrumentAction
Change the character/instrument of a node, e.g. to Sub Bass, Pluck, or Keys.
View tool JSON
{
"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"
]
}
}mute_nodeAction
Mute or unmute a node.
View tool JSON
{
"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."
}
}
}
}set_tempoAction
Change the global tempo (BPM) of the jam.
View tool JSON
{
"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"
]
}
}create_demo_jamAction
Replace the current session with a complete judge-ready multi-layer jam that demonstrates human + agent music collaboration.
View tool JSON
{
"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."
}
}
}
}move_nodeAction
Reposition a node on the timeline and/or reorder it in the track list.
View tool JSON
{
"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."
}
}
}
}export_projectAction
Export the complete project state as structured JSON so the agent can summarize, save, or verify the jam.
View tool JSON
{
"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": {}
}
}share_projectAction
Create a compact share URL for the current jam and copy it to the clipboard when the browser allows clipboard access.
View tool JSON
{
"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": {}
}
}validate_studioAction
Run a readiness check over instruments, tracks, role coverage, and WebMCP demo quality.
View tool JSON
{
"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": {}
}
}get_studio_stateAnswer
List the current tempo and every node (id, name, instrument, type, mute state) so you know what exists before calling other tools by id.
View tool JSON
{
"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": {}
}
}