# System Configuration - MCP Server for Home Assistant
Home Assistant MCP Server Documentation

Skip to content

# 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 URL
- `HASS_TOKEN`: Home Assistant long-lived access token

### Security Settings

- `JWT_SECRET`: Secret key for JWT token generation
- `RATE_LIMIT`: Rate limiting configuration
- `windowMs`: Time window in milliseconds (default: 15 minutes)
- `max`: Maximum requests per window (default: 100)

### WebSocket Settings

- `SSE`: Server-Sent Events configuration
- `MAX_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

1. Always use environment variables for sensitive information
2. Keep .env files secure and never commit them to version control
3. Use different environment files for development, test, and production
4. Enable SSL/TLS in production (preferably via reverse proxy)
5. Monitor log files for issues
6. 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.

February 6, 2025
February 6, 2025
Was this page helpful?
Thanks for your feedback!
Thanks for your feedback! Please consider creating an issue to help us improve.

#### Cookie consent

We use cookies to recognize your repeated visits and preferences, as well as to measure the effectiveness of our documentation and whether users find what they're searching for. With your consent, you're helping us to make our documentation better.

- Google Analytics
- GitHub

Manage settings