プロトタイプ · プレビュー版:公式レジストリのすべてのサーバーを掲載し、30分ごとに同期しています。レビューとアカウント機能は今後のステップで始まります。
PopNx MCPAIを使う人のためのMCPサーバー · やさしい言葉で解説

Ccu MCP

作者:claymore666バージョン 1.11.7i★ –iパソコンで動く
レジストリ名io.github.claymore666/ccu-mcp

インストール

概要

作者による説明(英語の原文)

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

PopNx MCPの3つの柱

この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。

できること

このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。

  • 接続方法: パソコンで動く
  • トランスポート: stdio
  • カテゴリ: その他
  • 入力が必要なもの:CCU_HOST, CCU_PASSWORD

インストール

使っているAIアプリを選んで、設定をコピーしてください。

インストールの前に

  • 基本チェック:1項目中1項目に合格
  • あなたのパソコンで、あなたのユーザーと同じ権限(ファイル、ネットワーク、アプリ)で動きます。
  • 自分で入力するもの: CCU_HOST, CCU_PASSWORD, CCU_USER, CCU_HTTPS, CCU_PORT, CACHE_DIR, MCP_ALLOWED_ORIGINS, MCP_ALLOWED_HOSTS, CCU_PROFILES, CCU_DEFAULT_PROFILE, CCU_TLS_VERIFY, CCU_TLS_FINGERPRINT, CCU_CA_CERT, CCU_TIMEOUT, CCU_SCRIPT_TIMEOUT, CACHE_TTL, CCU_RATE_LIMIT_BURST, CCU_RATE_LIMIT_RATE, RESOURCE_POLL_INTERVAL, LOG_LEVEL

「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。

必要なもの

  • npmNode.jsのインストール(npxコマンドに必要)

どのアプリを使っていますか?

上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。

Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます

{
  "mcpServers": {
    "ccu": {
      "command": "npx",
      "args": [
        "-y",
        "ccu-mcp",
        "--stdio"
      ],
      "env": {
        "CCU_HOST": "your-value",
        "CCU_PASSWORD": "your-value",
        "CCU_USER": "your-value",
        "CCU_HTTPS": "your-value",
        "CCU_PORT": "your-value",
        "CACHE_DIR": "your-value",
        "MCP_ALLOWED_ORIGINS": "your-value",
        "MCP_ALLOWED_HOSTS": "your-value",
        "CCU_PROFILES": "your-value",
        "CCU_DEFAULT_PROFILE": "your-value",
        "CCU_TLS_VERIFY": "your-value",
        "CCU_TLS_FINGERPRINT": "your-value",
        "CCU_CA_CERT": "your-value",
        "CCU_TIMEOUT": "your-value",
        "CCU_SCRIPT_TIMEOUT": "your-value",
        "CACHE_TTL": "your-value",
        "CCU_RATE_LIMIT_BURST": "your-value",
        "CCU_RATE_LIMIT_RATE": "your-value",
        "RESOURCE_POLL_INTERVAL": "your-value",
        "LOG_LEVEL": "your-value"
      }
    }
  }
}

ターミナルでこれを実行します

claude mcp add ccu --env CCU_HOST=your-value --env CCU_PASSWORD=your-value --env CCU_USER=your-value --env CCU_HTTPS=your-value --env CCU_PORT=your-value --env CACHE_DIR=your-value --env MCP_ALLOWED_ORIGINS=your-value --env MCP_ALLOWED_HOSTS=your-value --env CCU_PROFILES=your-value --env CCU_DEFAULT_PROFILE=your-value --env CCU_TLS_VERIFY=your-value --env CCU_TLS_FINGERPRINT=your-value --env CCU_CA_CERT=your-value --env CCU_TIMEOUT=your-value --env CCU_SCRIPT_TIMEOUT=your-value --env CACHE_TTL=your-value --env CCU_RATE_LIMIT_BURST=your-value --env CCU_RATE_LIMIT_RATE=your-value --env RESOURCE_POLL_INTERVAL=your-value --env LOG_LEVEL=your-value -- npx -y ccu-mcp --stdio

