Sonos MCP Server
Sonos MCP 서버
이 프로젝트는 네트워크에서 Sonos 기기를 제어하고 상호 작용할 수 있는 Sonos MCP(Model Context Protocol) 서버입니다. 기기 검색, 재생 제어, 기기 상태 조회, 대기열 관리 등 다양한 기능을 제공합니다.
특징
네트워크에서 Sonos 장치 검색
장치의 재생 상태를 검색하고 제어합니다.
재생 대기열 관리
MCP 도구로 기능 노출
Related MCP server: YARR Media Stack MCP Server
요구 사항
파이썬 3.7 이상
Python 프로젝트 관리를 위한
uv
설치
저장소를 복제합니다.
지엑스피1
uv사용하여 필요한 종속성을 설치합니다.uv sync
용법
서버 실행
스튜디오
stdio를 사용하여 서버를 실행합니다.
uv run mcp run server.pySupergateway를 사용한 SSE
supergateway 도구를 사용하여 SSE로 서버를 실행합니다.
npx -y supergateway --port 8000 --stdio "uv run mcp run server.py"또는 저장소에 제공된 편의 스크립트를 사용할 수 있습니다.
./npx-serve-sse-8000.sh개발
MCP Inspector를 사용하여 "개발" 모드로 서버를 실행하려면:
uv run mcp dev server.py이 명령은 테스트 및 디버깅 목적으로 MCP 검사기를 호스팅합니다.
개발 모드에서 SSE로 서버를 실행하려면 supergateway에 SSE 명령을 사용하고 두 번째 터미널 창에서 다음을 실행합니다.
npx @modelcontextprotocol/inspector사용 가능한 MCP 도구
제공된 MCP 도구를 사용하여 Sonos 기기와 상호 작용하세요. 사용 가능한 도구는 다음과 같습니다.
get_all_device_states: 검색된 모든 Sonos 기기의 상태 정보를 검색합니다.now_playing: 모든 Sonos 기기에서 현재 재생 중인 트랙에 대한 정보를 검색합니다.get_device_state: 특정 Sonos 기기의 상태 정보를 검색합니다.pause,stop,play: Sonos 기기에서 재생을 제어합니다.next,previous: Sonos 기기에서 트랙을 건너뜁니다.get_queue,get_queue_length: Sonos 기기의 재생 대기열을 관리합니다.mode: Sonos 기기의 재생 모드를 가져오거나 설정합니다.partymode: 현재 Sonos 기기에서 파티 모드를 활성화합니다.speaker_info: Sonos 기기의 스피커 정보를 검색합니다.get_current_track_info: Sonos 기기의 현재 트랙 정보를 검색합니다.volume: Sonos 장치의 볼륨을 가져오거나 설정합니다.skip,play_index,remove_index_from_queue: Sonos 기기의 대기열에 있는 트랙을 관리합니다.
특허
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 라이선스 파일을 참조하세요.
Available Tools
18 toolsget_all_device_statesB
Retrieve the state information for all discovered Sonos devices.
Returns: List[Dict[str, Any]]: A list of dictionaries containing state information for each device.
Inputs: no named parameters.
get_current_track_infoA
Retrieve current track information for a Sonos device.
Args: name: The name of the device to retrieve track information from. If None, uses the current device.
Returns: Dict[str, str]: A dictionary containing the current track's artist, title, album, playlist position, and duration.
Inputs: name.
get_device_stateA
Retrieve the state information for a specific Sonos device.
Args: name: The name of the device to retrieve state information for. If None, uses the current device.
Returns: Dict[str, Any]: A dictionary containing the device's name, volume, state, and current track information.
Inputs: name.
get_queueA
Retrieve the queue of tracks for a Sonos device.
Args: name: The name of the device to retrieve the queue from. If None, uses the current device.
Returns: List[Dict[str, Any]]: A list of dictionaries containing track information in the queue.
Inputs: name.
get_queue_lengthB
Retrieve the queue length for a Sonos device.
Args: name: The name of the device to retrieve the queue length from. If None, uses the current device.
Returns: int: The length of the queue.
Inputs: name.
modeA
Get or set the play mode of a Sonos device.
Args: mode: The play mode to set (e.g., "NORMAL", "SHUFFLE_NOREPEAT", "SHUFFLE", "REPEAT_ALL"). If None, returns the current mode. name: The name of the device to set the mode for. If None, uses the current device.
Returns: str: The current play mode after the operation.
Inputs: mode, name.
nextA
Skip to the next track on a Sonos device.
Args: name: The name of the device to skip the track on. If None, uses the current device.
Returns: Dict[str, Any]: The device's state after skipping to the next track, including name, volume, state, and track info.
Inputs: name.
now_playingB
Retrieve information about currently playing tracks on all Sonos devices.
Returns: List[Dict[str, str]]: A list of dictionaries containing the name, title, artist, and album of currently playing tracks.
Inputs: no named parameters.
partymodeA
Enable party mode on the current Sonos device.
Returns: Dict[str, Any]: The device's state after enabling party mode, including name, volume, state, and track info.
Inputs: no named parameters.
pauseB
Pause playback on a Sonos device.
Args: name: The name of the device to pause. If None, uses the current device.
Returns: Dict[str, Any]: The device's state after pausing, including name, volume, state, and track info.
Inputs: name.
playA
Start playback on a Sonos device.
Args: name: The name of the device to start playback on. If None, uses the current device.
Returns: Dict[str, Any]: The device's state after starting playback, including name, volume, state, and track info.
Inputs: name.
play_indexA
Play a specific track from the queue on a Sonos device.
Args: index: The index of the track to play. name: The name of the device to play the track on. If None, uses the current device.
Returns: Dict[str, Any]: The device's state after playing the specified track, including name, volume, state, and track info.
Raises: ValueError: If the index is out of the queue's range.
Inputs: index (required), name.
previousA
Skip to the previous track on a Sonos device.
Args: name: The name of the device to skip the track on. If None, uses the current device.
Returns: Dict[str, Any]: The device's state after skipping to the previous track, including name, volume, state, and track info.
Inputs: name.
remove_index_from_queueA
Remove a specific track from the queue on a Sonos device.
Args: index: The index of the track to remove. name: The name of the device to remove the track from. If None, uses the current device.
Returns: List[Dict[str, Any]]: The updated queue after removing the track.
Raises: ValueError: If the index is out of the queue's range.
Inputs: index (required), name.
skipA
Skip tracks in the queue for a Sonos device.
Args: increment: The number of tracks to skip forward. Defaults to 1. name: The name of the device to skip tracks on. If None, uses the current device.
Returns: Dict[str, Any]: The device's state after skipping tracks, including name, volume, state, and track info.
Raises: ValueError: If the new track position is out of the queue's range.
Inputs: increment, name.
speaker_infoB
Retrieve speaker information for a Sonos device.
Args: name: The name of the device to retrieve speaker information from. If None, uses the current device.
Returns: Dict[str, str]: A dictionary containing speaker information.
Inputs: name.
stopA
Stop playback on a Sonos device.
Args: name: The name of the device to stop. If None, uses the current device.
Returns: Dict[str, Any]: The device's state after stopping, including name, volume, state, and track info.
Inputs: name.
volumeA
Get or set the volume of a Sonos device.
Args: volume: The volume level to set (0-99). If None, returns current volume. name: The name of the device to control. If None, uses the current device.
Returns: int: The current volume level after the operation.
Raises: ValueError: If volume is not between 0 and 99. ValueError: If the specified device is not found.
Inputs: name, volume.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 18 tools
Most tools have distinct purposes, but some overlap exists. For example, 'skip' and 'next' both advance tracks, though 'skip' offers more flexibility with an increment parameter. 'get_current_track_info' and 'now_playing' both retrieve track info, but 'now_playing' covers all devices while 'get_current_track_info' is per-device. Descriptions help clarify these differences, but minor confusion could occur.
Tool names follow a consistent snake_case pattern throughout, with clear verb_noun structures like 'get_device_state', 'play_index', and 'remove_index_from_queue'. However, there are minor deviations: 'mode' and 'volume' are single-word nouns without verbs, and 'partymode' is a compound word instead of snake_case, slightly breaking the pattern.
With 18 tools, the count is slightly high but reasonable for a Sonos control server, covering device states, playback control, queue management, and settings. It might feel a bit heavy, but each tool serves a specific function without obvious redundancy, making it well-scoped for the domain.
The tool set provides comprehensive coverage for Sonos device management. It includes CRUD-like operations for queue management (get, remove), full playback control (play, pause, stop, next, previous, skip), device state retrieval, volume and mode settings, and specialized functions like party mode. No significant gaps are apparent for core audio control workflows.
Maintenance
Related MCP Connectors
Sonos MCP server: control your Sonos speakers from any MCP client. Play songs, artists and playlists, set volume, group rooms, move music to another room, switch to TV, spoken announcements and reminders. 27 tools, English and Chinese. Works through the official Sonos cloud, so there is no home bridge to install; sign in with OAuth. Requires the free ZoneFoundry iOS app.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for Yoto: manage cards, tracks, icons and family devices from any MCP client.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal E…
Related MCP Servers
- AlicenseBqualityCmaintenanceA server that enables interaction with Home Assistant devices and automations through the Model Context Protocol, allowing users to monitor device states, control devices, trigger automations, and list entities.448MIT
- AlicenseNot gradedqualityCmaintenanceA comprehensive Model Context Protocol server that bridges LLMs with self-hosted media services, enabling natural language control of TV shows, movies, downloads, and notifications while maintaining traditional API access.17AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server for seamless integration with peripheral devices connected to your computer. Control, monitor, and manage hardware devices through a unified API.5MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables interaction with HomeyPro home automation systems, providing paginated access to devices, zones, and flows with comprehensive management capabilities.9-