327 lines
8.3 KiB
Markdown
327 lines
8.3 KiB
Markdown
# MCP Bridge - Home Assistant Integration
|
|
|
|
Bridge integration between Home Assistant and MCP (Model Context Protocol) servers, enabling AI agents to control your smart home.
|
|
|
|
## Features
|
|
|
|
- 🎯 **Selective Entity Exposure**: Only expose entities you explicitly mark via Voice Assistant settings
|
|
- 🔒 **Secure Script Access**: Control which scripts AI can execute using labels
|
|
- 📊 **Rich Metadata**: Provides complete entity information including area, device class, and capabilities
|
|
- 🔌 **Zero Configuration**: Works out of the box after installation
|
|
- 🤖 **AI-Ready**: Designed for MCP servers and AI agent integration
|
|
|
|
## What is MCP?
|
|
|
|
MCP (Model Context Protocol) is Anthropic's protocol for connecting AI agents to external tools and data sources. This integration makes your Home Assistant instance accessible to AI agents via MCP servers.
|
|
|
|
## Installation
|
|
|
|
**Note:** This integration is hosted on Gitea (not GitHub), so it's not available via HACS. Instead, use one of the automated installation methods below.
|
|
|
|
### Method 1: One-Line Install/Update (Easiest)
|
|
|
|
Run this command in your Home Assistant terminal (requires Terminal & SSH addon or SSH access):
|
|
|
|
```bash
|
|
curl -sSL http://your-gitea.local:3000/username/homeassistant-mcp-bridge/raw/branch/main/quick_install.sh | \
|
|
GITEA_URL=http://your-gitea.local:3000 \
|
|
REPO=username/homeassistant-mcp-bridge \
|
|
bash
|
|
```
|
|
|
|
**Important:**
|
|
- Replace `your-gitea.local:3000` with your Gitea server address
|
|
- Replace `username` with your Gitea username
|
|
- Replace `main` with your branch name if different
|
|
|
|
After installation completes, restart Home Assistant.
|
|
|
|
### Method 2: Home Assistant Auto-Update Button
|
|
|
|
Add this to your `configuration.yaml` to create an update button/service:
|
|
|
|
```yaml
|
|
shell_command:
|
|
update_mcp_bridge: >
|
|
curl -fsSL http://your-gitea.local:3000/username/homeassistant-mcp-bridge/raw/branch/main/quick_install.sh |
|
|
GITEA_URL=http://your-gitea.local:3000
|
|
REPO=username/homeassistant-mcp-bridge
|
|
bash
|
|
|
|
script:
|
|
update_mcp_bridge:
|
|
alias: "Update MCP Bridge Integration"
|
|
sequence:
|
|
- service: shell_command.update_mcp_bridge
|
|
- delay:
|
|
seconds: 5
|
|
- service: persistent_notification.create
|
|
data:
|
|
title: "MCP Bridge Updated"
|
|
message: "Integration updated from Gitea. Please restart Home Assistant."
|
|
```
|
|
|
|
**Usage:**
|
|
- Go to Developer Tools → Services
|
|
- Select `script.update_mcp_bridge`
|
|
- Click "Call Service"
|
|
- Restart Home Assistant after update
|
|
|
|
**Optional Dashboard Button:**
|
|
```yaml
|
|
type: button
|
|
name: Update MCP Bridge
|
|
icon: mdi:download
|
|
tap_action:
|
|
action: call-service
|
|
service: script.update_mcp_bridge
|
|
```
|
|
|
|
### Method 3: Manual Installation
|
|
|
|
1. Download these files from your Gitea repository:
|
|
- `custom_components/mcp_bridge/__init__.py`
|
|
- `custom_components/mcp_bridge/manifest.json`
|
|
- `custom_components/mcp_bridge/services.yaml`
|
|
|
|
2. Copy to `/config/custom_components/mcp_bridge/`
|
|
|
|
3. Restart Home Assistant
|
|
|
|
See [INSTALLATION_GUIDE.md](INSTALLATION_GUIDE.md) for detailed manual steps.
|
|
|
|
## Quick Start
|
|
|
|
### 1. Expose Entities
|
|
|
|
Go to **Settings → Voice Assistants → Expose** and toggle the entities you want the AI to control.
|
|
|
|
### 2. Mark Scripts as Accessible
|
|
|
|
For custom scripts:
|
|
1. Go to **Settings → Automations & Scenes → Scripts**
|
|
2. Click your script → Settings icon (⚙️)
|
|
3. Add label: `mcp_accessible`
|
|
4. Save
|
|
|
|
### 3. Test the Services
|
|
|
|
**Developer Tools → Services:**
|
|
|
|
```yaml
|
|
service: mcp_bridge.get_exposed_entities
|
|
```
|
|
|
|
```yaml
|
|
service: mcp_bridge.get_exposed_scripts
|
|
```
|
|
|
|
## Services
|
|
|
|
### `mcp_bridge.get_exposed_entities`
|
|
|
|
Returns all entities exposed to voice assistants with complete metadata.
|
|
|
|
**Example Response:**
|
|
```json
|
|
{
|
|
"entities": [
|
|
{
|
|
"entity_id": "light.living_room",
|
|
"state": "on",
|
|
"friendly_name": "Living Room Light",
|
|
"area": "Living Room",
|
|
"domain": "light",
|
|
"supported_features": 43,
|
|
"attributes": {...}
|
|
}
|
|
],
|
|
"count": 1
|
|
}
|
|
```
|
|
|
|
### `mcp_bridge.get_exposed_scripts`
|
|
|
|
Returns scripts marked with `mcp_accessible` label, including their parameters.
|
|
|
|
**Example Response:**
|
|
```json
|
|
{
|
|
"scripts": [
|
|
{
|
|
"entity_id": "script.set_fan_speed",
|
|
"friendly_name": "Set Fan Speed",
|
|
"description": "Control bedroom fan",
|
|
"fields": {
|
|
"speed": {
|
|
"name": "Speed",
|
|
"description": "0=off, 1=low, 2=medium, 3=high",
|
|
"required": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"count": 1
|
|
}
|
|
```
|
|
|
|
### `mcp_bridge.get_entity_metadata`
|
|
|
|
Get detailed metadata for a specific entity.
|
|
|
|
**Parameters:**
|
|
- `entity_id`: The entity to query
|
|
|
|
## Updating the Integration
|
|
|
|
**Using Auto-Update Script/Button:**
|
|
- Just run the install command again or call the `script.update_mcp_bridge` service
|
|
- Restart Home Assistant after update
|
|
|
|
**Manual Update:**
|
|
- Download the latest files from Gitea
|
|
- Replace files in `/config/custom_components/mcp_bridge/`
|
|
- Restart Home Assistant
|
|
|
|
## Architecture
|
|
|
|
```
|
|
AI Agent (Claude/n8n)
|
|
↓
|
|
MCP Server
|
|
↓
|
|
mcp_bridge Services
|
|
↓
|
|
Home Assistant
|
|
```
|
|
|
|
The integration provides three services that MCP servers can call to:
|
|
1. Discover available entities
|
|
2. Discover available scripts
|
|
3. Query entity states and metadata
|
|
|
|
## Use Cases
|
|
|
|
- **Voice Control**: "Turn on the living room lights"
|
|
- **Automated Scenes**: AI suggests and executes scenes based on context
|
|
- **Smart Responses**: "What's the temperature in the bedroom?"
|
|
- **Custom Automations**: Execute complex scripts via natural language
|
|
|
|
## Configuration
|
|
|
|
No configuration required! The integration automatically loads on Home Assistant restart.
|
|
|
|
**Optional:** Control which entities/scripts are exposed using:
|
|
- Voice Assistant exposure settings (for entities)
|
|
- `mcp_accessible` label (for scripts)
|
|
|
|
## Compatibility
|
|
|
|
- **Home Assistant**: 2024.1.0 or newer
|
|
- **Python**: 3.11+
|
|
- **Installation**: Requires SSH/Terminal access or manual file management
|
|
|
|
## Troubleshooting
|
|
|
|
### Installation Script Fails
|
|
|
|
**Check:**
|
|
- Home Assistant can reach your Gitea server
|
|
- Terminal addon has network access
|
|
- URLs are correct (server address, username, repo name)
|
|
|
|
**Test connectivity:**
|
|
```bash
|
|
curl http://your-gitea.local:3000/username/homeassistant-mcp-bridge
|
|
```
|
|
|
|
### Integration Not Loading
|
|
|
|
**Check logs:**
|
|
- Settings → System → Logs
|
|
- Filter by "mcp_bridge"
|
|
|
|
**Common issues:**
|
|
- Files not in correct location (`/config/custom_components/mcp_bridge/`)
|
|
- Python syntax errors (check logs)
|
|
- Didn't restart Home Assistant after installation
|
|
|
|
### Services Not Showing
|
|
|
|
**Verify installation:**
|
|
```bash
|
|
ls -la /config/custom_components/mcp_bridge/
|
|
```
|
|
|
|
Should show: `__init__.py`, `manifest.json`, `services.yaml`
|
|
|
|
## Development
|
|
|
|
### Repository Structure
|
|
|
|
```
|
|
homeassistant-mcp-bridge/
|
|
├── custom_components/
|
|
│ └── mcp_bridge/
|
|
│ ├── __init__.py # Core integration logic
|
|
│ ├── manifest.json # Integration metadata
|
|
│ ├── services.yaml # Service definitions
|
|
│ └── test_init.py # Unit tests
|
|
├── quick_install.sh # One-line installer
|
|
├── install_mcp_bridge.sh # Detailed installer
|
|
├── ha_shell_command.yaml # HA shell command config
|
|
└── README.md # This file
|
|
```
|
|
|
|
### Running Tests
|
|
|
|
```bash
|
|
pytest custom_components/mcp_bridge/test_init.py
|
|
```
|
|
|
|
## Versioning
|
|
|
|
Check your installed version:
|
|
```yaml
|
|
service: mcp_bridge.get_entity_metadata
|
|
data:
|
|
entity_id: sensor.any_sensor # Any entity
|
|
```
|
|
|
|
The response will show the integration version in logs.
|
|
|
|
Or check `manifest.json`:
|
|
```bash
|
|
cat /config/custom_components/mcp_bridge/manifest.json | grep version
|
|
```
|
|
|
|
## Roadmap
|
|
|
|
- [x] Basic entity exposure
|
|
- [x] Script discovery with labels
|
|
- [x] Complete metadata support
|
|
- [x] Automated install/update script
|
|
- [ ] Real-time state updates via WebSocket
|
|
- [ ] Custom entity tags beyond voice assistant exposure
|
|
- [ ] Integration config flow (UI-based setup)
|
|
- [ ] Service call history/logging
|
|
- [ ] Version checking and update notifications
|
|
|
|
## License
|
|
|
|
MIT License - Use freely in your homelab!
|
|
|
|
## Support
|
|
|
|
- **Issues**: Report on your Gitea instance
|
|
- **Logs**: Settings → System → Logs (filter by "mcp_bridge")
|
|
- **Questions**: Check the detailed guides in the repository
|
|
|
|
## Related Projects
|
|
|
|
- **MCP Server**: Coming next - connects to this integration
|
|
- **n8n Integration**: Workflow automation with AI agents
|
|
|
|
---
|
|
|
|
**Made with ❤️ for home automation enthusiasts** |