← Back to Plugins
MCP Server MCP

io.github.claymore666/ccu-mcp

github By github 👁 1 views ▲ 0 votes

MCP server for controlling HomeMatic smart home devices via the CCU JSON-RPC API

Homepage Verified source GitHub

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

Comments

Sign in to leave a comment

Loading comments...