Back to MCP Servers

Sonos Ts

Comprehensive Sonos audio system control through pure TypeScript implementation. Features complete device discovery, multi-room playback management, queue control, music library browsing, alarm management, real-time event subscriptions, and audio EQ settings. Includes 50+ tools …

multimedia-processtypescriptautomation
By Tommertom
124Updated 7 months agoTypeScript

Installation

npx -y sonos-ts-mcp

Configuration

{
  "mcpServers": {
    "sonos-ts-mcp": {
      "command": "npx",
      "args": ["-y", "sonos-ts-mcp"]
    }
  }
}

How to use

  1. Run the installation command above (if needed)
  2. Open your Claude Code settings file (~/.claude/settings.json)
  3. Add the configuration to the mcpServers section
  4. Restart Claude Code to apply changes

Sonos TypeScript MCP Server

Your comprehensive Sonos control companion powered by the Model Context Protocol (MCP). This intelligent server provides seamless access to Sonos audio devices over your local network using UPnP/SOAP protocols. Whether you're controlling playback, managing zones, browsing your music library, or setting up alarms, this MCP server delivers complete device control directly to your AI assistant, enabling smart home automation and better audio experiences.

Specifically designed for coding agents and AI-driven home audio automation workflows. This server enables AI assistants to build intelligent multi-room audio experiences, music library management, zone grouping, queue management, and integration with smart home platforms.

Data is sourced from real-time UPnP/SOAP communication with Sonos devices to ensure accuracy and completeness.

📊 Feature Status: Phase 4 complete! Implements real-time event subscriptions with UPnP GENA protocol for playback, volume, queue, and topology changes. See Phase 4 completion for details.

📚 Documentation

Getting Started

The Sonos TypeScript MCP Server can work with any MCP client that supports standard I/O (stdio) as the transport medium. Here are specific instructions for some popular tools:

Basic Configuration

Claude Desktop

To configure Claude Desktop to use the Sonos MCP server, edit the claude_desktop_config.json file. You can open or create this file from the Claude > Settings menu. Select the Developer tab, then click Edit Config.

{
  "mcpServers": {
    "sonos-ts-mcp": {
      "command": "npx",
      "args": ["-y", "sonos-ts-mcp@latest"]
    }
  }
}

Cline

To configure Cline to use the Sonos MCP server, edit the cline_mcp_settings.json file. You can open or create this file by clicking the MCP Servers icon at the top of the Cline pane, then clicking the Configure MCP Servers button.

{
  "mcpServers": {
    "sonos-ts-mcp": {
      "command": "npx",
      "args": ["-y", "sonos-ts-mcp@latest"],
      "disabled": false
    }
  }
}

Cursor

To configure Cursor to use the Sonos MCP server, edit either the file .cursor/mcp.json (to configure only a specific project) or the file ~/.cursor/mcp.json (to make the MCP server available in all projects):

{
  "mcpServers": {
    "sonos-ts-mcp": {
      "command": "npx",
      "args": ["-y", "sonos-ts-mcp@latest"]
    }
  }
}

Visual Studio Code Copilot

To configure a single project, edit the .vscode/mcp.json file in your workspace:

{
  "servers": {
    "sonos-ts-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "sonos-ts-mcp@latest"]
    }
  }
}

To make the server available in every project you open, edit your user settings:

{
  "mcp": {
    "servers": {
      "sonos-ts-mcp": {
        "type": "stdio",
        "command": "npx",
        "args": ["-y", "sonos-ts-mcp@latest"]
      }
    }
  }
}

Windsurf Editor

To configure Windsurf Editor, edit the file ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "sonos-ts-mcp": {
      "command": "npx",
      "args": ["-y", "sonos-ts-mcp@latest"]
    }
  }
}

Testing with an Agent

You can quickly test the MCP server using the built-in CLI agent, which uses natural language to interact with your Sonos system:

# Run directly with npx (no installation required)
npx sonos-agent-cli "Play jazz in the living room"

# Use a specific AI model
npx sonos-agent-cli "What's playing in the kitchen?" --model gpt-4o

# Use Gemini models
npx sonos-agent-cli "Set volume to 50 in all rooms" --model gemini-3-pro-preview

Required Environment Variables:

  • OPENAI_API_KEY: For OpenAI models (gpt-4o, gpt-4o-mini, etc.)
  • GOOGLE_GENERATIVE_AI_API_KEY: For Gemini models
  • SONOS_AGENT_MODEL: Set a default model (optional)

Build Behavior:

The CLI automatically builds the MCP server before running to ensure the latest code is used. To skip the build (e.g., during rapid testing), use --skip-build:

npx sonos-agent-cli "Play music" --skip-build

This agent provides an easy way to verify that the MCP server is working correctly and can communicate with your Sonos devices.

Features

