Flemcee MCP Server

MCP server for FL Studio powered by the flapi Python client

README.md

flemcee

MCP server for FL Studio powered by the flapi Python client. It exposes FL Studio control by executing Python inside FL Studio via Flapi.

See /Users/tylertt/flemcee/WORKLOG.md for an implementation summary and /Users/tylertt/flemcee/ROADMAP.md for the future plan.

Prerequisites

  • flapi installed and working (FL Studio configured with Flapi scripts).
  • FL Studio running with the Flapi server loaded.
  • macOS: keep flapi port-host running while FL Studio is open.

Install

python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -e .

Run

Default MCP transport is streamable HTTP:

python -m flemcee

To use stdio transport:

FLEMCEE_TRANSPORT=stdio python -m flemcee

Configuration

Environment variables:

  • FLEMCEE_TRANSPORT: MCP transport (streamable-http, stdio, or sse).
  • FLEMCEE_REQ_PORT: MIDI request port name (default: Flapi Request).
  • FLEMCEE_RES_PORT: MIDI response port name (default: Flapi Response).
  • FLEMCEE_CONNECT_ON_START: set to true to connect to FL Studio at startup.
  • FLEMCEE_LOG_LEVEL: logging level (default: INFO).
  • FLEMCEE_HOST: server host when supported by the MCP transport (default: 127.0.0.1).
  • FLEMCEE_PORT: server port when supported by the MCP transport (default: 8000).
  • FLEMCEE_MOUNT_PATH: optional base mount path for HTTP transports.
  • FLEMCEE_STREAMABLE_HTTP_PATH: optional streamable HTTP endpoint path.
  • FLEMCEE_SSE_PATH: optional SSE endpoint path.
  • FLEMCEE_GENERATE_TOOLS: set to true to register per-function tools from stubs (default: true).
  • FLEMCEE_CURATED_TOOLS: set to true to register curated higher-level tools (default: true).

MCP Tools

  • fl_connect(force: bool = false)
  • fl_disconnect()
  • fl_status()
  • fl_exec(code: str)
  • fl_eval(expression: str)
  • fl_call(target: str, args: list = [], kwargs: dict = {})
  • fl_catalog(module: str | None = None, include_docs: bool = False)
  • fl_symbol_lookup(symbol: str, include_docs: bool = False)
  • fl_symbol_resolve(target: str, include_docs: bool = False)

Curated tools (auto-generated at startup):

  • fl_session_summary()
  • fl_transport_play()
  • fl_transport_stop()
  • fl_transport_record_toggle()
  • fl_transport_set_loop_mode(mode: str | int)
  • fl_transport_set_song_pos(position: float | int, mode: int = -1)
  • fl_project_set_tempo(bpm: float)
  • fl_channel_list(global_count: bool = False, use_global_index: bool = False)
  • fl_channel_set(index: int, name: str | None, color: int | None, volume: float | None, pan: float | None, pitch: float | None, target_fx_track: int | None, use_global_index: bool = False)
  • fl_channel_select(index: int, use_global_index: bool = False)
  • fl_pattern_list(include_defaults: bool = False)
  • fl_pattern_select(index: int)
  • fl_pattern_rename(index: int, name: str)
  • fl_sequencer_set_steps(channel_index: int, steps: list[int], value: bool = True, use_global_index: bool = False)
  • fl_sequencer_clear_steps(channel_index: int, length: int = 16, use_global_index: bool = False)
  • fl_mixer_list_tracks(max_tracks: int = 125)
  • fl_mixer_set_track(index: int, volume: float | None, pan: float | None, mute: bool | None, solo: bool | None, arm: bool | None)
  • fl_mixer_route(source_index: int, dest_index: int, enabled: bool = True, level: float | None = None, update_ui: bool = True)
  • fl_plugin_list_params(index: int, slot_index: int = -1, limit: int = 64, use_global_index: bool = False)
  • fl_plugin_set_param(index: int, param_index: int, value: float, slot_index: int = -1, use_global_index: bool = False)
  • fl_plugin_next_preset(index: int, slot_index: int = -1, use_global_index: bool = False)
  • fl_beat_make_hiphop(kick_channel: int, snare_channel: int, hat_channel: int, bars: int = 1, style: str = \"boom_bap\")
  • fl_mix_balance_peaks(track_indices: list[int], target_peak: float = 0.8, mode: int = 2, min_volume: float = 0.0, max_volume: float = 1.0, max_change: float | None = 0.2)

MCP Resources

  • flstudio://catalog
  • flstudio://module/{module}

Notes

  • fl_exec and fl_eval run inside FL Studio's Python environment.
  • Use fl_call for convenience (e.g. target="transport.start").
  • The API catalog tools read from fl-studio-api-stubs, providing signatures and documentation when available.
  • When stub-based tool generation is enabled, each top-level FL Studio function is registered as a tool named fl_<module>_<function>.

Examples

See /Users/tylertt/flemcee/EXAMPLES.md for complete workflows:

  • “Listen to this project and do a mix”
  • “Take this loop and sequence it out into a full hip hop beat”

Tools 8

fl_connectConnect to FL Studio
fl_disconnectDisconnect from FL Studio
fl_statusCheck connection status
fl_execExecute Python code inside FL Studio
fl_transport_playStart transport playback
fl_transport_stopStop transport playback
fl_project_set_tempoSet project tempo in BPM
fl_mixer_set_trackConfigure mixer track settings

Environment Variables

FLEMCEE_TRANSPORTMCP transport (streamable-http, stdio, or sse)
FLEMCEE_REQ_PORTMIDI request port name
FLEMCEE_RES_PORTMIDI response port name
FLEMCEE_CONNECT_ON_STARTConnect to FL Studio at startup

Try it

Set the project tempo to 128 BPM.
Stop the transport and reset the song position to the beginning.
List all available mixer tracks in the current project.
Mute mixer track 5 and set its volume to 0.75.
Create a hip hop beat pattern using the kick, snare, and hat channels.

Frequently Asked Questions

What are the key features of Flemcee?

Remote control of FL Studio transport, mixer, and patterns. Direct execution of Python code within the FL Studio environment. Auto-generation of high-level tools for common music production tasks. Support for multiple transport protocols including stdio and HTTP. Integration with fl-studio-api-stubs for documentation and signatures.

What can I use Flemcee for?

Automating repetitive mixing tasks like balancing peak levels across multiple tracks. Programmatically sequencing drum patterns for hip hop beats. Managing project settings like tempo and loop modes via natural language. Quickly querying the status and configuration of mixer tracks and plugins.

How do I install Flemcee?

Install Flemcee by running: python -m venv .venv && source .venv/bin/activate && pip install -U pip && pip install -e .

What MCP clients work with Flemcee?

Flemcee works with any MCP-compatible client including Claude Desktop, Claude Code, Cursor, and other editors with MCP support.

Turn this server into reusable context

Keep Flemcee docs, env vars, and workflow notes in Conare so your agent carries them across sessions.

Open Conare