UniFi Protect MCP Server
Project description
UniFi Protect MCP Server
MCP server exposing UniFi Protect tools for LLMs, agents, and automation platforms. Query cameras, events, smart detections, recordings, lights, sensors, and chimes -- with safe-by-default permissions and preview-before-confirm for all mutations.
Install
Claude Code (recommended)
The plugin installs the MCP server, an agent skill for tool discovery, and a guided setup command:
/plugin marketplace add sirkirby/unifi-mcp
/plugin install unifi-protect@unifi-plugins
Then run the interactive setup to configure your controller connection:
/unifi-protect:setup
This walks you through entering your controller host, credentials, and permission preferences — then writes everything to .claude/settings.json so it persists across sessions. If you already have the Network plugin configured on the same controller, the setup will detect and reuse those credentials. Restart Claude Code after setup to connect.
PyPI / Docker
# PyPI
uvx unifi-protect-mcp
# or: pip install unifi-protect-mcp
# Docker
docker pull ghcr.io/sirkirby/unifi-protect-mcp:latest
# From source
git clone https://github.com/sirkirby/unifi-mcp.git
cd unifi-mcp && uv sync
Configure
Set these environment variables (or create a .env file). If you used /unifi-protect:setup, this is already done.
# Server-specific variables (recommended)
UNIFI_PROTECT_HOST=192.168.1.1 # Controller IP or hostname
UNIFI_PROTECT_USERNAME=admin # Local admin username
UNIFI_PROTECT_PASSWORD=your-password # Admin password
# Optional:
# UNIFI_PROTECT_API_KEY= # UniFi API key (experimental — read-only, subset of tools)
# UNIFI_PROTECT_PORT=443 # Controller HTTPS port
# UNIFI_PROTECT_VERIFY_SSL=false # SSL certificate verification
Fallback: The shared UNIFI_* variables (e.g., UNIFI_HOST) also work. The server checks for UNIFI_PROTECT_* first and falls back to UNIFI_* if the server-specific variable is not set. For single-controller setups, the shared variables are all you need.
Run
# stdio transport (default -- for Claude Desktop, LM Studio, etc.)
unifi-protect-mcp
# Docker
docker run -i --rm \
-e UNIFI_PROTECT_HOST=192.168.1.1 \
-e UNIFI_PROTECT_USERNAME=admin \
-e UNIFI_PROTECT_PASSWORD=secret \
ghcr.io/sirkirby/unifi-protect-mcp:latest
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"unifi-protect": {
"command": "uvx",
"args": ["unifi-protect-mcp"],
"env": {
"UNIFI_PROTECT_HOST": "192.168.1.1",
"UNIFI_PROTECT_USERNAME": "admin",
"UNIFI_PROTECT_PASSWORD": "your-password"
}
}
}
}
Features
- Cameras -- list, inspect, snapshot, RTSP streams, PTZ control, settings, recording toggle, reboot
- Events -- query historical events, smart detections (person/vehicle/animal/package), thumbnails
- Real-time streaming -- websocket event buffer with MCP resource subscriptions and polling
- Recordings -- status, availability, clip export with timelapse support
- Devices -- lights (brightness, PIR sensitivity), sensors (temperature, humidity, motion), chimes (volume, trigger)
- Liveviews -- list and inspect multi-camera layouts
- System -- NVR info, health metrics, firmware status, connected viewers
Documentation
- Configuration -- Full env var reference, YAML config, Protect-specific options
- Permissions -- Permission system, category defaults, how to enable mutations
- Tool Catalog -- All 34 tools organized by category
- Event Streaming -- Real-time event architecture, MCP resources, polling
- Troubleshooting -- Connection issues, SSL, missing tools
Development
cd apps/protect
make test # Run tests
make lint # Lint
make format # Format
make manifest # Regenerate tools_manifest.json
make pre-commit # All of the above
See the root CONTRIBUTING.md for the full monorepo workflow.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file unifi_protect_mcp-0.1.2.tar.gz.
File metadata
- Download URL: unifi_protect_mcp-0.1.2.tar.gz
- Upload date:
- Size: 47.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2911555b302b94ce5eaaa9ea9a4d47cedc603329111ff31d2313e8af097b17ff
|
|
| MD5 |
f04cae1b6e3664b659da9c7b94939f15
|
|
| BLAKE2b-256 |
50b628b5314c3a91fc75bcd57777348fcca51159c1a96809a3b98a34c98acc80
|
Provenance
The following attestation bundles were made for unifi_protect_mcp-0.1.2.tar.gz:
Publisher:
publish-protect.yml on sirkirby/unifi-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
unifi_protect_mcp-0.1.2.tar.gz -
Subject digest:
2911555b302b94ce5eaaa9ea9a4d47cedc603329111ff31d2313e8af097b17ff - Sigstore transparency entry: 1130066545
- Sigstore integration time:
-
Permalink:
sirkirby/unifi-mcp@7add15d9aea70607e63af30ef3463db64e153c3d -
Branch / Tag:
refs/tags/protect/v0.1.2 - Owner: https://github.com/sirkirby
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-protect.yml@7add15d9aea70607e63af30ef3463db64e153c3d -
Trigger Event:
push
-
Statement type:
File details
Details for the file unifi_protect_mcp-0.1.2-py3-none-any.whl.
File metadata
- Download URL: unifi_protect_mcp-0.1.2-py3-none-any.whl
- Upload date:
- Size: 65.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
316b898c3e409f67da26c6d196cbd217ac4408af6da3b9190adeb0d1817911c8
|
|
| MD5 |
6520a97b701aae8d8c5ef904ad7f5ae9
|
|
| BLAKE2b-256 |
f6355b859dee5e219781d17a6ad983ed0b46dfb987ea9cea7bee33d93fc1f344
|
Provenance
The following attestation bundles were made for unifi_protect_mcp-0.1.2-py3-none-any.whl:
Publisher:
publish-protect.yml on sirkirby/unifi-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
unifi_protect_mcp-0.1.2-py3-none-any.whl -
Subject digest:
316b898c3e409f67da26c6d196cbd217ac4408af6da3b9190adeb0d1817911c8 - Sigstore transparency entry: 1130066604
- Sigstore integration time:
-
Permalink:
sirkirby/unifi-mcp@7add15d9aea70607e63af30ef3463db64e153c3d -
Branch / Tag:
refs/tags/protect/v0.1.2 - Owner: https://github.com/sirkirby
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-protect.yml@7add15d9aea70607e63af30ef3463db64e153c3d -
Trigger Event:
push
-
Statement type: