UniFi MCP Server — Skills Guide
Agent skills are Markdown files with YAML frontmatter (name, description) that an AI agent reads on demand. They tell the agent which UniFi tools exist, which API mode each needs, and how to use them safely, without keeping every tool definition in context.
The skills/ directory holds all agent skills, one folder per skill.
- Operator skills help an agent use a running UniFi MCP server.
- Developer skills help a coding agent change this codebase.
skills/unifi-mcp-setup/ is a one-file overview of the whole server (setup, API modes, capability domains, example prompts). It used to live at the repository root as SKILL.md, but package-skill installers such as npx skills only install a root-level SKILL.md and ignore everything under skills/, which hid every other skill from those tools. It now lives alongside the rest, in skills/unifi-mcp-setup/SKILL.md.
A third skill, mintlify-docs, lives in .mintlify/skills/ because Mintlify serves it from there. It helps an agent maintain, validate and publish this site’s documentation.
Operator skills (using the server)
Developer skills (changing the codebase)
The developer skills are also kept in
.claude/skills/ (Claude Code loads them automatically in this repository) and .agents/skills/ (Codex and other agents). skills/ is the source of truth: tests/unit/test_agent_docs.py fails if a copy differs, and checks that the developer skills cite only paths and names that exist.
Two further guards read the live tool registry and fail when a skill drifts
from it. tests/unit/test_skill_tool_references.py rejects a skill table
that names a tool the server does not register, and
tests/unit/test_skill_parameter_references.py rejects a skill that states
an argument the tool’s schema does not have. The second reads an explicit
argument list, so prose that mentions a response field or a contrasting
spelling is not mistaken for an argument claim. The first also compares any
tool count or module count a skill or the README states with the live
registry, so a figure in prose cannot go stale without the suite noticing.
The mintlify-docs skill follows the same pattern with a different source of truth: .mintlify/skills/mintlify-docs/SKILL.md is the original, and .claude/skills/mintlify-docs/ and .agents/skills/mintlify-docs/ hold copies of it. The same test keeps those copies in sync.
Installing
Claude Code loads a skill from a folder that contains aSKILL.md: ~/.claude/skills/<name>/SKILL.md for every session, or .claude/skills/<name>/SKILL.md for one project. Copy the folders you want.
.agents/skills/) take the same folders. Copy them into that agent’s skills directory.
To update, pull the repository and copy the folders again.
Using
You don’t call a skill directly. The agent sees each skill’sdescription and loads the skill when your request matches, then uses the UniFi MCP tools it describes. The MCP server must be configured in the same client (see the README’s quick start), because the skills describe its tools but do not call the controller themselves.
Example prompts:
- “Which clients are on the guest VLAN right now?” (
unifi-network) - “Audit the zone-based firewall for rules that allow WAN to LAN.” (
unifi-security) - “Which APs share a 5 GHz channel with a neighbor? Propose a channel plan.” (
unifi-channel-planning) - “Back up the default site, then list the backups.” (
unifi-system)
description broader.
Safety
The skills follow the server’s rules: every mutating tool needsconfirm=True, dry_run=True previews a change, and UNIFI_READ_ONLY=true removes mutating tools from the server. With bearer tokens, the token’s role decides what a call may do: viewer reads, operator makes ordinary changes, and admin is needed for destructive changes, including firewall policy changes.
UNIFI_PROFILE — server-side tool filtering
A skill keeps tool guidance out of context until needed.UNIFI_PROFILE goes further and registers only some tool modules, so the client sees fewer tool definitions. Counts are tools the server lists in local mode, including the 4 fleet tools every profile gets.
An unknown profile logs a warning and loads every module. To expose only non-mutating tools in any profile, set
UNIFI_READ_ONLY=true.
Example, a security-focused server in Claude Desktop:
UNIFI_PROFILE=security with skills/unifi-security/).
bin/unifi-cli — CLI wrapper
bin/unifi-cli calls unifi-mcp-server cli, so you can run one tool from a shell or script without a persistent MCP server:
