System Configuration
This document provides detailed information about configuring the Home Assistant MCP Server.
Configuration File Structure
The MCP Server uses environment variables for configuration, with support for different environments (development, test, production):
# .env, .env.development, or .env.test
PORT=4000
NODE_ENV=development
HASS_HOST=http://192.168.178.63:8123
HASS_TOKEN=your_token_here
JWT_SECRET=your_secret_key
Server Settings
Basic Server Configuration
PORT: Server port number (default: 4000)NODE_ENV: Environment mode (development, production, test)HASS_HOST: Home Assistant instance URLHASS_TOKEN: Home Assistant long-lived access token
Security Settings
JWT_SECRET: Secret key for JWT token generationRATE_LIMIT: Rate limiting configurationwindowMs: Time window in milliseconds (default: 15 minutes)max: Maximum requests per window (default: 100)
WebSocket Settings
SSE: Server-Sent Events configurationMAX_CLIENTS: Maximum concurrent clients (default: 1000)PING_INTERVAL: Keep-alive ping interval in ms (default: 30000)
Environment Variables
All configuration is managed through environment variables:
# Server
PORT=4000
NODE_ENV=development
# Home Assistant
HASS_HOST=http://your-hass-instance:8123
HASS_TOKEN=your_token_here
# Security
JWT_SECRET=your-secret-key
# Logging
LOG_LEVEL=info
LOG_DIR=logs
LOG_MAX_SIZE=20m
LOG_MAX_DAYS=14d
LOG_COMPRESS=true
LOG_REQUESTS=true
Advanced Configuration
Security Rate Limiting
Rate limiting is enabled by default to protect against brute force attacks:
RATE_LIMIT: {
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100 // limit each IP to 100 requests per window
}
Logging
The server uses Bun's built-in logging capabilities with additional configuration:
LOGGING: {
LEVEL: "info", // debug, info, warn, error
DIR: "logs",
MAX_SIZE: "20m",
MAX_DAYS: "14d",
COMPRESS: true,
TIMESTAMP_FORMAT: "YYYY-MM-DD HH:mm:ss:ms",
LOG_REQUESTS: true
}
For production deployments, we recommend using system tools like logrotate for log management.
Example logrotate configuration (/etc/logrotate.d/mcp-server):
/var/log/mcp-server.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 644 mcp mcp
}
Best Practices
- Always use environment variables for sensitive information
- Keep .env files secure and never commit them to version control
- Use different environment files for development, test, and production
- Enable SSL/TLS in production (preferably via reverse proxy)
- Monitor log files for issues
- Regularly rotate logs in production
Validation
The server validates configuration on startup using Zod schemas: - Required fields are checked (e.g., HASS_TOKEN) - Value types are verified - Enums are validated (e.g., LOG_LEVEL) - Default values are applied when not specified
Troubleshooting
Common configuration issues: 1. Missing required environment variables 2. Invalid environment variable values 3. Permission issues with log directories 4. Rate limiting too restrictive
See the Troubleshooting Guide for solutions.