Give your AI agent the keys to exactly what it needs.
ATM is more than just a replacement for Home Assistant's MCP server. Every client gets its own token, scoped to the entities you allow, rate-limited, audited, and revocable in one click.
Why ATM instead of a long-lived access token
A long-lived access token (LLAT) plus the native MCP server gives every client the same all-or-nothing view of your home. ATM keeps the same tools and adds the control layer that the native system has no place for.
| Capability | LLAT + native MCP | ATM token |
|---|---|---|
| MCP tool compatibility | 20 native tools | Same 20 tools, identical names and responses, plus 78 more |
| Entity filtering | Binary: expose or hide, same for all clients | Four permission states, per token |
| Per-client control | No, all clients share one exposed set | Yes, independent permissions per token |
| Read-only access | No | Yes, READ allows reads and blocks writes |
| Audit trail | None | Every request logged with outcome and entity |
| Rate limiting | None | Per token, configurable |
| Expiry | None | Optional, auto-archived on expiry |
| Revocation | Revoke the LLAT on the HA profile page | Instant; the token's next request is rejected |
| Sensitive attribute scrubbing | None | Always applied |
| Client reconfiguration | /api/mcp | /api/atm/mcp (URL change only) |
If you are connecting Claude Code, Cursor, ChatGPT, Antigravity, or any other AI tool to Home Assistant, ATM gives you control the native system cannot.
How ATM compares:
We benchmarked ATM against Home Assistant's built-in MCP server and the popular community server, one agent model, one synthetic home, the same tasks. ATM came out cheapest per completed task, the only server that left every off-limits device untouched, and it's the most capable.
Three layers between an agent and your home
Every request runs the same gauntlet, in order. ATM resolves and flattens the target to explicit entities, checks the token's permissions and capabilities, and only then lets MESA, the semantic safety net, have the final say, a backstop that holds even over a token that was granted too much.
The permission tree
Domains, devices, and entities, each set to read-write, read-only, deny, or inherit. A two-pass resolver decides what every request can touch.
PermissionsCapability flags
Twenty-two opt-in switches gate the high-impact operations: restart, physical control, writing automations, reading logs, editing YAML. Off by default.
CapabilitiesSemantic safety profiles
MESA stores a semantic profile for each entity: what it is, how sensitive it is, and how it should be treated by your AI agent, not just allow or deny. Describe your home's nature once, and every agent inherits the safe treatment: a lock or camera stays read-only or confirmation-only because of what it is, no matter which token is asking.
MESAFrom install to a scoped agent in four steps
Install & set up
Add ATM through HACS or by hand, restart, and add the integration. One ATM instance per Home Assistant.
Installation 02 · ConnectQuick start
The guided setup creates your first token, gives it one device, connects your agent, and tests it.
Quick start 03 · ScopeScope its access
Paint the permission tree, select whole areas at once, and verify the outcome with the effective-permission emulator.
Permissions 04 · OperateKnow the tools
Eighty-six tools, from get_state to create_automation, each scoped to the token and its capabilities.
Prefer not to install a client? Chat inside Home Assistant
Agent Chat runs the agent inside ATM itself, on a token you choose, using your own Claude, DeepSeek, Ollama or other provider account. Same permission tree, same capabilities, same approvals and MESA, just a chat window floating above Home Assistant instead of an external tool.
Use Agent Chat
A floating chat window with a token switcher, inline Approve/Reject for gated actions, and per-provider model and thinking controls.
Agent Chat ExternalConnect a client
Point Claude Code, Cursor, Codex, Gemini CLI, or any MCP client at ATM's endpoint with a URL and a bearer token.
Connect an AI client