MCP MIDI Server

使用说明

项目简介

本项目是一个基于 Model Context Protocol (MCP) 的服务器实现,专注于 MIDI (Musical Instrument Digital Interface) 功能。它允许大型语言模型 (LLM) 通过标准化的 MCP 协议,向任何支持 MIDI 输入的软件或硬件设备发送 MIDI 指令。这使得 LLM 能够控制音乐软件(如 DAW 数字音频工作站)、硬件合成器或其他 MIDI 兼容设备,从而实现音乐创作、表演控制等应用场景。

主要功能点

  • 虚拟 MIDI 输出端口: 创建一个名为 "MCP MIDI Out" 的虚拟 MIDI 端口,可在操作系统中被识别为 MIDI 输入设备。
  • MIDI 指令发送: 支持发送 MIDI Note On/Off (音符开关)、Control Change (CC,控制变化) 等常用 MIDI 指令。
  • MIDI 序列控制: 支持按照预设的时间序列发送一系列 MIDI 事件,实现节奏和旋律的精确控制。
  • 实时控制能力: LLM 可以通过调用服务器提供的工具,实时发送 MIDI 指令,与音乐软件或硬件进行互动。

安装步骤

  1. 克隆仓库:

    git clone https://github.com/sandst1/mcp-server-midi
    cd mcp-server-midi
  2. 创建并激活虚拟环境 (推荐):

    python -m venv .venv
    source .venv/bin/activate  # 或 .venv\Scripts\activate (Windows)
  3. 安装依赖:

    pip install -r requirements.txt
  4. 配置环境变量:

    • 创建一个 '.env' 文件在项目根目录下。
    • 在 '.env' 文件中设置服务器端口号,例如:
      PORT=8000
      你可以根据需要修改端口号。

服务器配置

MCP 客户端需要以下配置信息来连接到 MCP MIDI Server。请将以下 JSON 配置添加到你的 MCP 客户端配置中:

{
  "serverName": "MCP MIDI Server",
  "command": "python",
  "args": ["mcp_midi_server.py"],
  "transport": "sse",
  "settings": {
    "port": 8000  // 确保与 .env 文件中配置的 PORT 一致
  }
}

配置参数说明:

  • 'serverName': 服务器名称,用于在 MCP 客户端中标识和显示。
  • 'command': 启动服务器的命令,这里使用 'python' 解释器。
  • 'args': 启动命令的参数,指定服务器脚本文件为 'mcp_midi_server.py'。
  • 'transport': MCP 客户端与服务器通信的传输协议,这里使用 'sse' (Server-Sent Events)。
  • 'settings.port': 服务器监听的端口号,需要与 '.env' 文件或实际运行环境中的端口号保持一致。 如果 '.env' 文件中 'PORT' 设置为其他值,这里也需要相应修改。

注意: MCP 客户端需要能够执行 'python mcp_midi_server.py' 命令来启动服务器。请确保你的 MCP 客户端运行环境中已安装 Python 和项目依赖。

基本使用方法

  1. 启动 MCP MIDI Server: 在项目根目录下,运行命令 'python mcp_midi_server.py' 启动服务器。服务器将会在指定的端口 (默认为 8000) 监听来自 MCP 客户端的请求,并创建一个名为 "MCP MIDI Out" 的虚拟 MIDI 端口。

  2. 配置 MIDI 软件: 打开任何支持 MIDI 输入的音乐软件 (例如 Ableton Live, Logic Pro, FL Studio 等) 或硬件设备,在其 MIDI 输入设置中选择 "MCP MIDI Out" 作为 MIDI 输入设备。

  3. 通过 MCP 客户端控制: 使用 MCP 客户端连接到 MCP MIDI Server。客户端可以通过调用服务器提供的 "工具 (Tools)",例如 'send_note_on', 'send_note_off', 'send_control_change', 'send_midi_sequence' 等,向 "MCP MIDI Out" 端口发送 MIDI 指令,从而控制连接的音乐软件或硬件设备。

    例如,在 MCP 客户端中调用 'send_note_on' 工具并传入音符、力度、通道等参数,即可在音乐软件中听到相应的音符。调用 'send_midi_sequence' 可以播放预设的 MIDI 序列。

API 方法 (Tools) 概览

  • 'send_note_on(note, velocity=127, channel=0)': 发送 Note On 音符开启指令。
  • 'send_note_off(note, velocity=64, channel=0)': 发送 Note Off 音符关闭指令。
  • 'send_control_change(controller, value, channel=0)': 发送 MIDI 控制变化 (CC) 指令。
  • 'send_midi_sequence(events)': 发送 MIDI 音符序列,支持指定每个音符的音高、力度、持续时间和起始时间。

服务器信息