프로토타입 · 미리 보기: 공식 레지스트리의 모든 서버를 담고 있으며 30분마다 동기화해요. Google로 로그인하면 리뷰를 쓸 수 있어요.프로토타입 · 30분마다 업데이트
PopNx MCPAI를 쓰는 사람을 위한 MCP 서버 · 쉬운 말로 설명해요

Iaqualink MCP

제작자: chrischall버전 0.3.1i★ 0i내 컴퓨터에서 실행
레지스트리 이름io.github.chrischall/iaqualink-mcp

설치 방법

What it does

iAqualink pool equipment: status plus confirm-gated pump, heater, light and set-point control.

  • Connects 내 컴퓨터에서 실행
  • Account or key Needs IAQUALINK_PASSWORD
  • Category 기타

설치

쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.

검사 3/3 통과 · 내 컴퓨터에서 실행돼요 · ✓ 명령 확인 2026년 11월 14일

먼저: 어떤 AI를 쓰시나요?

쓰는 앱을 고르면 아래에 단계가 나옵니다.

Claude에 연결할 수 있지만 먼저 준비가 필요해요

Iaqualink MCP 키가 필요해요 (제작자 사이트에서 만들기) · 먼저 컴퓨터에 Node.js를 설치하세요 (한 번만) · 컴퓨터용 Claude 앱(Windows 또는 Mac)에서만 되고 웹이나 모바일은 안 돼요

  1. Node.js 설치

    한 번만 하면 Node.js가 필요한 모든 서버에 쓸 수 있어요

    Node.js 다운로드 페이지 열기 ↗

  2. Iaqualink MCP에 가입하고 키 만들기

    제작자 사이트에서 가입하고 다음 단계에 쓸 API 키를 만드세요. 요금과 무료 요금제는 제작자 사이트에서 확인하세요.

    키 받는 방법은 아래 제작자 README에 있어요

  3. 컴퓨터용 Claude 앱 설정 파일 열기

    SettingsDeveloperEdit Config

  4. 이 설정을 붙여 넣고 저장

    {
      "mcpServers": {
        "iaqualink": {
          "command": "npx",
          "args": [
            "-y",
            "@chrischall/iaqualink-mcp"
          ],
          "env": {
            "IAQUALINK_PASSWORD": "your-value"
          }
        }
      }
    }

    키는 앱 입력란에만 붙여 넣고, 채팅에 붙이거나 다른 사람에게 보내지 마세요

  5. Claude를 끄고 다시 열기

  6. 해 보기

    Iaqualink MCP을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐

    ✓ Claude가 Iaqualink MCP을 쓰고 있다고 하거나 답에 Iaqualink MCP 도구 이름이 나오면 연결된 거예요

추가 설정 4개 (입력하지 않아도 사용 가능)

위 명령은 이 값들 없이도 동작합니다. 바꾸고 싶을 때만 제작자 설명대로 추가하세요.

  • IAQUALINK_EMAIL The email address you sign in to the iAqualink app with (needed by every tool; the server starts without it)
  • IAQUALINK_STATUS_CACHE_SECONDS Seconds a system's status read is reused before re-polling iAqualink (default 5; 0 disables)
  • IAQUALINK_WEBTOUCH_STREAM_HOSTS Extra 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
  • IAQUALINK_VERIFY_TIMEOUT_MS Milliseconds a write keeps re-reading to confirm the change landed before it reports sent-unconfirmed, for both iAqua and eXO systems (a positive integer; default 15000 for iAqua, 30000 for eXO)

설명은 아직 영어 원문입니다.

메뉴 이름은 2026년 11월 11일에 Anthropic 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요

ChatGPT는 아직 Iaqualink MCP에 연결할 수 없어요

Iaqualink MCP는 내 컴퓨터에 설치해서 쓰지만 ChatGPT는 웹에서 도는 서버만 연결할 수 있어요

대신 이렇게 할 수 있어요

