Skip to main content
Glama
README.md6 kB
# UniFi MCP Server A Model Context Protocol (MCP) server for comprehensive UniFi Network Management via the UniFi Cloud API. This server enables AI assistants like Claude to manage your UniFi infrastructure through natural language. ## Features - **UniFi Cloud API Integration** - Full access to api.ui.com for remote management - **OAuth 2.0 Authentication** - Secure access with PKCE support for Claude Desktop, Claude Mobile, ChatGPT, and more - **Multi-Transport Support** - SSE and Streamable HTTP for flexible deployment - **Complete UniFi Ecosystem** - Network, Protect (cameras), and Access (doors) management - **Production Ready** - Docker support, Redis for token storage, Coolify/VPS deployment ## Quick Start ### 1. Get Your UniFi Cloud API Key 1. Go to [UniFi Site Manager](https://unifi.ui.com) 2. Navigate to API section from the left navigation 3. Click "Create API Key" 4. Copy the generated key ### 2. Installation ```bash # Clone the repository git clone https://github.com/yourusername/unifi-mcp-server.git cd unifi-mcp-server # Install dependencies npm install # Create environment file cp .env.example .env ``` ### 3. Configuration Edit `.env` with your settings: ```env # Required: Your UniFi Cloud API Key UNIFI_API_KEY=zjWD6zwI55loIpMLLcjDDvRTCuVnVyHA2 # Server settings PORT=3000 BASE_URL=https://your-domain.com # OAuth password for authorization (optional but recommended) OAUTH_PASSWORD=your_secure_password # API Key for direct access (optional) API_KEY=your_api_key ``` ### 4. Run the Server **Development (stdio mode for Claude Desktop):** ```bash npm run dev ``` **Production (HTTP server with OAuth):** ```bash npm run start:http ``` **Docker:** ```bash docker-compose up -d ``` ## Claude Desktop Configuration Add to your `claude_desktop_config.json`: ```json { "mcpServers": { "unifi": { "command": "node", "args": ["/path/to/unifi-mcp-server/src/index.js"], "env": { "UNIFI_API_KEY": "your_api_key_here" } } } } ``` ## Remote Access (Claude Mobile / ChatGPT) For remote access, deploy the HTTP server and connect via OAuth: 1. Deploy to your VPS or Coolify 2. Configure your domain with HTTPS 3. Connect using the OAuth flow: - Server URL: `https://your-domain.com` - Client ID: `claude-mobile` or `chatgpt` - Scope: `unifi-api` ## Available Tools ### Network & System | Tool | Description | |------|-------------| | `unifi_health` | Check UniFi Cloud API connectivity | | `get_system_status` | Comprehensive system status overview | | `list_hosts` | List all UniFi OS consoles | | `list_sites` | List all network sites | | `get_isp_metrics` | Get ISP performance metrics | ### Devices | Tool | Description | |------|-------------| | `list_all_devices` | List all UniFi devices | | `get_device` | Get device details | | `locate_device` | Flash LEDs to locate a device | | `restart_device` | Restart a device | | `find_device_by_mac` | Search by MAC address | | `get_offline_devices` | List offline devices | ### Clients | Tool | Description | |------|-------------| | `list_all_clients` | List all connected clients | | `block_client` | Block a client from network | | `unblock_client` | Unblock a client | | `reconnect_client` | Force reconnect a client | | `find_client_by_name` | Search clients by name | | `get_client_bandwidth_summary` | Bandwidth usage analysis | ### UniFi Protect (Cameras) | Tool | Description | |------|-------------| | `list_cameras` | List all cameras | | `get_camera` | Get camera details | | `set_camera_privacy` | Toggle privacy mode | | `set_camera_recording` | Set recording mode | ### UniFi Access (Doors) | Tool | Description | |------|-------------| | `list_doors` | List all access doors | | `unlock_door` | Temporarily unlock a door | | `lock_door` | Lock a door | ## Example Usage Once connected, you can use natural language: - "Show me the status of my UniFi network" - "List all offline devices" - "Who's using the most bandwidth?" - "Block the device with MAC XX:XX:XX:XX:XX:XX" - "Unlock the front door for 10 seconds" - "Turn on privacy mode for the garage camera" ## Deployment ### Coolify 1. Create new application from Git repository 2. Set environment variables in Coolify dashboard 3. Configure your domain with HTTPS 4. Deploy! ### Docker Compose ```bash # Set environment variables export UNIFI_API_KEY=your_key export OAUTH_PASSWORD=your_password export BASE_URL=https://your-domain.com # Start services docker-compose up -d ``` ### Manual VPS ```bash # Install Node.js 20+ # Clone repository # Install dependencies: npm install # Set up systemd service or PM2 # Configure reverse proxy (nginx/caddy) with SSL ``` ## API Endpoints | Endpoint | Description | |----------|-------------| | `GET /health` | Health check | | `GET /status` | Server status | | `GET /.well-known/oauth-authorization-server` | OAuth discovery | | `GET /oauth/authorize` | OAuth authorization | | `POST /oauth/token` | Token exchange | | `GET /sse` | SSE transport | | `POST /mcp/messages` | MCP messages (authenticated) | ## Security - **HTTPS Required** - Always use HTTPS in production - **OAuth 2.0 + PKCE** - Secure authorization flow - **API Key Authentication** - Alternative for server-to-server - **Password Protection** - Optional OAuth authorization password - **Redis Token Storage** - Secure token management with TTL ## Troubleshooting ### API Key Issues ```bash # Test your API key curl -H "X-API-Key: YOUR_KEY" https://api.ui.com/v1/hosts ``` ### OAuth Issues - Check `OAUTH_PASSWORD` is set correctly - Verify `BASE_URL` uses HTTPS - Ensure redirect URIs match client configuration ### Connection Issues - Verify UniFi Cloud API is accessible - Check firewall rules for port 3000 - Review container logs: `docker-compose logs -f` ## License MIT License - See LICENSE file for details. ## Contributing Pull requests welcome! Please ensure: - Tests pass - Documentation updated - Code follows existing style

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/vandreus/Unifi-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server