← 所有教程

使用教程

Sonos MCP 工具清单:我们的 27 个,以及官方公布了什么

接上 MCP 之后,AI 手里到底有哪些动作可调?这篇把 ZoneFoundry 的 27 个英文工具和中文版多出的 3 个逐条列全,按用途分组;同时老实说明为什么 Sonos 官方那 34 个列不出名字,以及官方文档写明的八类能力分别由我们哪个工具覆盖。

最后更新:2026-10-28

难度 · 中等 约 7 分钟 MCP · 工具清单

开始前你需要

  • 已经接上其中一套 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 账号后从运行时读出来。谁在文章里「列出」了它们,要么是猜的,要么是抄别人猜的。我们这边不发这种表。

官方文档写明的八类能力

这是官方帮助页明确列出的范围,可以逐条核对:

  1. 发现设备与分组
  2. 从已连接的音乐服务播放
  3. 按设备或分组调音量、静音
  4. 播放 / 暂停 / 跳过 / 定位
  5. 分组与搬移音频
  6. Sonos 收藏夹与播放列表
  7. 随机与循环
  8. 线路输入,以及家庭影院的夜间模式与语音增强

这八类分别对应我们哪个工具

官方写明的能力 我们的工具
发现设备与分组 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 的惯例,客户端还是应该以运行时读到的工具表为准。