Token导航 LogoToken导航TokenDH.com
Sonos Ts MCP logo
音视频stdio官方级别未说明来源级核验

Sonos Ts MCP

MCP Server

sonos-agent-cli

一款基于Model Context Protocol (MCP)的Sonos音频设备控制服务器,通过UPnP/SOAP协议实现本地网络内的设备控制、播放管理、区域分组和音乐库浏览等功能,适用于智能家居自动化和AI助手集成。

工具数

0

提示词数

0

GitHub Stars

11

资源数

0
智能家居TypeScriptClaudeClaude DesktopClaudeCursorWindsurfCline

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

Tommertom

提供方

Tommertom

最后核验

2026/5/17 20:20

运行时

Node.js

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

npx sonos-agent-cli "Play jazz in the living room"

详细介绍

Sonos TypeScript MCP服务器

您的全面Sonos控制伴侣由模型上下文协议(MCP)提供支持。此智能服务器使用UPnP/SOAP协议通过您的本地网络提供对Sonos音频设备的无缝访问。无论您是控制播放、管理区域、浏览音乐库还是设置闹钟,此MCP服务器都可以直接向您的AI助手提供完整的设备控制,实现智能家居自动化和更好的音频体验。

专为编码代理和AI驱动的家庭音频自动化工作流程而设计。 该服务器使AI助手能够构建智能多房间音频体验、音乐库管理、区域分组、队列管理以及与智能家居平台的集成。

数据来源于与Sonos设备的实时UPnP/SOAP通信,以确保准确性和完整性。

📊 功能状态:第四阶段完成!使用UPnP GENA协议实现实时事件订阅,用于播放、卷、队列和拓扑更改。看 第四阶段完成 了解详情。

📚 文档

入门指南

Sonos TypeScript MCP服务器可以与任何支持标准I/O(stdio)作为传输介质的MCP客户端一起工作。以下是一些流行工具的具体说明:

基本配置

克劳德桌面版

要配置Claude Desktop以使用Sonos MCP服务器,请编辑 claude_desktop_config.json 文件。您可以从Claude>Settings菜单打开或创建此文件。选择“开发人员”选项卡,然后单击“编辑配置”。

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

克莱恩

要配置Cline以使用Sonos MCP服务器,请编辑 cline_mcp_settings.json 文件。您可以通过单击Cline窗格顶部的MCP服务器图标,然后单击配置MCP服务器按钮来打开或创建此文件。

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

光标

要配置Cursor以使用Sonos MCP服务器,请编辑以下文件之一 .cursor/mcp.json (仅配置特定项目)或文件 ~/.cursor/mcp.json (使MCP服务器在所有项目中可用):

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

Visual Studio代码副本

要配置单个项目,请编辑 .vscode/mcp.json 工作区中的文件:

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

要使服务器在您打开的每个项目中都可用,请编辑您的用户设置:

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

Windsurf编辑器

要配置Windsurf编辑器,请编辑文件 ~/.codeium/windsurf/mcp_config.json:

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

使用代理进行测试

您可以使用内置的CLI代理快速测试MCP服务器,该代理使用自然语言与Sonos系统交互:

# 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

所需的环境变量:

  • OPENAI_API_KEY:适用于OpenAI模型(gpt-4o、gpt-4o-mini等)
  • GOOGLE_GENERATIVE_AI_API_KEY:适用于Gemini型号
  • SONOS_AGENT_MODEL:设置默认模型(可选)

构建行为:

CLI在运行之前会自动构建MCP服务器,以确保使用最新代码。要跳过构建(例如,在快速测试期间),请使用 --skip-build:

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

此代理提供了一种简单的方法来验证MCP服务器是否正常工作,并且可以与您的Sonos设备通信。

特性

