iaqualink-mcp について
プールやスパの機器を使う人向けのiAqualink MCPサーバーです。状態の確認と機器の操作に対応し、変更前に確認を求め、再読み込みで結果を検証します。
主な機能
- 01温度と機器状態の読み取り
- 02ポンプ、ヒーター、照明、回路の操作
- 03温度設定値の調整
- 04スケジュールとOneTouchシーンの管理
- 05変更の確認と再読み込みによる検証
活用シーン
- 01プールやスパ機器の状態確認
- 02ポンプ、ヒーター、照明の切り替え
- 03プールやスパの温度目標の調整
- 04対応スケジュールの確認や変更
MCP 対応
iAqualinkアカウントの状態確認と機器操作のツールをMCPクライアントに公開します。機器の変更には確認が必要で、再読み込みによって状態を検証します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @chrischall/iaqualink-mcpIAQUALINK_EMAILThe email address you sign in to the iAqualink app with (needed by every tool; the server starts without it)IAQUALINK_PASSWORDシークレットYour iAqualink password (needed by every tool; the server starts without it)IAQUALINK_STATUS_CACHE_SECONDSSeconds a system's status read is reused before re-polling iAqualink (default 5; 0 disables)IAQUALINK_WEBTOUCH_STREAM_HOSTSExtra hosts (comma-separated) the WebTouch display stream may be served from, beyond webtouch.iaqualink.net and prm.iaqualink.net. Leave unset unless a WebTouch error names a new hostローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
8掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| view | enum | いいえ | レスポンス形式:"compact"(デフォルト)は、レスポンス内の他の箇所にすでに含まれているフィールドを省略します。"full" はこのサーバーが認識するすべてのフィールドを返します。"raw" は上流のペイロードを加工せずに返します。compact = 正規化された状態、full = 補助機器/ライトの詳細と未処理のエントリも含む、raw = iAqualink のレスポンスをそのまま返します。compact | full | raw |
詳細
iaqualink-mcp
iAqualink(Zodiac/Jandy/Fluidra)のプールおよびスパ設備向け MCP サーバーです。 温度、設定値、ポンプ、ヒーター、ライト、補助回路、塩素発生器の状態を読み取り、設備を切り替えます。変更はすべて確認を経てから実行され、再読み込みによって検証されます。ご自身の iAqualink アカウント(iAqualink アプリと同じメールアドレスとパスワード)でサインインします。ブラウザー、拡張機能、ブリッジは不要です。
リファレンスクライアントが対応する2種類のシステム、iAqua(Jandy iAquaLink パネル)と eXO(Zodiac の塩素発生器)に対応しています。アカウント上のその他のデバイス(ロボット式クリーナーなど)は一覧表示されますが、制御はできません。
状況:実機で一部検証済みです。 リクエスト形式は iaqualink-py 0.7.0(Home Assistant が使用)および WebTouch のキャプチャから取得しています( docs/IAQUALINK-API.md を参照)。
- 2026-10-11/12 に実機の iAqua(RS)パネルで動作を確認済み: サインイン、システム一覧(
devices.json)、iAqua の状態読み取り(get_home、get_devices)、および WebTouch(場所の検索、初期化、ボタン操作、表示ストリーム)。- まだ実機では試していない推定仕様: iAqua の
set_*コマンド(ポンプ、 ヒーター、補助回路、ライト、温度)、すべての eXO リクエスト(シャドウの読み取りと書き込み)、iaqualink_set_chlorinatorの推定形式、および iQ20 のスケジュールのフォールバックです。書き込み後はすべて再読み込みを行い、結果を確認します。
このプロジェクトは AI(Claude Code)によって開発・保守されています。ご自身の判断でご利用ください。
ツール
| ツール | 機能 | 注釈 |
|---|---|---|
iaqualink_list_systems | アカウント上のシステムとそのシリアル番号 | 読み取り |
iaqualink_get_status | 温度、設定値、ポンプ、ヒーター、補助回路/ライト、塩素生成器、塩分濃度/pH/ORP(view: compact · full · raw) | 読み取り |
iaqualink_healthcheck | サインインが設定され、受け入れられているかどうか | 読み取り |
iaqualink_set_equipment | プール/スパ用ポンプ、プール/スパ/ソーラーヒーター、eXO フィルターポンプ、生成、ブースト、低、加熱のオン/オフ | 書き込み、破壊的ではありません |
iaqualink_set_aux | 補助回路またはライトのオン/オフ(番号、aux_<n>、またはラベルで指定) | 書き込み、破壊的ではありません |
iaqualink_set_light | 調光可能な明るさ(0/25/50/75/100)またはカラー効果(iAqua) | 書き込み、破壊的ではありません |
iaqualink_set_temperature | プールおよび/またはスパの設定温度(iAqua は °F/°C、eXO のプールは °C) | 書き込み、破壊的ではありません |
iaqualink_set_chlorinator | eXO 塩素生成器の出力 % — 推定された形式であり、iaqualink-py にはありません | 書き込み、破壊的ではありません |
iaqualink_list_schedules | WebTouch 経由の RS パネルプログラム(iAqua、iQ20 のフォールバックプローブ)、eXO タイマー | 読み取り |
iaqualink_add_schedule | WebTouch 経由で RS パネルプログラム(回路、開始、停止、実行曜日)を追加 | 書き込み、破壊的ではありません |
iaqualink_edit_schedule | WebTouch 経由で RS パネルプログラムの開始/停止/実行曜日を変更 | 書き込み、破壊的ではありません |
iaqualink_delete_schedule | WebTouch 経由で RS パネルプログラムを削除 — 取り消し不可 | 書き込み、破壊的 |
iaqualink_set_schedule | eXO タイマーを設定/時刻変更/無効化(可変速ポンプの開始〜停止、RPM)— eXO 専用、実機では未検証 | 書き込み、破壊的ではありません |
iaqualink_check_panel | RS システムがオンラインか、パネルに何が表示されているか(画面、開いているダイアログ、未保存の変更がある編集モード)を確認します。アプリとこれらのツールの状態が一致しない場合に実行してください | 読み取り |
iaqualink_list_pump_speeds | WebTouch 経由で RS パネルの可変速ポンプの名前付き速度、その RPM、現在実行中の速度を取得 | 読み取り |
iaqualink_set_pump_speed | WebTouch 経由で名前付き速度でポンプを稼働 | 書き込み、破壊的ではありません |
iaqualink_set_pump_speed_rpm | WebTouch 経由で名前付き速度の RPM(600–3450)を変更します。実行中でない速度は設定中に短時間稼働し、その後、実行中だった速度に戻ります | 書き込み、破壊的ではありません |
iaqualink_list_onetouch | WebTouch 経由で RS パネルの OneTouch シーン(Spa Mode、All OFF、…)とその状態を取得 | 読み取り |
iaqualink_set_onetouch | WebTouch 経由で OneTouch シーンをオン/オフ — トグルはまだ実機で試していません | 書き込み、破壊的ではありません |
このセット内のすべての書き込みには元に戻す操作があり、他の人には影響しません。ただし、パネルプログラムの削除は例外です。パネルに即時保存され、取り消せないため、破壊的な操作としてマークされています。
Jandy AquaLink RS パネルでのスケジュールと OneTouch は、iAqualink Web アプリが使用するパネルエミュレーションである WebTouch 経由で実行されます。サーバーはパネルの表示ストリームを開き、人が操作するのと同じボタンを押します(押すたびに、パネルが想定される画面と行にあることを確認し、そうでなければ中止します)。その後、ホームに戻り、再読み込みして検証します。1 つのシステムで同時に実行できる WebTouch セッションは 1 つだけです。追加/編集/削除の手順は、RS パネルでの実機キャプチャ(2026-10-11)に基づいています。docs/IAQUALINK-API.md を参照してください。
WebTouch が利用できない場合、iaqualink_list_schedules は iQ20 スケジュールにフォールバックします(アダプターのファームウェア 3 以降)。r-api.iaqualink.net/v2(Bearer)、p-api.iaqualink.net/v2(Bearer)、p-api.iaqualink.net/v2(ベアトークン)、prm.iaqualink.net/v1(ベアトークン)をそれぞれ 1 回プローブし、すべての試行結果を報告します。
iQ20 スケジュールの書き込みは実装されていません。
書き込みの仕組み。 まず現在の状態を読み取り、すでに一致している場合は何も送信しません。iAquaのポンプ/ヒーター/補助機器のコマンドはトグルなので、状態を確認せずに送信すると、その時点の状態が反転してしまうためです。次に、確認を求めます(クライアントが対応している場合はエリシテーションプロンプト、それ以外の場合はプレビューと、計画の前提となった状態にひも付けられたconfirmTokenを提示します)。その後、コマンドを送信し、要求した値が反映されるまで再読み込みします。結果は、観測された内容とともにconfirmed、unchanged、sent-unconfirmedのいずれかです(eXOは変更を非同期で適用するため、再試行するのではなく、もう一度確認してください)。
セットアップ
npm i -g @chrischall/iaqualink-mcp
| 変数 | 必須 | 意味 |
|---|---|---|
IAQUALINK_EMAIL | すべてのツールで必須 | iAqualinkアプリへのサインイン用メールアドレス |
IAQUALINK_PASSWORD | すべてのツールで必須 | iAqualinkのパスワード(前後の空白は削除されません) |
IAQUALINK_STATUS_CACHE_SECONDS | いいえ | ステータスの読み取り結果を再利用する秒数(デフォルトは5、0で無効) |
IAQUALINK_WEBTOUCH_STREAM_HOSTS | いいえ | WebTouchディスプレイストリームの接続先として追加できるホスト(カンマ区切り)。デフォルトはprm.iaqualink.netのみ |
MCP_CONFIRM_MODE | いいえ | ask-user(デフォルト)/auto/refuse |
MCP_CONFIRM_TTL_SECONDS | いいえ | confirmTokenの有効期間(デフォルトは600) |
MCP_CONFIRM_ELICITATION | いいえ | offにすると、エリシテーションを宣言しているクライアントでもプロンプトをスキップします |
サーバーは認証情報なしでも起動し(ホスト側でツールを一覧表示できるようにするため)、最初の呼び出し時に認証情報が不足していることを報告します。パスワードが拒否されても、再試行は行いません。拒否された状態はサーバーの再起動まで記憶されるため、入力ミスでアカウントがロックされることはありません。
Claude Code:claude mcp add iaqualink -e IAQUALINK_EMAIL=… -e IAQUALINK_PASSWORD=… -- npx -y @chrischall/iaqualink-mcp
ホスト型(claude.ai)
mint.yamlでは、コネクターの認可ページにメールアドレス/パスワードの入力フォームを備えたユーザーごとの子プロセスを宣言します(各ユーザーは自分のアカウントでサインインします)。外部への接続先は、prod.zodiac-io.com、r-api.iaqualink.net、p-api.iaqualink.net(iQ20のプローブのみ)、prm.iaqualink.net(WebTouchおよびiQ20のプローブ)に限定されます。WebTouchディスプレイストリームは、IAQUALINK_WEBTOUCH_STREAM_HOSTS(および外部接続許可)に追加されていない限り、ほかのホストへの接続を拒否します。永続化される状態はありません。セッションはメモリ内に保持され、コールドスタート後は一度サインインすると再構築されます。
スキル
skills/iaqualink— これらのツールの使い方。skills/iaqualink-curl— シェルからcurlを使って同じ読み取りを行う方法。認証情報はmacOS Keychainから取得します(サインイン、システム一覧、iAquaの読み取りはリアルタイムで確認できます。eXOのシャドー読み取りは引き続きiaqualink-pyから導出されます)。
開発
npm install
npm run build
npm run test:coverage # typecheck (src + tests) + vitest, 100% coverage — what CI runs
テストでは、iaqualink-pyのフィクスチャから構築されたインメモリiAqualink(tests/support/fake-server.ts)に対して、実際のクライアントを実行します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。