OmniButler
Connects to a Home Assistant instance using its API (HA_URL, HA_TOKEN) to control and read state of devices, translating Home Assistant domains into the unified capability model for use with MCP tools.
Provides a local miIO driver that translates Xiaomi MiOT-Spec services into a unified capability model (onoff, target_temperature, etc.), enabling control of Xiaomi smart home devices through the MCP server.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OmniButlerset the living room AC to 24 degrees and turn on the air purifier"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Tiybai OmniButler
An open smart-device bridge that lets AI agents - Muse, OpenClaw, Hermes, any MCP client - control the smart devices in your life, and run personal scenes for you, deterministically and locally.
中文简介:Tiybai OmniButler(万能管家)是一个开源智能设备桥。它把小米、涂鸦、美的等 各家互不相通的智能设备,统一成一个能力模型,再通过 MCP 开放给 AI Agent 使用; AI 负责听懂你的意图、编排场景,真正执行的是本地的确定性规则引擎。高风险设备 (门锁、车库门、燃气)默认不交给 AI 直接控制,必须经人工确认。完整中文说明见 README.zh-CN.md。
Not an official product of Xiaomi, Tuya, Midea, Home Assistant, Anthropic or any other vendor mentioned. All trademarks belong to their owners.
Why
Smart devices in a typical home speak a dozen incompatible protocols and live in a dozen vendor clouds. Meanwhile AI agents speak MCP. OmniButler sits in the middle:
One capability model - drivers translate MiOT-Spec services, Tuya data points, Matter clusters and Home Assistant domains into one vocabulary:
onoff,target_temperature,pm25,position, ...One agent interface - a dependency-free MCP server (stdio, JSON-RPC, spec 2024-11-05) with eight tools. Any MCP client can use it.
Scenes that run without the AI - YAML rules (trigger + conditions + actions) executed by a local deterministic engine. The AI authors and tunes scenes; it is never in the real-time control loop.
Safety guardrails in code - high-risk actions are parked in a confirmation queue for a human. Every control call lands in a local, append-only audit log.
Related MCP server: iotforge
Architecture
agents (MCP) -> mcp_server -> scene engine -> core (model/registry/
events/audit/manager)
|
drivers: mock | homeassistant | miio | tuya
|
device-data (per-model facts)See docs/architecture.md for the five layers and the five device access modes.
Quick start (5 minutes, no hardware needed)
Requires Python 3.11+.
git clone https://github.com/zr9959/tiybai-omnibutler.git
cd tiybai-omnibutler
pip install -e .
tob devices # a virtual home: 2 ACs, purifier, light, curtain, scale, garage door
tob devices --state # ... with live state
tob set living_ac onoff true
tob set living_ac target_temperature 24
tob scenes # list + validate the bundled scene pack
tob simulate # fire "arrive home": watch the scene chain execute
tob simulate --event leave # fire "leave home": everything turns off
tob simulate --event pm25 # fire a PM2.5 spike: the purifier goes turbo
tob simulate --event garage # fire "arrive at garage gate": the door action is QUEUED for confirmationConnect a real home instead of the mock one:
export HA_URL=http://192.168.1.10:8123
export HA_TOKEN=<your Home Assistant long-lived token>
tob --driver homeassistant devicesLet an AI agent drive it (MCP)
tob mcp # serves MCP on stdioPoint any MCP client at that command. Example client configuration:
{
"mcpServers": {
"omnibutler": { "command": "tob", "args": ["mcp"] }
}
}Tools: list_devices, get_device_state, set_device_property,
call_device_action, list_scenes, enable_scene,
get_pending_confirmations, confirm_action.
High-risk devices (the garage door in the demo home) refuse direct tool
calls by design. Try it: ask the agent to open the garage door, then run a
scene that requests it (examples/scenes/garage-arrival.yaml) and watch the
action land in get_pending_confirmations instead of executing.
Scenes
Scenes are small YAML files - see examples/scenes/:
Scene | Trigger | What happens |
| geofence enter | Living-room AC on at 26 C, purifier on auto |
| geofence exit | Everything off, so nothing is left running |
| 22:30 | Bedroom sleep temperature, curtain closes, purifier silent |
| PM2.5 state change | Purifier to turbo while PM2.5 > 75 |
| geofence (garage gate) | Door action queued for human confirmation (high risk); light runs |
Project status & roadmap
v0.2 (this release) - Xiaomi miIO and Tuya local drivers implemented behind
clean-room protocol specs (docs/specs/), tested end-to-end against
in-process fake devices; not yet verified on real hardware - per-model
property maps may need adjustment for your unit. device-data grew to 10
model profiles. HA driver and scene engine hardened (retries, error
classes, time-window and state conditions).
v0.2 - first real local drivers behind clean-room specs; device-data contributions open
v0.3 - real-hardware verification round; phone-gateway mode (wearables / health read-only pipelines)
v0.4 - Matter controller, Zigbee via external Zigbee2MQTT over MQTT
Later - terminal mode for open smart glasses; vendor-cloud fallbacks
Contributing a device
Device support grows one verified model at a time:
Add a data file in
device-data/(facts only, withsourceandprovenance- seedevice-data/README.md).If a driver change is needed, follow CONTRIBUTING.md: real-device verification is required, and anything informed by a reference implementation goes through the clean-room process.
Original implementations only. We learn protocols and facts from the ecosystem; we do not port other projects' code.
Security
Risk levels, key handling, allowlists, audit and remote-access rules are in docs/security.md. Short version: keys stay on your machine, nothing is exposed to the public internet (remote access only via Cloudflare Access or WireGuard), and high-risk devices need a human.
Licence
Apache-2.0. See LICENSE and NOTICE. The licence audit for everything this project depends on or references is in docs/license-audit.md.
This server cannot be deployed
Maintenance
Related MCP Connectors
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
Security gateway for AI agents: policy, approval, and audited execution, no secrets shared.
AI agent infrastructure for discovery, authorization, execution, identity, and signed receipts.
Give your AI hands. Identity, credential vault, and API gateway for autonomous agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables registration, monitoring, and control of IoT devices via AI agents, with local storage and no cloud API key required.9MIT
- AlicenseBqualityDmaintenanceEnables AI assistants to discover and control IoT devices on local networks and via Bluetooth LE.71MIT
- AlicenseNot gradedqualityAmaintenanceGives AI agents scoped, least-privilege access to Home Assistant, with per-token permissions, auditing, and 131 tools for managing smart home devices.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to read Home Assistant entity states, call any service, and optionally apply named scene presets from a catalog using plain-English descriptions.364 npm1MIT