此MCP服务器提供对Sonos音响系统的全面控制:

  • AI驱动的代理工具:通过自然语言控制 sonos_agent 工具(需要AI API密钥)✨ 新
  • 拓扑持久性:设备拓扑自动保存到磁盘并在启动时加载
  • 智能设备分辨率:按友好名称(例如“厨房”)而不是UUID控制设备
  • 自动发现:启动时和每5分钟发现一次设备
  • 设备发现:基于SSDP的Sonos设备手动发现
  • 回放控制:播放、暂停、停止、下一个、上一个
  • 音量控制:获取和设置音量级别,静音/取消静音
  • 交通信息:获取当前播放状态和曲目信息
  • 区域拓扑:查询区域组和扬声器配置
  • 队列管理:完全队列控制(添加、删除、重新排序、保存、播放)
  • DIDL精简版支持:完成曲目、专辑和容器的元数据处理
  • 播放属性:洗牌、重复和交叉火力控制
  • 组管理:加入和取消加入设备以创建多房间组
  • 音乐库浏览:浏览艺术家、专辑、曲目、流派和播放列表
  • 库搜索:在音乐库中进行模糊搜索
  • 音频/均衡器控制:低音、高音、响度、夜间模式、对话增强
  • 睡眠定时器:持续时间后自动停止播放
  • 报警管理:创建、更新和删除警报
  • 快照/还原:保存并恢复完整的设备状态
  • 聚会模式:一次加入所有设备
  • 事件订阅:状态更改的实时通知✨ 新
  • MCP提示:将AI代理指令作为可发现的提示公开✨ 新
  • 纯TypeScript:无需外部Sonos库即可从头开始构建
  • MCP兼容:与任何兼容MCP的客户端集成

计划功能(第5+阶段)

该项目正在积极扩展,以匹配Python SoCo库的全面功能集:

  • 音乐服务集成(Spotify、Apple Music)
  • 🟢 高级组管理(立体声对、家庭影院)
  • 🟢 音频分析和诊断
  • 🟢 MCP事件工具集成

请参阅 第四阶段完成 了解最新功能。

可用工具

AI代理工具✨ 新

工具说明
sonos_agent人工智能驱动的自然语言控制。给出“在客厅里演奏爵士乐”这样的指令,代理就会自主处理设备发现、工具选择和执行。仅在以下情况下可用 OPENAI_API_KEYGOOGLE_GENERATIVE_AI_API_KEY 已配置。看 代理工具文档 了解详情。

发现工具

工具说明
sonos_discover使用SSDP多播在网络上发现Sonos设备
sonos_add_device按IP地址手动添加Sonos设备(在SSDP发现失败时有用)
sonos_list_devices列出所有发现/注册的设备

播放控制工具

工具说明
sonos_play开始播放
sonos_pause暂停播放
sonos_stop停止播放
sonos_next跳到下一首曲目
sonos_previous跳至上一曲目

音量控制工具

工具说明
sonos_set_volume设置音量(0-100)
sonos_get_volume获取当前音量
sonos_set_mute静音或取消静音

队列管理工具

工具说明
sonos_get_queue获取当前播放队列
sonos_add_to_queue向队列添加URI
sonos_remove_from_queue从队列中删除曲目
sonos_clear_queue从队列中删除所有曲目
sonos_play_from_queue从特定队列位置播放
sonos_save_queue将队列另存为Sonos播放列表

播放属性工具

工具说明
sonos_set_shuffle启用或禁用随机播放模式
sonos_set_repeat设置重复模式(关闭、全部、一)
sonos_set_crossfade启用或禁用交叉火力
sonos_get_playback_state获取混洗、重复、交叉拍摄和播放状态

组管理工具

工具说明
sonos_join_group将设备加入另一个设备的组
sonos_unjoin从组中删除设备
sonos_party_mode一次加入所有设备

音乐库工具

工具说明
sonos_browse_artists浏览音乐库中的所有艺术家
sonos_browse_albums浏览音乐库中的所有相册
sonos_browse_tracks浏览音乐库中的所有曲目
sonos_browse_genres浏览音乐库中的所有流派
sonos_browse_playlists浏览Sonos播放列表
sonos_get_favorite_radio_stations从Sonos收藏夹中获取喜爱的广播电台
sonos_search_library搜索音乐库
sonos_browse_item浏览子类别(例如,艺术家的相册)

音乐服务工具

工具说明
sonos_list_music_services列出可用的音乐服务(Sonos Radio、TuneIn、Spotify等)
sonos_browse_music_service浏览音乐服务中的内容(类别、电台、播放列表)
sonos_search_music_service在音乐服务中搜索内容
sonos_play_music_service_item播放音乐服务(广播电台、曲目、专辑)中的项目
sonos_get_music_service_item_uri获取音乐服务项目的流媒体URI

音频/均衡器控制工具

工具说明
sonos_set_bass设置低音级别(-10到10)
sonos_set_treble设置高音音量(-10到10)
sonos_set_loudness启用/禁用响度补偿
sonos_get_eq获取所有EQ设置
sonos_set_night_mode启用/禁用夜间模式(家庭影院)
sonos_set_dialog_mode启用/禁用对话增强功能(家庭影院)

