← WebMCP Directory

Tool tree

keyboard-midi.uset182.chatgpt.site

Health & EducationTools verified
Website
KEYLIT
Explore capabilities
    get-instrument-stateAnswer

    Return the live KEYBED state: layers, FX, phrase, and who is holding which keys (you vs agent).

    View tool JSON
    {
      "name": "get-instrument-state",
      "kind": "answer",
      "impl": "imperative",
      "description": "Return the live KEYBED state: layers, FX, phrase, and who is holding which keys (you vs agent).",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    play-notesAction

    Play MIDI notes as the agent on the shared piano. Lights keys green. The human's amber keys stay theirs.

    View tool JSON
    {
      "name": "play-notes",
      "kind": "act",
      "impl": "imperative",
      "description": "Play MIDI notes as the agent on the shared piano. Lights keys green. The human's amber keys stay theirs.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "notes": {
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 0,
              "maximum": 127
            }
          },
          "velocity": {
            "type": "integer",
            "minimum": 1,
            "maximum": 127,
            "default": 100
          },
          "durationMs": {
            "type": "integer",
            "minimum": 20,
            "maximum": 8000,
            "default": 420
          }
        },
        "required": [
          "notes"
        ]
      }
    }
    get-duet-stateAnswer

    See what the human is playing on this live page right now: held notes, last take, and whether you can harmonize, answer, or follow. Use this before acting.

    View tool JSON
    {
      "name": "get-duet-state",
      "kind": "answer",
      "impl": "imperative",
      "description": "See what the human is playing on this live page right now: held notes, last take, and whether you can harmonize, answer, or follow. Use this before acting.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    list-lessonsAnswer

    List the piano curriculum on this live page in ladder order, with each lesson's tier and timing mode. First steps: landmarks, first-keys, rh-c-position, lh-c-position, hands-together, c-chord. Basic: hot-cross-buns, mary-lamb, twinkle. Intermediate: ode, birthday, heart-and-soul. Advanced: c-scale, chopsticks, fur-elise.

    View tool JSON
    {
      "name": "list-lessons",
      "kind": "answer",
      "impl": "imperative",
      "description": "List the piano curriculum on this live page in ladder order, with each lesson's tier and timing mode. First steps: landmarks, first-keys, rh-c-position, lh-c-position, hands-together, c-chord. Basic: hot-cross-buns, mary-lamb, twinkle. Intermediate: ode, birthday, heart-and-soul. Advanced: c-scale, chopsticks, fur-elise.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    start-lessonAction

    Start a piano lesson on this shared keyboard. Lights the next keys the student must play. Basic lessons wait forever; Intermediate ones run a metronome and grade timing; Advanced ones add a falling-note highway. heart-and-soul is a duet — the page plays the backing loop while the student plays the melody. Teaching only works if they play those keys on this page.

    View tool JSON
    {
      "name": "start-lesson",
      "kind": "act",
      "impl": "imperative",
      "description": "Start a piano lesson on this shared keyboard. Lights the next keys the student must play. Basic lessons wait forever; Intermediate ones run a metronome and grade timing; Advanced ones add a falling-note highway. heart-and-soul is a duet — the page plays the backing loop while the student plays the melody. Teaching only works if they play those keys on this page.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "lesson": {
            "type": "string",
            "description": "landmarks, first-keys, rh-c-position, lh-c-position, hands-together, c-chord, hot-cross-buns, mary-lamb, twinkle, ode, birthday, heart-and-soul, c-scale, chopsticks, fur-elise, or a song name"
          }
        }
      }
    }
    set-next-keysAction

    Light specific next keys for the student to play, in order. Use this to invent a drill. They must press those glowing keys — you cannot play them for the student.

    View tool JSON
    {
      "name": "set-next-keys",
      "kind": "act",
      "impl": "imperative",
      "description": "Light specific next keys for the student to play, in order. Use this to invent a drill. They must press those glowing keys — you cannot play them for the student.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "notes": {
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 0,
              "maximum": 127
            }
          },
          "title": {
            "type": "string"
          },
          "coach": {
            "type": "string"
          }
        },
        "required": [
          "notes"
        ]
      }
    }
    teach-phraseAction

    Turn the phrase you last generated into a lesson: light its top line, first two bars, one key at a time. Call this after generate-phrase when the student asks to learn what you made. Stops any backing beat.

    View tool JSON
    {
      "name": "teach-phrase",
      "kind": "act",
      "impl": "imperative",
      "description": "Turn the phrase you last generated into a lesson: light its top line, first two bars, one key at a time. Call this after generate-phrase when the student asks to learn what you made. Stops any backing beat.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          }
        }
      }
    }
    get-lesson-stateAnswer

    See the live piano lesson: which keys to play next, computer-key hints, hits, misses, and what the student just played. Call this after they play.

    View tool JSON
    {
      "name": "get-lesson-state",
      "kind": "answer",
      "impl": "imperative",
      "description": "See the live piano lesson: which keys to play next, computer-key hints, hits, misses, and what the student just played. Call this after they play.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    show-next-keysAction

    Show the student the next keys on the shared piano. Target keys glow cyan; on a find-the-note step the black-key group that locates them glows violet. Starts the landmarks lesson if none is running. Does not play the notes for them.

    View tool JSON
    {
      "name": "show-next-keys",
      "kind": "act",
      "impl": "imperative",
      "description": "Show the student the next keys on the shared piano. Target keys glow cyan; on a find-the-note step the black-key group that locates them glows violet. Starts the landmarks lesson if none is running. Does not play the notes for them.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    demo-nextAction

    Play the next lesson notes as the agent (green keys) so the student can hear them, then they copy on the glowing keys. Requires an active lesson.

    View tool JSON
    {
      "name": "demo-next",
      "kind": "act",
      "impl": "imperative",
      "description": "Play the next lesson notes as the agent (green keys) so the student can hear them, then they copy on the glowing keys. Requires an active lesson.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    stop-lessonAction

    End the current piano lesson and clear the next-key glow.

    View tool JSON
    {
      "name": "stop-lesson",
      "kind": "act",
      "impl": "imperative",
      "description": "End the current piano lesson and clear the next-key glow.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    harmonize-heldAction

    Add agent notes around the chord the human is holding on the shared keyboard. Does nothing useful if they are not holding keys — this is the together feature.

    View tool JSON
    {
      "name": "harmonize-held",
      "kind": "act",
      "impl": "imperative",
      "description": "Add agent notes around the chord the human is holding on the shared keyboard. Does nothing useful if they are not holding keys — this is the together feature.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    answer-humanAction

    Play a call-and-response on the shared keys using the human's last take. Requires that they already played.

    View tool JSON
    {
      "name": "answer-human",
      "kind": "act",
      "impl": "imperative",
      "description": "Play a call-and-response on the shared keys using the human's last take. Requires that they already played.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    follow-humanAction

    Shadow the human an octave up in real time on the same keyboard. Toggle off to stop. Better only when they keep playing.

    View tool JSON
    {
      "name": "follow-human",
      "kind": "act",
      "impl": "imperative",
      "description": "Shadow the human an octave up in real time on the same keyboard. Toggle off to stop. Better only when they keep playing.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "on": {
            "type": "boolean"
          }
        }
      }
    }
    arrange-human-takeAction

    Turn the human's last live take into the shared phrase roll and play it back. Requires notes they already played on this page.

    View tool JSON
    {
      "name": "arrange-human-take",
      "kind": "act",
      "impl": "imperative",
      "description": "Turn the human's last live take into the shared phrase roll and play it back. Requires notes they already played on this page.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    design-instrumentAction

    Build a whole instrument sound in one call from a description like "metallic digital orchestral stab" or "thunderous staccato strikes". Prefer this over separate set-layer/set-adsr/set-fx calls. Samples (layer A is the main voice, layer B is optional and layers on top at a lower volume): pn-ivory (Steinway): bright acoustic grand piano, hard percussive attack, long ringing decay pn-felt (Soft Grand): soft felt piano, muted and intimate, gentle attack, close and quiet or-chapel (Chapel Org): church pipe organ, holds forever with no decay, huge and airy or-reed (Drawbar): drawbar jazz organ, reedy and punchy, hard edge sy-rail (Yamaha CP80): Yamaha CP80 electric grand, metallic bell-like attack, hard and glassy sy-razor (Wurlitzer): Wurlitzer electric piano, barking slappy attack, warm dirty growl ok-bloom (Ensemble): orchestral string ensemble, slow swelling attack, wide and cinematic bs-sub (Upright Bs): upright acoustic bass, deep and woody, short plucked notes ml-stack (Grand+Pad): grand piano stacked with strings, big dramatic and cinematic Shaping the sound: filter 0=dark and muffled, 1=bright and open. distortion and crush add grit and metal. delay and reverb add space. attack is seconds to reach full volume (0.001=percussive slap, 0.6=slow swell). release is seconds to fade after key-up (0.05=staccato stab, 2.5=long tail). transpose is semitones, use -12 on layer B for weight or +12 for shimmer. Out-of-range or unknown values are dropped, not clamped to a guess.

    View tool JSON
    {
      "name": "design-instrument",
      "kind": "act",
      "impl": "imperative",
      "description": "Build a whole instrument sound in one call from a description like \"metallic digital orchestral stab\" or \"thunderous staccato strikes\". Prefer this over separate set-layer/set-adsr/set-fx calls.\n\nSamples (layer A is the main voice, layer B is optional and layers on top at a lower volume):\npn-ivory (Steinway): bright acoustic grand piano, hard percussive attack, long ringing decay\npn-felt (Soft Grand): soft felt piano, muted and intimate, gentle attack, close and quiet\nor-chapel (Chapel Org): church pipe organ, holds forever with no decay, huge and airy\nor-reed (Drawbar): drawbar jazz organ, reedy and punchy, hard edge\nsy-rail (Yamaha CP80): Yamaha CP80 electric grand, metallic bell-like attack, hard and glassy\nsy-razor (Wurlitzer): Wurlitzer electric piano, barking slappy attack, warm dirty growl\nok-bloom (Ensemble): orchestral string ensemble, slow swelling attack, wide and cinematic\nbs-sub (Upright Bs): upright acoustic bass, deep and woody, short plucked notes\nml-stack (Grand+Pad): grand piano stacked with strings, big dramatic and cinematic\n\nShaping the sound: filter 0=dark and muffled, 1=bright and open. distortion and crush add grit and metal. delay and reverb add space. attack is seconds to reach full volume (0.001=percussive slap, 0.6=slow swell). release is seconds to fade after key-up (0.05=staccato stab, 2.5=long tail). transpose is semitones, use -12 on layer B for weight or +12 for shimmer. Out-of-range or unknown values are dropped, not clamped to a guess.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "presetName": {
            "type": "string",
            "description": "Short name for the LCD, e.g. THUNDER STAB"
          },
          "layerA": {
            "type": "object",
            "properties": {
              "sampleId": {
                "type": "string",
                "enum": [
                  "pn-ivory",
                  "pn-felt",
                  "or-chapel",
                  "or-reed",
                  "sy-rail",
                  "sy-razor",
                  "ok-bloom",
                  "bs-sub",
                  "ml-stack"
                ]
              },
              "volume": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "transpose": {
                "type": "integer",
                "minimum": -24,
                "maximum": 24
              }
            }
          },
          "layerB": {
            "type": "object",
            "properties": {
              "sampleId": {
                "type": "string",
                "enum": [
                  "pn-ivory",
                  "pn-felt",
                  "or-chapel",
                  "or-reed",
                  "sy-rail",
                  "sy-razor",
                  "ok-bloom",
                  "bs-sub",
                  "ml-stack"
                ]
              },
              "volume": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "transpose": {
                "type": "integer",
                "minimum": -24,
                "maximum": 24
              }
            }
          },
          "adsr": {
            "type": "object",
            "properties": {
              "attack": {
                "type": "number",
                "minimum": 0.001,
                "maximum": 2
              },
              "decay": {
                "type": "number",
                "minimum": 0.01,
                "maximum": 2
              },
              "sustain": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "release": {
                "type": "number",
                "minimum": 0.02,
                "maximum": 3
              }
            }
          },
          "fx": {
            "type": "object",
            "properties": {
              "filter": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "distortion": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "crush": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "delay": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "reverb": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              }
            }
          }
        }
      }
    }
    set-layerAction

    Set layer A or B sample, volume, transpose, or lock. Samples: pn-ivory (Steinway): bright acoustic grand piano, hard percussive attack, long ringing decay pn-felt (Soft Grand): soft felt piano, muted and intimate, gentle attack, close and quiet or-chapel (Chapel Org): church pipe organ, holds forever with no decay, huge and airy or-reed (Drawbar): drawbar jazz organ, reedy and punchy, hard edge sy-rail (Yamaha CP80): Yamaha CP80 electric grand, metallic bell-like attack, hard and glassy sy-razor (Wurlitzer): Wurlitzer electric piano, barking slappy attack, warm dirty growl ok-bloom (Ensemble): orchestral string ensemble, slow swelling attack, wide and cinematic bs-sub (Upright Bs): upright acoustic bass, deep and woody, short plucked notes ml-stack (Grand+Pad): grand piano stacked with strings, big dramatic and cinematic

    View tool JSON
    {
      "name": "set-layer",
      "kind": "act",
      "impl": "imperative",
      "description": "Set layer A or B sample, volume, transpose, or lock. Samples:\npn-ivory (Steinway): bright acoustic grand piano, hard percussive attack, long ringing decay\npn-felt (Soft Grand): soft felt piano, muted and intimate, gentle attack, close and quiet\nor-chapel (Chapel Org): church pipe organ, holds forever with no decay, huge and airy\nor-reed (Drawbar): drawbar jazz organ, reedy and punchy, hard edge\nsy-rail (Yamaha CP80): Yamaha CP80 electric grand, metallic bell-like attack, hard and glassy\nsy-razor (Wurlitzer): Wurlitzer electric piano, barking slappy attack, warm dirty growl\nok-bloom (Ensemble): orchestral string ensemble, slow swelling attack, wide and cinematic\nbs-sub (Upright Bs): upright acoustic bass, deep and woody, short plucked notes\nml-stack (Grand+Pad): grand piano stacked with strings, big dramatic and cinematic",
      "inputSchema": {
        "type": "object",
        "properties": {
          "layer": {
            "type": "string",
            "enum": [
              "A",
              "B"
            ]
          },
          "sampleId": {
            "type": "string"
          },
          "volume": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "transpose": {
            "type": "integer",
            "minimum": -24,
            "maximum": 24
          },
          "locked": {
            "type": "boolean"
          },
          "cycle": {
            "type": "integer",
            "enum": [
              -1,
              1
            ]
          }
        },
        "required": [
          "layer"
        ]
      }
    }
    set-adsrAction

    Set the shared ADSR envelope. Switches the LCD to Envelope.

    View tool JSON
    {
      "name": "set-adsr",
      "kind": "act",
      "impl": "imperative",
      "description": "Set the shared ADSR envelope. Switches the LCD to Envelope.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "attack": {
            "type": "number",
            "minimum": 0.001,
            "maximum": 2
          },
          "decay": {
            "type": "number",
            "minimum": 0.01,
            "maximum": 2
          },
          "sustain": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "release": {
            "type": "number",
            "minimum": 0.02,
            "maximum": 3
          }
        }
      }
    }
    set-fxAction

    Set the 5-stage FX chain: filter, distortion, crush, delay, reverb (0-1).

    View tool JSON
    {
      "name": "set-fx",
      "kind": "act",
      "impl": "imperative",
      "description": "Set the 5-stage FX chain: filter, distortion, crush, delay, reverb (0-1).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "filter": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "distortion": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "crush": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "delay": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "reverb": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          }
        }
      }
    }
    set-drumsAction

    Start or stop a looping backing beat under the keys. Patterns: backbeat, house, techno, garage. Pass an empty pattern to stop. The keys stay a piano; this is accompaniment, not a drum map.

    View tool JSON
    {
      "name": "set-drums",
      "kind": "act",
      "impl": "imperative",
      "description": "Start or stop a looping backing beat under the keys. Patterns: backbeat, house, techno, garage. Pass an empty pattern to stop. The keys stay a piano; this is accompaniment, not a drum map.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "pattern": {
            "type": "string",
            "description": "backbeat, house, techno, garage, or empty to stop"
          }
        }
      }
    }
    generate-phraseAction

    Generate a musical stab phrase in a style and play it on the shared instrument.

    View tool JSON
    {
      "name": "generate-phrase",
      "kind": "act",
      "impl": "imperative",
      "description": "Generate a musical stab phrase in a style and play it on the shared instrument.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "style": {
            "type": "string",
            "enum": [
              "rave",
              "house",
              "techno",
              "piano",
              "garage"
            ]
          },
          "bars": {
            "type": "integer",
            "enum": [
              4,
              8
            ]
          }
        }
      }
    }
    lock-layerAction

    Lock or unlock layer A or B so generate/cycle will not replace it.

    View tool JSON
    {
      "name": "lock-layer",
      "kind": "act",
      "impl": "imperative",
      "description": "Lock or unlock layer A or B so generate/cycle will not replace it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "layer": {
            "type": "string",
            "enum": [
              "A",
              "B"
            ]
          },
          "locked": {
            "type": "boolean"
          }
        },
        "required": [
          "layer"
        ]
      }
    }
    save-presetAction

    Save the current KEYBED preset to localStorage.

    View tool JSON
    {
      "name": "save-preset",
      "kind": "act",
      "impl": "imperative",
      "description": "Save the current KEYBED preset to localStorage.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          }
        }
      }
    }
    load-presetAction

    Load the last saved KEYBED preset from localStorage.

    View tool JSON
    {
      "name": "load-preset",
      "kind": "act",
      "impl": "imperative",
      "description": "Load the last saved KEYBED preset from localStorage.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    reset-soundAction

    Put the instrument back to its factory sound: Steinway, clean effects, default envelope. Keeps the running lesson and the master volume.

    View tool JSON
    {
      "name": "reset-sound",
      "kind": "act",
      "impl": "imperative",
      "description": "Put the instrument back to its factory sound: Steinway, clean effects, default envelope. Keeps the running lesson and the master volume.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    export-midiAction

    Download the current phrase as a Standard MIDI File.

    View tool JSON
    {
      "name": "export-midi",
      "kind": "act",
      "impl": "imperative",
      "description": "Download the current phrase as a Standard MIDI File.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    set-masterAction

    Set master volume from 0 to 1.

    View tool JSON
    {
      "name": "set-master",
      "kind": "act",
      "impl": "imperative",
      "description": "Set master volume from 0 to 1.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "volume": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          }
        },
        "required": [
          "volume"
        ]
      }
    }
    set-sustainAction

    Hold or release the sustain pedal (MIDI CC 64). Same as a pedal on an APC Key 25, Roland, or Yamaha controller.

    View tool JSON
    {
      "name": "set-sustain",
      "kind": "act",
      "impl": "imperative",
      "description": "Hold or release the sustain pedal (MIDI CC 64). Same as a pedal on an APC Key 25, Roland, or Yamaha controller.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "down": {
            "type": "boolean"
          }
        },
        "required": [
          "down"
        ]
      }
    }
    set-bpmAction

    Set the tempo from 40 to 200 BPM. This is the single most useful thing you can do for a struggling student: halve the tempo, let them play it right, then put it back. Also drives the metronome and the duet loop.

    View tool JSON
    {
      "name": "set-bpm",
      "kind": "act",
      "impl": "imperative",
      "description": "Set the tempo from 40 to 200 BPM. This is the single most useful thing you can do for a struggling student: halve the tempo, let them play it right, then put it back. Also drives the metronome and the duet loop.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "bpm": {
            "type": "number",
            "minimum": 40,
            "maximum": 200
          },
          "scale": {
            "type": "number",
            "minimum": 0.25,
            "maximum": 4,
            "description": "Multiply the current tempo instead, e.g. 0.5 for half speed"
          }
        }
      }
    }
    set-swingAction

    Set phrase swing from 0 to 0.4.

    View tool JSON
    {
      "name": "set-swing",
      "kind": "act",
      "impl": "imperative",
      "description": "Set phrase swing from 0 to 0.4.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "swing": {
            "type": "number",
            "minimum": 0,
            "maximum": 0.4
          }
        },
        "required": [
          "swing"
        ]
      }
    }
    set-modeAction

    Switch what the page is for. 'teach' shows the lesson curriculum, the next-key glow and the hand map. 'dj' hides all of that and opens the STUDIO deck: styles, FX knobs, generated loops, MIDI export.

    View tool JSON
    {
      "name": "set-mode",
      "kind": "act",
      "impl": "imperative",
      "description": "Switch what the page is for. 'teach' shows the lesson curriculum, the next-key glow and the hand map. 'dj' hides all of that and opens the STUDIO deck: styles, FX knobs, generated loops, MIDI export.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "teach",
              "dj"
            ]
          }
        },
        "required": [
          "mode"
        ]
      }
    }
    focus-controlAction

    Open the STUDIO drawer and visually highlight controls: 'fx', 'layers', 'tempo', 'phrase', or 'studio'.

    View tool JSON
    {
      "name": "focus-control",
      "kind": "act",
      "impl": "imperative",
      "description": "Open the STUDIO drawer and visually highlight controls: 'fx', 'layers', 'tempo', 'phrase', or 'studio'.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "target": {
            "type": "string",
            "enum": [
              "fx",
              "layers",
              "tempo",
              "phrase",
              "studio"
            ]
          }
        },
        "required": [
          "target"
        ]
      }
    }
    make-trackAction

    Generate a complete track in one of the 5 styles (piano, rave, house, techno, garage) with matching sound design, BPM, and drum groove.

    View tool JSON
    {
      "name": "make-track",
      "kind": "act",
      "impl": "imperative",
      "description": "Generate a complete track in one of the 5 styles (piano, rave, house, techno, garage) with matching sound design, BPM, and drum groove.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "style": {
            "type": "string",
            "enum": [
              "piano",
              "rave",
              "house",
              "techno",
              "garage"
            ]
          },
          "bars": {
            "type": "integer",
            "enum": [
              4,
              8
            ]
          }
        },
        "required": [
          "style"
        ]
      }
    }