Search / io.github.claymore666/ccu-mcp
ccu-mcp
L0· runs locallyMCP server for controlling HomeMatic smart home devices via the CCU JSON-RPC API
v1.11.4 · active · repository · descriptor JSON · versions
Search / io.github.claymore666/ccu-mcp
L0· runs locallyMCP server for controlling HomeMatic smart home devices via the CCU JSON-RPC API
v1.11.4 · active · repository · descriptor JSON · versions
{
"mcpServers": {
"ccu-mcp": {
"command": "npx",
"args": [
"-y",
"[email protected]",
"--stdio"
],
"env": {
"CCU_HOST": "${CCU_HOST}",
"CCU_PASSWORD": "${CCU_PASSWORD}",
"CCU_USER": "Admin",
"CCU_HTTPS": "false",
"CCU_PORT": "80",
"CACHE_DIR": "/data",
"CCU_TLS_VERIFY": "false",
"CCU_TIMEOUT": "10000",
"CCU_SCRIPT_TIMEOUT": "30000",
"CACHE_TTL": "86400",
"CCU_RATE_LIMIT_BURST": "20",
"CCU_RATE_LIMIT_RATE": "10",
"RESOURCE_POLL_INTERVAL": "60",
"LOG_LEVEL": "info"
}
}
}
}claude mcp add ccu-mcp -e "CCU_HOST=${CCU_HOST}" -e "CCU_PASSWORD=${CCU_PASSWORD}" -e "CCU_USER=Admin" -e "CCU_HTTPS=false" -e "CCU_PORT=80" -e "CACHE_DIR=/data" -e "CCU_TLS_VERIFY=false" -e "CCU_TIMEOUT=10000" -e "CCU_SCRIPT_TIMEOUT=30000" -e "CACHE_TTL=86400" -e "CCU_RATE_LIMIT_BURST=20" -e "CCU_RATE_LIMIT_RATE=10" -e "RESOURCE_POLL_INTERVAL=60" -e "LOG_LEVEL=info" -- npx -y [email protected] --stdio[mcp_servers.ccu-mcp]
command = "npx"
args = ["-y", "[email protected]", "--stdio"]
env = { "CCU_HOST" = "${CCU_HOST}", "CCU_PASSWORD" = "${CCU_PASSWORD}", "CCU_USER" = "Admin", "CCU_HTTPS" = "false", "CCU_PORT" = "80", "CACHE_DIR" = "/data", "CCU_TLS_VERIFY" = "false", "CCU_TIMEOUT" = "10000", "CCU_SCRIPT_TIMEOUT" = "30000", "CACHE_TTL" = "86400", "CCU_RATE_LIMIT_BURST" = "20", "CCU_RATE_LIMIT_RATE" = "10", "RESOURCE_POLL_INTERVAL" = "60", "LOG_LEVEL" = "info" }
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"ccu-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"[email protected]",
"--stdio"
],
"enabled": true,
"environment": {
"CCU_HOST": "{env:CCU_HOST}",
"CCU_PASSWORD": "{env:CCU_PASSWORD}",
"CCU_USER": "Admin",
"CCU_HTTPS": "false",
"CCU_PORT": "80",
"CACHE_DIR": "/data",
"CCU_TLS_VERIFY": "false",
"CCU_TIMEOUT": "10000",
"CCU_SCRIPT_TIMEOUT": "30000",
"CACHE_TTL": "86400",
"CCU_RATE_LIMIT_BURST": "20",
"CCU_RATE_LIMIT_RATE": "10",
"RESOURCE_POLL_INTERVAL": "60",
"LOG_LEVEL": "info"
}
}
}
}{
"mcpServers": {
"ccu-mcp": {
"command": "npx",
"args": [
"-y",
"[email protected]",
"--stdio"
],
"env": {
"CCU_HOST": "${CCU_HOST}",
"CCU_PASSWORD": "${CCU_PASSWORD}",
"CCU_USER": "Admin",
"CCU_HTTPS": "false",
"CCU_PORT": "80",
"CACHE_DIR": "/data",
"CCU_TLS_VERIFY": "false",
"CCU_TIMEOUT": "10000",
"CCU_SCRIPT_TIMEOUT": "30000",
"CACHE_TTL": "86400",
"CCU_RATE_LIMIT_BURST": "20",
"CCU_RATE_LIMIT_RATE": "10",
"RESOURCE_POLL_INTERVAL": "60",
"LOG_LEVEL": "info"
}
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=ccu-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsImNjdS1tY3BAMS4xMS40IiwiLS1zdGRpbyJdLCJlbnYiOnsiQ0NVX0hPU1QiOiIke0NDVV9IT1NUfSIsIkNDVV9QQVNTV09SRCI6IiR7Q0NVX1BBU1NXT1JEfSIsIkNDVV9VU0VSIjoiQWRtaW4iLCJDQ1VfSFRUUFMiOiJmYWxzZSIsIkNDVV9QT1JUIjoiODAiLCJDQUNIRV9ESVIiOiIvZGF0YSIsIkNDVV9UTFNfVkVSSUZZIjoiZmFsc2UiLCJDQ1VfVElNRU9VVCI6IjEwMDAwIiwiQ0NVX1NDUklQVF9USU1FT1VUIjoiMzAwMDAiLCJDQUNIRV9UVEwiOiI4NjQwMCIsIkNDVV9SQVRFX0xJTUlUX0JVUlNUIjoiMjAiLCJDQ1VfUkFURV9MSU1JVF9SQVRFIjoiMTAiLCJSRVNPVVJDRV9QT0xMX0lOVEVSVkFMIjoiNjAiLCJMT0dfTEVWRUwiOiJpbmZvIn19"
}{
"servers": {
"ccu-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"[email protected]",
"--stdio"
],
"env": {
"CCU_HOST": "${CCU_HOST}",
"CCU_PASSWORD": "${CCU_PASSWORD}",
"CCU_USER": "Admin",
"CCU_HTTPS": "false",
"CCU_PORT": "80",
"CACHE_DIR": "/data",
"CCU_TLS_VERIFY": "false",
"CCU_TIMEOUT": "10000",
"CCU_SCRIPT_TIMEOUT": "30000",
"CACHE_TTL": "86400",
"CCU_RATE_LIMIT_BURST": "20",
"CCU_RATE_LIMIT_RATE": "10",
"RESOURCE_POLL_INTERVAL": "60",
"LOG_LEVEL": "info"
}
}
}
}{
"mcpServers": {
"ccu-mcp": {
"command": "npx",
"args": [
"-y",
"[email protected]",
"--stdio"
],
"env": {
"CCU_HOST": "${CCU_HOST}",
"CCU_PASSWORD": "${CCU_PASSWORD}",
"CCU_USER": "Admin",
"CCU_HTTPS": "false",
"CCU_PORT": "80",
"CACHE_DIR": "/data",
"CCU_TLS_VERIFY": "false",
"CCU_TIMEOUT": "10000",
"CCU_SCRIPT_TIMEOUT": "30000",
"CACHE_TTL": "86400",
"CCU_RATE_LIMIT_BURST": "20",
"CCU_RATE_LIMIT_RATE": "10",
"RESOURCE_POLL_INTERVAL": "60",
"LOG_LEVEL": "info"
}
}
}
}extensions:
"ccu-mcp":
enabled: true
name: "ccu-mcp"
type: stdio
cmd: "npx"
args:
- "-y"
- "[email protected]"
- "--stdio"
envs:
"CCU_HOST": "${CCU_HOST}"
"CCU_PASSWORD": "${CCU_PASSWORD}"
"CCU_USER": "Admin"
"CCU_HTTPS": "false"
"CCU_PORT": "80"
"CACHE_DIR": "/data"
"CCU_TLS_VERIFY": "false"
"CCU_TIMEOUT": "10000"
"CCU_SCRIPT_TIMEOUT": "30000"
"CACHE_TTL": "86400"
"CCU_RATE_LIMIT_BURST": "20"
"CCU_RATE_LIMIT_RATE": "10"
"RESOURCE_POLL_INTERVAL": "60"
"LOG_LEVEL": "info"
timeout: 300
Placeholders to fill from your own secret store: ${CCU_PASSWORD}. The registry never accepts secret values.
This is a local package: the command runs on your machine.
Not scored: fewer than three checks apply, usually because no remote answered a credential-free probe or the server is a local package.
protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)auth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptions, tools.description_length, tools.schemas, tools.annotations, tools.directory_hints, tools.token_cost, tools.api_dumptool list unknown (behind auth, not probed, or empty)stability.changes, stability.rug_pulltool list unknownNo tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +namespace-matches-repo ~liveness-unmeasured +updated-13d-ago
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
[email protected] npmthis version is not known to the dependency resolver
Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.
| package | registry | version | runtime | secrets |
|---|---|---|---|---|
ccu-mcp | npm | 1.11.4 | npx | CCU_PASSWORD |
No tools observed. Local packages are never executed by the registry.
Schemas: list_tools.
{
"name": "io.github.claymore666/ccu-mcp",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"version": "1.11.4",
"packages": [
{
"version": "1.11.4",
"transport": {
"type": "stdio"
},
"identifier": "ccu-mcp",
"runtimeHint": "npx",
"registryType": "npm",
"packageArguments": [
{
"type": "positional",
"value": "--stdio"
}
],
"environmentVariables": [
{
"name": "CCU_HOST",
"format": "string",
"isRequired": true,
"description": "Hostname or IP of your HomeMatic CCU (debmatic, CCU3, or OpenCCU/RaspberryMatic)"
},
{
"name": "CCU_PASSWORD",
"format": "string",
"isSecret": true,
"isRequired": true,
"description": "CCU admin password (same as the WebUI login). Must be set; the value may be empty for a CCU with no password"
},
{
"name": "CCU_USER",
"format": "string",
"default": "Admin",
"description": "CCU username"
},
{
"name": "CCU_HTTPS",
"format": "boolean",
"default": "false",
"description": "Connect to the CCU via HTTPS (self-signed certificates supported)"
},
{
"name": "CCU_PORT",
"format": "number",
"default": "80",
"description": "CCU API port (80 for HTTP, 443 for HTTPS)"
},
{
"name": "CACHE_DIR",
"format": "string",
"default": "/data",
"description": "Directory for the device type cache and session persistence"
},
{
"name": "MCP_ALLOWED_ORIGINS",
"format": "string",
"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"
},
{
"name": "MCP_ALLOWED_HOSTS",
"format": "string",
"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"
},
{
"name": "CCU_PROFILES",
"format": "string",
"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"
},
{
"name": "CCU_DEFAULT_PROFILE",
"format": "string",
"description": "Which profile from CCU_PROFILES is active at startup (default: the first listed)"
},
{
"name": "CCU_TLS_VERIFY",
"format": "boolean",
"default": "false",
"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"
},
{
"name": "CCU_TLS_FINGERPRINT",
"format": "string",
"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"
},
{
"name": "CCU_CA_CERT",
"format": "string",
"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"
},
{
"name": "CCU_TIMEOUT",
"format": "number",
"default": "10000",
"description": "Timeout for a CCU JSON-RPC call, in MILLISECONDS"
},
{
"name": "CCU_SCRIPT_TIMEOUT",
"format": "number",
"default": "30000",
"description": "Timeout for HomeMatic Script execution (ReGa), in MILLISECONDS — scripts are slower than plain API calls"
},
{
"name": "CACHE_TTL",
"format": "number",
"default": "86400",
"description": "Lifetime of the on-disk device-type schema cache, in SECONDS"
},
{
"name": "CCU_RATE_LIMIT_BURST",
"format": "number",
"default": "20",
"description": "Token-bucket burst size for CCU requests — how many may be issued back to back"
},
{
"name": "CCU_RATE_LIMIT_RATE",
"format": "number",
"default": "10",
"description": "Sustained CCU request rate, in requests per second"
},
{
"name": "RESOURCE_POLL_INTERVAL",
"format": "number",
"default": "60",
"description": "How often MCP resources are polled for change notifications, in SECONDS"
},
{
"name": "LOG_LEVEL",
"format": "string",
"default": "info",
"description": "error | warn | info | debug. Logs are structured JSON on stderr"
}
]
}
],
"repository": {
"url": "https://github.com/claymore666/ccu-mcp",
"source": "github"
},
"description": "MCP server for controlling HomeMatic smart home devices via the CCU JSON-RPC API"
}