Pool Log — CDC-range water test log (no AI)
Deterministic pool and spa water test log. Checks readings against US CDC ranges. No AI.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"water-log": {
"url": "https://pool-log.rowb.app/mcp"
}
}
}Remote endpoints
https://pool-log.rowb.app/mcpstreamable-httpWhat it can do
Tool inventory
Tools (6)
🟢check_readings(readings, as_of)
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",
"properties": {
"readings": {
"type": "array",
"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\"}.",
"items": {
"type": "object"
}
},
"as_of": {
"type": "string",
"description": "Treat this date as \"today\" (YYYY-MM-DD) when rejecting future timestamps. Defaults to the server date."
}
},
"required": [
"readings"
]
}🟢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": {}
}🟡create_site(label, water_type, volume_gallons, disinfectant, address)
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",
"properties": {
"label": {
"type": "string",
"description": "What to call this water, e.g. \"Apartment pool - north\"."
},
"water_type": {
"type": "string",
"description": "pool | hot_tub | splash_pad | wading_pool | other"
},
"volume_gallons": {
"type": "number"
},
"disinfectant": {
"type": "string",
"description": "chlorine | bromine | none"
},
"address": {
"type": "string"
}
},
"required": []
}🟡add_readings(site_id, readings)
Append water readings to an existing log. Requires a bearer key.
Input Schema
{
"type": "object",
"properties": {
"site_id": {
"type": "string"
},
"readings": {
"type": "array",
"items": {
"type": "object"
}
}
},
"required": [
"site_id",
"readings"
]
}🟢get_log_summary(site_id)
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",
"properties": {
"site_id": {
"type": "string"
}
},
"required": [
"site_id"
]
}🟡request_operator_signoff(site_id, provider_name, provider_email)
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",
"properties": {
"site_id": {
"type": "string"
},
"provider_name": {
"type": "string"
},
"provider_email": {
"type": "string"
}
},
"required": [
"site_id"
]
}Community
Evidence