This MCP server provides comprehensive control of your Sonos audio system:

  • AI-Powered Agent Tool: Natural language control via the sonos_agent tool (requires AI API keys) ✨ NEW
  • Topology Persistence: Device topology automatically saved to disk and loaded on startup
  • Intelligent Device Resolution: Control devices by friendly name (e.g., "Kitchen") instead of UUIDs
  • Automatic Discovery: Discovers devices on startup and every 5 minutes
  • Device Discovery: Manual SSDP-based discovery of Sonos devices
  • Playback Control: Play, pause, stop, next, previous
  • Volume Control: Get and set volume levels, mute/unmute
  • Transport Info: Get current playback state and track information
  • Zone Topology: Query zone groups and speaker configurations
  • Queue Management: Full queue control (add, remove, reorder, save, play)
  • DIDL-Lite Support: Complete metadata handling for tracks, albums, and containers
  • Playback Properties: Shuffle, repeat, and crossfade controls
  • Group Management: Join and unjoin devices to create multi-room groups
  • Music Library Browsing: Browse artists, albums, tracks, genres, and playlists
  • Library Search: Fuzzy search across your music library
  • Audio/EQ Controls: Bass, treble, loudness, night mode, dialog enhancement
  • Sleep Timer: Automatic playback stop after duration
  • Alarm Management: Create, update, and delete alarms
  • Snapshot/Restore: Save and restore complete device state
  • Party Mode: Join all devices at once
  • Event Subscriptions: Real-time notifications for state changes ✨ NEW
  • MCP Prompts: Exposes AI agent instructions as discoverable prompts ✨ NEW
  • Pure TypeScript: Built from scratch without external Sonos libraries
  • MCP Compatible: Integrates with any MCP-compatible client

Planned Features (Phase 5+)

This project is actively expanding to match the comprehensive feature set of the Python SoCo library:

  • Music service integration (Spotify, Apple Music)
  • 🟢 Advanced group management (stereo pairs, home theater)
  • 🟢 Audio analysis and diagnostics
  • 🟢 MCP event tool integration

See the Phase 4 completion for the latest features.

Tools Available

AI Agent Tool ✨ NEW

ToolDescription
sonos_agentAI-powered natural language control. Give instructions like "Play jazz in the living room" and the agent autonomously handles device discovery, tool selection, and execution. Only available when OPENAI_API_KEY or GOOGLE_GENERATIVE_AI_API_KEY is configured. See Agent Tool Documentation for details.

Discovery Tools

ToolDescription
sonos_discoverDiscover Sonos devices on the network using SSDP multicast
sonos_add_deviceManually add a Sonos device by IP address (useful when SSDP discovery fails)
sonos_list_devicesList all discovered/registered devices

Playback Control Tools

ToolDescription
sonos_playStart playback
sonos_pausePause playback
sonos_stopStop playback
sonos_nextSkip to next track
sonos_previousSkip to previous track

Volume Control Tools

ToolDescription
sonos_set_volumeSet volume (0-100)
sonos_get_volumeGet current volume
sonos_set_muteMute or unmute

Queue Management Tools

ToolDescription
sonos_get_queueGet the current playback queue
sonos_add_to_queueAdd a URI to the queue
sonos_remove_from_queueRemove a track from the queue
sonos_clear_queueRemove all tracks from the queue
sonos_play_from_queuePlay from a specific queue position
sonos_save_queueSave the queue as a Sonos playlist

Playback Properties Tools

ToolDescription
sonos_set_shuffleEnable or disable shuffle mode
sonos_set_repeatSet repeat mode (off, all, one)
sonos_set_crossfadeEnable or disable crossfade
sonos_get_playback_stateGet shuffle, repeat, crossfade, and playback state

Group Management Tools

ToolDescription
sonos_join_groupJoin a device to another device's group
sonos_unjoinRemove a device from its group
sonos_party_modeJoin all devices at once

Music Library Tools

ToolDescription
sonos_browse_artistsBrowse all artists in the music library
sonos_browse_albumsBrowse all albums in the music library
sonos_browse_tracksBrowse all tracks in the music library
sonos_browse_genresBrowse all genres in the music library
sonos_browse_playlistsBrowse Sonos playlists
sonos_get_favorite_radio_stationsGet favorite radio stations from Sonos favorites
sonos_search_librarySearch the music library
sonos_browse_itemBrowse subcategories (e.g., albums for an artist)

Music Services Tools

ToolDescription
sonos_list_music_servicesList available music services (Sonos Radio, TuneIn, Spotify, etc.)
sonos_browse_music_serviceBrowse content from a music service (categories, stations, playlists)
sonos_search_music_serviceSearch for content within a music service
sonos_play_music_service_itemPlay an item from a music service (radio station, track, album)
sonos_get_music_service_item_uriGet the streaming URI for a music service item

Audio/EQ Control Tools

ToolDescription
sonos_set_bassSet bass level (-10 to 10)
sonos_set_trebleSet treble level (-10 to 10)
sonos_set_loudnessEnable/disable loudness compensation
sonos_get_eqGet all EQ settings
sonos_set_night_modeEnable/disable night mode (home theater)
sonos_set_dialog_modeEnable/disable dialog enhancement (home theater)

Sleep Timer Tools

ToolDescription
sonos_set_sleep_timerSet automatic playback stop timer
sonos_get_sleep_timerGet remaining timer
sonos_cancel_sleep_timerCancel sleep timer

Alarm Management Tools

ToolDescription
sonos_list_alarmsList all alarms
sonos_create_alarmCreate a new alarm
sonos_update_alarmUpdate an existing alarm
sonos_delete_alarmDelete an alarm

State Management Tools

ToolDescription
sonos_snapshotTake a snapshot of device state
sonos_restore_snapshotRestore from snapshot

Event Subscription Tools

ToolDescription
sonos_subscribe_eventsSubscribe to real-time device events (AVTransport, RenderingControl, Queue, ZoneGroupTopology, AlarmClock)
sonos_unsubscribe_eventsUnsubscribe from a specific subscription
sonos_unsubscribe_allUnsubscribe from all device subscriptions
sonos_list_subscriptionsList active event subscriptions

Information Tools

ToolDescription
sonos_get_transport_infoGet playback state
sonos_get_position_infoGet current track details
sonos_get_zone_groupsGet zone topolo

View source on GitHub