protogrid

Search / io.github.pete-builds/unifi

UniFi Gateway

L0· runs locally

Safe-by-default UniFi MCP: Network + Protect + Access, multi-site, dry-run, audit log.

v0.26.0 · active · repository · website · descriptor JSON · versions

Runs on your machine: something must execute the package.Only local packages are published (npm, PyPI, OCI, …). The registry never executes them, so tools are unknown until you run it.
Quality–not scored
Trust94of 100
Packages1
Tools seen0

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "unifi": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "STUB_MODE",
        "-e",
        "UNIFI_API_KEY",
        "-e",
        "UNIFI_SITE",
        "-e",
        "UNIFI_VERIFY_SSL",
        "-e",
        "MCP_UNIFI_MODULES_ENABLED",
        "-e",
        "UNIFI_ACCESS_API_KEY",
        "-e",
        "UNIFI_ACCESS_PORT",
        "-e",
        "MCP_UNIFI_AUDIT_SINK",
        "-e",
        "MCP_UNIFI_AUDIT_PATH",
        "ghcr.io/pete-builds/mcp-unifi:0.26.0"
      ],
      "env": {
        "STUB_MODE": "true",
        "UNIFI_API_KEY": "${UNIFI_API_KEY}",
        "UNIFI_SITE": "default",
        "UNIFI_VERIFY_SSL": "false",
        "MCP_UNIFI_MODULES_ENABLED": "network",
        "UNIFI_ACCESS_API_KEY": "${UNIFI_ACCESS_API_KEY}",
        "UNIFI_ACCESS_PORT": "12445",
        "MCP_UNIFI_AUDIT_SINK": "file",
        "MCP_UNIFI_AUDIT_PATH": "audit.jsonl"
      }
    }
  }
}
claude mcp add unifi -e "STUB_MODE=true" -e "UNIFI_API_KEY=${UNIFI_API_KEY}" -e "UNIFI_SITE=default" -e "UNIFI_VERIFY_SSL=false" -e "MCP_UNIFI_MODULES_ENABLED=network" -e "UNIFI_ACCESS_API_KEY=${UNIFI_ACCESS_API_KEY}" -e "UNIFI_ACCESS_PORT=12445" -e "MCP_UNIFI_AUDIT_SINK=file" -e "MCP_UNIFI_AUDIT_PATH=audit.jsonl" -- docker run -i --rm -e STUB_MODE -e UNIFI_API_KEY -e UNIFI_SITE -e UNIFI_VERIFY_SSL -e MCP_UNIFI_MODULES_ENABLED -e UNIFI_ACCESS_API_KEY -e UNIFI_ACCESS_PORT -e MCP_UNIFI_AUDIT_SINK -e MCP_UNIFI_AUDIT_PATH ghcr.io/pete-builds/mcp-unifi:0.26.0
[mcp_servers.unifi]
command = "docker"
args = ["run", "-i", "--rm", "-e", "STUB_MODE", "-e", "UNIFI_API_KEY", "-e", "UNIFI_SITE", "-e", "UNIFI_VERIFY_SSL", "-e", "MCP_UNIFI_MODULES_ENABLED", "-e", "UNIFI_ACCESS_API_KEY", "-e", "UNIFI_ACCESS_PORT", "-e", "MCP_UNIFI_AUDIT_SINK", "-e", "MCP_UNIFI_AUDIT_PATH", "ghcr.io/pete-builds/mcp-unifi:0.26.0"]
env = { "STUB_MODE" = "true", "UNIFI_API_KEY" = "${UNIFI_API_KEY}", "UNIFI_SITE" = "default", "UNIFI_VERIFY_SSL" = "false", "MCP_UNIFI_MODULES_ENABLED" = "network", "UNIFI_ACCESS_API_KEY" = "${UNIFI_ACCESS_API_KEY}", "UNIFI_ACCESS_PORT" = "12445", "MCP_UNIFI_AUDIT_SINK" = "file", "MCP_UNIFI_AUDIT_PATH" = "audit.jsonl" }
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "unifi": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "-i",
        "--rm",
        "-e",
        "STUB_MODE",
        "-e",
        "UNIFI_API_KEY",
        "-e",
        "UNIFI_SITE",
        "-e",
        "UNIFI_VERIFY_SSL",
        "-e",
        "MCP_UNIFI_MODULES_ENABLED",
        "-e",
        "UNIFI_ACCESS_API_KEY",
        "-e",
        "UNIFI_ACCESS_PORT",
        "-e",
        "MCP_UNIFI_AUDIT_SINK",
        "-e",
        "MCP_UNIFI_AUDIT_PATH",
        "ghcr.io/pete-builds/mcp-unifi:0.26.0"
      ],
      "enabled": true,
      "environment": {
        "STUB_MODE": "true",
        "UNIFI_API_KEY": "{env:UNIFI_API_KEY}",
        "UNIFI_SITE": "default",
        "UNIFI_VERIFY_SSL": "false",
        "MCP_UNIFI_MODULES_ENABLED": "network",
        "UNIFI_ACCESS_API_KEY": "{env:UNIFI_ACCESS_API_KEY}",
        "UNIFI_ACCESS_PORT": "12445",
        "MCP_UNIFI_AUDIT_SINK": "file",
        "MCP_UNIFI_AUDIT_PATH": "audit.jsonl"
      }
    }
  }
}
{
  "mcpServers": {
    "unifi": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "STUB_MODE",
        "-e",
        "UNIFI_API_KEY",
        "-e",
        "UNIFI_SITE",
        "-e",
        "UNIFI_VERIFY_SSL",
        "-e",
        "MCP_UNIFI_MODULES_ENABLED",
        "-e",
        "UNIFI_ACCESS_API_KEY",
        "-e",
        "UNIFI_ACCESS_PORT",
        "-e",
        "MCP_UNIFI_AUDIT_SINK",
        "-e",
        "MCP_UNIFI_AUDIT_PATH",
        "ghcr.io/pete-builds/mcp-unifi:0.26.0"
      ],
      "env": {
        "STUB_MODE": "true",
        "UNIFI_API_KEY": "${UNIFI_API_KEY}",
        "UNIFI_SITE": "default",
        "UNIFI_VERIFY_SSL": "false",
        "MCP_UNIFI_MODULES_ENABLED": "network",
        "UNIFI_ACCESS_API_KEY": "${UNIFI_ACCESS_API_KEY}",
        "UNIFI_ACCESS_PORT": "12445",
        "MCP_UNIFI_AUDIT_SINK": "file",
        "MCP_UNIFI_AUDIT_PATH": "audit.jsonl"
      }
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=unifi&config=eyJjb21tYW5kIjoiZG9ja2VyIiwiYXJncyI6WyJydW4iLCItaSIsIi0tcm0iLCItZSIsIlNUVUJfTU9ERSIsIi1lIiwiVU5JRklfQVBJX0tFWSIsIi1lIiwiVU5JRklfU0lURSIsIi1lIiwiVU5JRklfVkVSSUZZX1NTTCIsIi1lIiwiTUNQX1VOSUZJX01PRFVMRVNfRU5BQkxFRCIsIi1lIiwiVU5JRklfQUNDRVNTX0FQSV9LRVkiLCItZSIsIlVOSUZJX0FDQ0VTU19QT1JUIiwiLWUiLCJNQ1BfVU5JRklfQVVESVRfU0lOSyIsIi1lIiwiTUNQX1VOSUZJX0FVRElUX1BBVEgiLCJnaGNyLmlvL3BldGUtYnVpbGRzL21jcC11bmlmaTowLjI2LjAiXSwiZW52Ijp7IlNUVUJfTU9ERSI6InRydWUiLCJVTklGSV9BUElfS0VZIjoiJHtVTklGSV9BUElfS0VZfSIsIlVOSUZJX1NJVEUiOiJkZWZhdWx0IiwiVU5JRklfVkVSSUZZX1NTTCI6ImZhbHNlIiwiTUNQX1VOSUZJX01PRFVMRVNfRU5BQkxFRCI6Im5ldHdvcmsiLCJVTklGSV9BQ0NFU1NfQVBJX0tFWSI6IiR7VU5JRklfQUNDRVNTX0FQSV9LRVl9IiwiVU5JRklfQUNDRVNTX1BPUlQiOiIxMjQ0NSIsIk1DUF9VTklGSV9BVURJVF9TSU5LIjoiZmlsZSIsIk1DUF9VTklGSV9BVURJVF9QQVRIIjoiYXVkaXQuanNvbmwifX0%3D"
}
{
  "servers": {
    "unifi": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "STUB_MODE",
        "-e",
        "UNIFI_API_KEY",
        "-e",
        "UNIFI_SITE",
        "-e",
        "UNIFI_VERIFY_SSL",
        "-e",
        "MCP_UNIFI_MODULES_ENABLED",
        "-e",
        "UNIFI_ACCESS_API_KEY",
        "-e",
        "UNIFI_ACCESS_PORT",
        "-e",
        "MCP_UNIFI_AUDIT_SINK",
        "-e",
        "MCP_UNIFI_AUDIT_PATH",
        "ghcr.io/pete-builds/mcp-unifi:0.26.0"
      ],
      "env": {
        "STUB_MODE": "true",
        "UNIFI_API_KEY": "${UNIFI_API_KEY}",
        "UNIFI_SITE": "default",
        "UNIFI_VERIFY_SSL": "false",
        "MCP_UNIFI_MODULES_ENABLED": "network",
        "UNIFI_ACCESS_API_KEY": "${UNIFI_ACCESS_API_KEY}",
        "UNIFI_ACCESS_PORT": "12445",
        "MCP_UNIFI_AUDIT_SINK": "file",
        "MCP_UNIFI_AUDIT_PATH": "audit.jsonl"
      }
    }
  }
}
{
  "mcpServers": {
    "unifi": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "STUB_MODE",
        "-e",
        "UNIFI_API_KEY",
        "-e",
        "UNIFI_SITE",
        "-e",
        "UNIFI_VERIFY_SSL",
        "-e",
        "MCP_UNIFI_MODULES_ENABLED",
        "-e",
        "UNIFI_ACCESS_API_KEY",
        "-e",
        "UNIFI_ACCESS_PORT",
        "-e",
        "MCP_UNIFI_AUDIT_SINK",
        "-e",
        "MCP_UNIFI_AUDIT_PATH",
        "ghcr.io/pete-builds/mcp-unifi:0.26.0"
      ],
      "env": {
        "STUB_MODE": "true",
        "UNIFI_API_KEY": "${UNIFI_API_KEY}",
        "UNIFI_SITE": "default",
        "UNIFI_VERIFY_SSL": "false",
        "MCP_UNIFI_MODULES_ENABLED": "network",
        "UNIFI_ACCESS_API_KEY": "${UNIFI_ACCESS_API_KEY}",
        "UNIFI_ACCESS_PORT": "12445",
        "MCP_UNIFI_AUDIT_SINK": "file",
        "MCP_UNIFI_AUDIT_PATH": "audit.jsonl"
      }
    }
  }
}
extensions:
  "unifi":
    enabled: true
    name: "unifi"
    type: stdio
    cmd: "docker"
    args:
      - "run"
      - "-i"
      - "--rm"
      - "-e"
      - "STUB_MODE"
      - "-e"
      - "UNIFI_API_KEY"
      - "-e"
      - "UNIFI_SITE"
      - "-e"
      - "UNIFI_VERIFY_SSL"
      - "-e"
      - "MCP_UNIFI_MODULES_ENABLED"
      - "-e"
      - "UNIFI_ACCESS_API_KEY"
      - "-e"
      - "UNIFI_ACCESS_PORT"
      - "-e"
      - "MCP_UNIFI_AUDIT_SINK"
      - "-e"
      - "MCP_UNIFI_AUDIT_PATH"
      - "ghcr.io/pete-builds/mcp-unifi:0.26.0"
    envs:
      "STUB_MODE": "true"
      "UNIFI_API_KEY": "${UNIFI_API_KEY}"
      "UNIFI_SITE": "default"
      "UNIFI_VERIFY_SSL": "false"
      "MCP_UNIFI_MODULES_ENABLED": "network"
      "UNIFI_ACCESS_API_KEY": "${UNIFI_ACCESS_API_KEY}"
      "UNIFI_ACCESS_PORT": "12445"
      "MCP_UNIFI_AUDIT_SINK": "file"
      "MCP_UNIFI_AUDIT_PATH": "audit.jsonl"
    timeout: 300

