{"_id":"@bakhshb/unifi-mcp","_rev":"6-d469af9919365d6c54d03dfa2be65b91","name":"@bakhshb/unifi-mcp","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@bakhshb/unifi-mcp","version":"1.0.0","keywords":["mcp","model-context-protocol","unifi","ubiquiti","network","mcp-server"],"author":{"name":"Baraa Bakhsh"},"license":"MIT","_id":"@bakhshb/unifi-mcp@1.0.0","maintainers":[{"name":"bakhshb","email":"bakhshb@gmail.com"}],"bin":{"unifi-mcp":"build/index.js"},"dist":{"shasum":"acb0a9afa0c3cb2f9cbca9994086797a1804391e","tarball":"https://registry.npmjs.org/@bakhshb/unifi-mcp/-/unifi-mcp-1.0.0.tgz","fileCount":23,"integrity":"sha512-2iw8xtupXlz0yQU/uVmSZbxZmeuCql4gjL5ocCzRdS4wiKcPBUr+al1jnWAi7TFSUpv/FlyeC10uJK5VVyKP+A==","signatures":[{"sig":"MEQCIBY3r4zjMJ7lGXmrSac9zuruk9vfN6HX0D2xpeKc6psQAiA81PHvKiV7q31jV1f1TkAymfkBAMn41Npnd9jdz5XG1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":278421},"main":"build/index.js","engines":{"node":">=18.0.0"},"gitHead":"ace07265faf7ce66c795142f7fc38c8f1a2f57f2","scripts":{"build":"npm run clean && tsc && chmod 755 build/index.js","clean":"rm -rf build","start":"node build/index.js"},"_npmUser":{"name":"bakhshb","email":"bakhshb@gmail.com"},"_npmVersion":"10.9.7","description":"2-tool OpenAPI-driven MCP server for UniFi Network","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.23.0","axios":"^1.7.0","js-yaml":"^4.1.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/unifi-mcp_1.0.0_1774817988717_0.13624675774139727","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@bakhshb/unifi-mcp","version":"1.0.1","keywords":["mcp","model-context-protocol","unifi","ubiquiti","network","mcp-server"],"author":{"name":"Baraa Bakhsh"},"license":"MIT","_id":"@bakhshb/unifi-mcp@1.0.1","maintainers":[{"name":"bakhshb","email":"bakhshb@gmail.com"}],"bin":{"unifi-mcp":"build/index.js"},"dist":{"shasum":"43413feb488d2a0692465ce6450c4c0d9d850ef7","tarball":"https://registry.npmjs.org/@bakhshb/unifi-mcp/-/unifi-mcp-1.0.1.tgz","fileCount":23,"integrity":"sha512-Vk4QCUBT84i1RKxHc3mEhegFrtEZpTfHSI5r+3vhlWQXUiILW8P6jSwcjF5/xMElEgLStdkv1NmUIcOTMX56JQ==","signatures":[{"sig":"MEQCIFSTIwPvgR+XZxQvWl25nQMxyN7GIpLUV0k+fDqQHdk6AiB+F4ue2Fl5KBl7pPHPqdNK/mIXbSn9mOFhqeUFecojCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":279185},"main":"build/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"34f51e30c4e0ef4df5511062138e92d54804ae72","scripts":{"build":"npm run clean && tsc && chmod 755 build/index.js","clean":"rm -rf build","start":"node build/index.js"},"_npmUser":{"name":"bakhshb","email":"bakhshb@gmail.com"},"_npmVersion":"10.9.7","description":"2-tool OpenAPI-driven MCP server for UniFi Network","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.23.0","axios":"^1.7.0","js-yaml":"^4.1.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/unifi-mcp_1.0.1_1774818991605_0.5511563318841288","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@bakhshb/unifi-mcp","version":"1.0.2","keywords":["mcp","model-context-protocol","unifi","ubiquiti","network","mcp-server"],"author":{"name":"Baraa Bakhsh"},"license":"MIT","_id":"@bakhshb/unifi-mcp@1.0.2","maintainers":[{"name":"bakhshb","email":"bakhshb@gmail.com"}],"bin":{"unifi-mcp":"build/index.js"},"dist":{"shasum":"e8515ee8c763e22bd0ad019e6174161274dbeb71","tarball":"https://registry.npmjs.org/@bakhshb/unifi-mcp/-/unifi-mcp-1.0.2.tgz","fileCount":23,"integrity":"sha512-pYzdXm+lYogvkrg2QxqV2FYy9ZksBeB85cnoIf/ZuM2PK4oHFPJP3ifyjOjAOJl6BwK4gYGr/y7uWmdf0R12yQ==","signatures":[{"sig":"MEYCIQDsM67u0oP71D3rY+A2bWyV3DgcgO9+Aq3PSbbBO+23RQIhAKqak4OmNdlPrrB9KQXuj06saiaMBkTU3Y0I9ChwE/l6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":280523},"main":"build/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"96583dd88e703c3ed335698e12d2caa203c8c84d","scripts":{"build":"npm run clean && tsc && chmod 755 build/index.js","clean":"rm -rf build","start":"node build/index.js"},"_npmUser":{"name":"bakhshb","email":"bakhshb@gmail.com"},"_npmVersion":"10.9.7","description":"2-tool OpenAPI-driven MCP server for UniFi Network","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.23.0","axios":"^1.7.0","js-yaml":"^4.1.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/unifi-mcp_1.0.2_1774819166334_0.4630883318357806","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@bakhshb/unifi-mcp","version":"1.0.3","keywords":["mcp","model-context-protocol","unifi","ubiquiti","network","mcp-server"],"author":{"name":"Baraa Bakhsh"},"license":"MIT","_id":"@bakhshb/unifi-mcp@1.0.3","maintainers":[{"name":"bakhshb","email":"bakhshb@gmail.com"}],"bin":{"unifi-mcp":"build/index.js"},"dist":{"shasum":"47989552fe10cd31f9f3570e992ef82e0d0d503c","tarball":"https://registry.npmjs.org/@bakhshb/unifi-mcp/-/unifi-mcp-1.0.3.tgz","fileCount":25,"integrity":"sha512-BbJ5r6vu8k56QX1jPQNy61lVx2BYlSrULUeu3t5XCL8HJTU9G31i2AYmWXKtD6V3tqHyZY3uEFurrW7doiNwTA==","signatures":[{"sig":"MEUCIQDe4mb5tJFPncIpgIm6+o2sGy76GRZOljjkOWO6EvpnkgIgHd1IkC2zpeCTDcwNvc+yeC/VCel/EEArKTtFB1TDWWg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":293993},"main":"build/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"69e8a34cadd3af27415b86d3f856dfccbc5e415d","scripts":{"build":"npm run clean && tsc && chmod 755 build/index.js","clean":"rm -rf build","start":"node build/index.js"},"_npmUser":{"name":"bakhshb","email":"bakhshb@gmail.com"},"_npmVersion":"10.9.7","description":"2-tool OpenAPI-driven MCP server for UniFi Network","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.23.0","axios":"^1.7.0","js-yaml":"^4.1.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/unifi-mcp_1.0.3_1774821375213_0.2692449026402679","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@bakhshb/unifi-mcp","version":"1.0.4","keywords":["mcp","model-context-protocol","unifi","ubiquiti","network","mcp-server"],"author":{"name":"Baraa Bakhsh"},"license":"MIT","_id":"@bakhshb/unifi-mcp@1.0.4","maintainers":[{"name":"bakhshb","email":"bakhshb@gmail.com"}],"bin":{"unifi-mcp":"build/index.js"},"dist":{"shasum":"7451dc0761afa25959f43b4d3639528abfbbe8f6","tarball":"https://registry.npmjs.org/@bakhshb/unifi-mcp/-/unifi-mcp-1.0.4.tgz","fileCount":26,"integrity":"sha512-5nrjiUszdGFszL1Z7Sah8Nl/EbEaQMPhVcEjCGqDFy1j5tjGQNSmUX3BN1p0kxJeTa5aLezTihhFquz+lZ7yGQ==","signatures":[{"sig":"MEUCIQDbKpNIHkElLTg2yTF7udNBkGMSHZxSxalFnYJFbLGiyQIgMl+LoiW1Lx9rRPkiAo1TbcgIIIp90Lpzf2jKgCwhkwI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298355},"main":"build/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"35c2ab7f6e847bf3d1d958e75125830a71b8f02b","scripts":{"build":"npm run clean && tsc && chmod 755 build/index.js","clean":"rm -rf build","start":"node build/index.js"},"_npmUser":{"name":"bakhshb","email":"bakhshb@gmail.com"},"_npmVersion":"10.9.7","description":"2-tool OpenAPI-driven MCP server for UniFi Network","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.23.0","axios":"^1.7.0","js-yaml":"^4.1.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@types/js-yaml":"^4.0.9"},"_npmOperationalInternal":{"tmp":"tmp/unifi-mcp_1.0.4_1774889141354_0.9990531344293785","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@bakhshb/unifi-mcp","version":"1.1.0","description":"2-tool OpenAPI-driven MCP server for UniFi Network","main":"build/index.js","bin":{"unifi-mcp":"build/index.js"},"scripts":{"build":"npm run clean && tsc && chmod 755 build/index.js","dev":"tsc --watch","start":"node build/index.js","type-check":"tsc --noEmit","clean":"rm -rf build","test":"vitest run","test:watch":"vitest"},"keywords":["mcp","model-context-protocol","unifi","ubiquiti","network","mcp-server"],"author":{"name":"Baraa Bakhsh"},"license":"MIT","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","axios":"^1.7.0","zod":"^3.23.0","js-yaml":"^4.1.0"},"devDependencies":{"@types/js-yaml":"^4.0.9","@types/node":"^22.0.0","@vitest/coverage-v8":"^3.0.0","typescript":"^5.5.0","vitest":"^3.0.0"},"engines":{"node":">=18.0.0"},"type":"module","_id":"@bakhshb/unifi-mcp@1.1.0","gitHead":"439549c8471e333e23811770fa8dae9a570fde91","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-+cDfENWqaQBql6kiZUQUUH1Gkq/o4MMflAmxb0A26KHnK1cY3LMDSUTZSmNBkjfj13vKw2pj5+cl/f7DDBhZDg==","shasum":"be816f762c62fc77a0dce17fe95f0556f2a3bfe8","tarball":"https://registry.npmjs.org/@bakhshb/unifi-mcp/-/unifi-mcp-1.1.0.tgz","fileCount":39,"unpackedSize":305916,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHearpuK1KUmmhnjjN6ATydTM7r58XSxYUaNAAXFz6COAiANiJhs2Nlqv/UpqANypZiHRibjwdUKRmpaH1sPtYn3xg=="}]},"_npmUser":{"name":"bakhshb","email":"bakhshb@gmail.com"},"directories":{},"maintainers":[{"name":"bakhshb","email":"bakhshb@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/unifi-mcp_1.1.0_1775104147306_0.8760056950954618"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-29T20:59:48.618Z","modified":"2026-04-02T04:29:07.866Z","1.0.0":"2026-03-29T20:59:48.908Z","1.0.1":"2026-03-29T21:16:31.735Z","1.0.2":"2026-03-29T21:19:26.473Z","1.0.3":"2026-03-29T21:56:15.365Z","1.0.4":"2026-03-30T16:45:41.530Z","1.1.0":"2026-04-02T04:29:07.452Z"},"author":{"name":"Baraa Bakhsh"},"license":"MIT","keywords":["mcp","model-context-protocol","unifi","ubiquiti","network","mcp-server"],"description":"2-tool OpenAPI-driven MCP server for UniFi Network","maintainers":[{"name":"bakhshb","email":"bakhshb@gmail.com"}],"readme":"# UniFi MCP Server\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nControl your UniFi network via AI. 2-tool design powered by OpenAPI spec — works with **UniFi Cloud API** or **local Dream Machine**.\n\n## What it does\n\n- Query devices, clients, network stats\n- Manage WiFi, VLANs, firewall rules\n- Create network configurations\n- Monitor network health\n\n## Quick Setup (5 minutes)\n\n### 1. Get your UniFi API Key\n\n1. Go to [account.ui.com](https://account.ui.com)\n2. Sign in → Settings → API Keys\n3. Create new key → copy it\n\n### 2. Run with npx (no install)\n\n```bash\nUNIFI_API_TYPE=cloud-ea UNIFI_API_KEY=your-key-here npx @bakhshb/unifi-mcp\n```\n\nOr create a `.env` file:\n\n```bash\nUNIFI_API_TYPE=cloud-ea\nUNIFI_API_KEY=your-key-here\n```\n\nThen run:\n```bash\nnpx @bakhshb/unifi-mcp\n```\n\n### 3. Connect to Claude/OpenClaw\n\n**OpenClaw** (`~/.openclaw/openclaw.json`):\n\n```json\n{\n  \"mcp\": {\n    \"servers\": {\n      \"unifi\": {\n        \"command\": \"npx\",\n        \"args\": [\"@bakhshb/unifi-mcp\"],\n        \"env\": {\n          \"UNIFI_API_TYPE\": \"cloud-ea\",\n          \"UNIFI_API_KEY\": \"your-key-here\"\n        }\n      }\n    }\n  }\n}\n```\n\n**Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"unifi\": {\n      \"command\": \"npx\",\n      \"args\": [\"@bakhshb/unifi-mcp\"],\n      \"env\": {\n        \"UNIFI_API_TYPE\": \"cloud-ea\",\n        \"UNIFI_API_KEY\": \"your-key-here\"\n      }\n    }\n  }\n}\n```\n\n## Local Dream Machine Setup\n\nYour **local UniFi controller** (Dream Machine, etc.) also supports API keys, just like the cloud API. Generate an API key in your controller settings:\n\n1. Go to your UniFi Controller → Settings → API Keys\n2. Create a new key for local access\n3. Use the same env vars as cloud, but with `UNIFI_API_TYPE=local`\n\n```bash\nUNIFI_API_TYPE=local\nUNIFI_API_KEY=your-local-api-key\nUNIFI_LOCAL_HOST=192.168.1.1\nUNIFI_LOCAL_VERIFY_SSL=false\n```\n\nOr in openclaw.json:\n\n```json\n{\n  \"mcp\": {\n    \"servers\": {\n      \"unifi\": {\n        \"command\": \"npx\",\n        \"args\": [\"@bakhshb/unifi-mcp\"],\n        \"env\": {\n          \"UNIFI_API_TYPE\": \"local\",\n          \"UNIFI_API_KEY\": \"your-local-api-key\",\n          \"UNIFI_LOCAL_HOST\": \"192.168.1.1\",\n          \"UNIFI_LOCAL_VERIFY_SSL\": \"false\"\n        }\n      }\n    }\n  }\n}\n```\n\n### Environment Variables\n\n| Variable | Required | Default | Description |\n|----------|----------|---------|-------------|\n| `UNIFI_URL` | Yes | - | Your UniFi controller URL (e.g., `https://192.168.1.1` or `https://api.ui.com` for cloud) |\n| `UNIFI_API_KEY` | Yes* | - | Your API key (*required if not using username/password) |\n| `UNIFI_USERNAME` | Yes* | - | UniFi username (*required if not using API key) |\n| `UNIFI_PASSWORD` | Yes* | - | UniFi password (*required if not using API key) |\n| `UNIFI_SITE_ID` | No | `default` | Your UniFi site identifier |\n| `UNIFI_TIMEOUT` | No | `30000` | Request timeout in milliseconds |\n\n**Note:** Set either `UNIFI_API_KEY` OR (`UNIFI_USERNAME` + `UNIFI_PASSWORD`).\n\n**Note:** For local mode, you can also use session cookies (`UNIFI_SESSION_COOKIE` + `UNIFI_CSRF_TOKEN`) instead of API key, but API key is simpler.\n\n### API Modes Explained\n\nUniFi MCP supports three connection modes, set via `UNIFI_API_TYPE`:\n\n| Mode | When to use | Auth required | Rate limit |\n|------|-------------|---------------|------------|\n| `local` | Your Dream Machine / UDM Pro SE on the LAN | API key | None |\n| `cloud-v1` | Remote management via Ubiquiti cloud (stable) | API key | 10,000 req/min |\n| `cloud-ea` | Remote management via Ubiquiti cloud (Early Access) | API key | 100 req/min |\n\n**`local`** — Connect directly to your UniFi controller on the local network. Full access, no external traffic, no rate limits. Requires `UNIFI_LOCAL_HOST`.\n\n**`cloud-v1`** — Stable cloud API hosted at `api.ui.com`. Backward compatible with long-term support. Higher rate limit but core feature set only.\n\n**`cloud-ea`** — Early Access cloud API at `api.ui.com`. Newer features before they land in v1, but lower rate limit and may still evolve. The Site Manager API and some newer endpoints live here first.\n\n**Which to choose?**\n- **Home lab / local network** → `local` (your UDM Pro SE)\n- **Remote management, production stability** → `cloud-v1`\n- **Remote management, want latest features** → `cloud-ea`\n\n## Commands\n\n### `unifi-api`\nExecute any UniFi Integration API call. Examples:\n- `unifi-api` with `path=\"/v2/sites\"` → list all sites\n- `unifi-api` with `path=\"/v1/sites/{siteId}/devices\"` and `pathParams={siteId:\"default\"}` → get devices\n- `unifi-api` with `path=\"/v1/sites/{siteId}/clients\"` and `pathParams={siteId:\"default\"}` → get clients\n\n### `unifi-api-schema`\nDiscover available Integration API operations:\n- No args → list all tags/operations\n- `tag=\"sites\"` → operations for sites\n- `path=\"/v1/sites/{siteId}/devices\"` → details for that path\n\n### `unifi-legacy-client-stats`\nGet per-client bandwidth statistics from the **legacy controller API** (`/api/s/{site}/stat/sta`). This endpoint is separate from the Integration API and returns real-time tx/rx bytes and rates per client.\n\n**Why a separate tool?** The legacy controller API is not covered by the UniFi OpenAPI spec (beezly/unifi-apis). It exists on the same controller but uses different paths (`/proxy/network/api/s/`) and returns bandwidth data (tx_bytes, rx_bytes, tx_rate, rx_rate) unavailable in the Integration API.\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `site` | string | `\"default\"` | Site name or ID |\n\n**Example response:**\n```json\n{\n  \"success\": true,\n  \"message\": \"Legacy client stats: 2 active clients on site 'default'\",\n  \"data\": {\n    \"count\": 2,\n    \"site\": \"default\",\n    \"clients\": [\n      {\n        \"hostname\": \"iPhone\",\n        \"ip\": \"192.168.1.100\",\n        \"mac\": \"aa:bb:cc:dd:ee:ff\",\n        \"network\": \"Home\",\n        \"vlan\": 1,\n        \"is_wired\": false,\n        \"tx_bytes\": 1234567890,\n        \"tx_bytes_formatted\": \"1.15 GB\",\n        \"rx_bytes\": 987654321,\n        \"rx_bytes_formatted\": \"941.8 MB\",\n        \"tx_rate_bps\": 1500,\n        \"tx_rate_formatted\": \"1.5 Kbps\",\n        \"rx_rate_bps\": 800,\n        \"rx_rate_formatted\": \"800 bps\",\n        \"uptime\": 3600,\n        \"uptime_formatted\": \"1h 0m\",\n        \"signal\": -50,\n        \"essid\": \"MyWiFi\",\n        \"ap_name\": \"UDM-Pro\"\n      },\n      {\n        \"hostname\": \"laptop\",\n        \"ip\": \"192.168.1.50\",\n        \"mac\": \"11:22:33:44:55:66\",\n        \"network\": \"Home\",\n        \"vlan\": 1,\n        \"is_wired\": true,\n        \"tx_bytes\": 50000000,\n        \"tx_bytes_formatted\": \"47.7 MB\",\n        \"rx_bytes\": 100000000,\n        \"rx_bytes_formatted\": \"95.4 MB\",\n        \"tx_rate_bps\": 0,\n        \"tx_rate_formatted\": \"0 B/s\",\n        \"rx_rate_bps\": 0,\n        \"rx_rate_formatted\": \"0 B/s\",\n        \"uptime\": 7200,\n        \"uptime_formatted\": \"2h 0m\",\n        \"ap_name\": \"Switch\"\n      }\n    ]\n  }\n}\n```\n\n## Troubleshooting\n\n**\"API key required\"** → Set `UNIFI_API_KEY` in your environment\n\n**\"Connection refused\"** → Check `UNIFI_LOCAL_HOST` for local mode\n\n**SSL errors** → Set `UNIFI_LOCAL_VERIFY_SSL=false` for local\n\n## Architecture\n\n**Token savings:** Traditional UniFi MCP servers cost ~45,000–60,000 tokens per session. The 2-tool + 1-legacy approach costs ~500–1,500 tokens for the Integration API, plus ~200 tokens for the legacy stats tool — a **~97% reduction**.\n\n| Approach | Tools | Token Cost | Coverage |\n|----------|-------|------------|----------|\n| [enuno/unifi-mcp-server](https://github.com/enuno/unifi-mcp-server) (explicit) | 148 | ~45,000–60,000 | Fixed |\n| [sirkirby/unifi-mcp](https://github.com/sirkirby/unifi-mcp) (multi-product) | ~82 | ~25,000–35,000 | Network + Protect + Access + Drive |\n| **This server (2-tool + 1-legacy)** | **3 tools** | **~700–1,700** | **44+ Integration API ops + legacy stats** |\n\n- **3 tools** instead of 148 explicit tools → ~97% less context overhead\n- 2 generic tools for Integration API (OpenAPI spec-driven, dynamically scales with API surface)\n- 1 legacy tool for bandwidth stats (not in OpenAPI spec, controller-specific)\n- Inspired by [@dokploy/mcp](https://www.npmjs.com/package/dokploy-mcp) ([tacticlaunch/dokploy-mcp](https://github.com/tacticlaunch/dokploy-mcp)) — first MCP server to demonstrate the 2-tool OpenAPI pattern, covering 463 Dokploy operations in ~500 tokens\n- OpenAPI specs from [beezly/unifi-apis](https://github.com/beezly/unifi-apis) (which traces its API research lineage to [sirkirby/unifi-mcp](https://github.com/sirkirby/unifi-mcp))\n\n## License\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nMIT License\n","readmeFilename":"README.md"}