Server data from the Official MCP Registry
MCP server for controlling HomeMatic smart home devices via the CCU JSON-RPC API
MCP server for controlling HomeMatic smart home devices via the CCU JSON-RPC API
Valid MCP server (1 strong, 1 medium validity signals). No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry.
5 files analyzed · 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Set these up before or after installing:
Environment variable: CCU_HOST
Environment variable: CCU_PASSWORD
Environment variable: CCU_USER
Environment variable: CCU_HTTPS
Environment variable: CCU_PORT
Environment variable: CACHE_DIR
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-claymore666-debmatic-mcp": {
"env": {
"CCU_HOST": "your-ccu-host-here",
"CCU_PORT": "your-ccu-port-here",
"CCU_USER": "your-ccu-user-here",
"CACHE_DIR": "your-cache-dir-here",
"CCU_HTTPS": "your-ccu-https-here",
"CCU_PASSWORD": "your-ccu-password-here"
},
"args": [
"-y",
"debmatic-mcp"
],
"command": "npx"
}
}
}From the project's GitHub README.
Talk to your HomeMatic smart home from Claude, Cursor, or any MCP client.
debmatic-mcp connects to the CCU's built-in JSON-RPC API and exposes your devices, rooms, programs, and system variables as MCP tools. No addons, no XML-API, no cloud — just a direct connection to the CCU on your local network.
Built for debmatic (HomeMatic on Debian) but works with any CCU3 or RaspberryMatic installation that exposes the standard /api/homematic.cgi endpoint.
Ask your AI assistant things like:
The MCP server handles device discovery, type resolution, session management, and value conversion — the AI just calls the tools.
export CCU_HOST=your-ccu-hostname-or-ip
export CCU_PASSWORD=your-ccu-admin-password
npx debmatic-mcp --stdio
If it prints server_ready to stderr, it's working. Press Ctrl+C to stop. Now set it up in your MCP client — see below.
There are two ways to run this: stdio (the server runs as a subprocess of your MCP client) or HTTP (the server runs standalone in Docker and clients connect over the network). Pick one.
This is the easiest setup. Your MCP client (Claude Code, Cursor, etc.) starts the server as a child process — no Docker, no network config, no auth tokens.
For Claude Code, create a .mcp.json file in your project directory (or any directory where you'll use Claude Code):
{
"mcpServers": {
"debmatic": {
"command": "npx",
"args": ["debmatic-mcp", "--stdio"],
"env": {
"CCU_HOST": "your-ccu-hostname-or-ip",
"CCU_PASSWORD": "your-ccu-admin-password"
}
}
}
}
Replace your-ccu-hostname-or-ip with your CCU's hostname (like homematic-ccu3) or IP (like 192.168.1.50), and your-ccu-admin-password with the password you use to log into the CCU WebUI.
Restart Claude Code. Run /mcp to check it connected. You should see debmatic in the list.
Alternatively, use the Claude Code CLI:
claude mcp add debmatic -- npx debmatic-mcp --stdio
Use this if you want the server running independently — for example on a home server, accessible to multiple clients, or when your MCP client supports HTTP remotes.
1. Start the container:
docker run -d \
--name debmatic-mcp \
-e CCU_HOST=your-ccu-hostname-or-ip \
-e CCU_PASSWORD=your-ccu-admin-password \
-v debmatic-data:/data \
-p 3000:3000 \
debmatic-mcp
2. Get the auth token. The server generates a random bearer token on first startup and saves it inside the container's data volume. You need this token to authenticate your MCP client. Grab it with:
docker exec debmatic-mcp grep MCP_AUTH_TOKEN /data/.env
This prints something like MCP_AUTH_TOKEN=e96suzi1iG0H-GPif6K2.... The part after = is your token.
3. Configure your MCP client. If your client uses .mcp.json, add the HTTP server:
{
"mcpServers": {
"debmatic": {
"url": "http://your-server-ip:3000",
"headers": {
"Authorization": "Bearer PASTE-YOUR-TOKEN-HERE"
}
}
}
}
To inject the token automatically (requires jq):
TOKEN=$(docker exec debmatic-mcp grep MCP_AUTH_TOKEN /data/.env | cut -d= -f2)
jq --arg t "$TOKEN" '.mcpServers.debmatic.headers.Authorization = "Bearer " + $t' .mcp.json > .mcp.json.tmp && mv .mcp.json.tmp .mcp.json
This only updates the debmatic entry — other servers in your .mcp.json are left alone.
4. Check it's healthy:
curl http://localhost:3000/health
The HTTP server sends permissive CORS headers and answers OPTIONS preflight requests, so browser-based MCP clients like MCP Inspector can connect directly — no proxy needed. Authentication is still enforced: browsers can read the endpoint, but every MCP request needs the bearer token.
CORS support was first implemented by @marcinn2 in his fork marcinn2/debmatic-mcp — thanks!
If your CCU uses HTTPS (self-signed certificates are fine), add these environment variables:
CCU_HTTPS=true
CCU_PORT=443
The server accepts self-signed certificates automatically — certificate verification is off by default because CCUs ship with self-signed certs. If your CCU has a proper certificate, enable verification with CCU_TLS_VERIFY=true.
All configuration is via environment variables:
| Variable | Default | Description |
|---|---|---|
CCU_HOST | required | Hostname or IP of your CCU |
CCU_PASSWORD | required | CCU admin password |
CCU_USER | Admin | CCU username |
CCU_PORT | 80 | API port (443 when using HTTPS) |
CCU_HTTPS | false | Connect via HTTPS (self-signed certs supported) |
CCU_TLS_VERIFY | false | Verify the CCU's TLS certificate (enable if you have a proper cert) |
CCU_TIMEOUT | 10000 | CCU request timeout in milliseconds |
CCU_SCRIPT_TIMEOUT | 30000 | HM Script execution timeout in milliseconds |
LOG_LEVEL | info | error, warn, info, or debug |
CACHE_DIR | /data | Where to store device type cache and session |
CACHE_TTL | 86400 | Cache lifetime in seconds (24h) |
MCP_TRANSPORT | http | http or stdio (the --stdio CLI flag overrides this) |
MCP_PORT | 3000 | HTTP server port (HTTP mode only) |
MCP_AUTH_TOKEN | auto-generated | Bearer token for HTTP mode; generated and saved to $CACHE_DIR/.env on first start |
CCU_RATE_LIMIT_BURST | 20 | Max burst of requests sent to the CCU |
CCU_RATE_LIMIT_RATE | 10 | Sustained CCU requests per second |
RESOURCE_POLL_INTERVAL | 60 | Seconds between polls for MCP resource change notifications |
18 tools organized by what you'd actually want to do:
Find things — list_devices, list_rooms, list_functions, list_interfaces, list_programs, list_system_variables, describe_device_type
Read state — get_value, get_values (bulk), get_paramset
Change things — set_value, put_paramset, set_system_variable, execute_program
Check health — get_service_messages, get_system_info
Other — help (context-aware), run_script (raw HomeMatic Script for bulk operations, renaming devices/channels, querying room membership, or anything not covered by the other tools)
Most tools auto-resolve the interface and value types from the device address — you don't need to know whether a device is on BidCos-RF or HmIP-RF.
Besides tools, the server exposes MCP resources — browsable JSON snapshots your client can attach as context:
homematic://devices, homematic://rooms, homematic://functions, homematic://programs, homematic://sysvars, homematic://interfaces, homematic://device-types, homematic://system
The server polls the CCU in the background (every RESOURCE_POLL_INTERVAL seconds) and notifies connected clients when the device list changes.
It also ships MCP prompts — ready-made workflows you can invoke from clients that support them (e.g. as slash commands in Claude Code):
check-windows — are any windows or doors open?room-status — full status report for one roomset-heating — set a room's target temperaturegood-night — prepare the house for nightdiagnostics — check for device issuesdevice-info — detailed info about a device's capabilities and parametersThe server talks to the CCU's JSON-RPC API (the same one the WebUI uses). On startup it:
Device type schemas are cached locally so the AI can look up valid parameters, types, and value ranges without hitting the CCU every time.
Values come back as native types — 21.5 not "21.500000", true not "true".
This has been tested against a production debmatic installation with:
Other device types should work too — the server queries the CCU for parameter descriptions rather than maintaining a static device database.
MIT
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.