Skip to main content

Myro:Home Helper MCP server

Lets an AI assistant (Claude Desktop, Claude Code, ChatGPT desktop, anything that speaks MCP) read and control an HAI/Leviton Omni controller through Myro:Home Helper, using the Helper's HTTP API. The assistant sees typed tools with descriptions instead of guessing URL shapes.

What you need

  • Myro:Home Helper 4.06 or later on a Mac on your network (4.07 or later for the read tools: list_objects, get_object, helper_log).
  • An API key for your controller: Helper → API tab → Generate.
  • uv on the machine running the assistant (brew install uv or the one-line installer). uvx fetches and runs this server on demand and keeps it updated.

Configure

Claude Desktop (claude_desktop_config.json) or any client that takes the standard MCP config:

{
  "mcpServers": {
    "myrohome-helper": {
      "command": "uvx",
      "args": ["myrohome-helper-mcp"],
      "env": {
        "MHH_URL": "http://192.168.1.76:9393",
        "MHH_API_KEY": "your-api-key"
      }
    }
  }
}

Claude Code:

claude mcp add myrohome-helper -e MHH_URL=http://192.168.1.76:9393 -e MHH_API_KEY=your-api-key -- uvx myrohome-helper-mcp

The controller ID is fetched from the Helper automatically. Set MHH_CONTROLLER_ID only if you want to pin it.

Tools

Read:

Tool What it returns
helper_info Helper version and identity, and which controller the key is for
controller_status Name, model, firmware, connection, power, battery, phone line, energy cost, troubles
controller_property(name) One controller property
list_objects(type?) Every object with decoded state; filter by Zone, Unit, Flag, Output, Thermostat, Auxiliary Sensor, …
get_object(type, number) One object
helper_log(lines) The Helper's recent log lines
ethernet_quality The controller connection's health record
list_logged_sensors Which sensors record history, with the type and number
sensor_history(type, number, points) Logged readings for one sensor or thermostat

Write (each changes the physical home; tool descriptions tell the assistant to confirm first):

Tool Effect
set_unit(number, value) 0 off, 1 or 100 on, 2–99 dimmer level
set_flag(number, value) Flag to 0–255
set_output(number, on) Output relay on or off
set_energy_cost(level) low / medium / high / critical
send_notification(message) Push to the Myro:Home apps
speak(message) Speak on the Mac
log_message(message) Write to the Helper log
sync_now Re-sync from the controller

Scripts (save, enable and reload need a key with remote script management enabled; listing, reading and validating do not):

Tool What it does
list_scripts Every script: name, id, enabled, schedule
get_script(identifier) One script's full source
scripting_reference(compact) The live scripting API, with your real device names
validate_script(code) Syntax and warnings, without running it
save_script(name, code, script_id, enabled) Create or replace; disabled by default
set_script_enabled(identifier, enabled) Enabling runs the script immediately
reload_scripts Re-runs every enabled script

Audio, Lutron and displays:

Tool What it does
list_audio_sources Sources and their cached metadata
audio_source_metadata(source, refresh) What one source is playing
set_audio_zone(zone, power, volume, mute, source) Control a zone
list_lutron Bridges, devices and Picos
set_lutron_level(bridge_id, level, ...) Set a Lutron device 0-100
activate_lutron_scene(bridge_id, scene_href) Activate a scene
press_lutron_button(bridge_id, integration_id, component) Press a keypad or Pico button
list_displays Vestaboards and LaMetric clocks
`send_to_vestaboard(text lines
send_to_lametric(text, ...) Show a notification on a LaMetric
sync_clock Set the controller's clock from this Mac

Security (all four need an API key with arm/disarm enabled; arm and disarm also need a panel code stored locally):

Tool Effect
arm(mode, area) day, night, away, vacation, day_instant, night_delayed
disarm(area) Disarms the system
bypass_zone(zone, bypassed, area) Bypass or restore one zone
restore_all_zones(area) Restore every bypassed zone

arm and disarm stay disabled until the owner stores a panel code on the machine running this server. bypass_zone and restore_all_zones work without one on Helper 4.13 or later, running as the panel's Programmed user; with a stored code they run as that user instead. To store or remove the code:

uvx myrohome-helper-mcp security-code set      # prompts; nothing is echoed
uvx myrohome-helper-mcp security-code delete

The code goes into the operating system credential store (macOS Keychain, Windows Credential Locker, Linux Secret Service) under the controller's identity. It is never placed in the MCP config, an environment variable, or a conversation, and it is read only when a security tool is actually called. Helper validates it against the panel itself.

Security

This server runs on your LAN like every other Myro:Home client and holds one controller's API key. Anyone who can run the assistant with this config can do what the key allows. Keep it on trusted machines. The Helper's HTTP API is plain HTTP on the local network; do not expose port 9393 to the internet.

Developing

uv sync
MHH_URL=http://192.168.1.76:9393 MHH_API_KEY=... uv run myrohome-helper-mcp   # stdio server
uv run mcp dev src/myrohome_helper_mcp/server.py                             # MCP inspector

Releasing

Bump version in pyproject.toml and __init__.py, commit, then tag and push: git tag v0.1.0 && git push origin v0.1.0. The GitLab CI job builds and publishes to PyPI through trusted publishing (one-time setup: PyPI project -> Publishing -> add GitLab publisher MyroControl/myrohome-helper-mcp, environment pypi).

MIT licensed. Myro Control, LLC.

Metadata

Release files for myrohome-helper-mcp 0.3.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for myrohome-helper-mcp 0.3.3
File Size Uploaded Provenance Actions
myrohome_helper_mcp-0.3.3.tar.gz 72.9 kB Without provenance Details for myrohome_helper_mcp-0.3.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for myrohome-helper-mcp 0.3.3
File Interpreter ABI Platform Actions
myrohome_helper_mcp-0.3.3-py3-none-any.whl Python 3 none any Details for myrohome_helper_mcp-0.3.3-py3-none-any.whl

Total release size: 87.2 kB

Release files / myrohome_helper_mcp-0.3.3.tar.gz

Download URL myrohome_helper_mcp-0.3.3.tar.gz
Size 72.9 kB
Tags Source
SHA-256 checksum
How to use checksums
8f3961244e0df05d7204bf00b6c31d24521c12b93b77702523cb3b769135e196
BLAKE2b-256 checksum
How to use checksums
9237a622ba28e7ca87235ac113d3bbb2d635ab7907745abcff9d382de1a555ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / myrohome_helper_mcp-0.3.3-py3-none-any.whl

Download URL myrohome_helper_mcp-0.3.3-py3-none-any.whl
Size 14.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b2b0da91e2e87f1b0bdbd3d3b06a18cedc8d9850757312226c92c6a413a7a15c
BLAKE2b-256 checksum
How to use checksums
0f788a457a90c279a427576aef657260ed9b95fa1eadd927bd8ea4df564f4a7e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for myrohome-helper-mcp 0.3.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page