tonic.stranica.workers.dev
Learn piano fundamentals on your computer keyboard or a MIDI piano, with your own AI agent as the tutor. Built on WebMCP. Nothing you play leaves your browser.
First seen 2026-11-05 · Last seen 2026-11-05 · Source: webmcp.com
Answer 13 · Act 24 · Transact 0 · Score: Not yet scored
Tool inspector
start_exercise
Start an exercise on screen for the student to play on their computer keyboard or MIDI keyboard. Timed kinds (scale, chords, melody, rhythm) count in one bar with clicks, light up each target key in time, and end on their own. Untimed kinds (find_note, ear_training) go prompt by prompt. Returns immediately. When the student says they are done, call get_attempt_results. Keep beginners at 50–70 bpm and within the playable range from get_input_status. For a song from the library use kind "song" with song_id, a section id (or "all"), hands and tempo_percent.
Page: /
Input schema
| Property | Type | Required | Description |
|---|---|---|---|
kind |
string | yes | scale, chords, melody and rhythm are timed with a metronome. find_note and ear_training are prompt-by-prompt. |
name |
string | no | Short title shown to the student. |
bpm |
number | no | Tempo 30–240. Beginners: 50–70. |
root |
string | no | scale: root like "C4" or "F#3". ear_training: reference note (default C4). |
mode |
string | no | scale: major, minor, harmonic_minor, melodic_minor, major_pentatonic, minor_pentatonic, blues, dorian, mixolydian, lydian, phrygian, chromatic. |
octaves |
integer | no | scale: default 1. |
direction |
string | no | scale: default up_down. |
note_value |
string | no | scale: beats per note, default quarter. |
progression |
array | no | chords: chord symbols (C, Am, G7, Fmaj7, C/E) or roman numerals (I, ii, V7, vii°). Numerals need `key`. |
key |
string | no | chords: key for roman numerals, e.g. "G" or "A minor". |
beats_per_chord |
number | no | chords: default 4. |
notes |
array | no | melody: note names in order. rhythm: the single note to tap (default C4). find_note: exact notes to ask for. |
rhythm |
array | no | melody / rhythm: beats per note, e.g. [1, 1, 0.5, 0.5, 2]. |
melody |
string | no | melody: built-in tune id: ode_to_joy, twinkle, mary. |
count |
integer | no | find_note / ear_training: number of prompts, default 5. |
show_hints |
boolean | no | find_note: light up the answer key. |
intervals |
array | no | ear_training: intervals to draw from: m2 M2 m3 M3 P4 TT P5 m6 M6 m7 M7 P8. |
low |
string | no | find_note: lowest note to ask for (default C4). |
high |
string | no | find_note: highest note to ask for (default B4). |
include_black_keys |
boolean | no | find_note: also ask for sharps and flats. Default false (white keys only). |
song_id |
string | no | song: id from search_songs, e.g. "fur_elise". |
section |
string | no | song: section id from get_song, or "all" for the whole piece. Default: first section. |
hands |
string | no | song: default right. "both" only where get_song shows a left-hand part. |
tempo_percent |
number | no | song: percent of the song tempo. Start learners at 60–70. |
path_step |
string | no | Learning-path step id from get_learning_paths. Pass path exercises unchanged so progress is tracked. |
Raw JSON schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"scale",
"chords",
"melody",
"rhythm",
"find_note",
"ear_training",
"song"
],
"description": "scale, chords, melody and rhythm are timed with a metronome. find_note and ear_training are prompt-by-prompt."
},
"name": {
"type": "string",
"description": "Short title shown to the student."
},
"bpm": {
"type": "number",
"description": "Tempo 30–240. Beginners: 50–70."
},
"root": {
"type": "string",
"description": "scale: root like \"C4\" or \"F#3\". ear_training: reference note (default C4)."
},
"mode": {
"type": "string",
"description": "scale: major, minor, harmonic_minor, melodic_minor, major_pentatonic, minor_pentatonic, blues, dorian, mixolydian, lydian, phrygian, chromatic."
},
"octaves": {
"type": "integer",
"minimum": 1,
"maximum": 3,
"description": "scale: default 1."
},
"direction": {
"type": "string",
"enum": [
"up",
"down",
"up_down"
],
"description": "scale: default up_down."
},
"note_value": {
"type": "string",
"enum": [
"quarter",
"eighth",
"half"
],
"description": "scale: beats per note, default quarter."
},
"progression": {
"type": "array",
"items": {
"type": "string"
},
"description": "chords: chord symbols (C, Am, G7, Fmaj7, C/E) or roman numerals (I, ii, V7, vii°). Numerals need `key`."
},
"key": {
"type": "string",
"description": "chords: key for roman numerals, e.g. \"G\" or \"A minor\"."
},
"beats_per_chord": {
"type": "number",
"description": "chords: default 4."
},
"notes": {
"type": "array",
"items": {
"type": "string"
},
"description": "melody: note names in order. rhythm: the single note to tap (default C4). find_note: exact notes to ask for."
},
"rhythm": {
"type": "array",
"items": {
"type": "number"
},
"description": "melody / rhythm: beats per note, e.g. [1, 1, 0.5, 0.5, 2]."
},
"melody": {
"type": "string",
"description": "melody: built-in tune id: ode_to_joy, twinkle, mary."
},
"count": {
"type": "integer",
"description": "find_note / ear_training: number of prompts, default 5."
},
"show_hints": {
"type": "boolean",
"description": "find_note: light up the answer key."
},
"intervals": {
"type": "array",
"items": {
"type": "string"
},
"description": "ear_training: intervals to draw from: m2 M2 m3 M3 P4 TT P5 m6 M6 m7 M7 P8."
},
"low": {
"type": "string",
"description": "find_note: lowest note to ask for (default C4)."
},
"high": {
"type": "string",
"description": "find_note: highest note to ask for (default B4)."
},
"include_black_keys": {
"type": "boolean",
"description": "find_note: also ask for sharps and flats. Default false (white keys only)."
},
"song_id": {
"type": "string",
"description": "song: id from search_songs, e.g. \"fur_elise\"."
},
"section": {
"type": "string",
"description": "song: section id from get_song, or \"all\" for the whole piece. Default: first section."
},
"hands": {
"type": "string",
"enum": [
"right",
"left",
"both"
],
"description": "song: default right. \"both\" only where get_song shows a left-hand part."
},
"tempo_percent": {
"type": "number",
"minimum": 30,
"maximum": 150,
"description": "song: percent of the song tempo. Start learners at 60–70."
},
"path_step": {
"type": "string",
"description": "Learning-path step id from get_learning_paths. Pass path exercises unchanged so progress is tracked."
}
},
"required": [
"kind"
],
"additionalProperties": false
}
Similar websites
pocketgull.app
Pocket Gull is a real-time clinical AI consult engine powered by Google Gemini. Features 10D multi-paradigm strategy, FHIR R4 export & 3D spatial anatomy.
webmcp-six-lac.vercel.app
AI Navigation Layer: Model Context Protocol (MCP) Semantic DOM integration for intelligent, safe, and observable web navigation.
ghqsandbox.net
Interactive math and physics tools an AI agent can drive directly through WebMCP.
app.formative.com
Formative classroom assessment and learning platform