有MCP服务器
允许Claude Desktop控制的MCP(模型上下文协议)服务器 罗恩 音乐播放。通过自然语言搜索您的库、播放音乐、控制音量和管理区域。
特性
- 20个MCP工具 完全控制Roon
- 搜索和播放艺术家、专辑、曲目和播放列表
- 播放控制:播放、暂停、停止、跳过、搜索、洗牌、循环
- 音量控制,支持静音
- 区域管理和当前播放信息
- 队列管理(添加曲目、专辑、播放列表)
- 直接WebSocket连接到Roon Core(无需发现)
- 连接丢失时自动重新连接
- 持久配对(在Roon中只授权一次)
先决条件
安装
git clone https://github.com/AzureStackNerd/roon-mcp.git
cd roon-mcp
npm install
npm run build
配置
将服务器添加到Claude Desktop配置文件中:
- 视窗:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"roon": {
"command": "node",
"args": ["C:\\path\\to\\roon-mcp\\build\\index.js"],
"env": {
"ROON_HOST": "192.168.1.100",
"ROON_PORT": "9330"
}
}
}
}
环境变量
| 变量 | 默认值 | 描述 |
|---|
ROON_HOST | 192.168.1.100 | Roon Core的IP地址 |
ROON_PORT | 9100 | Roon Core的WebSocket端口 |
查找Roon Core端口:在Roon,去 设置>常规 并查找显示在Core名称下的HTTP端口。默认值为9100,但可能有所不同。
首次设置
- 在配置了MCP服务器的情况下启动Claude Desktop
- 在Roon,去 设置>扩展
- 找到 Roon MCP for Claude 然后单击 启用
- 扩展程序将记住其授权,以便将来重新启动
可用工具
区域和状态
| 工具 | 参数 | 说明 |
|---|
list_zones | -- | 列出当前播放状态的所有区域 |
now_playing | zone? | 获取一个区域(或所有比赛区域)的当前曲目信息 |
get_queue | zone | 获取某个区域的播放队列 |
播放控制
| 工具 | 参数 | 说明 |
|---|
play | zone | 开始播放 |
pause | zone | 暂停播放 |
play_pause | zone | 切换播放/暂停 |
stop | zone | 停止播放并释放音频设备 |
next_track | zone | 跳到下一首曲目 |
previous_track | zone | 转到上一曲目 |
seek | zone, seconds, relative? | 寻求定位(绝对或相对) |
shuffle | zone, enabled | 启用或禁用随机播放 |
loop | zone, mode | 设置循环模式(loop, loop_one, disabled, next) |
体积
| 工具 | 参数 | 说明 |
|---|
change_volume | zone, value, how? | 更改音量(absolute, relative, relative_step) |
mute | zone, mute | 静音或取消静音 |
get_volume | zone | 获取当前音量和静音状态 |
搜索和播放
| 工具 | 参数 | 说明 |
|---|
search | query, zone? | 搜索库(返回艺术家、专辑、曲目、播放列表) |
play_artist | artist, zone | 搜索并播放艺术家 |
play_album | album, zone | 搜索并播放相册 |
play_playlist | playlist, zone | 搜索并播放播放列表 |
play_track | track, zone | 搜索并播放特定曲目 |
add_to_queue | query, zone, category? | 搜索并添加到队列 |
用法示例
配置后,您可以向Claude询问以下问题:
- _“有哪些可用区域?”_
- _“现在在玩什么?”_
- _“乔尼·米切尔在客厅玩蓝色”_
- _“在卧室播放迈克尔·杰克逊的专辑《Bad》”_
- _“跳到下一首曲目”_
- _“把厨房里的音量调低一点”_
- _“将波西米亚狂想曲加入队列”_
- _“启用随机播放模式”_
- _“寻找迈尔斯·戴维斯”_
建筑
src/
index.ts # Entry point, MCP server setup
roon-connection.ts # Roon connection management, zone cache
tools/
zone.ts # list_zones, now_playing, get_queue
playback.ts # play, pause, stop, seek, shuffle, loop
volume.ts # change_volume, mute, get_volume
browse.ts # search, play_artist/album/playlist/track, add_to_queue
types/
node-roon-api.d.ts # Type declarations for node-roon-api
node-roon-api-transport.d.ts # Type declarations for node-roon-api-transport
node-roon-api-browse.d.ts # Type declarations for node-roon-api-browse
node-roon-api-status.d.ts # Type declarations for node-roon-api-status
发展
# Build
npm run build
# Run directly
npm start
# Test interactively with MCP Inspector
npx @modelcontextprotocol/inspector node build/index.js
故障排除
“未连接到Roon”
- 验证
ROON_HOST 和 ROON_PORT 指向您的Roon Core - 检查Roon>设置>扩展中是否启用了扩展
每次重新启动后都需要重新启用扩展
- 配对令牌存储在
roon-mcp/config.json。在第一次授权后,它应该在重新启动时持续存在。如果仍需要重新启用,请检查 config.json 文件在第一次配对后存在于项目根目录中。
搜索发现曲目/专辑的版本错误
- 在查询中包含艺术家姓名,以便更好地匹配,例如。 _“肮脏的戴安娜·迈克尔·杰克逊”_ 而不是仅仅 _“肮脏的戴安娜”_
搜索后播放未开始
- 检查Roon Core日志是否有错误
- 确保该区域可用,且未被其他控制器使用
许可证
麻省理工学院