FL Studio控制服务器

通过Python客户端`flapi`控制FL Studio的MCP服务器,支持多种传输方式和工具调用。

  • by tylerjharden
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 tylerjharden/flemcee

使用说明

flemcee

FL Studio的MCP服务器由 flapi Python客户端。它暴露了 通过Flapi在FL Studio中执行Python来控制FL Studio。

看 /Users/tylertt/flemcee/WORKLOG.md 获取实施摘要和 /Users/tylertt/flemcee/ROADMAP.md 对于未来的计划。

先决条件

  • flapi 安装并运行(FL Studio配置了Flapi脚本)。
  • FL Studio在加载Flapi服务器的情况下运行。
  • macOS:保留 flapi port-host FL Studio打开时运行。

安装

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

跑

默认MCP传输是可流式传输的HTTP:

python -m flemcee

要使用stdio传输,请执行以下操作:

FLEMCEE_TRANSPORT=stdio python -m flemcee

配置

环境变量:

  • FLEMCEE_TRANSPORT:MCP传输(streamable-http, stdio,或 sse).
  • FLEMCEE_REQ_PORT:MIDI请求端口名称(默认值: Flapi Request).
  • FLEMCEE_RES_PORT:MIDI响应端口名称(默认值: Flapi Response).
  • FLEMCEE_CONNECT_ON_START:设置为 true 在启动时连接到FL Studio。
  • FLEMCEE_LOG_LEVEL:日志记录级别(默认值: INFO).
  • FLEMCEE_HOST:MCP传输支持时的服务器主机(默认值: 127.0.0.1).
  • FLEMCEE_PORT:MCP传输支持时的服务器端口(默认值: 8000).
  • FLEMCEE_MOUNT_PATH:HTTP传输的可选基装载路径。
  • FLEMCEE_STREAMABLE_HTTP_PATH:可选的可流式传输HTTP端点路径。
  • FLEMCEE_SSE_PATH:可选的SSE端点路径。
  • FLEMCEE_GENERATE_TOOLS:设置为 true 从存根中注册每个功能的工具(默认值: true).
  • FLEMCEE_CURATED_TOOLS:设置为 true 注册策划的高级工具(默认: true).

MCP工具

  • 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)

精心策划的工具(启动时自动生成):

  • 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资源

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

备注

  • fl_exec 和 fl_eval 在FL Studio的Python环境中运行。
  • 使用 fl_call 为了方便(例如。 target="transport.start").
  • API目录工具从 fl-studio-api-stubs,在可用时提供签名和文件。
  • 启用基于存根的工具生成时,每个顶级FL Studio函数都注册为一个名为的工具 fl_<module>_<function>.

例子

看 /Users/tylertt/flemcee/EXAMPLES.md 对于完整的工作流:

  • “听这个项目并做混音”
  • “把这个循环按顺序变成一个完整的嘻哈节拍”