devices-mcp
Beta home IoT stack for Sandra's fleet: MCP tools for agents, a web dashboard for humans, and an optional Windows desktop installer that bundles both. LAN devices (Tapo cameras/plugs, Philips Hue, Ring, Nest via Home Assistant, Shelly, USB cams, Netatmo, Vienna presets) are configured in config.yaml — not shipped as secrets.
Not production-hardened. Expect rough edges, slow cold starts (~2 min for full PyInstaller sidecars), and API changes between releases.
Table of contents
Three delivery legs
Use one backend on port 10717 at a time. If you already run the stack via NSSM or just serve, open the dashboard in a browser — do not start a second backend from the desktop app.
Details: docs/ARCHITECTURE.md · Desktop: docs/DESKTOP.md
Features
- Cameras: Tapo/ONVIF, USB webcam/microscope (OpenCV), streaming hooks (quality varies by device/driver).
- Energy: Tapo P115 plugs (P110 fallback, LAN sweep + rename + breaker-reset); Wiener Netze smart meter planned (portal/API, T-1 15-min values).
- Lighting: Philips Hue (incl. HomeAware on supported bridges, CLIP v2, group/scene management), Tapo lighting.
- Climate: Midea PortaSplit family, mock-first until winter hardware (full UI/API against simulation).
- Health: manual entry live (weight/BP/glucose/workouts + trends); Withings OAuth planned (scale + BPM Connect, one integration); FTMS BLE later.
- Safety: Netatmo smoke + CO alarms planned (kitchen/living room/bedroom + flue CO) via raw API extension; Nest Protect standalone (no stable API exists).
- Security / sensors: Ring (doorbell + alarm + WebRTC live view + two-way intercom), Nest Protect (via Home Assistant or direct OAuth2), Shelly, Netatmo, Open-Meteo (Vienna default).
- Chat: SOTA chat with localStorage persistence, 5 personalities, skill preprompt, NDJSON streaming, export/clear — LLM provider/model selector in Settings.
- Dashboard: Status table with device health, per-domain pages (cameras, energy, lighting, weather, robots …).
- MCP: 29 portmanteau tools (camera, energy, lighting, ring, nest, weather, security, health, climate, …) on FastMCP 3.4 with tool annotations.
- Fleet priority:
GET /api/fleet/priority— home-safety incidents for Fritz urgent dispatch (kitchen temp, CO, smoke, Ring).
Not included: guaranteed uptime SLA, cloud hosting, plug-and-play without config.yaml, or a single 12 MB exe (full desktop bundle is ~247 MB with embedded Python sidecars).
Quick install
Windows desktop (leg 3): GitHub Releases → Devices MCP_*_x64-setup.exe (single NSIS installer — that's all you need).
MCP bundle (leg 1): Releases → devices-mcp-*.mcpb → Claude Desktop. Latest .mcpb on the Releases page.
Developers (leg 1+2): see INSTALL.md.
git clone https://github.com/sandraschi/devices-mcp
cd devices-mcp
uv sync
.\web-sota\start.ps1
# http://127.0.0.1:10717/app/
Build & Test (NSIS installer)
The desktop installer bundles TWO sidecars (backend + camera helper) into a single Devices MCP_*_x64-setup.exe (~247 MB).
just build-native # Full pipeline: frontend → PyInstaller → Rust → NSIS
just cua-nsis-test # Install → CUA test → screenshot → uninstall
The CUA smoke test (scripts/cua-smoke.py) verifies:
- Silent install succeeds
- Backend health responds 200 on port 10717
- Window renders at correct size
- Diagnostics endpoint reports all systems
- Clean uninstall
See CUA-NSIS Smoke Testing — fleet standard.
Prerequisites: Rust toolchain, MSVC Build Tools, Tauri CLI 2.x.
Documentation
LLM index: llms.txt · full: llms-full.txt
Ports
Requirements
- OS: Windows 10/11 x64 for desktop installer; dev backend also runs on Linux/macOS with reduced hardware support.
- Config:
config.yamlwith your LAN IPs and credentials (seeconfig.example.yaml,home_preset: viennatemplate). - Network: Devices on reachable LAN; mDNS/LAN broadcast for Tapo discovery optional.
License
MIT — see LICENSE.