Loxone MCP Server

An MCP server for Loxone home automation systems, allowing AI assistants to control lights, blinds, sensors, and weather.

🏠 Loxone MCP Server

Control your Loxone smart home through the Model Context Protocol

Β 

Rust MCP Edition CI License

Β 

An async Rust MCP server that connects AI assistants to Loxone Miniservers. Control lights, blinds, climate, security, audio, and more β€” all through standardized MCP tools and resources.

[!NOTE] Built on the PulseEngine MCP framework v0.17.0 for standardized protocol handling, authentication, and transport layers.

Features

  • πŸ”Œ 17 MCP Tools β€” Control lights, blinds, HVAC, security, audio, door locks, intercoms, and scenes β€” all wired to real Miniserver commands
  • πŸ“Š 25+ MCP Resources β€” Read-only access to rooms, devices, sensors, energy, weather, and system status with live state
  • πŸš€ Three Transports β€” stdio (Claude Desktop), HTTP/SSE (n8n, web clients), and Streamable HTTP
  • πŸ” Security by Default β€” SSL verification on, UUID validation, rate limiting, input sanitization, dev-mode restricted to localhost
  • ⚑ Async Rust β€” Connection pooling, intelligent caching, batch operations
  • 🧊 Nix Flake β€” Reproducible builds with OpenClaw plugin integration
  • πŸ”‘ Credential Management β€” Credential ID system, environment variables, or Infisical vault

Quick Start

# Build
cargo build --release

# Setup credentials
cargo run --bin loxone-mcp-setup -- --generate-id --name "My Home"

# Run with Claude Desktop
cargo run --bin loxone-mcp-server -- stdio --credential-id <your-id>

Installation

From Source

git clone https://github.com/avrabe/mcp-loxone
cd mcp-loxone
cargo build --release

Nix Flake

nix build github:avrabe/mcp-loxone
# Or run directly
nix run github:avrabe/mcp-loxone

Docker

docker build -t loxone-mcp .
docker run -e LOXONE_HOST=192.168.1.100 \
           -e LOXONE_USER=admin \
           -e LOXONE_PASS=secret \
           -p 3001:3001 loxone-mcp

Configuration

Credential ID (Recommended)

# Interactive setup β€” generates a unique credential ID
cargo run --bin loxone-mcp-setup -- --generate-id --name "Main House"

# Or store manually
cargo run --bin loxone-mcp-auth -- store \
  --name "Office" --host 192.168.1.100 \
  --username admin --password secure123

# Manage credentials
cargo run --bin loxone-mcp-auth -- list
cargo run --bin loxone-mcp-auth -- test <credential-id>

Environment Variables

export LOXONE_HOST="192.168.1.100"
export LOXONE_USER="admin"
export LOXONE_PASS="password"

Infisical Vault (Production)

export INFISICAL_PROJECT_ID="your-project-id"
export INFISICAL_CLIENT_ID="your-client-id"
export INFISICAL_CLIENT_SECRET="your-client-secret"

[!TIP] Migrating from environment variables? See the Credential Migration Guide.

Usage

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "loxone": {
      "command": "loxone-mcp-server",
      "args": ["stdio", "--credential-id", "abc123def-456-789"]
    }
  }
}

HTTP Server (n8n, MCP Inspector)

# Standard HTTP/SSE
loxone-mcp-server http --port 3001 --credential-id <id>

# Streamable HTTP (new MCP Inspector)
loxone-mcp-server streamable-http --port 3001 --credential-id <id>

OpenClaw Integration

The flake exports an openclawPlugin for nix-openclaw:

customPlugins = [
  {
    source = "github:avrabe/mcp-loxone";
    config.env = {
      LOXONE_HOST = "/path/to/secrets/loxone-host";
      LOXONE_USER = "/path/to/secrets/loxone-user";
      LOXONE_PASS = "/path/to/secrets/loxone-pass";
    };
  }
];

Tools & Resources

Tools (Actions)

CategoryToolsDescription
Lightingcontrol_lightOn/off, dim 0-100%
Blindscontrol_blindUp/down/stop, position 0-100%
Climateset_temperatureTarget temperature with safe range validation
Securityset_security_modeArm, disarm, night, away modes
Doorscontrol_door_lockLock, unlock, open
Intercomcontrol_intercomAnswer, decline, open door
Audiocontrol_audioPlay, pause, volume per zone
Scenesactivate_sceneTrigger named scenes
Generalcontrol_device, get_*_statusDirect device control, live status queries

Resources (Read-Only)

URI PatternData
loxone://roomsRoom listing with device counts
loxone://rooms/{room}/devicesDevices in a specific room
loxone://devices/allFull device inventory
loxone://devices/category/{cat}Devices by category
loxone://sensors/*Door/window, temperature, motion
loxone://audio/zonesAudio zone configuration
loxone://system/statusMiniserver status and capabilities
loxone://energy/*Power monitoring and consumption

Architecture

AI Assistant (Claude, n8n, OpenClaw)
        β”‚
   MCP Protocol (stdio / HTTP / Streamable HTTP)
        β”‚
   β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚   loxone-mcp-server          β”‚
   β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
   β”‚  β”‚ Security Layer          β”‚ β”‚
   β”‚  β”‚ Auth Β· Rate Limit Β· TLS β”‚ β”‚
   β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚
   β”‚  β”‚ Tool Handlers           β”‚ β”‚
   β”‚  β”‚ 17 tools β†’ send_command β”‚ β”‚
   β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚
   β”‚  β”‚ Loxone Client           β”‚ β”‚
   β”‚  β”‚ HTTP Β· WebSocket Β· Cacheβ”‚ β”‚
   β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
   β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚
   HTTP /jdev/sps/io/{uuid}/{cmd}
        β”‚
   Loxone Miniserver
        β”‚
   Physical Devices

Development

Requirements

  • Rust 1.85+ (2024 edition)
  • Loxone Miniserver (Gen 1 or Gen 2)

Building & Testing

cargo build                                    # Dev build
cargo test --lib                               # Unit tests
cargo fmt && cargo clippy -- -D warnings       # Format + lint
cargo audit                                    # Security audit

Live Miniserver Testing

# Requires network access to Miniserver
LOXONE_LIVE_TEST=1 cargo test \
  --test live_miniserver_tests \
  --features test-utils -- --nocapture

Project Structure

src/
β”œβ”€β”€ server/          # MCP protocol, tool handlers (macro_backend.rs)
β”œβ”€β”€ client/          # HTTP/WebSocket clients with UUID validation
β”œβ”€β”€ config/          # Credentials, master key auto-persistence
β”œβ”€β”€ security/        # Input sanitization, rate limiting, CORS
β”œβ”€β”€ monitoring/      # Metrics, dashboards, InfluxDB
β”œβ”€β”€ history/         # Time-series data storage
β”œβ”€β”€ discovery/       # mDNS network discovery
└── main.rs          # CLI, transport selection, startup

Binaries

BinaryPurpose
loxone-mcp-serverMain MCP server (stdio/HTTP/streamable-http)
loxone-mcp-authCredential management (store, list, test, delete)
loxone-mcp-setupInteractive setup with credential ID generation
loxone-mcp-test-endpointsAPI endpoint testing (development)

License

Licensed under either of:

at your option.

Β 

Built on PulseEngine MCP framework β€” async Rust for the Model Context Protocol

Related Servers