TypeScript / Node

keyboards-mcp

An MCP server that lets an AI agent control hardware MIDI keyboards — read and change synth parameters, load programs and songs, with pluggable model support and a mock device for hardware-free development.

Nord Electro 5D Roland JUNO-X Prophet-6
★ View on GitHub Read the docs
What it does

Drive real synths from an AI agent

Tools are thin wrappers — each keyboard device owns its logic. A connections broker manages MIDI port leases so concurrent agent sessions don't collide.

Connect & discover
connect_to_keyboardlist_midi_devicesis_connected
Read & set parameters
set_parametersget_current_statelist_parameters
Programs & songs
list_programsload_programload_song
Backups
extract_backupget_last_backup_location
Model-delegated design

Add a keyboard by implementing its device — the MCP tools stay generic.

Sounds and Recreation app + broker

An Electron desktop app (UI facade over the MCPs and agent) with model-specific web UIs and in-process mock devices; an MCB broker shares MIDI ports across sessions.

In action

Just ask your agent

The agent calls a tool; the keyboard device translates it to MIDI and applies it to the hardware.

agent session · JUNO-X
you › warm it up — add some chorus and a touch of reverb
# agent calls the tool
set_parameters(chorus: on, reverb_level: 38, drive: 12)
✓ applied to Roland JUNO-X over MIDI
Where it fits

The final stage of the pipeline

keyboards-mcp applies the matched sound to your hardware synth over MIDI.

AudioAnalysisAgentMIDISynth