kwikset-mcp
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., "@kwikset-mcpis the front door locked?"
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.
kwikset-mcp
An MCP server that lets Claude check and control Kwikset Halo-family smart locks (Halo, Halo Keypad, Halo Touch, Halo Select / Select Plus).
It's a thin wrapper around aiokwikset,
the community-maintained Python client for Kwikset's cloud API — the same
one used by the Home Assistant Kwikset integration.
Important: Kwikset does not publish or officially support this API.
aiokwikset reverse-engineers it, so it can break if Kwikset changes
something server-side. This server includes a debug_api_surface tool and
defensive lookups specifically to make that kind of breakage easy to
diagnose and patch rather than a silent hard failure.
This has not been tested end-to-end against a real account or lock —
it was built from aiokwikset's published documentation and the Home
Assistant integration's source, without access to Kwikset credentials or
a physical lock. Run through the steps below and treat the first lock/
unlock call as a smoke test; if anything throws an api_mismatch error,
paste it (and the debug_api_surface output) back to Claude to get the
one or two mismatched method names fixed.
Why login is a separate step
Your Kwikset password should never pass through an LLM conversation. So
authentication happens once, in a plain terminal, via auth_setup.py,
which saves only the resulting session tokens locally (never the
password). The MCP server reads and silently refreshes those tokens —
it never asks Claude, or you via Claude, for your password.
Related MCP server: Seam MCP Server
Setup
Install dependencies (Python 3.10+):
cd kwikset-mcp python3 -m venv .venvActivate the virtual environment — the command depends on your shell:
# macOS / Linux (bash or zsh) source .venv/bin/activate# Windows PowerShell .venv\Scripts\Activate.ps1:: Windows Command Prompt (cmd.exe) .venv\Scripts\activate.batYou'll know it worked when your prompt gets a
(.venv)prefix. If PowerShell refuses to run the script ("running scripts is disabled on this system"), runSet-ExecutionPolicy -Scope Process -ExecutionPolicy Bypassfirst, then retry the activation command.Then, with the venv active:
pip install -e .Log in once. Credentials can be given three ways, checked in this order:
# 1. Command-line flags (any OS/shell) python auth_setup.py --email you@example.com --password 'hunter2' # 3. Interactive prompt (any OS/shell; default if nothing else is given) python auth_setup.pyOption 2, setting environment variables first, is preferred over the
--passwordflag above (a command-line password is visible to other processes viaps aux/Task Manager and lands in shell history) — but the syntax is shell-specific:# macOS / Linux (bash or zsh) KWIKSET_EMAIL=you@example.com KWIKSET_PASSWORD='hunter2' python auth_setup.py# Windows PowerShell $env:KWIKSET_EMAIL = "you@example.com" $env:KWIKSET_PASSWORD = "hunter2" python auth_setup.pyIf your account has MFA enabled you'll be prompted for the code (or pass one up front with
--mfa-code/$KWIKSET_MFA_CODE). Either way this writes~/.kwikset-mcp/tokens.json(owner-read/write only) and never touches your password again after this step — the MCP server only ever reads and refreshes the saved token.Point Claude at the server.
For Claude Code, from this project directory:
# macOS / Linux claude mcp add kwikset -- "$(pwd)/.venv/bin/python" -m kwikset_mcp.server# Windows PowerShell claude mcp add kwikset -- "$PWD\.venv\Scripts\python.exe" -m kwikset_mcp.serverFor Claude Desktop, add this to your
claude_desktop_config.json(Settings → Developer → Edit Config), substituting the absolute path to this directory's.venv:{ "mcpServers": { "kwikset": { "command": "/absolute/path/to/kwikset-mcp/.venv/bin/python", "args": ["-m", "kwikset_mcp.server"] } } }On Windows,
commandshould point atC:\\absolute\\path\\to\\kwikset-mcp\\.venv\\Scripts\\python.exe(use double backslashes, since this is JSON).Then restart the Claude client so it picks up the new server.
Try it. Ask Claude something like "list my Kwikset locks" or "is the front door locked?" — it should call
list_locks/get_lock_status. Unlocking requires an explicit ask, sinceunlock_doorrefuses to act unless called withconfirm=true, which Claude will only do when you've clearly asked it to unlock that door.
Tools exposed
Tool | Description |
| All locks on the account, with status, battery %, home |
| Status/battery/Wi-Fi for one lock |
| Lock a door |
| Unlock a door ( |
| Diagnostic dump of the installed aiokwikset library's real method names |
Re-authenticating
If tokens expire and can't silently refresh (e.g. the Kwikset password was
changed, or MFA was reset), tool calls will return an auth_required
error with instructions — just re-run python auth_setup.py.
Files
kwikset-mcp/
├── auth_setup.py # run once, by hand, to log in
├── src/kwikset_mcp/
│ ├── auth.py # local token file read/write
│ ├── client.py # aiokwikset wrapper (locks, status, etc.)
│ └── server.py # FastMCP server + tool definitions
├── pyproject.toml
└── requirements.txtThis server cannot be deployed
Maintenance
Related MCP Connectors
- mytesla.ioOAuthio.mytesla
Control your Tesla from your AI assistant - climate, charging, access, and security.
Control your Tesla - wake it, warm it up, unlock and more. Get your developer token at https://Infoseek.ai/mcp. Also requires your own Tesla developer token which is tied to your car/fleet.
OAuth 2.1 short-link tools for AI agents with scoped tokens, approvals, audit logs, and revocation.
Manage Superlist tasks and lists in plain language from any MCP-compatible AI agent.
Related MCP Servers
- -licenseNot gradedqualityDmaintenanceEnables control of TP-Link Kasa smart home devices through natural language commands. Supports device control, lighting scenes, room-based organization, and real-time status monitoring for smart plugs and bulbs.-
- FlicenseNot gradedqualityCmaintenanceEnables control of smart locks through the Seam API, allowing users to lock/unlock doors, check status, and manage access codes across 100+ supported lock brands. Supports comprehensive access code management including temporary codes and multi-lock operations.-
- FlicenseNot gradedqualityCmaintenanceEnables AI models to control and query smart home devices (air conditioners, lights, locks, cameras, refrigerators) through a backend API. Supports device control operations, status queries, and detailed device information retrieval with built-in documentation for proper device usage.2-
- AlicenseNot gradedqualityBmaintenanceEnables ChatGPT to read selected Home Assistant data and perform limited home-control actions like turning on/off lights and running scenes, with a strict allowlist for security.MIT