Medplum MCP
Securely access and manage FHIR healthcare data stored in Medplum.
Administer a Zigbee2MQTT estate: health, mesh diagnostics, OTA, pairing, device management.
使っているAIアプリを選んで、設定をコピーしてください。
チェック 3/3 合格 · あなたのパソコンで動きます · ✓ コマンド確認済み 2026年11月14日
まず:どの AI を使っていますか?
使っているアプリを選ぶと、下に手順が表示されます。
このメッセージを Claude のチャットに貼り付けます。AI がパソコンを確認し、変更するファイルを伝え、毎回あなたの了承を待ちます。
このパソコンの Claude に MCP server Zigbee2mqtt MCP を入れてください。順番に:1) node -v で Node.js があるか確認。なければ https://nodejs.org/en/download から入れるよう私に伝え、自分では入れない。2) この設定だけを使う(PopNx MCP の確認済み):{ "mcpServers": { "zigbee2mqtt": { "command": "npx", "args": [ "-y", "zigbee2mqtt-mcp" ], "env": { "Z2M_MQTT_URL": "your-value", "Z2M_MQTT_PASSWORD": "your-value" } } } } 3) 変更するファイルのフルパスか実行するコマンドを伝えて、私の了承を待つ。4) Z2M_MQTT_URL, Z2M_MQTT_PASSWORD は "your-value" のままにして、本当の値は私がファイルかアプリの入力欄に自分で貼るよう伝える。チャットにキーを書かせない。5) 了承した内容を実行し、Zigbee2mqtt MCP のツールが本当に表示されるか確認する。このメッセージにあなたのキーは含まれません。キーが必要な場合は、AI がファイルやアプリの入力欄にご自身で貼るよう案内します。
もう入っていますか?先に確認 · ターミナルを開き、このコマンドを入力して Enter
node -vMac:⌘ + Space を押し、Terminal と入力して Enter
Windows:スタートメニューを開き、Windows PowerShell と入力して「開く」
まだ入っていない場合: 公式ダウンロードページで LTS 版と、クリックで進むインストーラーを選びます:Mac は .pkg、Windows は .msi。ダブルクリックして最後まで進めるだけで、curl コマンドは不要です
入れ終わったらターミナルを閉じて開き直し、同じコマンドをもう一度実行します。バージョン番号が出れば完了です: node -v
一度入れれば、Node.js を使うすべてのツールで使えます
提供元のサイトで登録し、次の手順で使う API キーを作ります。料金や無料プランは提供元のサイトで確認してください。
キーの取り方は下の提供元 README にあります
SettingsDeveloperEdit Config
{
"mcpServers": {
"zigbee2mqtt": {
"command": "npx",
"args": [
"-y",
"zigbee2mqtt-mcp"
],
"env": {
"Z2M_MQTT_URL": "your-value",
"Z2M_MQTT_PASSWORD": "your-value"
}
}
}
}キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
Zigbee2mqtt MCP を使って、私に何ができるか教えて、1 つやってみせて✓ Claude が Zigbee2mqtt MCP を使っていると言うか、回答に Zigbee2mqtt MCP のツール名が出れば接続成功です
上のコマンドはこれらがなくても動きます。変えたいときだけ作者の説明に沿って追加してください。
Z2M_MQTT_USERNAME MQTT ブローカーのユーザー名(ブローカーが認証を要求する場合)。 Z2M_BASE_TOPIC Zigbee2MQTT のベーストピック。configuration.yaml の mqtt.base_topic と一致させる必要があります。デフォルトは zigbee2mqtt です。 Z2M_WRITE_MODE Tool exposure tier: off (read-only), safe (default; adds non-destructive writes such as pairing, options, rename and binding) or full (adds device removal, OTA flashing, Touchlink and bridge restart).説明は自動翻訳です。変数名は原文のままです。迷ったら原文を確認してください。
メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
ChatGPT はまだ Zigbee2mqtt MCP につなげません
Zigbee2mqtt MCP はパソコンに入れて使うものですが、ChatGPT は Web 上で動くサーバーにしかつなげません
A · Zigbee2mqtt MCP につなげるアプリを使う
B · クリニック・健康 の中で ChatGPT につなげる別のサーバー
同じカテゴリでよく使われているものから、キーなしでアドレスだけでつなげるものを選びました
Claude Code につなげますが、先に準備が必要です
Zigbee2mqtt MCP のキーが必要です(提供元のサイトで作成) · 先にパソコンへ Node.js を入れてください(1 回だけ)
このメッセージを Claude Code のチャットに貼り付けます。AI がパソコンを確認し、変更するファイルを伝え、毎回あなたの了承を待ちます。
このパソコンの Claude Code に MCP server Zigbee2mqtt MCP を入れてください。順番に:1) node -v で Node.js があるか確認。なければ https://nodejs.org/en/download から入れるよう私に伝え、自分では入れない。2) この設定だけを使う(PopNx MCP の確認済み):claude mcp add --scope user zigbee2mqtt --env Z2M_MQTT_URL=your-value --env Z2M_MQTT_PASSWORD=your-value -- npx -y zigbee2mqtt-mcp 3) 変更するファイルのフルパスか実行するコマンドを伝えて、私の了承を待つ。4) Z2M_MQTT_URL, Z2M_MQTT_PASSWORD は "your-value" のままにして、本当の値は私がファイルかアプリの入力欄に自分で貼るよう伝える。チャットにキーを書かせない。5) 了承した内容を実行し、Zigbee2mqtt MCP のツールが本当に表示されるか確認する。このメッセージにあなたのキーは含まれません。キーが必要な場合は、AI がファイルやアプリの入力欄にご自身で貼るよう案内します。
もう入っていますか?先に確認 · ターミナルを開き、このコマンドを入力して Enter
node -vMac:⌘ + Space を押し、Terminal と入力して Enter
Windows:スタートメニューを開き、Windows PowerShell と入力して「開く」
まだ入っていない場合: 公式ダウンロードページで LTS 版と、クリックで進むインストーラーを選びます:Mac は .pkg、Windows は .msi。ダブルクリックして最後まで進めるだけで、curl コマンドは不要です
入れ終わったらターミナルを閉じて開き直し、同じコマンドをもう一度実行します。バージョン番号が出れば完了です: node -v
一度入れれば、Node.js を使うすべてのツールで使えます
提供元のサイトで登録し、次の手順で使う API キーを作ります。料金や無料プランは提供元のサイトで確認してください。
キーの取り方は下の提供元 README にあります
Mac:Command+スペースで Terminal と入力 · Windows:PowerShell を開く
claude mcp add --scope user zigbee2mqtt --env Z2M_MQTT_URL=your-value --env Z2M_MQTT_PASSWORD=your-value -- npx -y zigbee2mqtt-mcpEnter の前に「your-value」を自分のキーに書き換えてください
キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
Zigbee2mqtt MCP が一覧にあり、接続済みと表示されれば OK です
Zigbee2mqtt MCP を使って、私に何ができるか教えて、1 つやってみせて✓ Claude Code が Zigbee2mqtt MCP を使っていると言うか、回答に Zigbee2mqtt MCP のツール名が出れば接続成功です
上のコマンドはこれらがなくても動きます。変えたいときだけ作者の説明に沿って追加してください。
Z2M_MQTT_USERNAME MQTT ブローカーのユーザー名(ブローカーが認証を要求する場合)。 Z2M_BASE_TOPIC Zigbee2MQTT のベーストピック。configuration.yaml の mqtt.base_topic と一致させる必要があります。デフォルトは zigbee2mqtt です。 Z2M_WRITE_MODE Tool exposure tier: off (read-only), safe (default; adds non-destructive writes such as pairing, options, rename and binding) or full (adds device removal, OTA flashing, Touchlink and bridge restart).説明は自動翻訳です。変数名は原文のままです。迷ったら原文を確認してください。
メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
Cursor につなげますが、先に準備が必要です
Zigbee2mqtt MCP のキーが必要です(提供元のサイトで作成) · 先にパソコンへ Node.js を入れてください(1 回だけ)
このメッセージを Cursor のチャットに貼り付けます。AI がパソコンを確認し、変更するファイルを伝え、毎回あなたの了承を待ちます。
このパソコンの Cursor に MCP server Zigbee2mqtt MCP を入れてください。順番に:1) node -v で Node.js があるか確認。なければ https://nodejs.org/en/download から入れるよう私に伝え、自分では入れない。2) この設定だけを使う(PopNx MCP の確認済み):{ "mcpServers": { "zigbee2mqtt": { "command": "npx", "args": [ "-y", "zigbee2mqtt-mcp" ], "env": { "Z2M_MQTT_URL": "your-value", "Z2M_MQTT_PASSWORD": "your-value" } } } } 3) 変更するファイルのフルパスか実行するコマンドを伝えて、私の了承を待つ。4) Z2M_MQTT_URL, Z2M_MQTT_PASSWORD は "your-value" のままにして、本当の値は私がファイルかアプリの入力欄に自分で貼るよう伝える。チャットにキーを書かせない。5) 了承した内容を実行し、Zigbee2mqtt MCP のツールが本当に表示されるか確認する。このメッセージにあなたのキーは含まれません。キーが必要な場合は、AI がファイルやアプリの入力欄にご自身で貼るよう案内します。
もう入っていますか?先に確認 · ターミナルを開き、このコマンドを入力して Enter
node -vMac:⌘ + Space を押し、Terminal と入力して Enter
Windows:スタートメニューを開き、Windows PowerShell と入力して「開く」
まだ入っていない場合: 公式ダウンロードページで LTS 版と、クリックで進むインストーラーを選びます:Mac は .pkg、Windows は .msi。ダブルクリックして最後まで進めるだけで、curl コマンドは不要です
入れ終わったらターミナルを閉じて開き直し、同じコマンドをもう一度実行します。バージョン番号が出れば完了です: node -v
一度入れれば、Node.js を使うすべてのツールで使えます
提供元のサイトで登録し、次の手順で使う API キーを作ります。料金や無料プランは提供元のサイトで確認してください。
キーの取り方は下の提供元 README にあります
Zigbee2mqtt MCP の設定で Z2M_MQTT_URL, Z2M_MQTT_PASSWORD が空です。自分のキーを入れて保存します
キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
Zigbee2mqtt MCP を使って、私に何ができるか教えて、1 つやってみせて✓ Cursor が Zigbee2mqtt MCP を使っていると言うか、回答に Zigbee2mqtt MCP のツール名が出れば接続成功です
上のコマンドはこれらがなくても動きます。変えたいときだけ作者の説明に沿って追加してください。
Z2M_MQTT_USERNAME MQTT ブローカーのユーザー名(ブローカーが認証を要求する場合)。 Z2M_BASE_TOPIC Zigbee2MQTT のベーストピック。configuration.yaml の mqtt.base_topic と一致させる必要があります。デフォルトは zigbee2mqtt です。 Z2M_WRITE_MODE Tool exposure tier: off (read-only), safe (default; adds non-destructive writes such as pairing, options, rename and binding) or full (adds device removal, OTA flashing, Touchlink and bridge restart).説明は自動翻訳です。変数名は原文のままです。迷ったら原文を確認してください。
メニュー名は 2026年11月11日 に Cursor のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
VS Code につなげますが、先に準備が必要です
Zigbee2mqtt MCP のキーが必要です(提供元のサイトで作成) · 先にパソコンへ Node.js を入れてください(1 回だけ)
このメッセージを VS Code のチャットに貼り付けます。AI がパソコンを確認し、変更するファイルを伝え、毎回あなたの了承を待ちます。
このパソコンの VS Code に MCP server Zigbee2mqtt MCP を入れてください。順番に:1) node -v で Node.js があるか確認。なければ https://nodejs.org/en/download から入れるよう私に伝え、自分では入れない。2) この設定だけを使う(PopNx MCP の確認済み):{ "servers": { "zigbee2mqtt": { "type": "stdio", "command": "npx", "args": [ "-y", "zigbee2mqtt-mcp" ], "env": { "Z2M_MQTT_URL": "your-value", "Z2M_MQTT_PASSWORD": "your-value" } } } } 3) 変更するファイルのフルパスか実行するコマンドを伝えて、私の了承を待つ。4) Z2M_MQTT_URL, Z2M_MQTT_PASSWORD は "your-value" のままにして、本当の値は私がファイルかアプリの入力欄に自分で貼るよう伝える。チャットにキーを書かせない。5) 了承した内容を実行し、Zigbee2mqtt MCP のツールが本当に表示されるか確認する。このメッセージにあなたのキーは含まれません。キーが必要な場合は、AI がファイルやアプリの入力欄にご自身で貼るよう案内します。
もう入っていますか?先に確認 · ターミナルを開き、このコマンドを入力して Enter
node -vMac:⌘ + Space を押し、Terminal と入力して Enter
Windows:スタートメニューを開き、Windows PowerShell と入力して「開く」
まだ入っていない場合: 公式ダウンロードページで LTS 版と、クリックで進むインストーラーを選びます:Mac は .pkg、Windows は .msi。ダブルクリックして最後まで進めるだけで、curl コマンドは不要です
入れ終わったらターミナルを閉じて開き直し、同じコマンドをもう一度実行します。バージョン番号が出れば完了です: node -v
一度入れれば、Node.js を使うすべてのツールで使えます
提供元のサイトで登録し、次の手順で使う API キーを作ります。料金や無料プランは提供元のサイトで確認してください。
キーの取り方は下の提供元 README にあります
Zigbee2mqtt MCP の設定で Z2M_MQTT_URL, Z2M_MQTT_PASSWORD が空です。自分のキーを入れて保存します
キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
Zigbee2mqtt MCP を使って、私に何ができるか教えて、1 つやってみせて✓ VS Code が Zigbee2mqtt MCP を使っていると言うか、回答に Zigbee2mqtt MCP のツール名が出れば接続成功です
上のコマンドはこれらがなくても動きます。変えたいときだけ作者の説明に沿って追加してください。
Z2M_MQTT_USERNAME MQTT ブローカーのユーザー名(ブローカーが認証を要求する場合)。 Z2M_BASE_TOPIC Zigbee2MQTT のベーストピック。configuration.yaml の mqtt.base_topic と一致させる必要があります。デフォルトは zigbee2mqtt です。 Z2M_WRITE_MODE Tool exposure tier: off (read-only), safe (default; adds non-destructive writes such as pairing, options, rename and binding) or full (adds device removal, OTA flashing, Touchlink and bridge restart).説明は自動翻訳です。変数名は原文のままです。迷ったら原文を確認してください。
メニュー名は 2026年11月11日 に VS Code のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
Windsurf、Zed、Gemini CLI など MCP を使える他のアプリは追加方法がそれぞれ違います。アプリ一覧で確認してください
JSON 設定は下の「開発者向け」にあります
Claude Code
claude mcp add --scope user zigbee2mqtt --env Z2M_MQTT_URL=your-value --env Z2M_MQTT_PASSWORD=your-value -- npx -y zigbee2mqtt-mcpClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"zigbee2mqtt": {
"command": "npx",
"args": [
"-y",
"zigbee2mqtt-mcp"
],
"env": {
"Z2M_MQTT_URL": "your-value",
"Z2M_MQTT_PASSWORD": "your-value"
}
}
}
}Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"zigbee2mqtt": {
"command": "npx",
"args": [
"-y",
"zigbee2mqtt-mcp"
],
"env": {
"Z2M_MQTT_URL": "your-value",
"Z2M_MQTT_PASSWORD": "your-value"
}
}
}
}VS Code (mcp.json)
{
"servers": {
"zigbee2mqtt": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"zigbee2mqtt-mcp"
],
"env": {
"Z2M_MQTT_URL": "your-value",
"Z2M_MQTT_PASSWORD": "your-value"
}
}
}
}Z2M_MQTT_URL 秘密 必須 envZ2M_MQTT_USERNAME envZ2M_MQTT_PASSWORD 秘密 必須 envZ2M_BASE_TOPIC envZ2M_WRITE_MODE env説明は自動翻訳です。変数名は原文のままです。迷ったら原文を確認してください。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
このサーバーのつなぎ方と、各アプリの公式ドキュメントに基づきます。2026年11月10日に確認。
パソコン上で動かせるアプリ
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月15日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント alexpfau で確認済みです
コードの最終更新:16 日前
MITを使用
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
OSV.dev に zigbee2mqtt-mcp@0.7.0 の登録はありません
このバージョンのパッケージ本体のみ確認。すべての依存関係ではありません · 確認日 2026年11月15日
質問、コツの共有、使えないことの報告ができます。「役に立った」の多い順です。
まだレビューはありません
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック3項目のうち3項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:Z2M_MQTT_URL, Z2M_MQTT_PASSWORD
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は16 日前、最新バージョン(0.7.0)がレジストリに届いたのは3 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:Medplum MCP, Mirobody, Codescene MCP Server, WHOOP — MissingMCP, Marrow
同じカテゴリでほかの作者のもの。コマンドは確認済み。公式を先に、次にスター順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Securely access and manage FHIR healthcare data stored in Medplum.
Lab results to LOINC codes and UCUM units, symptoms and diagnoses to ICPC-3. Offline, no API key.
An MCP server that provides CodeScene Code Health analysis tools.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Marrow Health: your Apple Health data over MCP, from the free iOS app. Reads, and writes on demand.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
A Model Context Protocol server for administering a Zigbee2MQTT estate.
Most Zigbee integrations already let an assistant turn a light on. This one is for the layer underneath: mesh health, weak links, devices that keep rejoining, stale batteries, firmware updates, pairing, binding, reporting intervals and device options — the things you normally open the Zigbee2MQTT frontend for.
It talks directly to the Zigbee2MQTT MQTT bridge API, so it works regardless of whether you use Home Assistant, Node-RED, openHAB or nothing at all. Tested against Zigbee2MQTT 2.x; several tools depend on bridge endpoints that only exist there, including bridge/health, device/binds/clear and the OTA scheduling topics.
If you already run Home Assistant, your Zigbee devices are exposed there and an assistant can control them. What Home Assistant does *not* expose is the bridge itself: link quality, mesh topology, interview state, OTA availability, permit_join, device options, bindings and reporting configuration. This server fills exactly that gap.
bridge/request/* carries a transaction id and is matched to its bridge/response/*, so concurrent calls cannot cross wires.confirm argument.Requires Node.js 22 or newer and network access to the MQTT broker that Zigbee2MQTT uses.
npx zigbee2mqtt-mcp
Add to your MCP configuration:
{
"servers": { "zigbee2mqtt": { "command": "npx", "args": ["-y", "zigbee2mqtt-mcp"], "env": { "Z2M_MQTT_URL": "mqtt://192.168.1.10:1883", "Z2M_MQTT_USERNAME": "mqtt", "Z2M_MQTT_PASSWORD": "${input:z2mPassword}" } } } }
{
"mcpServers": { "zigbee2mqtt": { "command": "npx", "args": ["-y", "zigbee2mqtt-mcp"], "env": { "Z2M_MQTT_URL": "mqtt://192.168.1.10:1883" } } } }
Point
Z2M_MQTT_URLat your MQTT broker, not at the Zigbee2MQTT frontend port. If Zigbee2MQTT'sconfiguration.yamlsaysmqtt.server: mqtt://192.168.1.10:1883, use that value verbatim.
Behind a corporate npm proxy? If
npm config get registryis nothttps://registry.npmjs.org/, your proxy's upstream feed may not carry this package. Add an explicit override to the args rather than changing your global registry:
"args": ["-y", "--registry", "https://registry.npmjs.org/", "zigbee2mqtt-mcp"]
| Variable | Default | Purpose |
|---|---|---|
Z2M_MQTT_URL | *required* | Broker URL. mqtt://, mqtts://, ws://, wss:// |
Z2M_MQTT_USERNAME / Z2M_MQTT_PASSWORD | – | Broker credentials |
Z2M_BASE_TOPIC | zigbee2mqtt | Must match mqtt.base_topic |
Z2M_MQTT_CLIENT_ID | zigbee2mqtt-mcp- | Override if your broker requires a fixed client ID |
Z2M_WRITE_MODE | safe | off, safe or full |
Z2M_LOG_LEVEL | error | Diagnostics on stderr |
Z2M_WEAK_LINK_THRESHOLD | 30 | Link quality below this is flagged |
Z2M_LOW_BATTERY_THRESHOLD | 20 | Battery percentage below this is flagged |
Z2M_STALE_HOURS | 24 | Hours of silence before a device is stale |
Z2M_CONNECT_TIMEOUT_MS | 10000 | Broker connect timeout |
Z2M_REQUEST_TIMEOUT_MS | 15000 | Default bridge request timeout |
Z2M_MQTT_REJECT_UNAUTHORIZED | true | Set false for self-signed TLS |
Z2M_MQTT_CA / _CERT / _KEY | – | Paths to TLS material |
Tools above the active tier are not registered at all, so a model cannot reach for them.
| Mode | Exposes |
|---|---|
off | Read-only tools |
safe | Default. Read plus non-destructive writes: pairing, options, rename, configure, interview, binding, reporting, groups, state |
full | Everything, including device removal, OTA flashing, Touchlink and bridge restart |
Irreversible tools (z2m_remove_device, z2m_ota_update, z2m_touchlink, z2m_restart_bridge, z2m_set_bridge_options) additionally require confirm: true on every call. Three safe tools reduce state rather than only adding to it, so they are annotated destructive: z2m_rename_device, z2m_manage_group and z2m_bind. Their reducing actions also require confirm: true — z2m_manage_group (remove, remove_all_members) and z2m_bind (clear). z2m_rename_device is annotated destructive because it breaks anything referencing the old name, but stays unconfirmed since renaming back restores it.
Every tool also advertises MCP tool annotations so a client can decide what may run without prompting:
| Annotation | Meaning here |
|---|---|
readOnlyHint: true | The nine read tools. They never change the network. |
destructiveHint: true | z2m_remove_device, z2m_ota_update, z2m_touchlink, z2m_restart_bridge, z2m_set_bridge_options, plus z2m_rename_device, z2m_manage_group and z2m_bind |
idempotentHint | True where repeating the call has no additional effect |
openWorldHint: true | Always — every tool reaches a live Zigbee network |
Annotations describe the tool, not the tier: a safe tool can still be destructive. The tier decides what is registered, the annotation tells the client what to ask about.
Opt in to the destructive tier only when you want it:
"env": { "Z2M_WRITE_MODE": "full" }
| Tool | Purpose |
|---|---|
z2m_connection_status | Broker reachability, TLS posture and cached message counts — reports instead of throwing, even when nothing is configured yet |
z2m_bridge_info | Version, coordinator, channel, PAN ID, permit_join, restart_required, runtime stats |
z2m_list_devices | Filter and sort devices by type, availability, link quality, battery, pending update |
z2m_get_device | Exposes, settable options, endpoints, bindings, configured reportings, current state |
z2m_health_report | Whole-estate audit in one call |
z2m_network_map | Mesh topology with parent, depth, link quality, orphan detection |
z2m_list_groups | Groups, members and scenes |
z2m_get_logs | Bridge logs and lifecycle events, buffered or watched live |
z2m_coordinator_check | Routers missing from the coordinator's memory (Texas Instruments adapters only) |
z2m_check_updates, z2m_permit_join, z2m_set_device_options, z2m_rename_device, z2m_configure_device, z2m_interview_device, z2m_set_state, z2m_manage_group, z2m_bind, z2m_configure_reporting
z2m_remove_device, z2m_ota_update, z2m_restart_bridge, z2m_set_bridge_options, z2m_touchlink
Some fields depend on your Zigbee2MQTT configuration. The server detects what is available and tells you rather than silently returning nothing.
| Field | Requires | If missing |
|---|---|---|
last_seen | advanced.last_seen set to e.g. ISO_8601 (default is disable) | Staleness checks are skipped and a hint is returned |
availability | availability.enabled: true | Offline detection is skipped and a hint is returned |
linkquality, battery, update | Live device traffic — Zigbee2MQTT does not retain device state topics | Pass collect_seconds to listen briefly, or use z2m_network_map for authoritative link quality |
z2m_coordinator_check | An adapter that supports coordinator backups (TI zStack, Silicon Labs EmberZNet; not deCONZ or ZiGate) | Returns an error on unsupported adapters; z2m_bridge_info reports the expectation |
mqtt://user:pass@host). They are redacted everywhere the URL is echoed back to a model or written to a log, and error text from the MQTT client is scrubbed before it leaves the process. Zigbee2MQTT logs its own broker URL at startup, so lines relayed by z2m_get_logs are scrubbed too.safe mode can actuate anything on the mesh via z2m_set_state, including locks, valves and sirens. Use off if that matters.z2m_permit_join opens the network to any nearby Zigbee device for the duration of the window. It is in safe because it is routine and reversible, but it is a security boundary.npm install
npm run build npm run watch
npm test
Z2M_MQTT_URL=mqtt://192.168.1.10:1883 node scripts/smoke.mjs Z2M_MQTT_URL=mqtt://192.168.1.10:1883 node scripts/smoke.mjs z2m_list_devices '{"only_problems":true}'
Z2M_MQTT_URL=mqtt://192.168.1.10:1883 node scripts/roundtrip.mjs
Note that an MCP server may receive requests concurrently. When testing ordering, await each response before sending the next, as roundtrip.mjs does — piping several requests at once will produce misleading results.
The unit tests cover health classification, capability detection, topic routing, write-mode gating and configuration parsing. They are broker-free by design, so anything that needs a live mesh belongs in scripts/ instead.
A passing suite only proves the tests ran, so scripts/mutate.mjs breaks the source one change at a time and checks the suite notices each one:
node scripts/mutate.mjs # every mutant
node scripts/mutate.mjs redact # only mutants whose name matches
A surviving mutant marks behavior nothing actually tests, and exits non-zero. Add a mutant alongside any fix worth keeping fixed.
Releases are tag-driven: npm version then git push --follow-tags. CI publishes to npm with provenance, rewrites server.json's version from the tag and publishes to the MCP Registry, then creates the GitHub release. The version committed in server.json is therefore not authoritative — the tag is.
This server can remove devices from your network and flash firmware. Both are irreversible and OTA failures can brick hardware. Those tools live in the full tier, which is not enabled by default — you must opt in with Z2M_WRITE_MODE=full. Broker credentials are read from the environment and never logged.
Early re