开始前你需要
- 已经接上其中一套 MCP(两套的区别看这篇)。还没接的话,这篇当参考读也可以。
- 想跟着验证的话,准备一个能问「列出我的房间」的 AI 助手。
先说清楚:官方那 34 个列不出名字
Sonos 的技术博客只写了「34 carefully designed tools」(34 个精心设计的工具),没有给出任何一个工具名。官方帮助页列的是一段功能范围,不是工具清单。而且官方明说:工具名、说明和参数会随时变化,不应当成稳定 API,工具表才是最终依据。
我们试着从公开渠道拿真名,结果如下,你可以自己复核:
- 直接对
https://mcp.ws.sonos.com/mcp发tools/list,未鉴权时返回401,错误串是access_denied / Invalid Token。 - 它的资源元数据只暴露两个 scope:
playback-control-all和partner-content:read,没有工具表。 - Sonos 的开发者文档站(
docs.sonos.com)里没有 MCP 一节。
所以:那 34 个的真名,唯一可靠来源是登录 Sonos 账号后从运行时读出来。谁在文章里「列出」了它们,要么是猜的,要么是抄别人猜的。我们这边不发这种表。
官方文档写明的八类能力
这是官方帮助页明确列出的范围,可以逐条核对:
- 发现设备与分组
- 从已连接的音乐服务播放
- 按设备或分组调音量、静音
- 播放 / 暂停 / 跳过 / 定位
- 分组与搬移音频
- Sonos 收藏夹与播放列表
- 随机与循环
- 线路输入,以及家庭影院的夜间模式与语音增强
这八类分别对应我们哪个工具
| 官方写明的能力 | 我们的工具 |
|---|---|
| 发现设备与分组 | list_rooms |
| 从已连接的服务播放 | play_music · search_music |
| 按设备或分组调音量、静音 | set_volume · adjust_volume · set_mute |
| 播放 / 暂停 / 跳过 / 定位 | toggle_play_pause · next_track · previous_track · seek |
| 分组与搬移音频 | group_rooms · ungroup_room · move_music |
| 收藏夹与播放列表 | list_favorites · list_playlists |
| 随机与循环 | set_play_mode |
| 线路输入 / 夜间模式 / 语音增强 | switch_source · set_home_theater |
也就是说:按官方自己写出来的范围,八类我们都有对应工具。我们不宣称「能力一样多」——官方那 34 个里可能还有更细的动作,但我们没法核实,所以不做判断。
我们的 27 个工具,逐条
英文端点 https://relay.zonefoundry.dev/mcp 提供的完整名单:
| 用途 | 工具 | 做什么 |
|---|---|---|
| 看状态 | list_rooms |
列出家里所有 Sonos 房间与当前分组 |
now_playing |
某房间正在放什么、播放状态与音量 | |
list_favorites |
列出 Sonos 收藏夹 | |
list_playlists |
列出 Sonos 播放列表 | |
play_history |
最近向 ZoneFoundry 发出的请求(原话、时间、渠道、成功与否);在 App 或 Sonos App 里手动播的不在其中 | |
taste_profile |
这个家的收听画像:常听艺人、类型、房间、时段、语言习惯,加上请求统计 | |
list_reminders |
列出还没播的定时提醒 | |
| 播放 | play_music |
搜歌或艺人并开始播放。单词查询默认播 10 首,「歌名 艺人」默认 1 首,最多 25 首 |
search_music |
只搜不播,返回候选曲目(名称、艺人、专辑、时长) | |
toggle_play_pause |
在播就暂停,暂停就继续 | |
next_track · previous_track |
下一首 / 上一首 | |
seek |
跳到当前曲目的第几秒 | |
set_play_mode |
随机开或关;循环关、循环整个队列、循环当前曲 | |
| 音量 | set_volume |
把某个房间的音量设成 0–70 |
adjust_volume |
在当前音量上加减(−30 到 +30),不用先知道现在多大 | |
set_mute |
静音或取消静音一个房间,播放继续 | |
| 房间与分组 | group_rooms |
把一个或多个房间并到主房间上,一起播同一个源 |
ungroup_room |
把一个房间从它所在的分组里拿出来 | |
move_music |
把正在播的音乐从一个房间搬到另一个:原房间停,新房间接着播 | |
| 设备与播报 | switch_source |
在音乐、电视音频、线路输入之间切换 |
set_home_theater |
家庭影院回音壁的夜间模式与语音增强,只改你传的那几项 | |
announce |
在某个房间用 TTS 播一段话,音乐暂停、播完自动恢复。最长 300 字,两次之间至少 8 秒 | |
| 提醒 | set_reminder |
定一个一次性语音提醒:按本地时间 HH:MM,或 N 分钟后 |
cancel_reminder |
取消一个还没播的提醒 | |
| 随口说 | ask_zonefoundry |
把用户的一句话原样交给 ZoneFoundry 助手去解析和执行 |
undo_last |
撤销最近一次音量或分组改动(10 分钟内,每次改动只能撤一次) |
中文版多出来的 3 个
中文端点 …/mcp/zh 一共 30 个工具 = 上面 27 个 + 这 3 个。它们都是幂等的,比反复用 toggle_play_pause 稳:
pause—— 只暂停。已经暂停的房间保持暂停,不会被翻成播放。resume—— 只继续。已经在播的保持不变。pause_all—— 一次暂停全屋所有房间,不用逐个房间调。
英文端点保持 27 个不动,是为了不影响已经在用的客户端和目录收录——多出来的动作,中文那边的模型更需要。
我们有、官方文档没提到的
先讲清楚这条的边界:官方没公布工具表,所以「官方文档没提到」不等于「官方一定没有」。下面这些在我们的工具表里是确定存在的;在官方那边,只能说官方帮助页列举功能范围时没有提到。
now_playing—— 查某个房间正在放什么。官方列的是控制类动作,没有明确写「读当前曲目」。announce—— TTS 播报并在播完恢复音乐。官方列的是播放与设备控制,没提语音播报。set_reminder/list_reminders/cancel_reminder—— 定时语音提醒。官方功能范围里没有这一类。play_history与taste_profile—— 请求记录与收听画像。官方列的是控制类动作,没有讲述数据。ask_zonefoundry—— 把整句话交给我们自己的助手解析,适合处理工具表覆盖不到的说法。undo_last—— 撤销刚才那次音量或分组改动。官方功能范围里没有撤销。- 中文工具名与中文说明本身 —— 对中文模型来说,工具描述读得懂才选得准。
反过来,官方有一件事在文档里写了、我们的工具表里没有对应项:一个账号通过同一界面管理它的所有 Sonos 系统。我们的 27 个工具全部以房间名为入口,没有单独的家庭切换工具。如果你家里有两套独立的 Sonos 系统要分别控,这一点值得先确认。
自己验一遍
不用信这张表,直接问:跟接上的 AI 说「列出我的房间」。回你真实的 Sonos 房间名,就说明工具调用通了。想看得更细,可以让它「把你能用的工具列出来」——大多数客户端能读到运行时工具表,那才是你实际拿到的那一份。
如果你接的是官方 27mcp,这一步同样有用——你能亲眼看到那 34 个到底叫什么,比读任何二手文章都准。
常见问题
官方那 34 个工具叫什么名字?
Sonos 没有公布。官方技术博客只写了「34 carefully designed tools」,帮助页只列功能范围,并明说工具名、说明和参数会随时变化、不应当成稳定 API。名字只能在连上之后用 tools/list 从运行时读出来。
你们 27 个比官方 34 个少,是不是能力更弱?
工具个数不等于能力多少。我们的工具是按动作合并过的,例如 set_volume 与 adjust_volume 分开、分组和移动音乐各自一个工具。按 Sonos 官方帮助页写明的功能范围逐项对下来,八类能力我们都有对应工具。
中文版为什么多 3 个工具?
中文端点多了 pause、resume、pause_all。这三个是幂等的:pause 只暂停,不会把已经暂停的房间变成播放。英文端点保持原样,以免影响已经在用的客户端和目录收录。
我怎么确认自己接上的是哪一套工具?
让 AI「列出我的房间」。接的是我们的服务器就会回你真实的 Sonos 房间名,并且能做播报、提醒这类官方文档没提到的动作;接的是官方 27mcp 就只有官方那 34 个工具能做的事。
工具名以后会变吗?
官方明说会随时变。我们这边中文端点专有的 pause、resume、pause_all 是为了不牵动已有客户端才另开的,主工具集保持稳定;但按 MCP 的惯例,客户端还是应该以运行时读到的工具表为准。