An MCP server that validates and keeps scores and drives the Piano app, a skill that teaches the score format by example, and commands named after what people ask for. Every name on this page is read out of the plugin’s source when the page is built.
/plugin marketplace add alegauss/piano
/plugin install piano@pianoNothing else to configure: the server ships inside the plugin. The tools that play start the app if it is installed and not open, bring its window to the front if it is, and say where to get it if it is not installed.
Each is a sentence you would have typed anyway, with the tool calls worked out for you.
| Command | What it does |
|---|---|
/piano:compose <piece, e.g. "Twinkle Twinkle, beginner, right hand melody"> | Write a score for a named piece, check it, keep it and play it |
/piano:level <beginner | intermediate | advanced> | Set the Piano app to beginner, intermediate or advanced |
/piano:play [e.g. "at half speed from bar 9"] | Play what is open in the Piano app, optionally slower or from a bar |
/piano:practise <passage and hands, e.g. "bars 17 to 20, left hand, from half speed"> | Practise a passage, graded, at a tempo that climbs |
In three groups, each with the first sentence of its own description. Only these reach the app, over a loopback connection that needs the token the running app wrote.
validate_score Validate a score
save_score Save a score into the library
read_score Read a score back
correct_score Correct what a score says about itself
delete_score Delete a score from the library
list_scores List the library
search_scores Search the library
play Play
stop Stop
seek Go to a bar or a passage
set_tempo Set the practice tempo
set_transpose Transpose
set_level Set the difficulty level
piano_state What the piano is doing
practise Practise a passage
piano-score skill shows the format by example and lists the numbers that are easy to get wrong: ticks per quarter, pitches, the length of a bar.validate_score answers field by field, and its warnings (the hands crossing, a chord one hand cannot span) are read and fixed where they are mistakes.save_score refuses one that is half right rather than keeping it.play, and on request practise for the passage you name.The server is small on purpose. These are the things an agent with a piano might be expected to do, and does not.
The compose command offers an original in that style instead.
Scores go into the library, by id, and nowhere else.
The transport takes a closed set of requests and no code.
A deleted score goes to the system bin; with the app closed, a second call must say so.