Create, co-edit, analyze, publish, and export collaborative step-sequencer sessions through MCP.
A multiplayer step sequencer with polyrhythmic patterns, built for real-time collaboration.
Configure your MCP client with:
https://keyboardia.dev/mcp
To co-edit music you already have, open a session and give the agent the UUID
from its https://keyboardia.dev/s/{session_id} URL. Agents can read the
current rhythm, add a track, assign specific steps, and change tempo. Their
edits use the same live session as connected browsers, and published sessions
stay read-only.
Agents can also start from nothing: create a new session and hand back its link, remix a published session into an editable copy without touching the original, publish the current result as an immutable snapshot when you ask, and export the session as a MIDI file for a DAW.
They can explain music too — ask what key a session is in, how its rhythms sit against each other, or what chord a moment forms, and the answer comes from the same music-theory module the Key Assistant uses, with its uncertainty stated rather than hidden.
See the stateless MCP rhythm-slice specification for the exact tool contract and current limitations. Directory maintainers can use the canonical MCP listing record, and hosted data handling is described in the MCP privacy notice.
cd app
# Install dependencies
npm install
# Start development server
npm run dev
# Run tests
npm run test:all
# Build for production
npm run build
Add ?debug=1 to the URL to enable debug features:
See docs/DEVELOPMENT-TOOLS.md for comprehensive debugging documentation.
app/
├── src/
│ ├── audio/ # Audio engine, synths, effects, scheduling
│ ├── components/ # React UI components
│ ├── hooks/ # React hooks (useSession, useMultiplayer, etc.)
│ ├── state/ # State management (grid reducer)
│ ├── sync/ # Multiplayer synchronization
│ ├── worker/ # Cloudflare Worker (Durable Objects, API routes)
│ ├── utils/ # Logging, debugging, utilities
│ └── debug/ # Debug overlay and context
├── e2e/ # End-to-end tests (Playwright)
├── test/ # Integration tests
└── scripts/ # Development and debugging scripts
| File | Description |
|---|---|
app/src/audio/engine.ts | Main audio engine - coordinates all audio subsystems |
app/src/audio/scheduler.ts | Drift-free lookahead scheduling (25ms timer, 100ms lookahead) |
app/src/audio/synth.ts | 16-voice polyphonic synthesizer with voice stealing |
app/src/audio/toneSynths.ts | Tone.js synth manager (FM, AM, Membrane, etc.) |
app/src/audio/toneEffects.ts | Effects chain (reverb, delay, chorus, distortion) |
app/src/sync/multiplayer.ts | WebSocket client for real-time sync |
app/src/worker/live-session.ts | Durable Object for session state |
cd app
npm run test:unit # Unit tests (vitest)
npm run test:integration # Integration tests (Cloudflare Workers)
npm run test:all # All tests
npm run analyze:bugs # Static bug pattern analysis
Source (Oscillator/Sample)
→ Track Gain (per-track volume)
→ Master Gain
→ Effects Chain (Tone.js: reverb → delay → chorus → distortion)
→ Limiter
→ Compressor
→ Destination
synth.ts) - Native Web Audio oscillators, 40+ presetstoneSynths.ts) - Tone.js FM/AM/Membrane synthsadvancedSynth.ts) - Dual-oscillator with filter envelope and LFOsampled-instrument.ts) - Sample-based playback (piano)Client A ←→ Durable Object ←→ Client B
↓
DO Storage (immediate)
↓
KV Storage (on disconnect)
Bundled instrument samples are third-party content with their own licenses (CC0, public domain, and similar free-use terms), documented in app/public/instruments/LICENSE.md.
This listing does not have a supported local package template. Use the maintainer’s documentation for its hosted endpoint, authentication, and client-specific setup. No install command has been inferred.