MCP

FrankenSonos MCP: AI 에이전트가 자기 LAN에서 Sonos 스피커를 제어하다

이미 소유한 Sonos 스피커를 터미널, HTTP API 또는 MCP를 말하는 AI 에이전트가 움직이게 하고 싶을 때 FrankenSonos는 메모리 안전 Rust 바이너리 하나로 세 가지 입구를 함께 제공한다. 다만 프로젝트는 pre-release라 소스 빌드가 필요하고, 데몬은 스피커와 같은 LAN의 머신에서 돌아가야 하며, 어디서나 접근하려면 Tailscale tailnet이 추가로 필요하다.

Official source · FrankenSonos

Install

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 툴체인.

1단계, 복제하고 빌드:

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

2단계, 그 머신에서 fsonos setup을 실행한다. 공식 설명으로 이후의 초기 설정을 도구가 알아서 마무리한다.

3단계, 아무 tailnet 머신에서나 에이전트를 데몬으로 향하게 한다:

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

첫 호출은 가장 가벼운 한 걸음을 권한다: MCP 리소스 sonos://zones를 읽어 스피커 구역을 확인하고, 기기를 움직이기 전에 연결이 통하는지 먼저 검증한다. 성공 신호에 대해 증거는 구체적 출력 텍스트를 서술하지 않았고, 확인되는 것은 엔드포인트와 리소스 이름이 모두 공식 원문에서 왔다는 점이다. 에이전트에게 제어 성격의 동작을 시키려면 그 동작이 실제 기기에 작용함을 주의하라. 증거는 되돌리기 경로를 제시하지 않으므로 되돌릴 수 있는 조작으로 취급하지 말 것. 확인 지점은 동작 전에 둔다: 에이전트가 무엇을 호출하고 어느 구역에 작용할지 확인한 뒤 허락하라. 읽기 전용 첫 시도와 실제 제어를 나눠 연습하는 게 가장 마음 편한 리듬이다.

사용 사례

사례 1: 에이전트에게 집 전체 스피커를 점검시킨다. 장면: 에이전트가 위 엔드포인트로 데몬에 연결된 상태에서, 외출 전에 어떤 방에서 음악이 나오는지 빠르게 확인하고 싶다. 시도: MCP 리소스 sonos://zones를 읽는다. 기대 가능한 결과: 스피커 구역 정보를 얻는다. 구체적 필드와 형식은 증거에 없으므로 실제 응답을 기준으로 삼는다. 같은 네트워크에 있지 않을 때도 아무 tailnet 머신에서 같은 읽기를 에이전트에게 시킬 수 있어 자주 밖에 있는 사용자에게 더 실용적이다. 장기 사용이라면 이 읽기를 매일의 정기 점검으로 삼아도 좋다.

사례 2: 에이전트를 거치지 않고 터미널에서 직접 집 안 오디오를 제어한다. 장면: 데몬을 돌리는 머신 바로 앞에서 작업 중이다. 시도: 어디서나 --json을 지원하는 fsonos CLI를 쓴다. 기대 가능한 결과: 출력이 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 도구 이름과 매개변수, 인증 메커니즘, 리소스 읽기가 기기 동작을 유발하는지, 되돌리기 장치. 미지가 남아 있다고 위험이 없는 것은 아니다. 처음 에이전트에게 자율 조작을 맡기기 전에는 동작을 읽기류로 한정하고 단계적으로 풀어라.