Roon音乐控制协议服务器

一个允许通过自然语言控制Roon音乐播放的MCP服务器,提供搜索、播放、音量控制和区域管理功能。

  • by AzureStackNerd
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 AzureStackNerd/roon-mcp

使用说明

有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,但可能有所不同。

首次设置

  1. 在配置了MCP服务器的情况下启动Claude Desktop
  2. 在Roon,去 设置>扩展
  3. 找到 Roon MCP for Claude 然后单击 启用
  4. 扩展程序将记住其授权,以便将来重新启动

可用工具

区域和状态

工具 参数 说明
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日志是否有错误
  • 确保该区域可用,且未被其他控制器使用

许可证

麻省理工学院