A · Iaqualink MCP에 연결되는 앱 쓰기

  • Iaqualink MCP 키가 필요해요 (제작자 사이트에서 만들기) · 먼저 컴퓨터에 Node.js를 설치하세요 (한 번만) · 컴퓨터용 Claude 앱(Windows 또는 Mac)에서만 되고 웹이나 모바일은 안 돼요
  • Iaqualink MCP 키가 필요해요 (제작자 사이트에서 만들기) · 먼저 컴퓨터에 Node.js를 설치하세요 (한 번만)
  • Iaqualink MCP 키가 필요해요 (제작자 사이트에서 만들기) · 먼저 컴퓨터에 Node.js를 설치하세요 (한 번만)
  • Iaqualink MCP 키가 필요해요 (제작자 사이트에서 만들기) · 먼저 컴퓨터에 Node.js를 설치하세요 (한 번만)

B · 기타에서 ChatGPT에 연결되는 다른 서버

같은 분류에서 많이 쓰는 것 중 키 없이 주소만으로 연결되는 것을 골랐어요

Claude Code에 연결할 수 있지만 먼저 준비가 필요해요

Iaqualink MCP 키가 필요해요 (제작자 사이트에서 만들기) · 먼저 컴퓨터에 Node.js를 설치하세요 (한 번만)

  1. Node.js 설치

    한 번만 하면 Node.js가 필요한 모든 서버에 쓸 수 있어요

    Node.js 다운로드 페이지 열기 ↗

  2. Iaqualink MCP에 가입하고 키 만들기

    제작자 사이트에서 가입하고 다음 단계에 쓸 API 키를 만드세요. 요금과 무료 요금제는 제작자 사이트에서 확인하세요.

    키 받는 방법은 아래 제작자 README에 있어요

  3. 터미널 열기

    Mac: Command+스페이스를 누르고 Terminal 입력 · Windows: PowerShell 열기

  4. 이 명령을 붙여 넣고 Enter

    claude mcp add --scope user iaqualink --env IAQUALINK_PASSWORD=your-value -- npx -y @chrischall/iaqualink-mcp

    Enter 전에 “your-value”를 내 키로 바꾸세요

    키는 앱 입력란에만 붙여 넣고, 채팅에 붙이거나 다른 사람에게 보내지 마세요

  5. Claude Code에서 /mcp 입력

    Iaqualink MCP이 목록에 있고 연결됨으로 보이면 돼요

  6. 해 보기

    Iaqualink MCP을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐

    ✓ Claude Code가 Iaqualink MCP을 쓰고 있다고 하거나 답에 Iaqualink MCP 도구 이름이 나오면 연결된 거예요

추가 설정 4개 (입력하지 않아도 사용 가능)

위 명령은 이 값들 없이도 동작합니다. 바꾸고 싶을 때만 제작자 설명대로 추가하세요.

  • IAQUALINK_EMAIL The email address you sign in to the iAqualink app with (needed by every tool; the server starts without it)
  • IAQUALINK_STATUS_CACHE_SECONDS Seconds a system's status read is reused before re-polling iAqualink (default 5; 0 disables)
  • IAQUALINK_WEBTOUCH_STREAM_HOSTS Extra 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
  • IAQUALINK_VERIFY_TIMEOUT_MS Milliseconds a write keeps re-reading to confirm the change landed before it reports sent-unconfirmed, for both iAqua and eXO systems (a positive integer; default 15000 for iAqua, 30000 for eXO)

설명은 아직 영어 원문입니다.

메뉴 이름은 2026년 11월 11일에 Anthropic 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요

Cursor에 연결할 수 있지만 먼저 준비가 필요해요

Iaqualink MCP 키가 필요해요 (제작자 사이트에서 만들기) · 먼저 컴퓨터에 Node.js를 설치하세요 (한 번만)

  1. Node.js 설치

    한 번만 하면 Node.js가 필요한 모든 서버에 쓸 수 있어요

    Node.js 다운로드 페이지 열기 ↗

  2. Iaqualink MCP에 가입하고 키 만들기

    제작자 사이트에서 가입하고 다음 단계에 쓸 API 키를 만드세요. 요금과 무료 요금제는 제작자 사이트에서 확인하세요.

    키 받는 방법은 아래 제작자 README에 있어요

  3. 이 버튼으로 Cursor 열기

    Cursor에서 열기

    Cursor가 설치를 확인하면 Install을 누르세요

  4. 키 입력

    Iaqualink MCP 설정에서 IAQUALINK_PASSWORD가 비어 있어요. 내 키를 넣고 저장하세요

    키는 앱 입력란에만 붙여 넣고, 채팅에 붙이거나 다른 사람에게 보내지 마세요

  5. Cursor에서 AI 채팅을 Agent 모드로 열기

  6. 해 보기

    Iaqualink MCP을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐

    ✓ Cursor가 Iaqualink MCP을 쓰고 있다고 하거나 답에 Iaqualink MCP 도구 이름이 나오면 연결된 거예요

