開始前你需要
- 已經接上其中一套 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 |
家庭影院 soundbar 的夜間模式與語音增強,只改你傳的那幾項 | |
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 的慣例,用戶端還是應該以執行時讀到的工具表為準。