
Company News
Jerod Santo Joins Socket as Head of Media
Allow myself to introduce... myself.
unifi-access-mcp
Advanced tools
MCP server exposing UniFi Access tools for LLMs, agents, and automation platforms. Manage doors, credentials, access policies, visitors, events, and devices -- with safe-by-default permissions and preview-before-confirm for all mutations.
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-access@unifi-plugins
Then run the interactive setup to configure your controller connection:
/unifi-access:setup
This walks you through connecting to your Access controller, explains the dual-auth system (API key for reads, username/password for mutations), and configures permissions — then writes everything to .claude/settings.local.json. If you already have other UniFi plugins configured on the same controller, the setup will detect and reuse those credentials. Restart Claude Code after setup to connect.
Register the marketplace, then install unifi-access from Codex's /plugins UI:
codex plugin marketplace add sirkirby/unifi-mcp
After installing, ask Codex to use the UniFi Access setup skill. The setup flow registers the MCP server with codex mcp add, stores your controller environment values in Codex's MCP configuration, and prompts you to restart Codex.
# PyPI
uvx unifi-access-mcp@latest
# or: pip install unifi-access-mcp
# Docker
docker pull ghcr.io/sirkirby/unifi-access-mcp:latest
# From source
git clone https://github.com/sirkirby/unifi-mcp.git
cd unifi-mcp && uv sync
Once connected, just ask your AI agent in natural language:
"Who badged into the office today? Show me a timeline of all door access events"
"List all access credentials that expire in the next 30 days"
"Show me failed badge attempts at the server room this week — any patterns?"
"Which doors had the most access events today?"
"Create a visitor pass for John Smith with access to the main entrance from 9 AM to 5 PM tomorrow"
"Audit door policies — which doors allow access outside business hours?"
All queries are read-only by default. Mutations (visitor passes, credential changes, door controls) use a preview-then-confirm flow.
Set these variables in the server's process environment. If you used /unifi-access:setup, this is already done. The server does not automatically load .env or working-directory YAML files; load a trusted env file explicitly in your launcher (Docker env_file: is supported), or select custom YAML with an absolute CONFIG_PATH. See configuration for migration examples.
# Server-specific variables (recommended)
UNIFI_ACCESS_HOST=192.168.1.1 # Controller IP or hostname
UNIFI_ACCESS_USERNAME=admin # Local admin username
UNIFI_ACCESS_PASSWORD=your-password # Admin password
# Optional:
# UNIFI_ACCESS_API_KEY= # Official UniFi API key (dual auth)
# UNIFI_ACCESS_PORT=443 # Controller HTTPS port
# UNIFI_ACCESS_VERIFY_SSL=false # SSL certificate verification
Fallback: The shared UNIFI_* variables (e.g., UNIFI_HOST) also work. The server checks for UNIFI_ACCESS_* 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.
For tool results that already provide structured output, adaptive is the default response mode. It classifies each request by the canonical date-based protocolVersion advertised during MCP initialization, not by the client's product name or application version. Requests advertising MCP 2025-06-18 or later receive concise content plus the full result once in structuredContent; requests advertising an earlier revision (such as 2024-11-05 or 2025-03-26), or whose revision metadata is missing or malformed, keep full compatibility JSON in content. Set UNIFI_ACCESS_MCP_CONTENT_MODE to compat to force the duplicated compatibility form, or to compact to force concise text plus full structured output outside a negotiated request. This server-specific variable overrides UNIFI_MCP_CONTENT_MODE; use compat for any client that consumes the full result only from content, regardless of its advertised revision.
The lazy-loading meta-tools (*_tool_index, *_execute, *_batch, *_batch_status, and lazy-only *_load_tools) remain content-only; they are not the pre-2025-06-18 protocol category described above. For structured inner results, *_execute and *_batch_status expose one normalized JSON payload in content rather than a nested transport pair; content-only execute results remain unchanged. Response modes do not convert these meta-tools to structuredContent.
When Network is enabled alongside Access, its largest source responses are independently bounded: unifi_get_dashboard defaults to summary=true, and unifi_list_rogue_aps defaults to a summarized page of at most 100 records; summary=false restores the full selected data.
The Access server supports two independent auth paths:
py-unifi-access on the dedicated Access API port (default 12445). Best for read-only queries and device listing./api/auth/login on the UniFi OS Console (port 443) and proxies requests through /proxy/access/api/v2/.... Required for door lock/unlock, credential management, policies, visitors, and events.At least one path must be configured. When both are available, each tool selects the most appropriate path. Most mutating tools require the local proxy session.
Access tools redact credential secrets by default before returning data to MCP clients — credential token and pin_code values surface as ***REDACTED*** in reads, lists, and create previews. Disable redaction for a trusted local administration process with UNIFI_ACCESS_REDACT_SENSITIVE_FIELDS=false or the global UNIFI_REDACT_SENSITIVE_FIELDS=false policy flag when raw values are required. To preserve an existing secret on an update, omit the field rather than passing the ***REDACTED*** marker back (which is rejected).
# stdio transport (default -- for Claude Desktop, LM Studio, etc.)
unifi-access-mcp
# Docker
docker run -i --rm \
-e UNIFI_ACCESS_HOST=192.168.1.1 \
-e UNIFI_ACCESS_USERNAME=admin \
-e UNIFI_ACCESS_PASSWORD=secret \
ghcr.io/sirkirby/unifi-access-mcp:latest
Add to claude_desktop_config.json:
{
"mcpServers": {
"unifi-access": {
"command": "uvx",
"args": ["unifi-access-mcp"],
"env": {
"UNIFI_ACCESS_HOST": "192.168.1.1",
"UNIFI_ACCESS_USERNAME": "admin",
"UNIFI_ACCESS_PASSWORD": "your-password"
}
}
}
}
The Claude Code plugin ships with agent skills that teach AI assistants how to work with Access effectively:
Skills are automatically available when the plugin is installed.
When the Access plugin is installed alongside the Protect plugin, the security-digest skill can incorporate door events into its analysis. Badge-ins, access-denied events, and after-hours access are correlated with camera motion and alerts from Protect to produce a richer security summary across your full UniFi deployment.
No additional configuration is required — if both plugins are active, the skill automatically pulls from both servers.
cd apps/access
make test # Run tests
make lint # Lint
make format # Format
make manifest # Regenerate tools_manifest.json
make console # Start interactive dev console
make pre-commit # All of the above
See the root CONTRIBUTING.md for the full monorepo workflow.
FAQs
UniFi Access MCP Server
We found that unifi-access-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Company News
Allow myself to introduce... myself.

Research
/Security News
A Twitch browser extension on Chrome and Firefox forwards users’ live OAuth session tokens through proxies controlled by a Russian bot service.

Security News
Anthropic found biased reasoning and recklessness drove Claude Mythos 5 to publish malware on PyPI and compromise a security vendor.