Skip to main content
Glama
Schimmilab
by Schimmilab

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ü).

Related MCP server: HueMCP

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.

Available Tools

6 tools
somneo_raumklimaSomneo RaumklimaA
Read-only

Raumsensoren des Somneo im Schlafzimmer: Temperatur, Luftfeuchte, Licht (lux), Lärm (dB), jeweils aktuell und als Gerätemittel. ⚠️ Luftfeuchte wich am 05.10. um ~15 Prozentpunkte vom Shelly H&T im selben Raum ab (Temperatur nur 0,7 K) — Feuchte nicht ungeprüft als Raumwert nehmen.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuine behavioral context beyond that: a concrete data-quality caveat that the humidity reading diverged ~15 percentage points from a Shelly H&T in the same room and should not be used unchecked as a room value — valuable, hard-to-infer information.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The sensor list is front-loaded and the caveat is clearly marked with a warning glyph. The phrase describing current value plus device average is slightly dense, but every sentence carries information and nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return format need not be spelled out, and the no-parameter, read-only nature is fully covered by annotations. The description supplies the one thing structured fields cannot: the trustworthiness caveat on the humidity reading, making it essentially complete for this simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The description correctly adds nothing parameter-related, and there is no schema surface for it to compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the specific resource (Somneo room sensors in the bedroom) and enumerates the exact measurements returned (temperature, humidity, lux, dB) plus their scope (current value and device average). An agent can distinguish this read-only climate tool from the somneo_wecker_* alarm-clock siblings by name and content alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: it is clear this is the tool to call for room climate readings, and it cautions against trusting the humidity value unchecked. However, it never explicitly says when to use it versus any alternative (e.g. an external Shelly source) nor states any prerequisite.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

somneo_wecker_anlegenSomneo Wecker AnlegenA

Neuen Wecker im ersten freien Slot anlegen. Nicht angegebene Einstellungen wie in der Mac-App: Helligkeit 20, Lichtdauer 30 min, Lichttyp 0, Weckton 1, Lautstärke 12. Rückgabe: zurückgelesener Zustand.

ParametersJSON Schema
NameRequiredDescriptionDefault
anNo
tageNoMo-Fr
klangNo
uhrzeitYes
lichttypNo
tonquelleNo
helligkeitNo
lichtdauerNo
lautstaerkeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint false, idempotentHint false), and the description usefully adds that unset parameters fall back to documented Mac-app defaults and that the state is read back. This higher-than-default behavior — repeated calls land alarms in successive free slots, which aligns with non-idempotency — is genuinely additive context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, front-loaded with the action and scope, then the defaults. Each clause carries information with no filler, though the default list is dense and could be structured more readably.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the return-value clause is a bonus rather than a necessity, and the default fallbacks fill the biggest gap left by 0% schema coverage. Still, formats for required 'uhrzeit', the 'tage' convention and the tonquelle/an parameters are not addressed, leaving a mutation tool only partly specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden, and it partially meets it by giving defaults for brightness, light duration, light type, tone and volume (helligkeit, lichtdauer, lichttyp, klang, lautstaerke). It leaves the uhrzeit format, tage, tonquelle and an undocumented, so a meaningful portion of the 9 parameters remains ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Neuen Wecker anlegen') and adds scope detail ('im ersten freien Slot') that clarifies it creates rather than modifies an existing alarm. It does not explicitly name the sibling it differs from (somneo_wecker_setzen), so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The create semantics imply when to use it (new alarm rather than editing an existing one), and the 'first free slot' behavior is noted. However, there is no explicit guidance on when to choose this over somneo_wecker_setzen or somneo_wecker_schalten, so usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

somneo_wecker_listeSomneo Wecker ListeA
Read-only

Alle belegten Wecker des Somneo: Slot, Uhrzeit, Wochentage, an/aus, Licht (Helligkeit, Dauer, Typ), Ton.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds the scoping detail that only 'belegten' (configured/occupied) alarms are returned, which is useful, but it says nothing about pagination, ordering, or authorization requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that names the scope and lists the fields with zero wasted words. Well-sized for a no-argument list tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and read-only annotations, the description need not explain return values, and it gives a helpful summary of what is returned. The main omission is any routing guidance versus the sibling write/toggle tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The description adds no parameter meaning because there are none to clarify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the resource ('alle belegten Wecker des Somneo') and enumerates the returned facets (Slot, Uhrzeit, Wochentage, an/aus, Licht, Ton), so an agent can tell this is a read/list operation distinct from the create/set/delete/toggle siblings. It never explicitly names a differentiating sibling or states the verb 'list', keeping it just short of the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent infers this retrieves all configured alarms. There is no explicit when-to-use statement or mention of alternatives such as somneo_wecker_schalten for toggling or somneo_wecker_loeschen for deletion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

somneo_wecker_loeschenSomneo Wecker LoeschenA
DestructiveIdempotent

Einen Wecker löschen (Slot wird freigegeben). Nicht rückgängig zu machen: vorher mit somneo_wecker_liste prüfen und den Wecker nennen. Rückgabe: Zustand vorher und Bestätigung.

ParametersJSON Schema
NameRequiredDescriptionDefault
slotYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds real context beyond them: the action is irreversible ('Nicht rückgängig zu machen'), the slot is freed, a prior verification step is required, and the response contains the prior state plus a confirmation. That extra effect-level detail is genuinely useful for a destructive tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences: what it does, the irreversibility warning with the prerequisite, and the return shape. No filler, and the destructive warning is front-loaded right after the action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the description still summarizes the return, so return-value detail is not a gap. The destructive nature, prerequisite, and side effect are all covered; only the slot's value provenance is left thin, which is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single 'slot' parameter, so the description carries the burden. It only obliquely conveys slot semantics via 'Slot wird freigegeben' and does not state what a valid slot value is or where to obtain it (though the liste reference partially compensates). Baseline-level compensation at best.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Einen Wecker löschen') and even names the side effect (the slot is released). It references the sibling somneo_wecker_liste as a prerequisite rather than as a competing alternative, so sibling differentiation is implied but not fully explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear pre-condition ('vorher mit somneo_wecker_liste prüfen') that tells the agent when and how to prepare before calling. It stops short of stating when *not* to use this tool or naming alternative deletion paths.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

somneo_wecker_schaltenSomneo Wecker SchaltenA
Idempotent

Wecker ein- oder ausschalten, z. B. für Urlaub alle Werktags-Wecker aus und danach wieder an. Ausgeschaltete Wecker bleiben aus, es gibt kein automatisches Wiedereinschalten.

ParametersJSON Schema
NameRequiredDescriptionDefault
anYes
slotsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=true, destructive=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: turned-off alarms stay off and there is no automatic re-activation. That state-persistence detail is exactly the kind of non-obvious behavior an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the core action first, then the example, then the caveat. Every clause earns its place and nothing is padded. Slightly dense (example and caveat run together) but well front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be explained, and annotations cover the safety profile. The description supplies the toggle semantics, a use scenario, and the persistence caveat. The main remaining gap is the meaning/format of the 'slots' array, which is left unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load for both required params. It clarifies that 'an' is the on/off toggle and hints that 'slots' selects which alarms ('alle Werktags-Wecker'), but gives no detail on the slot integer format or identifier meaning. It only partially compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: turning alarms (Wecker) on or off (ein-/ausschalten). This clearly separates it from siblings like somneo_wecker_setzen (set) and somneo_wecker_anlegen (create), since it is a toggle operation. It stops short of explicitly naming those siblings, so it's clear but not fully differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a concrete usage scenario ('für Urlaub alle Werktags-Wecker aus und danach wieder an'), which implies the intended context. However, it never states when to prefer this over somneo_wecker_setzen or other siblings, nor any exclusions or prerequisites. Usage is implied through the example rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

somneo_wecker_setzenSomneo Wecker SetzenA
Idempotent

Einen bestehenden Wecker ändern. Nur angegebene Felder werden geändert. uhrzeit 'HH:MM' · tage z. B. 'Mo-Fr', 'Sa,So', 'täglich' · an True/False · helligkeit 1–25 · lichtdauer 1–60 min (Sonnenaufgang vor der Weckzeit) · lichttyp 0–3 · tonquelle 'Weckton' | 'Radio' | 'aus' · klang 0–10 · lautstaerke 1–25. Rückgabe: vom Gerät zurückgelesener Zustand.

ParametersJSON Schema
NameRequiredDescriptionDefault
anNo
slotYes
tageNo
klangNo
uhrzeitNo
lichttypNo
tonquelleNo
helligkeitNo
lichtdauerNo
lautstaerkeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context the annotations lack: that unspecified fields are left untouched (partial update, consistent with idempotency) and that the device state is read back after the change.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the operation and the partial-update rule, followed by a dense but scannable parameter reference. Every element carries information; only the 'slot' omission and slightly terse list formatting keep it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter mutation tool with an output schema present, the description supplies the encoding details an agent needs (units, ranges, enumerations) plus partial-update and return semantics. It is nearly complete, with the unexplained required 'slot' as the main residual gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the full burden, and it largely does: it documents formats and ranges for uhrzeit ('HH:MM'), tage examples, an (True/False), helligkeit 1-25, lichtdauer 1-60 min, lichttyp 0-3, tonquelle values, klang 0-10 and lautstaerke 1-25. The only gap is the required 'slot' parameter, which is never explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Einen bestehenden Wecker ändern'), and the word 'bestehenden' implicitly distinguishes it from somneo_wecker_anlegen (create) and somneo_wecker_loeschen (delete). An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clarifies that this operates on an existing alarm and that only supplied fields are modified (partial update), which implies when to reach for it. However, it never explicitly names alternatives such as somneo_wecker_schalten for simple toggling or states when-not to use this tool, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.0
    • First observedsomneo_raumklima
    • First observedsomneo_wecker_anlegen
    • First observedsomneo_wecker_liste
    • First observedsomneo_wecker_loeschen
    • First observedsomneo_wecker_schalten
    • First observedsomneo_wecker_setzen

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

Related MCP Connectors

Related MCP Servers