About SoundTouchMCP
SoundTouchMCP is an MCP server in the Blockchain category: a Model Context Protocol (MCP) server for controlling obsolete Bose SoundTouch devices (SoundTouch 20, Wave SoundTouch), including device discovery via Zeroconf and subnet scan, through the SoundTouch WebServices API.
Install
git clone https://github.com/sasky80/SoundTouchMCPThis server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.
Tools (11)
DiscoverDevicesDiscover devices via Zeroconf and update the store
Parameters not published.
DiscoverDevicesOnSubnetDiscover devices by scanning a subnet on port 8090
Parameters not published.
EnterBluetoothPairingEnter Bluetooth pairing mode
Parameters not published.
GetDeviceInfoGet device type, ID, and IP
Parameters not published.
ListDevicesList all configured devices
Parameters not published.
ListPresetsList all presets (1–6) for a device
Parameters not published.
PlayPresetPlay a preset by name or number
Parameters not published.
PowerControlTurn a device on or off
Parameters not published.
SetVolumeSet volume to a specific level (0–100)
Parameters not published.
VolumeDownDecrease volume by one step
Parameters not published.
VolumeUpIncrease volume by one step
Parameters not published.
Ask AI
Ask AI about SoundTouchMCP
Powered by Claude · Grounded in docs
Security checks
- ✓README presentThe repository ships documentation.
5 checks have not been run yet.
README
SoundTouch MCP Server
An MCP server for controlling Bose SoundTouch speakers via the SoundTouch WebServices API.
Features
- Power on / off (standby)
- Volume up, down, and set to a specific level
- List and play presets by name or number
- Bluetooth pairing mode
- Device info and listing
- Network discovery — Zeroconf (
_soundtouch._tcp.local.) and subnet scan
Prerequisites
- .NET 8.0 SDK
- One or more Bose SoundTouch devices on your network
Quick Start
git clone <repository-url>
cd SoundTouchMCP
cp appsettings.example.json appsettings.json
dotnet run
Devices are discovered automatically at runtime — use the DiscoverDevices or DiscoverDevicesOnSubnet tool from your MCP client.
Configuration
appsettings.json
Controls logging and discovery tuning. Copy appsettings.example.json to get started:
{
"SoundTouch": {
"Discovery": {
"ProbeTimeoutMs": 3000,
"Zeroconf": {
"ScanTimeMs": 5000,
"SocketRetries": 4,
"SocketRetryDelayMs": 1000,
"DiscoveryPasses": 2,
"PassDelayMs": 700
}
}
}
}
| Setting | Purpose |
|---|---|
Discovery:ProbeTimeoutMs |
HTTP probe timeout for Zeroconf and subnet discovery |
Discovery:Zeroconf:* |
Tune Zeroconf resilience on unstable networks |
Device store
Devices are persisted separately from appsettings.json:
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/SoundTouchMCP/devices.json |
| Windows | %APPDATA%/SoundTouchMCP/devices.json |
| Linux | $XDG_CONFIG_HOME/SoundTouchMCP/devices.json |
Override with the SOUNDTOUCH_DEVICES_PATH environment variable.
If the store doesn't exist yet, it bootstraps from SoundTouch:Devices in appsettings.json (one-time).
Config file resolution
The server finds appsettings.json using the first match:
--config /path/to/appsettings.json(CLI argument)SOUNDTOUCH_APPSETTINGS_PATHenvironment variableSOUNDTOUCH_CONFIG_DIRenvironment variable →<dir>/appsettings.json- Next to the server executable
- Server content root (fallback)
MCP Client Setup
VS Code (GitHub Copilot)
Add to .vscode/mcp.json:
{
"servers": {
"soundtouch": {
"command": "/absolute/path/to/SoundTouchMCP/publish/SoundTouchMCP",
"args": [],
"env": {
"SOUNDTOUCH_CONFIG_DIR": "/absolute/path/to/your/config/folder"
}
}
}
}
Or run via dotnet directly:
{
"servers": {
"soundtouch": {
"command": "dotnet",
"args": ["run", "--project", "/absolute/path/to/SoundTouchMCP/SoundTouchMCP.csproj"],
"env": {
"SOUNDTOUCH_CONFIG_DIR": "/absolute/path/to/your/config/folder"
}
}
}
}
Then: Command Palette → MCP: List Servers → start soundtouch.
Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"soundtouch": {
"command": "dotnet",
"args": ["run", "--project", "/path/to/SoundTouchMCP"],
"env": {}
}
}
}
Publishing
# macOS (Apple Silicon)
dotnet publish ./SoundTouchMCP.csproj -c Release -r osx-arm64 --self-contained false -o ./publish
# Windows (x64)
dotnet publish ./SoundTouchMCP.csproj -c Release -r win-x64 --self-contained false -o ./publish-win
Other runtimes: osx-x64, linux-x64.
MCP Tools
| Tool | Description | Key Parameters |
|---|---|---|
DiscoverDevices |
Discover devices via Zeroconf and update the store | removeNotFound, forceRefresh |
DiscoverDevicesOnSubnet |
Discover devices by scanning a subnet on port 8090 | subnet (CIDR, e.g. 192.168.1.0/24; auto-detected if omitted), removeNotFound, forceRefresh |
PowerControl |
Turn a device on or off | deviceName, powerOn |
VolumeUp |
Increase volume by one step | deviceName |
VolumeDown |
Decrease volume by one step | deviceName |
SetVolume |
Set volume to a specific level (0–100) | deviceName, level |
ListPresets |
List all presets (1–6) for a device | deviceName |
PlayPreset |
Play a preset by name or number | deviceName, presetIdentifier |
EnterBluetoothPairing |
Enter Bluetooth pairing mode | deviceName |
GetDeviceInfo |
Get device type, ID, and IP | deviceName |
ListDevices |
List all configured devices | — |
Tip: Use
DiscoverDevices(forceRefresh: true)to fully reconcile the store with currently reachable devices (removes stale entries).Subnet scan safety: prefix length must be between
/16and/30.
License
MIT
Contributing
Contributions welcome — feel free to open a Pull Request.
README copy captured when this server was indexed; it may lag the repository. The original is authoritative.