MCP

FrankenSonos MCP:让 AI 代理在自己局域网里驱动 Sonos 音箱

想让终端、HTTP API 或会说 MCP 的 AI 代理驱动你已有的 Sonos 音箱时,FrankenSonos 用单个 memory-safe Rust 二进制同时提供三种入口;但项目处于 pre-release,需要从源码构建,且守护进程必须跑在与音箱同一局域网的机器上,跨网访问还需 Tailscale tailnet。

官方来源 · FrankenSonos

安装

git clone https://github.com/Dicklesworthstone/frankensonos
cd frankensonos
cargo build --release

适合谁

你已经拥有 Sonos 音箱,想把整屋音响交给终端、HTTP API 或会说 MCP 的 AI 代理来驱动:FrankenSonos 是官方描述为 memory-safe(内存安全)的 Rust 控制器与守护进程,一个二进制即可运行整屋设备。三种入口各对应一类读者:想敲命令的用 fsonos CLI;想做集成的用带 OpenAPI 文档的 HTTP API;想让 AI 代劳的用 MCP 服务。偏好命令行与脚本化操作的家庭自动化用户会特别顺手,它只服务你已拥有的音箱,不涉及新硬件采购。

使用前提先摆出来:项目处于 pre-release 阶段,尚无可直接下载的正式二进制,第一次使用要从源码构建(Rust 工具链版本由 rust-toolchain.toml 固定);守护进程必须运行在与音箱同一局域网(LAN)的机器上,想从任意位置访问,这台机器还要加入你的 Tailscale tailnet。期待一条命令安装、开箱即用的用户,要等正式 release。这两条前提决定了它更像自托管基础设施,而非即装即用的应用;如果都能接受,可以继续往下走第一次尝试。

不适合或需观望:没有 Sonos 音箱、不愿安装 Rust 工具链、或拿不出一台常驻同 LAN 的机器,这套前提就难以满足。对其他品牌音箱是否可用,证据未说明,不要假设。

3 分钟完成第一次尝试

推荐主路径是官方给出的源码构建加首次配置,再把代理指向守护进程。之所以不走下载:CI 虽然每次推送到 main 都会产出 Apple Silicon 与 x86_64 Linux 构建产物,但它们随流水线过期,官方也明确正式下载要从 0.1.0 开始。整个过程不需要在音箱上装任何东西。

前提:一台与音箱同 LAN 的机器,并已具备 Rust 工具链。

第一步,克隆并构建:

git clone https://github.com/Dicklesworthstone/frankensonos
cd frankensonos
cargo build --release

第二步,在这台机器上执行 fsonos setup,官方称由它接手完成首次配置。

第三步,从任一 tailnet 机器把代理指向守护进程:

claude mcp add --transport http fsonos https://<mac>.<tailnet>.ts.net:8443/mcp

第一次调用建议选最轻的一步:读取 MCP 资源 sonos://zones 查看音箱区域,先验证链路通不通,不急着动设备。成功信号方面,证据未描述具体输出文本,可确认的是端点与资源名均来自官方原文。若要代理执行播放、分组这类动作,注意它们会作用于真实设备,证据未给出撤销路径,不要当作可撤销操作;确认点放在动作前:看清代理将调用什么、作用到哪个区域,再放行。只读首试与真实控制分开练,是最省心的节奏。

使用案例

案例一:让代理盘点全屋音箱。场景:代理已通过上述端点连上守护进程,你想在出门前快速确认哪些房间在放音乐。尝试:读取 MCP 资源 sonos://zones。可期待的结果:拿到音箱区域信息,具体字段与格式证据未给出,以实际返回为准;不在同一网络时,也可在任意 tailnet 机器上让代理完成同样的读取,对常在外的用户更实用;想长期使用,也可把这个读取动作当作每天的例行检查。

案例二:不经过代理,直接在终端控制整屋音响。场景:就在运行守护进程的机器上操作。尝试:使用 fsonos CLI,它全局支持 --json。可期待的结果:输出为 JSON、便于脚本解析,也方便接进你已有的自动化流程;具体子命令清单证据未列出,不逐条编造示例;脚本调 CLI、代理走 MCP,两种方式可以按场景组合。

使用边界

  • 读写性质:控制类调用会真实作用于音箱。证据未提供各 MCP 工具的读写标注、名称与参数,只确认服务带工具以及 sonos://zones、sonos://dj 两个资源。
  • 对音箱本身:官方明确“Nothing is installed on the speakers and nothing about them is changed”,不会在音箱上安装东西、也不改动音箱;但这不等于动作没有副作用,播放控制仍是设备上的真实变更。对音箱之外的本地文件与数据是否读写,证据同样未说明。
  • 客户端与入口:官方只给出 claude 这一条代理接入命令,MCP 传输支持 streamable HTTP 或 stdio;其他客户端如何接入证据未说明。
  • 网络与部署:同 LAN 是硬前提;跨网访问依赖 tailnet,端点形如 https://<mac>.<tailnet>.ts.net:8443/mcp,地址中的占位符要换成你自己的 tailnet 域名。认证与凭证要求证据未说明。
  • 版本状态:pre-release,无正式 release 下载,CI 产物随流水线过期,正式版将从 0.1.0 开始,升级路径证据未说明。
  • 尚未确认:MCP 工具名与参数、鉴权机制、读取资源是否触发设备动作、撤销机制。这些未知不表示没有风险,首次让代理自主操作前,先把动作限定在读取类,再逐步放开。