docs(home-assistant): add MCP server setup guide for Claude integration
Documents the configuration steps for connecting Claude.ai and Claude Desktop to Home Assistant via the Model Context Protocol (MCP) server endpoint. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
# Home Assistant MCP Server Setup Guide
|
||||
|
||||
> **Created:** 2026-02-06
|
||||
> **Status:** Infrastructure Ready - Manual Configuration Required
|
||||
|
||||
This guide documents the setup of the Home Assistant MCP (Model Context Protocol) Server integration for use with Claude.ai and Claude Desktop.
|
||||
|
||||
---
|
||||
|
||||
## Current State
|
||||
|
||||
| Component | Status | Details |
|
||||
|-----------|--------|---------|
|
||||
| Home Assistant | Running | https://housekeeping.schweitz.net |
|
||||
| MCP Endpoint | Active | https://housekeeping.schweitz.net/api/mcp |
|
||||
| NPM Proxy | Configured | WebSocket support enabled, SSL via Let's Encrypt |
|
||||
| Authentik | Not in path | Good - allows Home Assistant's built-in IndieAuth |
|
||||
|
||||
### Verified Configuration
|
||||
|
||||
**MCP Endpoint Test Results:**
|
||||
- `GET /api/mcp` → `401 Unauthorized` (expected - requires OAuth)
|
||||
- `OPTIONS /api/mcp` → CORS preflight working
|
||||
- Allowed methods: GET, OPTIONS, POST
|
||||
|
||||
**NPM Configuration (proxy host ID 15):**
|
||||
- Domain: `housekeeping.schweitz.net`
|
||||
- Forward: `localhost:8123`
|
||||
- WebSocket upgrade: Enabled
|
||||
- SSL: Let's Encrypt (certificate ID 18)
|
||||
- Advanced config includes WebSocket headers
|
||||
|
||||
---
|
||||
|
||||
## Step 1: Home Assistant Configuration
|
||||
|
||||
### 1.1 Verify MCP Server Integration is Enabled
|
||||
|
||||
The MCP endpoint is already responding, which suggests the integration may already be installed. Verify in Home Assistant:
|
||||
|
||||
1. Go to **Settings** → **Devices & Services**
|
||||
2. Look for "Model Context Protocol Server" or "MCP Server"
|
||||
3. If not present, click **Add Integration** and search for "MCP"
|
||||
|
||||
### 1.2 Expose Entities to Voice Assistants (Required)
|
||||
|
||||
The MCP server only exposes entities that are enabled for voice assistants. You must configure which entities Claude can access:
|
||||
|
||||
1. Go to **Settings** → **Voice assistants**
|
||||
2. Click on **Assist** (the default assistant)
|
||||
3. Go to the **Expose** tab
|
||||
4. Enable the entities you want Claude to control:
|
||||
- **Lights** - for lighting control
|
||||
- **Switches** - for on/off devices
|
||||
- **Climate** - for thermostats and HVAC
|
||||
- **Covers** - for blinds, garage doors, etc.
|
||||
- **Scenes** - for activating predefined scenes
|
||||
- **Scripts** - for running custom automations
|
||||
- **Media players** - for controlling media devices
|
||||
- **Sensors** - for reading sensor values (read-only)
|
||||
|
||||
**Recommendation:** Start with a few entities to test, then expand once connectivity is verified.
|
||||
|
||||
### 1.3 (Optional) Generate Long-Lived Access Token
|
||||
|
||||
Only needed if using clients that don't support OAuth:
|
||||
|
||||
1. Click your user profile (your name in the sidebar)
|
||||
2. Scroll down to **Long-lived access tokens**
|
||||
3. Click **Create Token**
|
||||
4. Name it (e.g., "Claude MCP Token")
|
||||
5. Copy and save the token securely - it won't be shown again
|
||||
|
||||
---
|
||||
|
||||
## Step 2: Claude.ai Configuration
|
||||
|
||||
### For Claude.ai (Web Interface)
|
||||
|
||||
1. Go to [claude.ai](https://claude.ai) and sign in
|
||||
2. Navigate to **Settings** → **Integrations** or **MCP Servers**
|
||||
3. Click **Add Remote MCP Server**
|
||||
4. Enter the following configuration:
|
||||
- **Server URL:** `https://housekeeping.schweitz.net/api/mcp`
|
||||
- **Name:** Home Assistant (or your preferred name)
|
||||
5. Click **Connect** or **Add**
|
||||
6. You'll be redirected to Home Assistant for OAuth authentication
|
||||
7. Log in to Home Assistant and authorize Claude
|
||||
8. Return to Claude.ai - the connection should now be active
|
||||
|
||||
### For Claude Desktop
|
||||
|
||||
1. Open Claude Desktop application
|
||||
2. Go to **Settings** or **Preferences**
|
||||
3. Navigate to **MCP Servers** or **Integrations**
|
||||
4. Click **Add Remote Server**
|
||||
5. Enter:
|
||||
- **URL:** `https://housekeeping.schweitz.net/api/mcp`
|
||||
6. Click **Connect**
|
||||
7. A browser window will open for Home Assistant authentication
|
||||
8. Log in and authorize the connection
|
||||
9. Return to Claude Desktop - the server should appear as connected
|
||||
|
||||
---
|
||||
|
||||
## Step 3: Verification
|
||||
|
||||
### Test MCP Endpoint Accessibility
|
||||
|
||||
From command line:
|
||||
```bash
|
||||
# Should return 401 Unauthorized (expected without auth)
|
||||
curl -I https://housekeeping.schweitz.net/api/mcp
|
||||
|
||||
# More detailed test
|
||||
curl -v https://housekeeping.schweitz.net/api/mcp
|
||||
```
|
||||
|
||||
### Test Claude Integration
|
||||
|
||||
After connecting Claude to Home Assistant, try these commands:
|
||||
|
||||
1. **List devices:** "What Home Assistant devices are available?"
|
||||
2. **Check state:** "What's the current state of the living room lights?"
|
||||
3. **Control device:** "Turn on the living room lights"
|
||||
4. **Get sensor value:** "What's the current temperature inside?"
|
||||
|
||||
### Troubleshooting
|
||||
|
||||
| Issue | Possible Cause | Solution |
|
||||
|-------|---------------|----------|
|
||||
| Connection timeout | Network/proxy issue | Check NPM logs, verify WebSocket support |
|
||||
| 401 Unauthorized | OAuth not completed | Re-authenticate through Claude settings |
|
||||
| No devices visible | Entities not exposed | Enable entities in Voice assistants → Assist → Expose |
|
||||
| Commands fail | Entity not exposed for control | Check entity exposure settings in Home Assistant |
|
||||
|
||||
---
|
||||
|
||||
## Technical Details
|
||||
|
||||
### How MCP Authentication Works
|
||||
|
||||
Home Assistant uses IndieAuth (an OAuth 2.0-based protocol) for MCP authentication:
|
||||
|
||||
1. Claude identifies as client ID `https://claude.ai`
|
||||
2. Home Assistant validates the request and presents login
|
||||
3. User authenticates and authorizes Claude
|
||||
4. Home Assistant issues an access token
|
||||
5. Claude uses the token for subsequent API calls
|
||||
|
||||
### Protocol
|
||||
|
||||
The MCP Server uses "Streamable HTTP" protocol:
|
||||
- Requests: POST with JSON-RPC 2.0 payload
|
||||
- Responses: Server-Sent Events (SSE) or direct JSON
|
||||
|
||||
### NPM Configuration Details
|
||||
|
||||
Current advanced config for `housekeeping.schweitz.net`:
|
||||
```nginx
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
```
|
||||
|
||||
If you experience SSE streaming issues, add:
|
||||
```nginx
|
||||
proxy_buffering off;
|
||||
proxy_cache off;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Security Notes
|
||||
|
||||
1. **Authentik is NOT in front of Home Assistant** - This is intentional and required for IndieAuth OAuth to work directly with Claude
|
||||
2. **Entity exposure is granular** - Only expose entities you want Claude to access
|
||||
3. **OAuth tokens are temporary** - Re-authentication may be required periodically
|
||||
4. **All traffic is encrypted** - SSL/TLS via Let's Encrypt
|
||||
|
||||
---
|
||||
|
||||
## References
|
||||
|
||||
- [Home Assistant MCP Documentation](https://www.home-assistant.io/integrations/mcp_server/)
|
||||
- [Model Context Protocol Specification](https://spec.modelcontextprotocol.io/)
|
||||
- [Claude MCP Integration](https://docs.anthropic.com/claude/docs/mcp)
|
||||
|
||||
---
|
||||
|
||||
*Last Updated: 2026-02-06*
|
||||
Reference in New Issue
Block a user