ccu-mcp
MCP server for controlling HomeMatic smart home devices via the CCU JSON-RPC API
The record the registry holds
There is no address to call. This one is a package you install and run yourself, wherever your assistant runs.
{
"server": {
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "io.github.claymore666/ccu-mcp",
"description": "MCP server for controlling HomeMatic smart home devices via the CCU JSON-RPC API",
"repository": {
"url": "https://github.com/claymore666/ccu-mcp",
"source": "github"
},
"version": "1.10.0",
"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"
}
]
}
]
},
"_meta": {
"io.modelcontextprotocol.registry/official": {
"status": "active",
"statusChangedAt": "2026-08-19T18:32:57.984269Z",
"publishedAt": "2026-08-19T18:32:57.984269Z",
"updatedAt": "2026-08-19T18:32:57.984269Z",
"isLatest": true
}
}
}
Draft an Agent Plugin from this
An MCP server is raw capability: some tools, wired to something. An Agent Plugin is the packaging that says what job it does, what it leaves behind and where it stops. The prompt below carries this record and asks for the packaging; your own assistant writes it, and nothing here is sent anywhere.
MCP server
These are the publisher's own words, filed by them with the official MCP registry and mirrored here. This catalog did not read them from the publisher and has not run, called or installed anything.
The publisher's own address
https://github.com/claymore666/ccu-mcp
The address the publisher put in their registry record, printed as they wrote it. Nobody here has opened it.