睡眠定时器工具

工具说明
sonos_set_sleep_timer设置自动播放停止定时器
sonos_get_sleep_timer获取剩余计时器
sonos_cancel_sleep_timer取消睡眠定时器

报警管理工具

工具说明
sonos_list_alarms列出所有警报
sonos_create_alarm创建新警报
sonos_update_alarm更新现有警报
sonos_delete_alarm删除警报

状态管理工具

工具说明
sonos_snapshot拍摄设备状态快照
sonos_restore_snapshot从快照还原

活动订阅工具

工具说明
sonos_subscribe_events订阅实时设备事件(AVTransport、渲染控制、队列、ZoneGroupTopology、闹钟)
sonos_unsubscribe_events取消订阅特定订阅
sonos_unsubscribe_all取消订阅所有设备订阅
sonos_list_subscriptions列出活动事件订阅

信息工具

工具说明
sonos_get_transport_info获取播放状态
sonos_get_position_info获取当前曲目详细信息
sonos_get_zone_groups获取区域拓扑

开发和安装

npm install
npm run build

测试发现

安装后,您可以测试是否可以发现Sonos设备:

npm run test:discovery

这将执行SSDP多播搜索,并显示在您的网络上找到的任何Sonos设备。

测试喜爱的电台

您可以测试喜爱的广播电台功能:

npm run test:radio

这将查询您的Sonos设备以查找已保存的电台并显示它们。如果没有找到电台,它将提供如何使用Sonos应用程序添加一些电台的说明。

测试代理工具

您可以测试AI驱动的代理工具(需要AI API密钥):

# Set up your API key first
export OPENAI_API_KEY=sk-...
# or
export GOOGLE_GENERATIVE_AI_API_KEY=...

# Run the test
npm run test:agent-tool

这将验证代理工具是否配置正确,是否可以执行自然语言指令。请参阅 代理工具文档 了解更多详情。

用法

作为MCP服务器

服务器支持两种传输模式:

标准模式(默认)

标准模式是运行MCP服务器的标准方式,通过标准输入/输出进行通信。这是大多数MCP客户端使用的模式。

添加到MCP客户端配置中:

{
  "mcpServers": {
    "sonos": {
      "command": "node",
      "args": ["path/to/sonos-ts-mcp/dist/index.js"]
    }
  }
}

或者直接运行:

node dist/index.js

您还可以使用便利脚本:

npm run start:stdio
# or
tsx scripts/start-mcp-stdio.ts

CLI代理

该项目包括一个由Mastra支持的CLI代理,允许您使用自然语言控制Sonos系统。

# Run with default model (gpt-4o-mini)
npx sonos-agent-cli "Play jazz in the living room"

# Run with a specific model
npx sonos-agent-cli "Play jazz in the living room" --model gpt-4o

# Run with Gemini 3
npx sonos-agent-cli "Play jazz in the living room" --model gemini-3-pro-preview

环境变量:

  • OPENAI_API_KEY:OpenAI模型需要(默认)
  • GOOGLE_GENERATIVE_AI_API_KEY:Gemini型号需要
  • SONOS_AGENT_MODEL:设置默认模型(可选。, gemini-3-pro-preview)

遥测注意事项:在此实现中,Mastra框架的内置遥测功能已被禁用。通过设置抑制遥测警告 globalThis.___MASTRA_TELEMETRY___ = true 在Mastra初始化之前。这是在CLI代理中自动设置的。

SSE模式(HTTP服务器)

SSE(服务器发送事件)模式将MCP服务器作为HTTP服务器运行,这对于基于web的客户端或远程访问非常有用。

设置 MCP_TRANSPORT 环境变量 sse:

MCP_TRANSPORT=sse node dist/index.js

或者使用自定义端口(默认值为3000):

MCP_TRANSPORT=sse MCP_PORT=8080 node dist/index.js

您还可以使用便利脚本:

npm run start:sse
# or
tsx scripts/start-mcp-sse.ts

使用自定义端口:

MCP_PORT=8080 npm run start:sse

服务器将在以下位置启动HTTP端点 http://localhost:3000/sse 客户端可以连接到的端口(或您配置的端口)。

发展

