Skip to main content
Glama
Schimmilab
by Schimmilab
README.md
# somneo-mcp-server

MCP-Server für den **Philips Somneo HF3671** (Wake-up Light): Wecker per Ansage lesen, ändern, schalten, anlegen und löschen. Dazu die Raumsensoren (nur lesen). Einschlaflicht, Lampe, Radio und Display sind nicht enthalten. Er spricht direkt die lokale HTTPS-API des Geräts, ohne App und ohne Cloud.

## Werkzeuge

| Tool | Wirkung |
|---|---|
| `somneo_raumklima` | Schlafzimmer-Sensoren: Temperatur, Luftfeuchte, Licht (lux), Lärm (dB), aktuell + Mittel. ⚠️ Feuchte wich am 05.10. ~15 Punkte vom Shelly H&T ab |
| `somneo_wecker_liste` | alle belegten Wecker (Slot, Uhrzeit, Tage, an/aus, Licht, Ton) |
| `somneo_wecker_setzen` | Uhrzeit, Tage (`Mo-Fr`, `Sa,So`, `täglich` …), an/aus und Einstellungen eines Weckers ändern: Helligkeit 1–25, Lichtdauer 1–60 min, Lichttyp 0–3, Tonquelle (Weckton/Radio/aus), Klang 0–10, Lautstärke 1–25. Ungültige Werte werden vor dem Schreiben abgewiesen. |
| `somneo_wecker_schalten` | Wecker dauerhaft ein/aus |
| `somneo_wecker_anlegen` | neuen Wecker im ersten freien Slot (Standard wie Mac-App: Hell. 20, 30 min, Weckton 1, Lautst. 12) |
| `somneo_wecker_loeschen` | Wecker löschen, Slot wird frei (zurückgelesen) |

Jeder Schreibzugriff sendet nur die geänderten Felder, liest den Slot zurück und prüft jedes Feld (Muster aus der Mac-App *Somneo-Menü*).

## Bewusst ohne Pause-Funktion

Für Urlaub werden die Wecker per Ansage aus- und danach wieder eingeschaltet. Es gibt kein automatisches Wiedereinschalten (Entscheidung 05.10.2026), denn kein anderes System soll in den Somneo schreiben.

## Betrieb

```
uv sync
uv run pytest            # 40 Tests, darunter Muss-rot-Fälle (Fake-Gerät für Anlegen/Löschen)
claude mcp add somneo -s user -- uv run --directory <pfad> somneo-mcp
```

Umgebung (optional): `SOMNEO_HOST` (Standard `wakeuplight.fritz.box`).

Gerät: TLS höchstens 1.2, Cipher `AES128-SHA`, selbstsigniertes Zertifikat. Die erste Anfrage braucht ~2 s, danach ~0,1 s.

## Docker

```
docker run -i --rm ghcr.io/schimmilab/somneo-mcp-server:latest
# anderer Host:  docker run -i --rm -e SOMNEO_HOST=192.168.0.232 ghcr.io/schimmilab/somneo-mcp-server:latest
```

Releases: Tag `v*` → Tests → Image bauen → MCP-Smoke **gegen das gebaute Image** → Push nach GHCR → GitHub-Release.

TDQS

A3.9/5.0

Scored across 6 tools

Disambiguation4/5

Each alarm tool maps to a distinct CRUD action (list, create, update, delete) plus an on/off toggle, and raumklima is a separate sensor domain. The only slight overlap is somneo_wecker_schalten (on/off) versus somneo_wecker_setzen, which can also set the 'an' flag, but the descriptions clarify the intended split.

Naming Consistency4/5

Names follow a predictable somneo_<resource>_<action> pattern with German verbs (schalten, liste, setzen, anlegen, loeschen) for the alarm resource. somneo_raumklima deviates by being a bare resource noun with no action verb, a minor inconsistency.

Tool Count5/5

Six tools is well-scoped for a single-device controller: full alarm lifecycle plus a sensor read. Every tool earns its place with no redundancy or bloat.

Completeness5/5

The alarm surface covers the full lifecycle (list, create, update, delete, enable/disable), and room climate provides the environmental read. No obvious dead ends or missing operations for the stated device purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues