PlugWiki
UniFi Access MCP logo

UniFi Access MCP Server by sirkirby: Setup for Claude, Cursor and Other Apps

CommunityLocal

Lets Claude, Cursor and other assistants check UniFi Access doors, badges and visitor passes, and lock or unlock doors after a confirm step.

This community server connects your assistant to a UniFi Access controller. It answers questions about doors, devices, users, policies and event history, and can create visitor passes or lock and unlock doors. It runs on your computer and signs in to your own controller, either with an API key for reads or with a local admin login for changes. It is not made by Ubiquiti.

Good for

  • Office and building managers who want to audit who badged in and when
  • Home-lab owners who run UniFi Access and want chat control of doors
  • IT admins who manage visitor passes and credentials

Works in

12 should work

Tap an app to see how to set it up and any known problems.

Install UniFi Access MCP

Claude Code

  1. 1

    Copy this prompt.

    Add the UniFi Access MCP server to Claude Code. Run this command:
    
    /plugin marketplace add sirkirby/unifi-mcp
    
    Ask me for UNIFI_ACCESS_HOST, UNIFI_ACCESS_USERNAME, UNIFI_ACCESS_PASSWORD and only put the values in that config, nowhere else.
    
    Then check that it loaded and tell me if I need to sign in or restart.
  2. 2

    Paste it into Claude Code. It shows the change and asks before running it.

Requires uv (Python 3.13+).

Read-only mode: Set UNIFI_ACCESS_READ_ONLY=true, or set UNIFI_POLICY_ACCESS_CREATE, UNIFI_POLICY_ACCESS_UPDATE and UNIFI_POLICY_ACCESS_DELETE to false.

Use an API key in UNIFI_ACCESS_API_KEY instead of a username and password if you only need reads. Set the policy variables from the permissions guide to limit what the assistant can change.

From the project README. Source.

Tools

  • Lists the Access tools you can call

    Shows the Access tools by category so the assistant can pick one without loading them all. It is the first step in the default lazy mode.

    Try: “What Access tools are available for doors?”

    Read · access_tool_index

  • Runs any Access tool by name

    Runs an Access tool you name, passing its arguments. Whatever that tool does, this call does, including door control.

    Try: “Use access_execute to list the doors.”

    Runs code · access_execute

  • Runs several Access tools in parallel

    Starts a group of tool calls at once and returns job IDs. Each call inside it carries the effects of the tool it names.

    Try: “Check the status of all doors and all devices at once.”

    Runs code · access_batch

  • Checks the progress of a batch

    Reports whether a batch job is running, done or failed, with its result.

    Try: “Is my batch finished?”

    Read · access_batch_status

  • Adds Access tools to the assistant's tool list

    Registers chosen Access tools so the assistant can call them directly instead of through the runner.

    Try: “Load the door tools.”

    Write · access_load_tools

  • Lists every door with lock state

    Returns each door the controller manages with its name, lock state and connection status.

    Try: “Which doors are currently unlocked?”

    Network · access_list_doors

  • Shows details for one door

    Returns one door's lock state, settings and connected devices.

    Try: “Show me details for the front door.”

    Network · access_get_door

  • Shows just the lock and position of a door

    A lighter check that returns only whether a door is locked and whether it is open.

    Try: “Is the server room door locked?”

    Network · access_get_door_status

  • Lists door groups

    Returns the groups used to assign doors to policies. It is only available over the local session.

    Try: “List my door groups.”

    Network · access_list_door_groups

  • Locks a door right now

    Locks a door immediately. This is a physical action and needs confirm=true before it runs.

    Try: “Lock the back door.”

    Write · access_lock_door

  • Unlocks a door for a set time

    Unlocks a door for the number of minutes you give. This is a physical action and needs confirm=true before it runs.

    Try: “Unlock the lobby door for 5 minutes.”

    Write · access_unlock_door

  • Lists readers, hubs, relays and intercoms

    Returns each Access hardware device with its type, connection state and firmware version.

    Try: “Which readers are offline?”

    Network · access_list_devices

Read from the source code

Permissions

high risk · 8 things to watch · 2 advisories

High risk

The assistant can unlock doors, create and delete visitor passes and revoke badges at your site. Allow only the actions you need with the policy variables, and read each confirm preview before you approve.

What it can do

Watch out for

  • It can unlock doors

    access_unlock_door opens a door for a set time and access_lock_door closes it. Both need confirm=true, which is the only default barrier. UNIFI_POLICY_ACCESS_DOORS_UPDATE=false blocks them. github.com

  • It can delete credentials and visitor passes

    Revoking a credential removes it permanently, and deleting a visitor pass revokes its access. Both are allowed until you set UNIFI_POLICY_ACCESS_CREDENTIALS_DELETE and UNIFI_POLICY_ACCESS_VISITORS_DELETE (or UNIFI_POLICY_ACCESS_DELETE) to false. github.com

  • The runner tool can call any other tool

    The execute and batch tools run whatever tool they name, so they carry the same effects, door control included. Approve each call with the named tool in view. github.com

  • The docs disagree on whether changes are denied by default

    apps/access/docs/permissions.md says Access denies all mutations by default, but its own Zero config section says every tool works with a confirm step, and the policy code allows an action when no gate variable is set. Treat changes as allowed after confirm=true. To block them set UNIFI_POLICY_ACCESS_CREATE, UNIFI_POLICY_ACCESS_UPDATE and UNIFI_POLICY_ACCESS_DELETE to false, or set UNIFI_ACCESS_READ_ONLY=true. github.com

  • It holds an admin login for your controller

    Changes need a local admin username and password in the config, not just an API key. Use a dedicated account with only the rights you need. github.com

  • Confirmation can be switched off

    Setting UNIFI_TOOL_PERMISSION_MODE=bypass or UNIFI_ACCESS_TOOL_PERMISSION_MODE=bypass skips the preview and confirm step for every change that policy allows. The deprecated UNIFI_AUTO_CONFIRM=true does the same. Leave these unset unless you run automation. github.com

  • The optional HTTP mode is off by default

    The server uses stdio unless HTTP is enabled, and the HTTP host defaults to 127.0.0.1. github.com

  • Gate names by category

    Door lock and unlock use UNIFI_POLICY_ACCESS_DOORS_UPDATE, credentials use UNIFI_POLICY_ACCESS_CREDENTIALS_CREATE and UNIFI_POLICY_ACCESS_CREDENTIALS_DELETE, visitors use UNIFI_POLICY_ACCESS_VISITORS_CREATE and UNIFI_POLICY_ACCESS_VISITORS_DELETE. github.com

Security advisories

Technical details
Turning on read-onlySet UNIFI_ACCESS_READ_ONLY=true (or UNIFI_READ_ONLY=true for every UniFi server). Read-only mode denies every non-read action whatever the UNIFI_POLICY_* gates say. Setting the create, update and delete gates to false has the same effect.
Talks toYour UniFi Access controller on your network
Sign-in and keysThe controller address, admin username and password (or an API key) sit in your client config as environment variables.

Questions

Is the UniFi Access MCP server official?

No. It is a community project by sirkirby, not made by Ubiquiti. It is one of three UniFi servers in the same repository, for Network, Protect and Access.

What credentials does it need?

The controller address, plus either an API key for reads or a local admin username and password for changes such as door control. At least one sign-in path must be set.

Can it unlock doors?

Yes. It has lock and unlock tools. Each needs a confirm step, and the docs list policy variables that turn door control on or off.

Can it run read-only?

Yes. Set UNIFI_ACCESS_READ_ONLY=true and every change is denied, whatever the UNIFI_POLICY_* variables say. Or set UNIFI_POLICY_ACCESS_CREATE, UNIFI_POLICY_ACCESS_UPDATE and UNIFI_POLICY_ACCESS_DELETE to false. With neither set, changes are allowed after a confirm step, even though one docs section says they are denied.

Does it run on my computer or in the cloud?

On your computer. It talks to your controller over your own network. An optional HTTP mode exists but is off by default.

Why does the tool list look short at first?

The default mode loads a few discovery tools first and adds the rest on demand, to save context. You can switch to loading everything at once.

Which UniFi servers are there?

The same repository ships separate servers for UniFi Network, UniFi Protect and UniFi Access. This page covers Access.

Is it free?

Yes. The repository is MIT licensed. The published package metadata on PyPI declares no license.

Information

updated Nov 2, 2026

Publisher
Community
Package
unifi-access-mcp
Registry
PyPI
Transport
stdio
Auth
token in env
Version
0.8.0
License
MIT
Last commit
Oct 30, 2026
Open issues
13
Listed in
Official MCP registry

GitHubPyPIOfficial MCP Registry

Sources

Docs, issue trackers and discussions this page is built from. Issues, quotes and findings above link to their own source.

Show all 6
  1. github.com · github.com
  2. github.com · github.com
  3. github.com · github.com
  4. github.com · github.com
  5. github.com · github.com
  6. github.com · github.com

Facts from the official MCP registry, GitHub, npm, PyPI and the Docker catalog. Updated Nov 2, 2026.