npm run dev            # Run with tsx (hot reload)
npm run build          # Compile TypeScript
npm run typecheck      # Type checking only
npm run lint           # ESLint
npm run format         # Prettier
npm test               # Run tests
npm run test:discovery # Test Sonos device discovery
npm run test:phase1    # Test Phase 1 APIs (Queue, Playback)
npm run test:phase2    # Test Phase 2 APIs (Groups, Library)
npm run test:phase3    # Test Phase 3 APIs (Audio, Alarms)
npm run test:phase4    # Test Phase 4 APIs (Events)
npm run test:all-phases # Run all phase tests

测试

全面的API测试脚本可用于所有实现的功能:

# Run all tests
npm run test:all-phases

# Or run individual phase tests
npm run test:phase1  # Queue, DIDL, Playback Properties
npm run test:phase2  # Groups & Music Library Browsing
npm run test:phase3  # Audio, Alarms, Snapshots
npm run test:phase4  # Event Subscriptions

# Run Phase 2 tests in mock mode (no physical devices required)
npm run test:phase2 -- --mock

# Run integration tests (uses AI validation)
npm test

备注:第2阶段测试支持模拟模式,用于在没有物理Sonos设备的情况下进行测试。使用 --mock 标志或集合 MOCK_DEVICES=true 环境变量。

AI驱动的集成测试:集成测试套件使用Gemini 2.5 Flash AI智能验证代理输出,而不是脆弱的字符串匹配。这提供了对测试结果的语义理解,并适应不同的输出格式。需要 GOOGLE_GENERATIVE_AI_API_KEY 环境变量。

请参阅 API测试指南AI驱动测试指南 有关测试套件的详细文档。

建筑

src/
├── discovery/         # SSDP device discovery
│   ├── ssdp-client.ts
│   └── device-registry.ts
├── didl/             # DIDL-Lite metadata handling
│   ├── didl-object.ts
│   ├── didl-resource.ts
│   ├── didl-item.ts
│   ├── didl-container.ts
│   ├── didl-serializer.ts
│   ├── didl-parser.ts
│   └── index.ts
├── soap/             # SOAP/UPnP transport layer
│   ├── client.ts
│   ├── request-builder.ts
│   └── response-parser.ts
├── services/         # Sonos service wrappers
│   ├── base-service.ts
│   ├── av-transport.ts        # Playback, queue, sleep timer
│   ├── rendering-control.ts   # Volume, EQ, audio enhancements
│   ├── zone-topology.ts       # Groups, party mode
│   ├── content-directory.ts   # Music library browsing
│   ├── alarm-clock.ts         # ✨ NEW: Alarm management
│   └── snapshot.ts            # ✨ NEW: State snapshot/restore
├── mcp/             # MCP server implementation
│   └── server.ts
└── types/           # TypeScript definitions
    ├── sonos.ts
    └── queue.ts

协议细节

发现(SSDP)

  • 向发送UDP多播 239.255.255.250:1900
  • 搜索 urn:schemas-upnp-org:device:ZonePlayer:1
  • 解析响应标头以提取设备位置

关于发现的说明:SSDP多播发现可能无法在所有网络环境中工作,原因如下:

  • Windows防火墙阻止UDP端口1900
  • 网络交换机未正确转发多播流量
  • VPN对组播路由的干扰
  • 企业网络政策

如果自动发现失败,请使用 sonos_add_device 通过IP地址手动注册设备的工具。服务器将在注册设备之前验证连接。

手动设备注册

当SSDP发现不起作用时,您可以手动添加设备:

// Using the MCP tool
sonos_add_device({
  ip: "192.168.1.100",
  port: 1400,  // optional, defaults to 1400
  name: "Kitchen"  // optional, defaults to "Sonos at {ip}"
})

服务器将在将设备添加到注册表之前测试其连接。

控制(SOAP/UPnP)

  • HTTP POST到 http://{ip}:1400/...
  • 基于XML的SOAP信封
  • 支持所有标准Sonos UPnP服务

文档

贡献

欢迎投稿!该项目正在扩展,以提供全面的Sonos控制。请参阅 路线图 对于计划中的功能。

贡献特别有价值的领域:

  • 实施其他UPnP服务
  • 添加DIDL Lite对象模型
  • 活动订阅系统
  • 测试覆盖范围扩展
  • 文档改进

许可证

麻省理工学院

目录标签

目录标签

智能家居TypeScriptClaude本地部署音频控制多房间音频AI集成UPnP协议

支持客户端

Claude DesktopClaudeCursorWindsurfCline

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

api-key

运行时(runtime,运行环境)

Node.js

来源包(packageName,安装包名)

sonos-agent-cli

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdioapi-key部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP