Provides a flexible interface for Home Assistant device management and automation through a REST API and WebSocket/SSE connections, enabling basic device control, state updates, and automation rule management.
Enables GPU-accelerated speech processing capabilities when using NVIDIA GPUs with CUDA support, improving performance for wake word detection and speech-to-text features.
Home Assistant Model Context Protocol (MCP)
A standardized protocol for AI assistants to interact with Home Assistant, providing a secure, typed, and extensible interface for controlling smart home devices.
Overview
The Model Context Protocol (MCP) server acts as a bridge between AI models (like Claude, GPT, etc.) and Home Assistant, enabling AI assistants to:
Execute commands on Home Assistant devices
Retrieve information about the smart home
Stream responses for long-running operations
Validate parameters and inputs
Provide consistent error handling
Features
Modular Architecture - Clean separation between transport, middleware, and tools
Typed Interface - Fully TypeScript typed for better developer experience
Multiple Transports:
Standard I/O (stdin/stdout) for CLI integration
HTTP/REST API with Server-Sent Events support for streaming
Middleware System - Validation, logging, timeout, and error handling
Built-in Tools:
Light control (brightness, color, etc.)
Climate control (thermostats, HVAC)
More to come...
Extensible Plugin System - Easily add new tools and capabilities
Streaming Responses - Support for long-running operations
Parameter Validation - Using Zod schemas
Claude & Cursor Integration - Ready-made utilities for AI assistants
Getting Started
Prerequisites
Node.js 16+
Home Assistant instance (or you can use the mock implementations for testing)
Installation
Running the Server
Configuration
Configure the server using environment variables or a .env
file:
Architecture
The MCP server is built with a layered architecture:
Transport Layer - Handles communication protocols (stdio, HTTP)
Middleware Layer - Processes requests through a pipeline
Tool Layer - Implements specific functionality
Resource Layer - Manages stateful resources
Tools
Tools are the primary way to add functionality to the MCP server. Each tool:
Has a unique name
Accepts typed parameters
Returns typed results
Can stream partial results
Validates inputs and outputs
Example tool registration:
API
When running with HTTP transport, the server provides a JSON-RPC 2.0 API:
POST /api/mcp/jsonrpc
- Execute a toolGET /api/mcp/stream
- Connect to SSE stream for real-time updatesGET /api/mcp/info
- Get server informationGET /health
- Health check endpoint
Integration with AI Models
Claude Integration
Cursor Integration
To use the Home Assistant MCP server with Cursor, add the following to your .cursor/config/config.json
file:
This configuration:
Runs the MCP server with stdio transport
Redirects all stderr output to /dev/null
Uses grep to filter stdout for lines containing
{"jsonrpc":"2.0"
, ensuring clean JSON-RPC output
Troubleshooting Cursor Integration
If you encounter a "failed to create client" error when using the MCP server with Cursor:
Make sure you're using the correct command and arguments in your Cursor configuration
The bash script approach ensures only valid JSON-RPC messages reach Cursor
Ensure the server is built by running
bun run build
before trying to connect
Ensure the server is properly outputting JSON-RPC messages to stdout:
bun run dist/index.js --stdio 2>/dev/null | grep -E '\{"jsonrpc":"2\.0"' > json_only.txtThen examine json_only.txt to verify it contains only valid JSON-RPC messages.
Make sure grep is installed on your system (it should be available by default on most systems)
Try rebuilding the server with:
bun run buildEnable debug mode by setting
DEBUG_STDIO=true
in the environment variables
If the issue persists, you can try:
Restarting Cursor
Clearing Cursor's cache (Help > Developer > Clear Cache and Reload)
Using a similar approach with Node.js:
{ "command": "bash", "args": ["-c", "cd ${workspaceRoot} && node dist/index.js --stdio 2>/dev/null | grep -E '\\{\"jsonrpc\":\"2\\.0\"'"] }
License
MIT
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
MCP Server for Home Assistant ð ð€
Overview ð
MCP (Model Context Protocol) Server is my lightweight integration tool for Home Assistant, providing a flexible interface for device management and automation. It's designed to be fast, secure, and easy to use. Built with Bun for maximum performance.
Core Features âš
ð Basic device control via REST API
ð¡ WebSocket/Server-Sent Events (SSE) for state updates
ð€ Simple automation rule management
ð JWT-based authentication
ð Standard I/O (stdio) transport for integration with Claude and other AI assistants
Why Bun? ð
I chose Bun as the runtime for several key benefits:
â¡ Blazing Fast Performance
Up to 4x faster than Node.js
Built-in TypeScript support
Optimized file system operations
ð¯ All-in-One Solution
Package manager (faster than npm/yarn)
Bundler (no webpack needed)
Test runner (built-in testing)
TypeScript transpiler
ð Built-in Features
SQLite3 driver
.env file loading
WebSocket client/server
File watcher
Test runner
ðŸ Resource Efficient
Lower memory usage
Faster cold starts
Better CPU utilization
ð Node.js Compatibility
Runs most npm packages
Compatible with Express/Fastify
Native Node.js APIs
Prerequisites ð
ð Bun runtime (v1.0.26+)
ð¡ Home Assistant instance
ð³ Docker (optional, recommended for deployment)
ð¥ïž Node.js 18+ (optional, for speech features)
ð® NVIDIA GPU with CUDA support (optional, for faster speech processing)
Quick Start ð
Clone my repository:
Set up the environment:
Configure your settings:
Edit
.env
file with your Home Assistant detailsRequired: Add your
HASS_TOKEN
(long-lived access token)
Build and launch with Docker:
Docker Build Options ð³
My Docker build script (docker-build.sh
) supports different configurations:
1. Standard Build
Basic MCP server functionality
REST API and WebSocket support
No speech features
2. Speech-Enabled Build
Includes wake word detection
Speech-to-text capabilities
Pulls required images:
onerahmet/openai-whisper-asr-webservice
rhasspy/wyoming-openwakeword
3. GPU-Accelerated Build
All speech features
CUDA GPU acceleration
Optimized for faster processing
Float16 compute type for better performance
Build Features
ð Automatic resource allocation
ðŸ Memory-aware building
ð CPU quota management
ð§¹ Automatic cleanup
ð Detailed build logs
ð Build summary and status
Environment Configuration ð§
I've implemented a hierarchical configuration system:
File Structure ð
.env.example
- My template with all options.env
- Your configuration (copy from .env.example)Environment overrides:
.env.dev
- Development settings.env.prod
- Production settings.env.test
- Test settings
Loading Priority â¡
Files load in this order:
.env
(base config)Environment-specific file:
NODE_ENV=development
â.env.dev
NODE_ENV=production
â.env.prod
NODE_ENV=test
â.env.test
Later files override earlier ones.
Development ð»
Performance Comparison ð
Operation | Bun | Node.js |
Install Dependencies | ~2s | ~15s |
Cold Start | 300ms | 1000ms |
Build Time | 150ms | 4000ms |
Memory Usage | ~150MB | ~400MB |
Documentation ð
Core Documentation
Advanced Features
Natural Language Processing - AI-powered automation analysis and control
Custom Prompts Guide - Create and customize AI behavior
Extras & Tools - Additional utilities and advanced features
Client Integration ð
Cursor Integration ð±ïž
Add to .cursor/config/config.json
:
Claude Desktop ð¬
Add to your Claude config:
Command Line ð»
Windows users can use the provided script:
Go to
scripts
directoryRun
start_mcp.cmd
Additional Features
Speech Features ð€
MCP Server optionally supports speech processing capabilities:
ð£ïž Wake word detection ("hey jarvis", "ok google", "alexa")
ð¯ Speech-to-text using fast-whisper
ð Multiple language support
ð GPU acceleration support
Speech Features Setup
Prerequisites
ð³ Docker installed and running
ð® NVIDIA GPU with CUDA (optional)
ðŸ 4GB+ RAM (8GB+ recommended)
Configuration
Enable speech in
.env
:
Choose your STT engine:
Available Models ð€
Choose based on your needs:
tiny.en
: Fastest, basic accuracybase.en
: Good balance (recommended)small.en
: Better accuracy, slowermedium.en
: High accuracy, resource intensivelarge-v2
: Best accuracy, very resource intensive
Launch with Speech Features
Extra Tools ð ïž
I've included several powerful tools in the extra/
directory to enhance your Home Assistant experience:
Home Assistant Analyzer CLI (
ha-analyzer-cli.ts
)Deep automation analysis using AI models
Security vulnerability scanning
Performance optimization suggestions
System health metrics
Speech-to-Text Example (
speech-to-text-example.ts
)Wake word detection
Speech-to-text transcription
Multiple language support
GPU acceleration support
Claude Desktop Setup (
claude-desktop-macos-setup.sh
)Automated Claude Desktop installation for macOS
Environment configuration
MCP integration setup
See Extras Documentation for detailed usage instructions and examples.
License ð
MIT License. See LICENSE for details.
Author ðšâð»
Created by jango-blockchained
Running with Standard I/O Transport ð
MCP Server supports a JSON-RPC 2.0 stdio transport mode for direct integration with AI assistants like Claude:
MCP Stdio Features
â
JSON-RPC 2.0 Compatibility: Full support for the MCP protocol standard
â
NPX Support: Run directly without installation using npx homeassistant-mcp
â
Auto Configuration: Creates necessary directories and default configuration
â
Cross-Platform: Works on macOS, Linux, and Windows
â
Claude Desktop Integration: Ready to use with Claude Desktop
â
Parameter Validation: Automatic validation of tool parameters
â
Error Handling: Standardized error codes and handling
â
Detailed Logging: Logs to files without polluting stdio
Option 1: Using NPX (Easiest)
Run the MCP server directly without installation using npx:
This will:
Install the package temporarily
Automatically run in stdio mode with JSON-RPC 2.0 transport
Create a logs directory for logging
Create a default .env file if not present
Perfect for integration with Claude Desktop or other MCP clients.
Integrating with Claude Desktop
To use MCP with Claude Desktop:
Open Claude Desktop settings
Go to the "Advanced" tab
Under "MCP Server", select "Custom"
Enter the command:
npx homeassistant-mcp
Click "Save"
Claude will now use the MCP server for Home Assistant integration, allowing you to control your smart home directly through Claude.
Option 2: Local Installation
Update your
.env
file to enable stdio transport:USE_STDIO_TRANSPORT=trueRun the server using the stdio-start script:
./stdio-start.shAvailable options:
./stdio-start.sh --debug # Enable debug mode ./stdio-start.sh --rebuild # Force rebuild ./stdio-start.sh --help # Show help
When running in stdio mode:
The server communicates via stdin/stdout using JSON-RPC 2.0 format
No HTTP server is started
Console logging is disabled to avoid polluting the stdio stream
All logs are written to the log files in the
logs/
directory
JSON-RPC 2.0 Message Format
Request Format
Response Format
Error Response Format
Notification Format (Server to Client)
Supported Error Codes
Code | Description | Meaning |
-32700 | Parse error | Invalid JSON was received |
-32600 | Invalid request | JSON is not a valid request object |
-32601 | Method not found | Method does not exist or is unavailable |
-32602 | Invalid params | Invalid method parameters |
-32603 | Internal error | Internal JSON-RPC error |
-32000 | Tool execution | Error executing the tool |
-32001 | Validation error | Parameter validation failed |
Integrating with Claude Desktop
To use this MCP server with Claude Desktop:
Create or edit your Claude Desktop configuration:
# On macOS nano ~/Library/Application\ Support/Claude/claude_desktop_config.json # On Linux nano ~/.config/Claude/claude_desktop_config.json # On Windows notepad %APPDATA%\Claude\claude_desktop_config.jsonAdd the MCP server configuration:
{ "mcpServers": { "homeassistant-mcp": { "command": "npx", "args": ["homeassistant-mcp"], "env": { "HASS_TOKEN": "your_home_assistant_token_here", "HASS_HOST": "http://your_home_assistant_host:8123" } } } }Restart Claude Desktop.
In Claude, you can now use the Home Assistant MCP tools.
JSON-RPC 2.0 Message Format
Usage
Using NPX (Easiest)
The simplest way to use the Home Assistant MCP server is through NPX:
This will automatically:
Start the server in stdio mode
Output JSON-RPC messages to stdout
Send log messages to stderr
Create a logs directory if it doesn't exist
You can redirect stderr to hide logs and only see the JSON-RPC output:
Manual Installation
If you prefer to install the package globally or locally:
Or install locally:
Advanced Usage
This server cannot be installed
hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Smart Device Control ð® ð¡ Lights: Brightness, color, RGB ð¡ïž Climate: Temperature, HVAC, humidity ðª Covers: Position and tilt ð Switches: On/off ðš Sensors: State monitoring
Intelligent Organization ð Grouping with context awareness.
Robust Architecture ð ïž Error handling, state validation ...
Related MCP Servers
- -securityAlicense-qualityAccess Home Assistant data and control devices (lights, switches, thermostats, etc).Last updated -6431Apache 2.0
- -securityFlicense-qualityEnables users to control Google Home smart plugs using the Smart Home API with OAuth2 authentication, offering real-time device state management and control operations.
- AsecurityAlicenseAqualityEnables AI assistants to control SwitchBot devices, providing functionalities like device management, scene execution, and sensor information monitoring through the SwitchBot API.Last updated -3ISC License
- -securityAlicense-qualityEnables users to control Govee LED devices using the Govee API, with features for turning devices on/off, setting colors, and adjusting brightness through a CLI or MCP clients.Last updated -3MIT License
Appeared in Searches
- A server for finding information about smart technology and intelligence
- An MCP for managing lifestyle, coordinating daily routines, exercise, and study tasks
- Searching for information about license types or information starting with 'f'
- Finding MCP Servers Providing Insights for a Conversational Voice Interface
- A server for finding information about guitars