iaqualink-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| IAQUALINK_EMAIL | Yes | Your iAqualink app sign-in email (required for every tool). | |
| MCP_CONFIRM_MODE | No | Confirmation mode: ask-user (default), auto, or refuse. | ask-user |
| IAQUALINK_PASSWORD | Yes | Your iAqualink password (not trimmed; required for every tool). | |
| MCP_CONFIRM_ELICITATION | No | Set to off to skip the elicitation prompt even on clients that declare elicitation. | |
| MCP_CONFIRM_TTL_SECONDS | No | confirmToken lifetime in seconds (default 600). | 600 |
| IAQUALINK_VERIFY_TIMEOUT_MS | No | Milliseconds a write re-reads to confirm the change before reporting sent-unconfirmed, for iAqua and eXO alike (positive integer; default 15000 iAqua, 30000 eXO). | |
| IAQUALINK_STATUS_CACHE_SECONDS | No | Seconds a status read is reused (default 5; 0 disables). | 5 |
| IAQUALINK_WEBTOUCH_STREAM_HOSTS | No | Extra hosts (comma-separated) the WebTouch display stream may come from; default only prm.iaqualink.net. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| iaqualink_list_systemsA | List the pool/spa systems (iAqualink / Jandy iAquaLink panels and Zodiac eXO salt chlorinators) on the signed-in iAqualink account, with each serial number needed by the other tools. Other device types (e.g. robotic cleaners) are listed but marked unsupported. |
| iaqualink_get_statusA | Get the current pool/spa status of one iAqualink system: air, pool and spa temperatures, heater set points, pumps, heaters (pool/spa/solar), freeze protection, aux circuits and lights (with names), and — where the system reports them — salt chlorinator output, boost, salinity, pH and ORP. Readings are cached for a few seconds to stay polite to iAqualink. |
| iaqualink_healthcheckA | Resolves the credential the way real tools do, then makes one authenticated request to r-api.iaqualink.net. Reports which source supplied the credential, whether r-api.iaqualink.net accepted it, the round-trip time, and a plain-English hint distinguishing 'no credential' from 'credential rejected' from 'a r-api.iaqualink.net-side problem'. Read-only; never returns the credential itself. Call this when a real tool fails and you want to know which hop broke. |
| iaqualink_set_equipmentA | Turn pool equipment on or off. iAqua (Jandy iAquaLink) systems: pool_pump, spa_pump, pool_heater, spa_heater, solar_heater. eXO salt chlorinators: filter_pump, production (chlorine generation), boost, low (low-output mode), heating. Reads the current state first and sends nothing if it already matches (iAqua commands are toggles); afterwards re-reads to confirm the change landed. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). |
| iaqualink_set_auxA | Turn an auxiliary circuit on or off — cleaner, waterfall, bubbler, landscape or pool/spa lights wired to an aux relay. Identify it by number ("3"), name ("aux_3") or label as shown by iaqualink_get_status. On iAqua, dimmable lights turn on at 100% and color lights at their first color, as the iAqualink app does. Sends nothing if already in that state, then re-reads to confirm. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). |
| iaqualink_set_lightA | Set a pool/spa light’s brightness (dimmable lights: 0, 25, 50, 75 or 100 %) or color/show effect (color lights — Jandy, Pentair, Hayward; the effect names are listed by iaqualink_get_status with view "full"). iAqua systems only. The current color cannot be read back from iAqualink, so an effect change is confirmed only by the light being on. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). |
| iaqualink_set_temperatureA | Set the pool and/or spa heater set point (target water temperature), in the system’s own unit (iAqua: °F 34–104 or °C 1–40; eXO: °C within its reported range, pool only). This changes the target only — turning a heater on or off is iaqualink_set_equipment. Re-reads to confirm. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). |
| iaqualink_set_chlorinatorA | Set an eXO salt chlorinator’s output (chlorine production) percentage, 0–100. eXO systems only. Unlike the other controls this write is NOT in the iaqualink-py reference client — its shape is inferred from the reported |
| iaqualink_list_schedulesA | List a pool system’s schedules (programs/timers). iAqua (Jandy AquaLink RS) panels: the panel’s own schedule — circuit, start, stop (24-hour, plus the panel’s text) and run days, with the page/row each sits at (what iaqualink_edit_schedule and iaqualink_delete_schedule identify it by) — read through iAqualink WebTouch, the panel emulation. If WebTouch is unavailable it falls back to the iQ20 schedule list (adapter firmware 3+), trying each candidate host once and reporting which answered ( |
| iaqualink_set_scheduleA | Change one eXO salt-chlorinator timer (pump, chlorinator or aux): set its start and stop time (24-hour HH:MM) and enable it, set rpm on a variable-speed pump timer, or disable it (enabled: false clears it to 00:00–00:00, as the app does). Identify the timer by its key (sch3), id (sch_3), name or endpoint (ssp_1) from iaqualink_list_schedules. A chlorinator timer must stay inside its pump timer’s window. eXO systems only — for a Jandy AquaLink RS panel use iaqualink_add_schedule / iaqualink_edit_schedule / iaqualink_delete_schedule. The eXO applies changes asynchronously; the result says whether a re-read confirmed it. Unverified on live hardware (shape from community Home Assistant integrations). Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). |
| iaqualink_add_scheduleA | Add a program to a Jandy AquaLink RS panel’s own schedule (iAqua systems), through iAqualink WebTouch — the panel emulation the iAqualink web app uses. Picks the circuit by its panel label (e.g. "Filter Pump", "Pool Light", "Cleaner"), sets start and stop (24-hour HH:MM; stop may be earlier than start to run overnight) and run days, saves, and re-reads the list to confirm. The preview shows the schedule list before and after. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). |
| iaqualink_edit_scheduleA | Change the start time, stop time and/or run days of one existing program in a Jandy AquaLink RS panel’s schedule (iAqua systems), through WebTouch. Identify the program exactly as iaqualink_list_schedules listed it (page, row, circuit, start, stop, days) — if the panel no longer shows that, nothing is pressed. The circuit itself cannot be changed (delete and add instead). The preview shows the list before and after; the result re-reads it. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). |
| iaqualink_delete_scheduleA | Delete one program from a Jandy AquaLink RS panel’s schedule (iAqua systems), through WebTouch. The panel stores the deletion immediately, with no undo. Identify the program exactly as iaqualink_list_schedules listed it (page, row, circuit, start, stop, days) — if the panel no longer shows that, nothing is pressed. The preview shows the list before and after; the result re-reads it. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). |
| iaqualink_check_panelA | Check whether an iAqua (Jandy AquaLink RS) system is reachable and what its panel is showing: the cloud online flag, then — over WebTouch — the current screen, any open dialog, and whether the schedule screen is in Edit mode with unsaved changes. Use it when the app, WebTouch and the other tools disagree, or a schedule/OneTouch tool reports a dialog or a timeout. Sends only the start-up press the WebTouch page sends when it loads (in Edit mode the panel answers it with its "must be saved" dialog); presses nothing else and changes no setting. |
| iaqualink_list_onetouchA | List a Jandy AquaLink RS panel’s OneTouch scenes — the panel-defined one-button macros such as "Spa Mode", "All OFF" or "Clean Mode" — with each scene’s number, label and whether it is on, read through iAqualink WebTouch (the panel emulation). Use iaqualink_set_onetouch to run or stop one. |
| iaqualink_set_onetouchA | Turn a Jandy AquaLink RS panel’s OneTouch scene on or off (by number 1–6, onetouch_, or its label from iaqualink_list_onetouch), through WebTouch. The panel button is a toggle, so it is pressed only when the scene is not already in the requested state; the scenes are re-read afterwards to confirm. A scene switches several pieces of equipment at once, as configured on the panel. The toggle press was not exercised in the live capture. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). |
| iaqualink_list_pump_speedsA | List a Jandy AquaLink RS panel’s variable-speed pump speeds — the named speeds (e.g. Pool, Spa, Cleaner) with each one’s RPM and which one the pump runs at — read through iAqualink WebTouch from the panel’s "VSP Adjust / Set Speed" screen. Use iaqualink_set_pump_speed to switch speeds and iaqualink_set_pump_speed_rpm to change a speed’s RPM. |
| iaqualink_set_pump_speedA | Run a Jandy AquaLink RS panel’s variable-speed pump at one of its named speeds (from iaqualink_list_pump_speeds), through WebTouch — the panel makes a pressed speed the running speed at once. Nothing is pressed if that speed already runs; the speeds are re-read afterwards to confirm. Switch back the same way. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). |
| iaqualink_set_pump_speed_rpmA | Change the RPM of one of a Jandy AquaLink RS panel’s named pump speeds (600–3450), through WebTouch. The panel stores a typed RPM for the running speed, so a speed that is not running is run for a few seconds while it is set, and the speed that was running is switched back afterwards; the speeds are re-read to confirm. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 19 tools
Most tools target a distinct resource+action (systems, status, schedules, OneTouch, pump speeds), and descriptions explicitly scope iAqua vs eXO behavior. Two real overlap points remain: iaqualink_set_equipment covers eXO 'production'/'boost' chlorine control while iaqualink_set_chlorinator sets output percentage, and iaqualink_set_aux turns light circuits on/off while iaqualink_set_light sets brightness/color. iaqualink_check_panel vs iaqualink_healthcheck is also a fine distinction an agent must reason about.
All names share the iaqualink_ prefix and snake_case verb_noun structure (list_systems, get_status, set_equipment, add/edit/delete_schedule). The only deviation is iaqualink_healthcheck, which omits a verb, and the schedule tools split awkwardly across set_schedule (eXO) versus add/edit/delete_schedule (iAqua) for what is nominally one concept.
Nineteen tools is on the heavy side, but the server genuinely spans two hardware families plus schedules, OneTouch scenes, VSP speeds, and diagnostics, so most tools earn their place. A few could be collapsed — set_chlorinator largely duplicates the eXO branch of set_equipment, and check_panel/healthcheck are adjacent diagnostics.
Coverage is strong for a control server: discovery, status, equipment/aux/light/temperature writes, full schedule CRUD for iAqua panels, OneTouch and pump-speed management, plus healthcheck and panel diagnostics. Gaps exist on the eXO side, which has list+set schedule but no add or true delete (only a disable-to-00:00), and there is no history/energy/log surface.