추가 설정 4개 (입력하지 않아도 사용 가능)

위 명령은 이 값들 없이도 동작합니다. 바꾸고 싶을 때만 제작자 설명대로 추가하세요.

  • IAQUALINK_EMAIL The email address you sign in to the iAqualink app with (needed by every tool; the server starts without it)
  • IAQUALINK_STATUS_CACHE_SECONDS Seconds a system's status read is reused before re-polling iAqualink (default 5; 0 disables)
  • IAQUALINK_WEBTOUCH_STREAM_HOSTS Extra 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
  • IAQUALINK_VERIFY_TIMEOUT_MS Milliseconds a write keeps re-reading to confirm the change landed before it reports sent-unconfirmed, for both iAqua and eXO systems (a positive integer; default 15000 for iAqua, 30000 for eXO)

설명은 아직 영어 원문입니다.

메뉴 이름은 2026년 11월 11일에 Cursor 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요

VS Code에 연결할 수 있지만 먼저 준비가 필요해요

Iaqualink MCP 키가 필요해요 (제작자 사이트에서 만들기) · 먼저 컴퓨터에 Node.js를 설치하세요 (한 번만)

  1. Node.js 설치

    한 번만 하면 Node.js가 필요한 모든 서버에 쓸 수 있어요

    Node.js 다운로드 페이지 열기 ↗

  2. Iaqualink MCP에 가입하고 키 만들기

    제작자 사이트에서 가입하고 다음 단계에 쓸 API 키를 만드세요. 요금과 무료 요금제는 제작자 사이트에서 확인하세요.

    키 받는 방법은 아래 제작자 README에 있어요

  3. 이 버튼으로 VS Code 열기

    VS Code에서 열기

    VS Code가 설치를 확인하면 Install을 누르세요

  4. 키 입력

    Iaqualink MCP 설정에서 IAQUALINK_PASSWORD가 비어 있어요. 내 키를 넣고 저장하세요

    키는 앱 입력란에만 붙여 넣고, 채팅에 붙이거나 다른 사람에게 보내지 마세요

  5. VS Code에서 AI 채팅을 Agent 모드로 열기

  6. 해 보기

    Iaqualink MCP을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐

    ✓ VS Code가 Iaqualink MCP을 쓰고 있다고 하거나 답에 Iaqualink MCP 도구 이름이 나오면 연결된 거예요

추가 설정 4개 (입력하지 않아도 사용 가능)

위 명령은 이 값들 없이도 동작합니다. 바꾸고 싶을 때만 제작자 설명대로 추가하세요.

  • IAQUALINK_EMAIL The email address you sign in to the iAqualink app with (needed by every tool; the server starts without it)
  • IAQUALINK_STATUS_CACHE_SECONDS Seconds a system's status read is reused before re-polling iAqualink (default 5; 0 disables)
  • IAQUALINK_WEBTOUCH_STREAM_HOSTS Extra 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
  • IAQUALINK_VERIFY_TIMEOUT_MS Milliseconds a write keeps re-reading to confirm the change landed before it reports sent-unconfirmed, for both iAqua and eXO systems (a positive integer; default 15000 for iAqua, 30000 for eXO)

설명은 아직 영어 원문입니다.

메뉴 이름은 2026년 11월 11일에 VS Code 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요

Windsurf, Zed, Gemini CLI 같은 다른 MCP 앱은 추가 방법이 저마다 달라요. 앱 목록에서 확인하세요

MCP를 쓰는 앱 모두 보기 →

JSON 설정은 아래 “개발자용”에 있어요

막혔나요? Iaqualink MCP을 쓰는 사람에게 물어보세요💬 토론 →
개발자용: 터미널 명령과 JSON 설정

컴퓨터에 설치

Claude Code

claude mcp add --scope user iaqualink --env IAQUALINK_PASSWORD=your-value -- npx -y @chrischall/iaqualink-mcp

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "iaqualink": {
      "command": "npx",
      "args": [
        "-y",
        "@chrischall/iaqualink-mcp"
      ],
      "env": {
        "IAQUALINK_PASSWORD": "your-value"
      }
    }
  }
}

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "iaqualink": {
      "command": "npx",
      "args": [
        "-y",
        "@chrischall/iaqualink-mcp"
      ],
      "env": {
        "IAQUALINK_PASSWORD": "your-value"
      }
    }
  }
}

