使用说明
项目简介
本项目是一个基于 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 指令,与音乐软件或硬件进行互动。
安装步骤
-
克隆仓库:
git clone https://github.com/sandst1/mcp-server-midi cd mcp-server-midi -
创建并激活虚拟环境 (推荐):
python -m venv .venv source .venv/bin/activate # 或 .venv\Scripts\activate (Windows) -
安装依赖:
pip install -r requirements.txt -
配置环境变量:
- 创建一个 '.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 和项目依赖。
基本使用方法
-
启动 MCP MIDI Server: 在项目根目录下,运行命令 'python mcp_midi_server.py' 启动服务器。服务器将会在指定的端口 (默认为 8000) 监听来自 MCP 客户端的请求,并创建一个名为 "MCP MIDI Out" 的虚拟 MIDI 端口。
-
配置 MIDI 软件: 打开任何支持 MIDI 输入的音乐软件 (例如 Ableton Live, Logic Pro, FL Studio 等) 或硬件设备,在其 MIDI 输入设置中选择 "MCP MIDI Out" 作为 MIDI 输入设备。
-
通过 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 音符序列,支持指定每个音符的音高、力度、持续时间和起始时间。
信息
分类
桌面与硬件