camsentry-mcp
Connects to a Wyze account to list cameras and their online/arming state, fetch recent motion and sound events with Wyze AI tags, analyze event or live camera frames with a local vision model, and manage arming state for intruder alerts. Optionally uses a wyze-bridge URL for live snapshots.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
camsentry-mcp is an unofficial MCP server that gives a local model eyes on Wyze cameras. Ask it "is there a package at the front door?" or "arm the cameras and tell me if anyone shows up", and it answers from what your cameras actually recorded.
Independent project. camsentry-mcp is not affiliated with, endorsed by or sponsored by Wyze Labs, Inc. "Wyze" and "Wyze Cam" are trademarks of Wyze Labs, Inc., used here only to say which cameras this software works with.
Why this one
Related MCP server: DesktopBridge
How it works
flowchart LR
M[Local model + MCP client] -- stdio --> S[camsentry-mcp]
S -- session tokens from OS keychain --> W[Wyze cloud: cameras, events, event images]
S -- frame --> V[Local vision model, 127.0.0.1]
S -. optional live frame .-> B[wyze-bridge on your LAN]Quick start
You need: Python 3.12 β 3.14, a Wyze account, Ollama (or another local model server), and an OS keychain (Windows Credential Manager, macOS Keychain, or GNOME Keyring / KWallet on Linux).
1. Install
pipx install git+https://github.com/14manj01/camsentry-mcp
# or: uv tool install git+https://github.com/14manj01/camsentry-mcp2. Get a small vision model
ollama pull gemma3:4bIt analyses a frame in about a second on a GPU that fits it.
3. Connect your Wyze account
Create a free API key at https://developer-api-console.wyze.com/#/apikey/view, then:
camsentry-mcp loginYou are asked for your Wyze email, password, API Key ID and API Key (and a 2FA code if your account uses one). They are exchanged for session tokens, the tokens are saved to the OS keychain, and the password and API key are discarded.
camsentry-mcp status # checks the Wyze session, the vision model and your settings
camsentry-mcp logout # revokes the session with Wyze and deletes the tokens4. Add it to your MCP client
Any MCP client that launches stdio servers works (LM Studio, Jan, Open WebUI via mcpo, ollmcp, β¦). There are no secrets in this block, so it is safe to share or commit:
{
"mcpServers": {
"camsentry": {
"command": "camsentry-mcp",
"env": {
"CAMSENTRY_VISION_MODEL": "gemma3:4b",
"CAMSENTRY_ARMED_HOURS": "22:00-06:00"
}
}
}
}5. Ask
Check my cameras.
Is there a package at the front door?
Arm the cameras and tell me if anyone shows up.
Tools
Tool | What it does |
| Cameras on the account, online state, arming state. |
| Recent motion/sound events with Wyze's own AI tags. No vision model involved. |
| Events that are new since the previous call, each analysed by the local vision model. Poll this to "watch". |
| Run the vision model on one frame: counts of people and packages, pets, intruder alerts, one-line summary. |
| Return the frame itself, for chat models that accept images. |
|
|
{
"camera": "Front Door",
"source": "event",
"time": "2026-03-01T23:41:07-06:00",
"wyze_tags": ["Person"],
"armed": true,
"detection": {"people": 1, "pets": [], "packages": 1, "suspicious": false, "suspicious_reason": "", "summary": "A courier places a box on the porch."},
"alerts": [
{"type": "person", "reason": "1 visible; tagged by Wyze"},
{"type": "package", "reason": "1 visible"},
{"type": "intruder", "reason": "person detected while armed"}
]
}How alerts are decided
Alert | Raised when |
π§ | The local vision model sees a person, or Wyze tagged the event. |
πΎ | The local vision model sees an animal, or Wyze tagged the event. |
π¦ | The local vision model sees an unattended parcel, or Wyze tagged the event. |
π¨ | A person is detected while the system is armed ( |
Wyze's own tags need Cam Plus; the local model does not.
Detection quality is that of the vision model you choose. With the defaultgemma3:4b, "is there a
person / pet / package" is dependable but head counts in busy scenes are approximate. Larger models are
not required and can be too slow: if the model does not fit in GPU memory a frame can take minutes, longer
than most MCP clients wait for a tool.
Treat alerts as a prompt to look, not as proof. Do not rely on this project as your only security system.
Settings
All optional, all non-secret environment variables.
Variable | Default | Meaning |
|
| OpenAI-compatible endpoint of your local vision model server. |
|
| Vision model name on that server. |
| unset | Set to |
| unset | Daily local-time window, e.g. |
| unset | Base URL of a wyze-bridge, e.g. |
Out of the box the server sees what the Wyze app's Events tab sees: a still image per motion event. Without Cam Plus, Wyze limits how often cameras record events.
For a frame from right now, run a wyze-bridge on your network and set CAMSENTRY_BRIDGE_URL.
analyze_camera and view_camera then use a live snapshot when no event_id is given. If the bridge has
BRIDGE_AUTH enabled, store its credentials in the keychain with camsentry-mcp bridge-auth.
Security
No secret is ever written to a file by this project, so there is nothing to accidentally commit. Plaintext and missing keychains are refused rather than silently used.
πΌοΈ Camera frames go to the vision endpoint only. It must be a loopback address unless you opt in.
π§± Tools take camera names and event ids, never URLs or file paths.
π§Ή Error messages and logs are scrubbed of tokens, pre-signed image URLs and raw Wyze responses.
π This repository runs secret scanning (gitleaks) on every push and pull request.
The full threat model, including what a manipulated model can and cannot do, is in SECURITY.md.
Limitations
Wyze has no official public API. This project uses the community wyze-sdk, which can break when Wyze changes their service.
Wyze's Terms of Service restrict third-party applications that interact with their service. Using this project with your account may breach those terms, and Wyze could suspend the account. That risk is yours to weigh.
watch_camerasis a poll, not a push: the model (or your client's scheduler) has to call it.set_armedand the "already reported" memory ofwatch_camerasreset when the server restarts.
Development
git clone https://github.com/14manj01/camsentry-mcp
cd camsentry-mcp
python -m venv .venv
.venv/bin/pip install -e ".[dev]" # Windows: .venv\Scripts\pip
.venv/bin/pytestTool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogβ¦
This server cannot be deployed
Maintenance
Related MCP Connectors
Turns a phone into a camera+Bluetooth remote so AI assistants can see and control any PC.
- DNS-DATA RemoteDeprecatedcom.dns-data
Connect AI assistants to authorized Windows and macOS devices for files, commands, and management.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Reach your own computers from any AI app: files, search, commands, approvals and outage alerts.
Related MCP Servers
- FlicenseAqualityDmaintenanceLocal multimodal MCP server for vision, document, audio, video, and GUI automation, all processed locally on Apple Silicon for privacy and security.9-
- AlicenseAqualityCmaintenanceEnables local macOS automation via the Model Context Protocol, allowing file operations, system monitoring, shell commands, clipboard access, and screenshots with configurable security restrictions.14MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to connect to security cameras, detect objects with YOLOv8, recognize known faces, monitor restricted intrusion zones, capture annotated snapshots, and query a persistent SQLite event history.MIT
- AlicenseBqualityBmaintenanceLets Claude Code see through and control local ONVIF/RTSP IP cameras entirely on your own network: snapshots with cropped region detail, baseline comparison and change detection, short video recordings, pan/tilt movement and preset management. It can also add, rename and remove cameras without hand-editing config, keeping credentials out of the conversation and each camera's media in its own folder.213MIT