動かす前に、空欄の値を入力してください。

Cursorで開く

または、設定を自分でコピーする

プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます

{
  "mcpServers": {
    "ccu": {
      "command": "npx",
      "args": [
        "-y",
        "ccu-mcp",
        "--stdio"
      ],
      "env": {
        "CCU_HOST": "your-value",
        "CCU_PASSWORD": "your-value",
        "CCU_USER": "your-value",
        "CCU_HTTPS": "your-value",
        "CCU_PORT": "your-value",
        "CACHE_DIR": "your-value",
        "MCP_ALLOWED_ORIGINS": "your-value",
        "MCP_ALLOWED_HOSTS": "your-value",
        "CCU_PROFILES": "your-value",
        "CCU_DEFAULT_PROFILE": "your-value",
        "CCU_TLS_VERIFY": "your-value",
        "CCU_TLS_FINGERPRINT": "your-value",
        "CCU_CA_CERT": "your-value",
        "CCU_TIMEOUT": "your-value",
        "CCU_SCRIPT_TIMEOUT": "your-value",
        "CACHE_TTL": "your-value",
        "CCU_RATE_LIMIT_BURST": "your-value",
        "CCU_RATE_LIMIT_RATE": "your-value",
        "RESOURCE_POLL_INTERVAL": "your-value",
        "LOG_LEVEL": "your-value"
      }
    }
  }
}

ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。

VS Codeで開く

または、設定を自分でコピーする

プロジェクトの .vscode/mcp.json に貼り付けます

{
  "servers": {
    "ccu": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "ccu-mcp",
        "--stdio"
      ],
      "env": {
        "CCU_HOST": "your-value",
        "CCU_PASSWORD": "your-value",
        "CCU_USER": "your-value",
        "CCU_HTTPS": "your-value",
        "CCU_PORT": "your-value",
        "CACHE_DIR": "your-value",
        "MCP_ALLOWED_ORIGINS": "your-value",
        "MCP_ALLOWED_HOSTS": "your-value",
        "CCU_PROFILES": "your-value",
        "CCU_DEFAULT_PROFILE": "your-value",
        "CCU_TLS_VERIFY": "your-value",
        "CCU_TLS_FINGERPRINT": "your-value",
        "CCU_CA_CERT": "your-value",
        "CCU_TIMEOUT": "your-value",
        "CCU_SCRIPT_TIMEOUT": "your-value",
        "CACHE_TTL": "your-value",
        "CCU_RATE_LIMIT_BURST": "your-value",
        "CCU_RATE_LIMIT_RATE": "your-value",
        "RESOURCE_POLL_INTERVAL": "your-value",
        "LOG_LEVEL": "your-value"
      }
    }
  }
}

ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。

これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。

選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。

