ESP32-C3 MCP Music Server
Allows controlling an ESP32-C3 audio client via MQTT to play music from an HTTP library, with capabilities for playback control, volume, playlist management, and Wi-Fi reset.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ESP32-C3 MCP Music Serverplay the song 'Summer Breeze'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ESP32-C3 MCP Music Server
这个项目的根目录是 MCP 服务器,用来让 OpenClaw、Claude Desktop 或其他 MCP agent 通过 MQTT 控制 ESP32-C3 音频客户端播放音乐。
ESP32-C3 固件说明在 esp32-c3-client/README.md。
功能
通过 MQTT 向 ESP32-C3 下发播放、暂停、停止、音量、下一首等控制指令
从 HTTP 音乐目录读取歌曲列表
支持按歌曲名搜索并播放
支持顺序播放整个音乐列表
支持把播放列表写入 MQTT retained topic,由 ESP32-C3 自己按顺序播放
支持清除 ESP32-C3 已保存的 Wi-Fi 配置并重新进入手机配网模式
运行要求
Node.js 18 或更高版本
一个可访问的 MQTT broker
ESP32-C3 客户端已烧录并连接到同一个 MQTT broker
一个 HTTP 音乐目录,例如 nginx 暴露的 MP3 文件目录
安装
npm install复制环境变量模板:
copy .env.example .envWindows PowerShell 也可以用:
Copy-Item .env.example .env然后按实际情况修改 .env。
环境变量
MQTT_BROKER=mqtt://esp32:esp32mqtt2026@localhost:1883
MQTT_TOPIC=esp32-c3/music/play
MQTT_PLAYLIST_TOPIC=esp32-c3/music/playlist/active
MUSIC_LIBRARY_URL=http://47.102.147.204:8080/mp3/
FETCH_TIMEOUT_MS=8000
MAX_PLAYLIST_FETCHES=3
MAX_PLAYLIST_ITEMS=50说明:
MQTT_BROKER: MQTT broker 连接地址,支持带用户名密码的 URLMQTT_TOPIC: ESP32-C3 接收控制指令的 topicMQTT_PLAYLIST_TOPIC: 播放列表 retained 缓存 topic 前缀MUSIC_LIBRARY_URL: HTTP 音乐目录地址,末尾可以不带/FETCH_TIMEOUT_MS: 拉取音乐目录或播放列表文件的超时时间MAX_PLAYLIST_FETCHES: 最多解析多少个播放列表文件MAX_PLAYLIST_ITEMS: 顺序播放时最多缓存多少首歌
MCP 配置示例
在支持 MCP stdio server 的 agent 中,把命令配置为:
{
"mcpServers": {
"esp32-c3-music": {
"command": "node",
"args": ["D:\\ESP32-C3-MCP\\index.js"],
"cwd": "D:\\ESP32-C3-MCP"
}
}
}如果 agent 支持环境变量,也可以把 .env 里的变量直接放到 MCP server 配置里。
可用工具
list_music_library
扫描 MUSIC_LIBRARY_URL,返回发现的歌曲名称和 URL。
play_music
播放指定歌曲。可以传:
url: 直接播放这个 URLsong_name: 从音乐库中按名称查找并播放
如果同时传入 url 和 song_name,优先使用 url。
play_song_from_library
只按 song_name 从音乐库查找并播放。
play_playlist
按顺序播放音乐库列表。
它会先把列表写入 MQTT retained topic:
esp32-c3/music/playlist/active/meta
esp32-c3/music/playlist/active/item/0
esp32-c3/music/playlist/active/item/1然后向 MQTT_TOPIC 发送:
{"action":"play_playlist","start_index":0}ESP32-C3 收到后会从本机缓存的列表开始播放,播完当前歌曲后自己播放下一首。这样 MCP 服务器不需要一直在线。
参数:
start_index: 从第几首开始,默认0max_songs: 最多缓存并播放多少首,默认MAX_PLAYLIST_ITEMS
next_music
下一首或切歌。
传
url或song_name: 直接切到指定歌曲,保持原来的单首播放逻辑不传参数: 发送
playlist_next,让 ESP32-C3 在播放列表模式下跳到下一首
pause_music
暂停播放。ESP32-C3 会停止当前播放,但保留最后一次 URL。
stop_music
停止播放并清空最后一次 URL。播放列表模式也会退出。
set_volume
设置音量,范围 0-100。
reset_wifi
发送:
{"action":"reset_wifi"}ESP32-C3 收到后会清除保存的 Wi-Fi 配置并重启,重启后开启手机配网热点。
注意:这个工具要求 ESP32-C3 当前仍然在线并连接 MQTT。如果设备已经离线,它收不到这条 MQTT 消息,只能等固件连接失败后自动开启配网热点。
MQTT 消息约定
控制 topic 默认是:
esp32-c3/music/play常见控制消息:
{"action":"play","url":"http://example.com/song.mp3"}
{"action":"next","url":"http://example.com/next.mp3"}
{"action":"pause"}
{"action":"stop"}
{"action":"set_volume","volume":65}
{"action":"play_playlist","start_index":0}
{"action":"playlist_next"}
{"action":"reset_wifi"}播放列表 topic 默认前缀是:
esp32-c3/music/playlist/activeMCP 服务器会发布 retained 消息,ESP32-C3 订阅:
esp32-c3/music/playlist/active/#本地检查
检查 Node.js 语法:
node --check index.js当前 package.json 还没有自动化测试脚本。
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/xiazhe-xz/ESP32-C3-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server