lmms-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_projectA | Create a new empty LMMS project. Args: bpm: Tempo in beats per minute (10-999) time_sig_numerator: Time signature numerator (e.g. 4 for 4/4) time_sig_denominator: Time signature denominator (e.g. 4 for 4/4) master_volume: Master volume (0-200, 100=normal) master_pitch: Master pitch offset in semitones (-12 to +12) |
| load_projectA | Load an existing LMMS project file (.mmpz or .mmp). Args: path: Full path to the LMMS project file |
| save_projectA | Save the current LMMS project to a file. Args: path: File path to save to. If empty, saves to the default projects directory. If only a filename is given (e.g. "song.mmpz"), it's saved in the default directory. compressed: If True, saves as .mmpz (compressed). If False, saves as .mmp (plain XML). By default (None) the format follows the file extension: ".mmp" is always plain XML, everything else compressed. Writing compressed data into a .mmp breaks LMMS and other tools. |
| get_project_infoA | Get comprehensive information about the current LMMS project. Returns tempo, time signature, tracks, mixer channels, and more. |
| get_project_xmlA | Get the raw XML representation of the current project. Useful for debugging or understanding the exact project structure. |
| add_instrument_trackA | Add an instrument track to the project. Args: name: Track name (e.g. "Lead Synth", "Bass") instrument: Plugin name (lowercase). Valid options: tripleoscillator, kicker, audiofileprocessor, organic, malletsstk, freeboy, lb302, monstro, nes, opulenz, patman, sf2player, sfxr, sid, slicert, vibedstrings, watsyn, xpressive, zynaddsubfx, gigplayer, bitinvader mixer_channel: Mixer channel number (0=Master, 1+=custom channels) volume: Track volume (0-200, 100=normal) panning: Track panning (-100 to +100, 0=center) |
| add_sample_trackB | Add a sample track for arranging audio files. Args: name: Track name mixer_channel: Mixer channel number (0=Master) volume: Track volume (0-200) panning: Track panning (-100 to +100) |
| add_automation_trackC | Add an automation track for parameter automation. Args: name: Track name |
| add_pattern_trackA | Add a beat/bassline pattern track for drum sequencing. A default inner kick instrument is created so notes can be added immediately via add_note. Trigger it in the song editor with place_bb_clip. Args: name: Pattern track name |
| remove_trackA | Remove a track by its index. Args: track_index: Zero-based index of the track to remove |
| get_trackA | Get detailed information about a specific track. Args: track_index: Zero-based index of the track |
| list_tracksA | List all tracks in the current project with their index, name, and type. |
| set_track_volumeA | Set the volume of a track. Args: track_index: Zero-based track index volume: Volume level (0-200, 100=normal) |
| set_track_panningA | Set the panning of a track. Args: track_index: Zero-based track index panning: Pan value (-100=left, 0=center, 100=right) |
| mute_trackA | Mute or unmute a track. Args: track_index: Zero-based track index muted: True to mute, False to unmute |
| solo_trackA | Solo or unsolo a track. Args: track_index: Zero-based track index solo: True to solo, False to unsolo |
| add_noteA | Add a note to a track's pattern. Args: track_index: Zero-based track index (must be an instrument or pattern track) key: MIDI note number (0-127). 60=C4 (middle C), 69=A4 pos: Position in ticks RELATIVE TO THE PATTERN START (192 ticks = 1 bar). Notes are placed inside the target pattern; if a note ends beyond the pattern clip length, the clip is extended automatically (notes beyond the clip end would otherwise be silent). length: Note length in ticks (48 = 1/16 note, 96 = 1/8 note, 192 = 1 bar) volume: Note velocity (0-200, 100=normal) panning: Note panning (-100 to +100) pattern_index: Which pattern on the track to edit (default: first). Use place_pattern to create additional patterns at specific song positions first. |
| add_note_by_nameB | Add a note using a note name (e.g. 'C4', 'A#3', 'F#5'). Args: track_index: Zero-based track index note_name: Note name like 'C4', 'A#3', 'F5', 'Bb2' pos: Position in ticks (192 ticks = 1 bar) length: Note length in ticks (48 = 1/16, 96 = 1/8, 192 = 1 bar) volume: Note velocity (0-200) |
| add_notes_batchA | Add multiple notes to a track at once. Args: track_index: Zero-based track index notes: List of note objects, each with: key (int or str like "C4"), pos (ticks), length (ticks, default 48), volume (0-200, default 100), panning (-100 to +100, default 0) |
| add_mixer_channelA | Add a new mixer channel. The channel is automatically routed to Master via an explicit element - LMMS drops the implicit connection when loading, so channels without it would be silent. Args: name: Channel name (e.g. "Drums", "Bass", "Lead") volume: Channel volume (0.0-2.0, 1.0=0dB) |
| get_mixer_channelsA | Get all mixer channels with their settings. |
| set_mixer_channel_volumeA | Set the volume of a mixer channel. Args: channel_num: Channel number (0=Master) volume: Volume (0.0-2.0, 1.0=0dB) |
| set_mixer_channel_nameB | Rename a mixer channel. Args: channel_num: Channel number (0=Master) name: New channel name |
| add_effectA | Add an effect to a track's or mixer channel's effect chain. Args: target_type: "track" or "mixer" target_index: Track index or mixer channel number (0=Master) effect: Built-in LMMS effect name. Valid: amplifier, bassbooster, bitcrush, compressor, crossovereq, delay, dispersion, dualfilter, dynamicsprocessor, eq, flanger, frequencyshifter, multitapecho, reverbsc, slewdistortion, stereoenhancer, stereomatrix, waveshaper wet: Wet/dry mix 0.0-1.0 (1.0=full effect) enabled: Whether the effect is active position: Chain position to insert at (None=end of chain) |
| remove_effectA | Remove an effect from a chain by name or chain position. Args: target_type: "track" or "mixer" target_index: Track index or mixer channel number effect: Effect name (e.g. "delay") or position (e.g. 0) |
| toggle_effectA | Enable or disable an effect without removing it. Args: target_type: "track" or "mixer" target_index: Track index or mixer channel number effect: Effect name or chain position enabled: True to enable, False to bypass |
| get_effect_chainA | List all effects on a track's or mixer channel's effect chain. Args: target_type: "track" or "mixer" target_index: Track index or mixer channel number |
| list_zyn_presetsA | List available ZynAddSubFX presets (.xiz files). Args: category: Optional category filter (e.g. "Bass", "Strings", "Synth", "Pads", "Brass"). Omit to list all categories' presets. |
| load_zyn_presetA | Load a ZynAddSubFX preset (.xiz) into a zynaddsubfx instrument track. The track must use the 'zynaddsubfx' instrument. Presets can be referenced by filename (e.g. "Bass 1"), "Category/Name", or full path. Args: track_index: Index of the target track preset: Preset name, "Category/Name" or absolute path |
| set_zyn_paramsA | Set ZynAddSubFX global parameters on a zynaddsubfx track. All values are 0-127 as in the ZynAddSubFX UI. Only provided parameters are changed. Args: track_index: Index of the zynaddsubfx track portamento: Portamento amount (0-127) filterfreq: Filter cutoff frequency (0-127) filterq: Filter resonance/Q (0-127) bandwidth: Bandwidth (0-127) fmgain: FM gain (0-127) rescenterfreq: Resonance center frequency (0-127) resbandwidth: Resonance bandwidth (0-127) |
| get_lmms_infoA | Get info about the installed LMMS application. Shows the detected LMMS version, installation path and which instrument/effect plugins are actually available. Use this to check whether a plugin is supported before using it. |
| render_projectA | Export the current project to an audio file using the installed LMMS. This launches LMMS in headless render mode (no GUI). Requires a working LMMS installation. The project is saved first, then rendered. Args: output_path: Output file path (default: .wav in the same directory) file_format: "wav", "flac", "ogg" or "mp3" samplerate: Sample rate in Hz (44100, 48000, ...) bitrate: Bitrate in kbit/s for lossy formats (ogg/mp3) |
| list_available_pluginsA | List ALL plugins installed in your LMMS, dynamically detected. Includes built-in instruments/effects plus any custom plugins the user added to LMMS's plugins folder. Custom plugins can be used directly by name in add_instrument_track / add_effect. |
| scan_vst_directoryA | Scan a folder for VST plugin DLLs (.dll files). Args: directory: Path to scan (e.g. "C:/VSTPlugins") recursive: Include subdirectories |
| add_vst_trackA | Add a track hosting a VST plugin (.dll file). Uses LMMS's Vestige host. The VST must be compatible with your LMMS architecture (64-bit LMMS needs 64-bit VSTs). Args: name: Track name (e.g. "Spire Lead") dll_path: Absolute path to the VST .dll file mixer_channel: Mixer channel number (0=Master) volume: Track volume (0-200) panning: Track panning (-100 to +100) |
| assign_sample_fileA | Assign an audio file to all clips on a sample track. Use relative paths for LMMS's built-in samples (e.g. "drums/kick01.ogg") or absolute paths for your own files. Args: track_index: Index of the sample track file_path: Audio file path (WAV/OGG/MP3/FLAC) |
| place_sample_clipB | Place an audio file clip on a sample track at a given bar. Args: track_index: Index of the sample track file_path: Audio file path (relative to LMMS samples or absolute) pos_bars: Start position in bars (0 = beginning) length_bars: Clip length in bars |
| place_patternA | Place an empty pattern clip on an instrument track (song arrangement). The pattern starts empty; add notes with add_note (they go into the first pattern) or use this to sketch the arrangement structure first. Args: track_index: Index of the instrument track pos_bars: Start position in bars (0 = beginning) name: Optional pattern name (defaults to track name) length_bars: Pattern length in bars |
| place_bb_clipA | Place a beat/bassline clip on a pattern track in the song editor. This triggers the BB pattern (created via add_pattern_track and filled with notes) to play at the given time. Args: bb_track_index: Index of the pattern (BB) track pos_bars: Start position in bars length_bars: Clip length in bars (default 4 = one BB cycle of 16 steps) |
| move_clipA | Move a clip (pattern/bbtco/sampleclip) to a new time position. Args: track_index: Track containing the clip old_pos_bars: Current start position in bars new_pos_bars: New start position in bars |
| delete_clipA | Delete a clip at a given position from a track. Args: track_index: Track containing the clip pos_bars: Clip start position in bars |
| get_arrangementA | Get the full song editor arrangement: all clips sorted by time. Shows every pattern, BB clip, sample clip and automation curve with their positions and lengths in ticks and bars. |
| add_automationA | Create an automation curve that controls a parameter over time. Automatable targets:
Args: target_type: "song", "track" or "mixer" param: Parameter name (see above) points: Curve points as list of {"bar": float, "value": float}. Example: [{"bar": 0, "value": 120}, {"bar": 8, "value": 140}] target_index: Track index or mixer channel (ignored for "song") name: Automation name (defaults to parameter name) smooth: True = smooth curves (cubic), False = linear steps |
| set_tempoA | Set the song tempo (BPM). Args: bpm: Tempo in beats per minute (10-999) |
| set_time_signatureA | Set the time signature. Args: numerator: Beats per bar (e.g. 4, 3, 6) denominator: Beat unit (e.g. 4 for quarter notes, 8 for eighth notes) |
| set_master_volumeA | Set the master volume. Args: volume: Master volume (0-200, 100=normal) |
| set_master_pitchA | Set the master pitch offset. Args: pitch: Pitch offset in semitones (-12 to +12) |
| note_name_to_keyA | Convert a note name (e.g. 'C4') to its MIDI key number. Args: name: Note name like 'C4', 'A#3', 'F#5', 'Bb2' |
| key_to_note_nameA | Convert a MIDI key number to its note name. Args: key: MIDI key number (0-127) |
| bars_to_ticks_converterA | Convert bars to ticks (192 ticks per bar in 4/4 time). Args: bars: Number of bars |
| ticks_to_bars_converterA | Convert ticks to bars (192 ticks per bar in 4/4 time). Args: ticks: Number of ticks |
| generate_scaleA | Generate a musical scale as MIDI key numbers and note names. Args: root_note: Root note name (e.g. 'C4', 'A3') scale_type: Scale type: major, minor, dorian, mixolydian, pentatonic_major, pentatonic_minor, blues, chromatic, harmonic_minor, melodic_minor num_octaves: Number of octaves to generate |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| create_basic_song | Create a basic song structure with drums, bass, and melody. Args: genre: Musical genre (electronic, rock, hip-hop, jazz, pop, ambient) bpm: Tempo in beats per minute key: Root note for the melody (e.g. 'C4', 'A3') |
| add_drum_pattern | Create a drum pattern for the current project. Args: pattern_style: Drum pattern style (four_on_the_floor, breakbeat, hiphop, trap, rock_basic, waltz) steps: Number of steps in the pattern (16 or 32) |
| create_melody | Generate a melody for the current project. Args: scale_type: Musical scale (major, minor, pentatonic_major, blues, etc.) root_note: Root note of the scale bars: Number of bars for the melody style: Melodic style (simple, complex, arpeggiated, chordal) |
| mix_and_arrange | Mix and arrange the current project. Guides through volume balancing, panning, and arrangement decisions. |
| export_project | Export/save the current project. Args: format: Export format (mmpz=compressed, mmp=uncompressed XML, wav=render audio) path: Output file path |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| resource_project_info | Get current LMMS project information. |
| resource_project_tracks | Get all tracks in the current project. |
| resource_project_mixer | Get all mixer channels in the current project. |
| resource_project_xml | Get the raw XML of the current project. |
| resource_instruments | List of available LMMS instruments/plugins (built-in, verified). |
| resource_effects | List of available LMMS effects (built-in, verified). |
| resource_note_names | MIDI note number to note name mapping reference. |
| resource_scales | Available musical scales and their intervals. |
TDQS
Scored across 52 tools
Most tools map cleanly to a specific resource (tracks, mixer, effects, clips), but add_note and add_note_by_name are near-duplicates with only input-format differences, and get_project_info overlaps with list_tracks and get_mixer_channels. Descriptions help, but the boundaries are not always crisp.
The set overwhelmingly follows a snake_case verb_noun pattern such as add_instrument_track, remove_effect, set_tempo, and list_tracks. Minor deviations exist in the converter utilities (note_name_to_key, bars_to_ticks_converter) and the add_note_by_name / add_notes_batch variants, but the overall convention is predictable.
52 tools is beyond the 50+ extreme threshold in the rubric, making the surface unwieldy for agent selection. Several tools such as add_note_by_name and the standalone converters could be consolidated into more general tools.
Creation and arrangement workflows are broadly covered, but note editing is incomplete: there is no way to list, update, or delete notes once added, which creates dead ends for pattern editing. Mixer channels can be added but not removed, and effect parameters cannot be adjusted beyond enabling/disabling.