自分で入力する値

  • CCU_HOST 必須 env
    Hostname or IP of your HomeMatic CCU (debmatic, CCU3, or OpenCCU/RaspberryMatic)
  • CCU_PASSWORD 秘密 必須 env
    CCU admin password (same as the WebUI login). Must be set; the value may be empty for a CCU with no password
  • CCU_USER env
    CCU username
  • CCU_HTTPS env
    Connect to the CCU via HTTPS (self-signed certificates supported)
  • CCU_PORT env
    CCU API port (80 for HTTP, 443 for HTTPS)
  • CACHE_DIR env
    Directory for the device type cache and session persistence
  • MCP_ALLOWED_ORIGINS env
    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 al…
  • MCP_ALLOWED_HOSTS env
    Extra Host header values accepted by DNS-rebinding protection (comma-separated host:port); add your hostname when behind a proxy or container DNS name
  • CCU_PROFILES env
    Comma-separated names of multiple CCU targets (e.g. 'prod,dev'). Each profile takes the flat CCU_* settings prefixed CCU_ _ (CCU_PROD_HOST, ...), plus policy flags CCU_ _PROTECTED (writes need confir…
  • CCU_DEFAULT_PROFILE env
    Which profile from CCU_PROFILES is active at startup (default: the first listed)
  • CCU_TLS_VERIFY env
    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_…
  • CCU_TLS_FINGERPRINT env
    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 matche…
  • CCU_CA_CERT env
    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
  • CCU_TIMEOUT env
    Timeout for a CCU JSON-RPC call, in MILLISECONDS
  • CCU_SCRIPT_TIMEOUT env
    Timeout for HomeMatic Script execution (ReGa), in MILLISECONDS — scripts are slower than plain API calls
  • CACHE_TTL env
    Lifetime of the on-disk device-type schema cache, in SECONDS
  • CCU_RATE_LIMIT_BURST env
    Token-bucket burst size for CCU requests — how many may be issued back to back
  • CCU_RATE_LIMIT_RATE env
    Sustained CCU request rate, in requests per second
  • RESOURCE_POLL_INTERVAL env
    How often MCP resources are polled for change notifications, in SECONDS
  • LOG_LEVEL env
    error | warn | info | debug. Logs are structured JSON on stderr

この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。

できること

パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。

基本チェックi

誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック

  • ✓ 合格

    作者とリポジトリが一致

    レジストリ名は、リポジトリを所有するGitHubアカウント claymore666 で確認済みです

  • … 未チェック

    今もメンテナンスされている

    このリポジトリはまだGitHubから読み取っていません

  • … 未チェック

    ライセンスがある

    このリポジトリはまだGitHubから読み取っていません

  • – 対象外

    エンドポイントが応答する

    これはパソコンで動くため、インターネット上のエンドポイントはありません

  • – 対象外

    OAuthでサインイン

    パソコンで動き、代わりにローカルの設定を使います

  • … 未チェック

    ツールの説明に隠れた指示がない

    パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです

その他のほかのサーバーとの比較i

  • このカテゴリのほかの32708件のうち0%よりスターが多い
  • このカテゴリのほかの32708件のうち74%より最近レジストリに公開
  • 基本チェックの結果が、このカテゴリのほかの32708件のうち100%と同じかそれ以上

レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。

よくある質問

Ccu MCPは安全ですか?

当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。

どんなキーやコードが必要ですか?

入力が必要なもの:CCU_HOST, CCU_PASSWORD

パソコンで動きますか、それともクラウドですか?

あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。

今もメンテナンスされていますか?

GitHubリポジトリの最終更新は–、最新バージョン(1.11.7)がレジストリに届いたのは13 日前です。

どのアプリで使えますか?

Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。

代わりに使えるものは?

同じカテゴリには:Spec Driven Development, Remote Desktop Commander, OpenTakeoff

代わりの候補

同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。

カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i

Remote Desktop Commander

作者:desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

クラウドで動く★ 211一昨日更新
インストール

OpenTakeoff

作者:Kentucky-ai

Construction takeoff for AI agents: load plans, set scale, measure, count, export with provenance.

パソコンで動く今日更新
インストール

作者のREADME

READMEを開く

作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。

ccu-mcp

Talk to your HomeMatic smart home from Claude, Cursor, or any MCP client.

ccu-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.

Works with any HomeMatic CCU: debmatic (HomeMatic on Debian), a CCU3, or OpenCCU (formerly RaspberryMatic) — anything that exposes the standard /api/homematic.cgi endpoint.

What can it do?

Ask your AI assistant things like:

  • "What's the temperature in the bathroom?"
  • "Are any windows open?"
  • "Set the living room heating to 21 degrees"
  • "Show me all devices with low battery"
  • "What's the gas meter reading?"
  • "Which devices have low battery or haven't been seen in a long time?"
  • "Find all channels whose names don't match their device name"
  • "Rename all devices to follow a consistent naming convention with floor labels (UG/OG/EG)"
  • "Which room is the window sensor in?"

The MCP server handles device discovery, type resolution, session management, and value conversion — the AI just calls the tools.

Prerequisites

  • A running HomeMatic CCU (debmatic, CCU3, or OpenCCU — formerly RaspberryMatic) reachable on your network
  • The CCU's admin username and password (the same credentials you use to log into the WebUI)
  • Node.js 24+ (for running from source or stdio mode) or Docker

Quick start

export CCU_HOST=your-ccu-hostname-or-ip

export CCU_PASSWORD=your-ccu-admin-password npx ccu-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.

A cache_save_failed … mkdir '/data' line alongside it is harmless here but worth fixing for real use: CACHE_DIR defaults to /data (the Docker layout), so outside a container the device-type cache and the CCU session are never persisted between runs. Point it somewhere writable: export CACHE_DIR="$HOME/.cache/ccu-mcp" (or the same key in your .env / env block).

Prefer a guided setup? npx ccu-mcp init probes your CCU, pins its TLS certificate, tests the login, writes a ready-to-use .env file, and prints the matching MCP client config — see Command-line flags.

Installation

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.

Option A: stdio (direct, simplest)

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": { "ccu-mcp": { "command": "npx", "args": ["ccu-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 ccu-mcp in the list.

Alternatively, use the Claude Code CLI:

claude mcp add ccu-mcp -- npx ccu-mcp --stdio
Option B: Docker (standalone HTTP server)

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. Images are published to GHCR for linux/amd64 and linux/arm64 (so a Raspberry Pi next to the CCU works), built natively on each architecture and attested — gh attestation verify oci://ghcr.io/claymore666/ccu-mcp:latest --repo claymore666/ccu-mcp proves the image came from this repository's release workflow.

docker pull ghcr.io/claymore666/ccu-mcp:latest

Every release also publishes its own X.Y.Z tag — pin that instead of latest if you'd rather upgrade deliberately. To build from source instead:

git clone https://github.com/claymore666/ccu-mcp.git && cd ccu-mcp

docker build -t ghcr.io/claymore666/ccu-mcp .

Then run it:

docker run -d \

--name ccu-mcp \ -e CCU_HOST=your-ccu-hostname-or-ip \ -e CCU_PASSWORD=your-ccu-admin-password \ -e MCP_ALLOWED_HOSTS=your-server-ip:3000 \ -v ccu-data:/data \ -p 3000:3000 \ ghcr.io/claymore666/ccu-mcp:latest

`MCP_ALLOWED_HOSTS` is required for remote clients. The server's

DNS-rebinding protection rejects any request whose Host header isn't on

the allowlist — by default only localhost/127.0.0.1/[::1] on the MCP

port. Set it to every name/IP clients will use to reach the server

(comma-separated, host:port). Without it, the local health check works

but every remote MCP request gets 403 Invalid Host header.

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 ccu-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": { "ccu-mcp": { "url": "http://your-server-ip:3000", "headers": { "Authorization": "Bearer PASTE-YOUR-TOKEN-HERE" } } } }

To inject the token automatically (requires jq):

TOKEN=$(docker exec ccu-mcp grep MCP_AUTH_TOKEN /data/.env | cut -d= -f2)

jq --arg t "$TOKEN" '.mcpServers["ccu-mcp"].headers.Authorization = "Bearer " + $t' .mcp.json > .mcp.json.tmp && mv .mcp.json.tmp .mcp.json

This only updates the ccu-mcp entry — other servers in your .mcp.json are left alone.

4. Check it's healthy:

curl http://localhost:3000/health
Browser-based clients (CORS)

By default the HTTP server sends no CORS headers, so a random web page can't drive a local instance. To let browser-based MCP clients like MCP Inspector connect directly, set MCP_ALLOWED_ORIGINS to a comma-separated allowlist of trusted origins (e.g. https://app.example,http://localhost:6274). A request whose Origin is on the list gets that exact origin reflected in Access-Control-Allow-Origin — never the wildcard *, which would let any site drive a local instance that controls real CCU hardware. A request from any other origin gets no CORS headers (the browser blocks it) and is rejected server-side by DNS-rebinding protection. Authentication is always enforced regardless: every MCP request needs the bearer token.

The HTTP transport also has DNS-rebinding protection on by default: it rejects requests whose Host header isn't localhost/127.0.0.1/[::1] on the configured port. If you reach the server under another hostname or IP (reverse proxy, container DNS name, the server's LAN address), list those hosts in MCP_ALLOWED_HOSTS or legitimate requests get a 403.