VS Code (mcp.json)

{
  "servers": {
    "iaqualink": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@chrischall/iaqualink-mcp"
      ],
      "env": {
        "IAQUALINK_PASSWORD": "your-value"
      }
    }
  }
}

직접 입력할 값

  • IAQUALINK_EMAIL env
    The email address you sign in to the iAqualink app with (needed by every tool; the server starts without it)
  • IAQUALINK_PASSWORD 비밀 필수 env
    Your iAqualink password (needed by every tool; the server starts without it)
  • IAQUALINK_STATUS_CACHE_SECONDS env
    Seconds a system's status read is reused before re-polling iAqualink (default 5; 0 disables)
  • IAQUALINK_WEBTOUCH_STREAM_HOSTS env
    Extra 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
  • IAQUALINK_VERIFY_TIMEOUT_MS env
    Milliseconds a write keeps re-reading to confirm the change landed before it reports sent-unconfirmed, for both iAqua and eXO systems (a positive integer; default 15000 for iAqua, 30000 for eXO)

설명은 아직 영어 원문입니다.

이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.

한눈에 보기

주간 다운로드i
506/주
연결 방식
내 컴퓨터에서 실행
최신 버전i
0.3.1
카테고리i
기타
레지스트리 공개i
2026년 11월 4일
코드 마지막 변경i
2026년 11월 8일
제작자
chrischall
패키지
npm: @chrischall/iaqualink-mcp
레지스트리 상태
활성

어떤 앱에서 쓸 수 있나요

이 서버의 연결 방식과 각 앱의 공식 문서를 바탕으로 했어요. 2026년 11월 10일 확인.

내 컴퓨터에서 실행하는 앱

ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast

모든 앱과 장단점 →

할 수 있는 일

내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.

기본 점검i

누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 14일 점검

  • ✓ 통과

    제작자와 저장소 일치

    레지스트리 이름이 GitHub 계정 chrischall 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요

  • ✓ 통과

    계속 관리되고 있음

    코드 마지막 변경: 6일 전

  • ✓ 통과

    라이선스 있음

    MIT 사용

  • – 해당 없음

    엔드포인트 응답

    내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요

  • – 해당 없음

    OAuth로 로그인

    내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요

  • … 아직 점검 안 함

    도구 설명에 숨겨진 지시 없음

    내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요

토론

질문하고, 팁을 나누고, 안 되는 점을 알려 주세요. "도움이 됨"이 많은 순서예요.

아직 글이 없어요. 처음으로 질문하거나 공유해 보세요.

이곳의 글은 사용자가 쓴 것으로, PopNx 팀의 글이 아니에요.

Google로 로그인하고 글쓰기

사용자 리뷰

아직 리뷰가 없어요

Google로 로그인하고 리뷰 쓰기

기타 카테고리의 다른 서버와 비교i

  • 이 카테고리의 다른 서버 19738개 중 0%보다 스타가 많아요
  • 이 카테고리의 다른 서버 19738개 중 82%보다 최근에 레지스트리에 공개됐어요
  • 기본 점검 결과가 이 카테고리의 다른 서버 19738개 중 100%와 같거나 더 좋아요

레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.

자주 묻는 질문

Iaqualink MCP, 안전한가요?

해당하는 기본 점검 3개 중 3개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.

어떤 키나 코드가 필요한가요?

입력해야 할 값: IAQUALINK_PASSWORD

내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?

내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).

아직 관리되고 있나요?

GitHub 저장소는 마지막으로 6일 전 변경됐고, 최신 버전(0.3.1)은 10일 전 레지스트리에 올라왔어요.

어떤 앱에서 쓸 수 있나요?

Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Node.js도 있어야 해요.

대신 쓸 수 있는 건 뭐가 있나요?

같은 카테고리에는: World Monitor, Claude Flow, Windmill

같은 카테고리의 다른 것

같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.

카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i

World Monitor

Real-time global intelligence on conflict, markets, energy, trade, shipping and cyber. 97 tools.

제작자: koala73널리 사용됨★ 9.1만어제 업데이트

