MCP Server
MCP
io.github.claymore666/ccu-mcp
MCP server for controlling HomeMatic smart home devices via the CCU JSON-RPC API
Install
npx -y [email protected]
Configuration Example
{
"remotes": [],
"packages": [
{
"registryType": "npm",
"identifier": "ccu-mcp",
"version": "1.10.0",
"runtimeHint": "npx",
"transport": {
"type": "stdio"
},
"packageArguments": [
{
"value": "--stdio",
"type": "positional"
}
],
"environmentVariables": [
{
"description": "Hostname or IP of your HomeMatic CCU (debmatic, CCU3, or OpenCCU/RaspberryMatic)",
"isRequired": true,
"format": "string",
"name": "CCU_HOST"
},
{
"description": "CCU admin password (same as the WebUI login)",
"isRequired": true,
"format": "string",
"isSecret": true,
"name": "CCU_PASSWORD"
},
{
"description": "CCU username",
"format": "string",
"default": "Admin",
"name": "CCU_USER"
},
{
"description": "Connect to the CCU via HTTPS (self-signed certificates supported)",
"format": "boolean",
"default": "false",
"name": "CCU_HTTPS"
},
{
"description": "CCU API port (80 for HTTP, 443 for HTTPS)",
"format": "number",
"default": "80",
"name": "CCU_PORT"
},
{
"description": "Directory for the device type cache and session persistence",
"format": "string",
"default": "/data",
"name": "CACHE_DIR"
},
{
"description": "Comma-separated allowlist of browser origins. Unset = no cross-origin browser access (default-deny). An allowlisted origin is reflected exactly in Access-Control-Allow-Origin (never '*'); the list also drives DNS-rebinding origin checks",
"format": "string",
"name": "MCP_ALLOWED_ORIGINS"
},
{
"description": "Extra Host header values accepted by DNS-rebinding protection (comma-separated host:port); add your hostname when behind a proxy or container DNS name",
"format": "string",
"name": "MCP_ALLOWED_HOSTS"
},
{
"description": "Comma-separated names of multiple CCU targets (e.g. 'prod,dev'). Each profile takes the flat CCU_* settings prefixed CCU_<NAME>_ (CCU_PROD_HOST, ...), plus policy flags CCU_<NAME>_PROTECTED (writes need confirm:true) and CCU_<NAME>_READONLY. Unset = single default profile from the flat CCU_* vars",
"format": "string",
"name": "CCU_PROFILES"
},
{
"description": "Which profile from CCU_PROFILES is active at startup (default: the first listed)",
"format": "string",
"name": "CCU_DEFAULT_PROFILE"
},
{
"description": "Verify the CCU's TLS certificate against the system trust store. Only meaningful with CCU_HTTPS=true. Default false, because a CCU ships a self-signed certificate — prefer CCU_TLS_FINGERPRINT or CCU_CA_CERT to verify one of those",
"format": "boolean",
"default": "false",
"name": "CCU_TLS_VERIFY"
},
{
"description": "Pin the CCU's self-signed leaf certificate by its SHA-256 fingerprint (hex, colons optional). The strongest option for an appliance: the connection is rejected unless the presented certificate matches. Takes precedence over CCU_CA_CERT",
"format": "string",
"name": "CCU_TLS_FINGERPRINT"
},
{
"description": "Path to a PEM file holding the CCU's CA or self-signed certificate. The connection is then validated against it with standard chain verification",
"format": "string",
"name": "CCU_CA_CERT"
},
{
"description": "Timeout for a CCU JSON-RPC call, in MILLISECONDS",
"format": "number",
"default": "10000",
"name": "CCU_TIMEOUT"
},
{
"description": "Timeout for HomeMatic Script execution (ReGa), in MILLISECONDS — scripts are slower than plain API calls",
"format": "number",
"default": "30000",
"name": "CCU_SCRIPT_TIMEOUT"
},
{
"description": "Lifetime of the on-disk device-type schema cache, in SECONDS",
"format": "number",
"default": "86400",
"name": "CACHE_TTL"
},
{
"description": "Token-bucket burst size for CCU requests — how many may be issued back to back",
"format": "number",
"default": "20",
"name": "CCU_RATE_LIMIT_BURST"
},
{
"description": "Sustained CCU request rate, in requests per second",
"format": "number",
"default": "10",
"name": "CCU_RATE_LIMIT_RATE"
},
{
"description": "How often MCP resources are polled for change notifications, in SECONDS",
"format": "number",
"default": "60",
"name": "RESOURCE_POLL_INTERVAL"
},
{
"description": "error | warn | info | debug. Logs are structured JSON on stderr",
"format": "string",
"default": "info",
"name": "LOG_LEVEL"
}
]
}
]
}
mcp
model-context-protocol
npm
By
Comments
Sign in to leave a comment