TLS. The bearer token travels in the request, so anything beyond loopback should be encrypted. You have two options: terminate TLS at a reverse proxy (Caddy/nginx) in front and bind the server to loopback (MCP_HOST=127.0.0.1), or let the server serve HTTPS itself by setting MCP_TLS_CERT and MCP_TLS_KEY to a PEM cert/key pair. Plain HTTP is still fully supported — it stays the zero-config default — but the server logs a warning at startup when it's serving the token over unencrypted HTTP on a non-loopback bind; set MCP_ALLOW_PLAINTEXT=true to acknowledge that and silence it.

Token rotation & expiry. By default the bearer token lives forever. Two optional, composable controls let you rotate it without dropping clients:

  • *Auto-generated token* — set MCP_AUTH_TOKEN_TTL_DAYS (fractional days allowed) to give the generated token a lifetime. The server rotates it automatically at runtime shortly before it lapses (no restart needed; also on startup if it expired while the server was down), prints the new token on stderr, and keeps the just-replaced token validating for MCP_AUTH_TOKEN_GRACE_HOURS (default 24) so in-flight clients survive the swap. To force a rotation sooner, delete $CACHE_DIR/.env (or just its MCP_AUTH_TOKEN line) and restart.
  • *Explicit token* — when you set MCP_AUTH_TOKEN yourself, you own its lifetime (TTL doesn't apply). To rotate, put the new token in MCP_AUTH_TOKEN, move the old one to MCP_AUTH_TOKEN_PREVIOUS, and restart; both are accepted during the overlap. Drop MCP_AUTH_TOKEN_PREVIOUS and restart once every client is on the new token. Comparison stays timing-safe across every currently-valid token.

Brute-force protection (fail2ban). The auto-generated token is 256 bits of randomness, so guessing it is infeasible. If you set MCP_AUTH_TOKEN yourself, make it long and random (e.g. openssl rand -base64 32) — a short or guessable token is the one case brute force matters. The server does not rate-limit or lock out failed logins in-process; that job belongs to a firewall-level tool like fail2ban, which bans the source IP before the request ever reaches the server. To make that easy, every rejected request logs a structured line to stderr:

{"ts":"2026-06-18T17:28:00.370Z","level":"warn","msg":"auth_failed","client":"203.0.113.7","hadToken":true}

Ready-to-use fail2ban config ships in fail2ban/: copy filter.d/ccu-mcp.conf to /etc/fail2ban/filter.d/ and the jail in jail.d/ccu-mcp.local to /etc/fail2ban/jail.d/ (it defaults to 5 failures in 10 minutes → 1-hour ban). The server logs to stderr, so point fail2ban at wherever you collect it — the journal (backend = systemd) when run as a unit, or a file when you redirect stderr/docker logs; both are spelled out in the jail file. Requires LOG_LEVEL=warn or lower (info, the default, is fine; error suppresses the line). Behind a reverse proxy the logged IP is the proxy's, so run fail2ban against the proxy's access log instead.

CORS support was first implemented by @marcinn2 in his fork marcinn2/debmatic-mcp — thanks!

###

冒頭だけを表示しています。続きはリポジトリで読めます

PopNxに聞く