클라우드에서 실행✓ 서비스 회사 · worldmonitor.app

Claude Flow

AI orchestration with hive-mind swarms, neural networks, and 87 MCP tools for enterprise dev.

제작자: ruvnet널리 사용됨↓ 1.4만/주★ 8.2만14개월 전 업데이트

내 컴퓨터에서 실행

Windmill

Run Windmill scripts and flows and manage jobs, schedules, resources and variables.

제작자: windmill-labs널리 사용됨★ 1.9만그저께 업데이트

클라우드에서 실행

제작자의 README

README 열기

제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.

iaqualink-mcp

MCP server for iAqualink (Zodiac / Jandy / Fluidra) pool and spa equipment. Read temperatures, set points, pumps, heaters, lights, aux circuits and salt chlorinator state, and switch equipment — every change confirmation-gated and verified by a re-read. It signs in with your own iAqualink account (the same email and password as the iAqualink app); no browser, extension or bridge.

Supports the two system types the reference client supports: iAqua (Jandy iAquaLink panels) and eXO (Zodiac salt chlorinators). Other device types on the account (robotic cleaners, …) are listed but not controlled.

Status: partly verified live. Request shapes come from

iaqualink-py 0.7.0 (what Home

Assistant uses) and a WebTouch capture (see

docs/IAQUALINK-API.md).

- Seen working on a real iAqua (RS) panel, 2026-10-11/12: sign-in, the

system list (devices.json), the iAqua status reads (get_home,

get_devices) and WebTouch (location lookup, init, button presses and the

display stream).

- Still derived, not yet exercised live: the iAqua set_* commands (pump,

heater, aux, light, temperature), every eXO request (shadow read and

writes), iaqualink_set_chlorinator's inferred shape, and the iQ20 schedule

fallback. Every write still re-reads to confirm what happened.

This project was developed and is maintained by AI (Claude Code). Use at your own discretion.

Tools

ToolWhat it doesAnnotation
iaqualink_list_systemsSystems on the account and their serialsread
iaqualink_get_statusTemperatures, set points, pumps, heaters, aux/lights, chlorinator, salinity/pH/ORP (view: compact · full · raw)read
iaqualink_healthcheckWhether a sign-in is configured and acceptedread
iaqualink_set_equipmentPool/spa pump, pool/spa/solar heater; eXO filter pump, production, boost, low, heating — on/offwrite, not destructive
iaqualink_set_auxAux circuit or light on/off (by number, aux_ or label)write, not destructive
iaqualink_set_lightDimmable brightness (0/25/50/75/100) or color effect (iAqua)write, not destructive
iaqualink_set_temperaturePool and/or spa set point (iAqua °F/°C; eXO °C pool)write, not destructive
iaqualink_set_chlorinatoreXO chlorinator output % — inferred shape, not in iaqualink-pywrite, not destructive
iaqualink_list_schedulesRS panel programs via WebTouch (iAqua; iQ20 fallback probe); eXO timersread
iaqualink_add_scheduleAdd an RS panel program (circuit, start, stop, run days) via WebTouchwrite, not destructive
iaqualink_edit_scheduleChange an RS panel program's start / stop / run days via WebTouchwrite, not destructive
iaqualink_delete_scheduleDelete an RS panel program via WebTouch — no undowrite, destructive
iaqualink_set_scheduleSet / re-time / disable an eXO timer (start–stop, rpm on variable-speed pumps) — eXO only, unverified livewrite, not destructive
iaqualink_check_panelIs an RS system online, and what is its panel showing (screen, open dialog, Edit mode with unsaved changes)? Run it when the app and these tools disagreeread
iaqualink_list_pump_speedsRS panel variable-speed pump: the named speeds, their RPM and which one runs, via WebTouchread
iaqualink_set_pump_speedRun the pump at a named speed via WebTouchwrite, not destructive
iaqualink_set_pump_speed_rpmChange a named speed's RPM (600–3450) via WebTouch; a speed that is not running runs briefly while set, then the running speed is restoredwrite, not destructive
iaqualink_list_onetouchRS panel OneTouch scenes (Spa Mode, All OFF, …) and their state, via WebTouchread
iaqualink_set_onetouchTurn a OneTouch scene on/off via WebTouch — toggle not exercised live yetwrite, not destructive