Placeholders to fill from your own secret store: ${UNIFI_API_KEY}, ${UNIFI_ACCESS_API_KEY}. The registry never accepts secret values.

This is a local package: the command runs on your machine.

Quality – / 100not scored

Not scored: fewer than three checks apply, usually because no remote answered a credential-free probe or the server is a local package.

protocoln/a · weight 25
  • n/a
    protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygienen/a · weight 30
  • n/a
    tools.descriptions, tools.description_length, tools.schemas, tools.annotations, tools.directory_hints, tools.token_cost, tools.api_dumptool list unknown (behind auth, not probed, or empty)
stabilityn/a · weight 15
  • n/a
    stability.changes, stability.rug_pulltool list unknown
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

Tool list unknown · checked 2026-10-20 03:37 UTC

Tool changes

No tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 94 / 100

provenance90
livenessn/a
freshness100
hygiene95

+repository +namespace-matches-repo +website ~liveness-unmeasured +updated-2d-ago -unpinned-packages(1)

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

packageregistryversionruntimesecrets
ghcr.io/pete-builds/mcp-unifi:0.26.0ociunpinneddockerUNIFI_API_KEY, UNIFI_ACCESS_API_KEY

Tools (0)

No tools observed. Local packages are never executed by the registry.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "io.github.pete-builds/unifi",
  "title": "UniFi Gateway",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "version": "0.26.0",
  "packages": [
    {
      "transport": {
        "url": "http://localhost:3714/mcp",
        "type": "streamable-http"
      },
      "identifier": "ghcr.io/pete-builds/mcp-unifi:0.26.0",
      "runtimeHint": "docker",
      "registryType": "oci",
      "environmentVariables": [
        {
          "name": "STUB_MODE",
          "format": "string",
          "choices": [
            "true",
            "false"
          ],
          "default": "true",
          "description": "When true, the server returns realistic mock data and requires no UniFi hardware. Defaults to true so the image is functional out of the box."
        },
        {
          "name": "UNIFI_HOST",
          "format": "string",
          "description": "IP address or hostname of the UniFi OS gateway (UCG-Fiber, UDM Pro, etc). Required when STUB_MODE=false and MCP_UNIFI_CONTROLLERS_FILE is unset."
        },
        {
          "name": "UNIFI_API_KEY",
          "format": "string",
          "isSecret": true,
          "description": "Local API key generated under Settings -> Control Plane -> Integrations on the gateway. Required when STUB_MODE=false and MCP_UNIFI_CONTROLLERS_FILE is unset."
        },
        {
          "name": "UNIFI_SITE",
          "format": "string",
          "default": "default",
          "description": "UniFi controller site name. Defaults to 'default'."
        },
        {
          "name": "UNIFI_VERIFY_SSL",
          "format": "string",
          "choices": [
            "true",
            "false"
          ],
          "default": "false",
          "description": "Whether to verify the gateway's TLS certificate. Defaults to false because most home gateways use a self-signed cert."
        },
        {
          "name": "MCP_UNIFI_CONTROLLERS_FILE",
          "format": "string",
          "description": "Path to a YAML file describing multiple named controllers for multi-site management. When set, the legacy UNIFI_HOST / UNIFI_API_KEY env vars are ignored. Each entry needs name, host, api_key, and optionally port, site, verify_ssl."
        },
        {
          "name": "MCP_UNIFI_MODULES_ENABLED",
          "format": "string",
          "default": "network",
          "description": "Comma-separated list of modules to load. Known values: 'network', 'protect', 'access'. Defaults to 'network'. Set to 'network,protect,access' to enable Protect and Access tools alongside Network. Access currently ships read-only; door unlocks and credential issuance require session-token auth and are deferred."
        },
        {
          "name": "UNIFI_ACCESS_HOST",
          "format": "string",
          "description": "UniFi Access hub IP or hostname. Required when the access module is enabled and STUB_MODE=false. Often the same host as UNIFI_HOST."
        },
        {
          "name": "UNIFI_ACCESS_API_KEY",
          "format": "string",
          "isSecret": true,
          "description": "UniFi Access API key. Separate from the Network API key; generated on the Access controller's developer settings. Required when the access module is enabled and STUB_MODE=false."
        },
        {
          "name": "UNIFI_ACCESS_PORT",
          "format": "string",
          "default": "12445",
          "description": "HTTPS port for the Access hub. Defaults to 12445 (the direct Access app port)."
        },
        {
          "name": "MCP_UNIFI_AUDIT_SINK",
          "format": "string",
          "choices": [
            "file",
            "stdout",
            "syslog"
          ],
          "default": "file",
          "description": "Audit log sink. One of 'file' (default), 'stdout', or 'syslog'. Every tool call is recorded to a JSONL stream with secrets scrubbed."
        },
        {
          "name": "MCP_UNIFI_AUDIT_PATH",
          "format": "string",
          "default": "audit.jsonl",
          "description": "Path for the audit log file when MCP_UNIFI_AUDIT_SINK=file. Defaults to audit.jsonl in the process CWD."
        }
      ]
    }
  ],
  "repository": {
    "url": "https://github.com/pete-builds/mcp-unifi",
    "source": "github"
  },
  "websiteUrl": "https://pete-builds.github.io/mcp-unifi/",
  "description": "Safe-by-default UniFi MCP: Network + Protect + Access, multi-site, dry-run, audit log."
}