Install
$ agentstack add mcp-loryanstrant-esphome-mcp ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
ESPHome MCP
An MCP server for the ESPHome 2026.6+ "Device Builder" dashboard. It lets an MCP client (Claude, etc.) list devices, read/edit/validate device YAML, stream logs, and compile/flash firmware — speaking the dashboard's new WebSocket command protocol.
> Why this fork exists. ESPHome 2026.6 replaced the dashboard's legacy HTTP API > with a single WebSocket command protocol. The existing MCP servers > (kdkavanagh/esphome-mcp, > b2un0/esphome-mcp, > jrigling/esphome-mcp-integration) > all speak the old protocol, so config read/edit/validate return garbage against a 2026.6 > server. This project keeps the clean tool layer from kdkavanagh/esphome-mcp and rewrites > the transport for the new protocol. See [DECISIONS.md](DECISIONS.md) for the details.
Tools
| Tool | What it does | | --- | --- | | list_devices / list_device_names | Inventory configured devices | | check_device_update | Is a firmware update available? | | get_device_status | Online/offline + address | | get_device_version | Deployed vs current version | | get_device_configuration | Read a device's YAML | | edit_device_configuration | Save YAML (then auto-validate) | | validate_device_configuration | Full ESPHome validation, no save | | get_device_logs | Stream recent device logs | | get_esphome_schema | Component schema for a version | | install_device_configuration | Compile + OTA flash (destructive) | | update_device | Recompile + OTA flash to latest (destructive) |
Configuration
Config is via environment variables (12-factor). Copy [.env.example](.env.example) to .env:
| Variable | Required | Description | | --- | --- | --- | | ESPHOME_DASHBOARD_URL | yes | Dashboard base URL, e.g. https://esphome.example.com or http://host:6052. REST and WebSocket URLs are derived from it. | | ESPHOME_DASHBOARD_USERNAME | no | Basic Auth user (only if the dashboard reports requires_auth=true). | | ESPHOME_DASHBOARD_PASSWORD | no | Basic Auth password. | | LOG_LEVEL | no | DEBUG/INFO/WARNING/ERROR (default INFO). |
Run with Docker
cp .env.example .env # then edit ESPHOME_DASHBOARD_URL
docker compose up -d --build
docker compose ps # STATUS should become "healthy"
The server listens on :8080 and serves MCP over Streamable HTTP at http://:8080/mcp. The container HEALTHCHECK performs a full MCP handshake and calls list_device_names, so it only reports healthy when the dashboard is actually reachable.
Once the registry image is published, pin it in compose.yaml:
image: ghcr.io/loryanstrant/esphome-mcp:latest
Connect an MCP client
Point your client at the Streamable HTTP endpoint:
{
"mcpServers": {
"esphome": { "type": "http", "url": "http://:8080/mcp" }
}
}
For a stdio client, run esphome-mcp (instead of the web entrypoint) with the same env.
Develop
make install-dev # venv + deps
make check # lint + format-check + typecheck + test
# live tests against a real 2026.6 dashboard:
ESPHOME_DASHBOARD_URL=https://esphome.example.com .venv/bin/pytest -m live
Credits
This project stands on the work of others (all MIT-licensed):
- kdkavanagh/esphome-mcp — the original
ESPHome MCP server. This fork keeps its FastMCP tool layer, schema handling, packaging and CI almost verbatim; the transport rewrite is the main change here.
- b2un0/esphome-mcp — for publishing a prebuilt
image and surfacing the healthcheck / config-tool breakage that motivated this work.
— a Home Assistant integration referenced while mapping the ESPHome dashboard protocol.
The new 2026.6 WebSocket protocol was reverse-engineered from the ESPHome Device Builder front-end and verified against a live 2026.6 dashboard.
License
[MIT](LICENSE).
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: loryanstrant
- Source: loryanstrant/ESPHome-MCP
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.