MCP Server

Pool Log — CDC-range water test log (no AI)

app.rowb.pool-log/water-log
Business & Operations Public & reachable MCP 2026-07-28

What this MCP does

Maintains pool and spa water-test logs and checks readings against CDC ranges and basic consistency rules.

add_readings
Append water readings to an existing log. Requires a bearer key.
Input schema
{'type': 'object', 'required': ['site_id', 'readings'], 'properties': {'site_id': {'type': 'string'}, 'readings': {'type': 'array', 'items': {'type': 'object'}}}}
check_readings
Check a list of pool or spa water readings for things that cannot be true, and compare pH, free chlorine and bromine against the ranges published on the US CDC pages. Deterministic arithmetic only - no AI. It does not decide whether a pool is legally compliant, and it does not know your local code.
Input schema
{'type': 'object', 'required': ['readings'], 'properties': {'as_of': {'type': 'string', 'description': 'Treat this date as "today" (YYYY-MM-DD) when rejecting future timestamps. Defaults to the server date.'}, 'readings': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Readings to check. Each: {at:"YYYY-MM-DDTHH:MM", kind:"pool|hot_tub|splash_pad|wading_pool|other", ph?:number, free_chlorine_ppm?:number, total_chlorine_ppm?:number, bromine_ppm?:number, cyanuric_acid_ppm?:number, water_temp_f?:number, disinfectant?:"chlorine|bromine|none", method?:"dpd|test_strip|meter|other", by?:"who tested"}.'}}}
create_site
Open a water-test log for one pool, hot tub or splash pad (returns a site id). Requires a bearer key.
Input schema
{'type': 'object', 'required': [], 'properties': {'label': {'type': 'string', 'description': 'What to call this water, e.g. "Apartment pool - north".'}, 'address': {'type': 'string'}, 'water_type': {'type': 'string', 'description': 'pool | hot_tub | splash_pad | wading_pool | other'}, 'disinfectant': {'type': 'string', 'description': 'chlorine | bromine | none'}, 'volume_gallons': {'type': 'number'}}}
get_log_summary
Every reading, the flagged issues, the CDC-range counts, the longest gap between tests, and the A4 log sheet URL, for one log. Requires a bearer key.
Input schema
{'type': 'object', 'required': ['site_id'], 'properties': {'site_id': {'type': 'string'}}}
get_rules
The exact rule table this service checks against, the quoted source of every range, and what it explicitly does not claim. Quote it if you need to explain a result.
Input schema
{'type': 'object', 'properties': {}}
request_operator_signoff
Create a one-time URL the pool operator can open to confirm the log. Requires a bearer key. The token is single use.
Input schema
{'type': 'object', 'required': ['site_id'], 'properties': {'site_id': {'type': 'string'}, 'provider_name': {'type': 'string'}, 'provider_email': {'type': 'string'}}}
Added
request_operator_signoff
Oct. 2, 2026, 2:40 a.m.
Added
get_log_summary
Oct. 2, 2026, 2:40 a.m.
Added
add_readings
Oct. 2, 2026, 2:40 a.m.
Added
create_site
Oct. 2, 2026, 2:40 a.m.
Added
get_rules
Oct. 2, 2026, 2:40 a.m.
Added
check_readings
Oct. 2, 2026, 2:40 a.m.