← 所有教程

使用教學

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 家庭影院 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 的慣例,用戶端還是應該以執行時讀到的工具表為準。