Systems by name. At start the server lists the account's systems once; when that works, every serial argument advertises the supported systems' names (e.g. "Pool", "Spa") as an enum, and every tool accepts a name or a serial — an unknown name is refused with the list of known systems. If the listing fails (no sign-in yet, iAqualink down, past 5 s), the argument is a plain serial and nothing else changes. Every tool also carries _meta.mint hints (domain home; lookup for reads, turn-on-off for the set_* switches, change for schedule edits) that mcp-host's context groups read and other clients ignore.

Every write has an inverse in this set and reaches no other person — except deleting a panel program, which the panel stores immediately with no undo, so that one is marked destructive.

Schedules and OneTouch on a Jandy AquaLink RS panel go through WebTouch, the panel emulation the iAqualink web app uses: the server opens the panel's display stream, presses the same buttons a person would (checking before every press that the panel is on the expected screen and row, and aborting otherwise), returns to Home, and re-reads to verify. Only one WebTouch session per system runs at a time. The add / edit / delete sequences follow a live capture on an RS panel (2026-10-11) — see docs/IAQUALINK-API.md. If WebTouch is unavailable, iaqualink_list_schedules falls back to iQ20 schedules (adapter firmware 3+), probing r-api.iaqualink.net/v2 (Bearer), p-api.iaqualink.net/v2 (Bearer), p-api.iaqualink.net/v2 (bare token) and prm.iaqualink.net/v1 (bare token) once each and reporting every attempt. iQ20 schedule *writes* are not built.

How a write works. It reads the current state first and sends nothing if it already matches — iAqua's pump/heater/aux commands are *toggles*, so a blind send would flip whatever the state happened to be. It then asks you to confirm (an elicitation prompt where the client supports one; otherwise a preview plus a confirmToken, bound to the state it was planned against), sends, and re-reads until the requested value shows up. The result is confirmed, unchanged, or sent-unconfirmed with what was observed (eXO applies changes asynchronously — check again rather than retrying).

Setup

npm i -g @chrischall/iaqualink-mcp
VariableRequiredMeaning
IAQUALINK_EMAILfor every toolYour iAqualink app sign-in email
IAQUALINK_PASSWORDfor every toolYour iAqualink password (not trimmed)
IAQUALINK_STATUS_CACHE_SECONDSnoSeconds a status read is reused (default 5; 0 disables)
IAQUALINK_WEBTOUCH_STREAM_HOSTSnoExtra hosts (comma-separated) the WebTouch display stream may come from; default only prm.iaqualink.net
IAQUALINK_VERIFY_TIMEOUT_MSnoMilliseconds a write re-reads to confirm the change before reporting sent-unconfirmed, for iAqua and eXO alike (positive integer; default 15000 iAqua, 30000 eXO)
MCP_CONFIRM_MODEnoask-user (default) / auto / refuse
MCP_CONFIRM_TTL_SECONDSnoconfirmToken lifetime (default 600)
MCP_CONFIRM_ELICITATIONnooff skips the prompt even on clients that declare elicitation

The server starts without credentials (so hosts can list its tools) and reports them missing on the first call. A rejected password is never retried: the refusal is remembered until the server restarts, so a typo cannot lock the account.

Claude Code: claude mcp add iaqualink -e IAQUALINK_EMAIL=… -e IAQUALINK_PASSWORD=… -- npx -y @chrischall/iaqualink-mcp

Hosted (claude.ai)

mint.yaml declares per-user children with an email/password form on the connector's authorize page (each person signs in as themselves), egress to exactly prod.zodiac-io.com, r-api.iaqualink.net, p-api.iaqualink.net (iQ20 probe only) and prm.iaqualink.net (WebTouch, and the iQ20 probe); the WebTouch display stream is refused on any other host unless it is added to IAQUALINK_WEBTOUCH_STREAM_HOSTS (and egress). No persistent state — the session lives in memory and one sign-in rebuilds it after a cold start.

Skills

  • skills/iaqualink — how to use these tools.
  • skills/iaqualink-curl — the same reads straight from a shell with curl, credentials from the macOS Keychain (the sign-in, system list and iAqua reads are seen live; the eXO shadow read is still derived from iaqualink-py).

Development

npm install

npm run build npm run test:coverage # typecheck (src + tests) + vitest, 100% coverage — what CI runs

Tests run the real client against an in-memory iAqualink (tests/support/fake-server.ts) built from iaqualink-py's fixtures.