Philips Hue MCP Server
Enables AI assistants to control Philips Hue smart lighting systems, including individual lights, groups, scenes, brightness, and color adjustments through natural language commands.
README
Philips Hue MCP Server
An MCP (Model Context Protocol) server that provides tools for controlling Philips Hue smart lighting systems. This allows AI assistants like Claude to interact with your Philips Hue lights, groups, and scenes.
Features
- 🌐 Network-accessible by default - Control lights from any device on your network
- 💡 List and control individual lights
- 🎨 Adjust brightness and color temperature
- 🌈 Set colors using CIE xy color space
- 🏠 Control groups/rooms of lights
- 🎬 List and activate scenes
- ⚡ Full async/await support for optimal performance
- 🏥 Health check endpoint for monitoring
- 🐳 Container-ready with Docker/Podman support
Prerequisites
- Python 3.10 or higher
- A Philips Hue Bridge connected to your network
- API key (username) for your Hue Bridge (see setup instructions below)
Installation
- Clone or download this repository:
cd ~/development/mcphue
- Create a virtual environment and install dependencies:
Option A: Using uv (Recommended - Fast)
If you have uv installed:
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv pip install -e .
Option B: Using standard pip
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -e .
Or install dependencies directly:
pip install mcp aiohue aiohttp pydantic python-dotenv
Configuration
Step 1: Find Your Hue Bridge IP Address
You can find your bridge IP address in several ways:
- Using the Philips Hue app (Settings > Hue Bridges > i icon)
- Using the discovery service: https://discovery.meethue.com/
- Checking your router's DHCP client list
Step 2: Obtain an API Key
To control your Hue Bridge, you need to create an API key (called "username" in Hue terminology):
- Press the physical button on your Hue Bridge
- Within 30 seconds, run one of these commands:
Using curl:
curl -X POST http://<BRIDGE_IP>/api \
-H "Content-Type: application/json" \
-d '{"devicetype":"hue-mcp-server#user"}'
Using Python:
import requests
response = requests.post(
"http://<BRIDGE_IP>/api",
json={"devicetype": "hue-mcp-server#user"}
)
print(response.json())
You'll receive a response like:
[{"success":{"username":"1234567890abcdef1234567890abcdef"}}]
Save the username value - this is your API key.
Step 3: Configure Environment Variables
Option A: Using .env file (Recommended)
- Copy the example environment file:
cp .env.example .env
- Edit the
.envfile with your actual values:
HUE_BRIDGE_IP=192.168.1.x
HUE_API_KEY=your-api-key-here
The .env file is already in .gitignore so your credentials won't be committed to version control.
Option B: Manual Environment Variables
Alternatively, you can set environment variables manually:
Linux/macOS:
export HUE_BRIDGE_IP="192.168.1.x"
export HUE_API_KEY="your-api-key-here"
Windows (Command Prompt):
set HUE_BRIDGE_IP=192.168.1.x
set HUE_API_KEY=your-api-key-here
Windows (PowerShell):
$env:HUE_BRIDGE_IP="192.168.1.x"
$env:HUE_API_KEY="your-api-key-here"
Container Deployment (Podman/Docker)
Building the Container Image
You can run the MCP server in a container (Podman or Docker), which is useful for isolation and deployment:
Using Podman (Recommended for WSL2):
cd ~/development/mcphue
# Build the image
podman build -t hue-mcp-server:latest .
Using Docker:
cd ~/development/mcphue
# Build the image
docker build -t hue-mcp-server:latest .
Running with Compose
The default docker-compose.yml runs the server in network mode (HTTP).
Podman Compose:
# Install podman-compose if not already installed
pip install podman-compose
# Start the container in network mode (default)
podman-compose up -d
# View logs
podman-compose logs -f
# Stop the container
podman-compose down
Docker Compose:
# Start the container in network mode (default)
docker-compose up -d
# View logs
docker-compose logs -f
# Stop the container
docker-compose down
Once running, the server is accessible at http://localhost:8080/mcp (or your machine's IP for remote access).
For stdio mode, use docker-compose.stdio.yml:
podman-compose -f docker-compose.stdio.yml up -d
# or
docker-compose -f docker-compose.stdio.yml up -d
Using Container with Claude Desktop (Recommended)
The wrapper script run-docker-mcp.sh automatically detects Podman or Docker and allows Claude Desktop to communicate with the containerized MCP server.
Step 1: Build the container image first:
cd ~/development/mcphue
# Using Podman
podman build -t hue-mcp-server:latest .
# Or using Docker
docker build -t hue-mcp-server:latest .
Step 2: Configure Claude Desktop
Edit your Claude Desktop config file based on your setup:
Option A: Linux (Claude Desktop on Linux)
Location: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"hue": {
"command": "/home/micro/development/mcphue/run-docker-mcp.sh"
}
}
}
Option B: Windows + WSL2 (MCP in WSL, Claude Desktop on Windows)
Location: %APPDATA%\Claude\claude_desktop_config.json
Full path example: C:\Users\YourUsername\AppData\Roaming\Claude\claude_desktop_config.json
{
"mcpServers": {
"hue": {
"command": "\\\\wsl.localhost\\Ubuntu\\home\\micro\\development\\mcphue\\run-mcp-windows.bat"
}
}
}
Alternative Windows path formats (try if the above doesn't work):
{
"mcpServers": {
"hue": {
"command": "\\\\wsl$\\Ubuntu\\home\\micro\\development\\mcphue\\run-mcp-windows.bat"
}
}
}
Or using the PowerShell script:
{
"mcpServers": {
"hue": {
"command": "powershell.exe",
"args": ["-File", "\\\\wsl.localhost\\Ubuntu\\home\\micro\\development\\mcphue\\run-mcp-windows.ps1"]
}
}
}
Option C: macOS
Location: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"hue": {
"command": "/path/to/mcphue/run-docker-mcp.sh"
}
}
}
Step 3: Restart Claude Desktop
The wrapper script will:
- Automatically detect whether you're using Podman or Docker
- Load environment variables from your
.envfile - Run the container with
--network hostto access your Hue Bridge - Handle stdio communication with Claude Desktop
- Automatically clean up the container when done
Container Networking Notes
- The container uses
--network hostmode to access your Hue Bridge on the local network - This is necessary because the Hue Bridge typically doesn't have external access
- Podman on WSL2 works great with host networking
- If your container runtime doesn't support host networking, you may need to configure bridge networking differently
Usage
Quick Start (Network Mode - Default)
The server runs in network mode by default, making it accessible from any computer on your network:
# Start the server
hue-mcp-server
# Or using Python directly
python -m hue_mcp_server.fastmcp_http_server
The server will start on http://0.0.0.0:8080 with the MCP endpoint at http://0.0.0.0:8080/mcp.
You can customize the host and port using environment variables:
MCP_HOST=0.0.0.0 MCP_PORT=8080 hue-mcp-server
Health Check:
curl http://localhost:8080/health
# {"status":"healthy","bridge_connected":true,"service":"hue-mcp-server"}
Using with Claude Desktop (Network Mode) 🌐
Network mode allows Claude Desktop to connect to the MCP server over HTTP, enabling remote access and multi-computer setups.
Step 1: Start the MCP Server
Make sure your MCP server is running in network mode:
# Start the server (runs on http://0.0.0.0:8080 by default)
hue-mcp-server
# Or start with Docker/Podman
podman-compose up -d
You should see output like:
INFO: Hue MCP HTTP Server starting on http://0.0.0.0:8080
INFO: MCP endpoint: http://0.0.0.0:8080/mcp
Step 2: Determine Your Server URL
Option A: Same Computer (Server and Claude Desktop on same machine)
- Use:
http://localhost:8080/mcp
Option B: Different Computer (Server on another machine)
- Find your server's IP address:
# On Linux/macOS ip addr show | grep "inet " | grep -v 127.0.0.1 # On Windows (in WSL or PowerShell) ipconfig | findstr IPv4 - Use:
http://YOUR_SERVER_IP:8080/mcp(e.g.,http://192.168.1.50:8080/mcp)
Step 3: Verify Server is Accessible
Test the health endpoint from the computer where Claude Desktop is installed:
# Replace localhost with your server IP if on different computer
curl http://localhost:8080/health
# Expected response:
# {"status":"healthy","bridge_connected":true,"service":"hue-mcp-server"}
If you can't reach the health endpoint, check:
- Server is running (
podman psorps aux | grep hue_mcp_server) - Firewall allows port 8080
- Both computers are on the same network
Step 4: Configure Claude Desktop
Find your Claude Desktop config file:
| Platform | Config File Location |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json<br/>Full path: C:\Users\YourUsername\AppData\Roaming\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
Edit the config file and add the Hue MCP server configuration:
For Same Computer:
{
"mcpServers": {
"hue": {
"url": "http://localhost:8080/mcp"
}
}
}
For Different Computer (Remote Server):
{
"mcpServers": {
"hue": {
"url": "http://192.168.1.50:8080/mcp"
}
}
}
Replace 192.168.1.50 with your actual server IP address
If you have other MCP servers configured, add the hue entry alongside them:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user"]
},
"hue": {
"url": "http://localhost:8080/mcp"
}
}
}
Step 5: Restart Claude Desktop
Close Claude Desktop completely and restart it. The Hue MCP tools should now be available.
Step 6: Test the Connection
In Claude Desktop, try asking:
- "Can you list my Philips Hue lights?"
- "Turn on the living room lights"
Claude should be able to see and use the Hue MCP tools.
Troubleshooting Network Mode
Claude Desktop can't connect to MCP server:
- Verify server is running:
curl http://YOUR_SERVER:8080/health - Check the Claude Desktop config file has the correct URL
- Ensure no typos in the URL (must end with
/mcp) - Try using IP address instead of hostname
Connection works locally but not from another computer:
- Check firewall settings on server machine
- Verify both computers are on the same network
- Try pinging the server:
ping YOUR_SERVER_IP - See NETWORK_SETUP.md for detailed firewall configuration
Tools show up but don't work:
- Check server logs:
podman logs hue-mcp-serveror check terminal output - Verify
.envfile has correctHUE_BRIDGE_IPandHUE_API_KEY - Test bridge connection:
curl http://YOUR_BRIDGE_IP/api/YOUR_API_KEY/lights
Advanced Configuration:
For detailed information on network setup, firewall configuration, and multi-computer deployment, see NETWORK_SETUP.md.
Alternative: Stdio Mode (Local Only)
For local-only access via standard input/output:
# Run the stdio server
hue-mcp-stdio-server
# Or using Python directly
python -m hue_mcp_server.server
Configure Claude Desktop for stdio mode:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"hue": {
"command": "hue-mcp-stdio-server",
"env": {
"HUE_BRIDGE_IP": "192.168.1.x",
"HUE_API_KEY": "your-api-key-here"
}
}
}
}
Or using Python directly:
{
"mcpServers": {
"hue": {
"command": "python",
"args": ["-m", "hue_mcp_server.server"],
"env": {
"HUE_BRIDGE_IP": "192.168.1.x",
"HUE_API_KEY": "your-api-key-here"
}
}
}
}
Note: Stdio mode only works when Claude Desktop is running on the same machine as the server.
Restart Claude Desktop, and you should see the Hue tools available.
Available Tools
Light Control
list_lights- List all lights with their current stateget_light_state- Get detailed state of a specific lightturn_light_on- Turn a light on (optionally set brightness)turn_light_off- Turn a light offset_brightness- Set brightness level (0-254)set_color_temp- Set color temperature in mireds (153-500)set_color- Set color using CIE xy coordinates
Group Control
list_groups- List all groups/roomscontrol_group- Control all lights in a group at once
Scene Control
list_scenes- List all available scenesactivate_scene- Activate a predefined scene
Example Commands
Once configured with Claude, you can use natural language:
- "Turn on the living room lights"
- "Set the bedroom light to 50% brightness"
- "Make the kitchen lights warm white"
- "Activate my reading scene"
- "Show me all available lights"
- "Turn off all lights in the office"
Development
Running Tests
pip install -e ".[dev]"
pytest
Code Formatting
black src/
ruff check src/
Troubleshooting
Connection Issues
- Ensure your Hue Bridge is powered on and connected to your network
- Verify the bridge IP address hasn't changed
- Check that your API key is valid
- Make sure you're on the same network as the Hue Bridge
API Key Issues
If your API key stops working:
- The bridge may have been reset
- Generate a new API key using the setup instructions
- Update your environment variables
Light Not Responding
- Check if the light is reachable using
list_lights - Ensure the light is powered on (physical switch)
- Try controlling it from the Philips Hue app first
Architecture
server.py- Main MCP server implementationhue_client.py- Async wrapper around aiohue librarytools.py- MCP tool definitions and handlers
License
MIT License - see LICENSE file for details
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
References
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
E2B
Using MCP to run code via e2b.