Swimming pool math: volume in gallons, chemical doses, pump flow and heater BTU for any pool.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use this when someone asks how much of a pool chemical to add to go from a current to a target level: chlorine (liquid chlorine 12.5 %, bleach 10 % or 6 %, cal-hypo 65 % or 73 %, dichlor, trichlor) for free chlorine; salt for a salt chlorinator; baking soda to raise or muriatic acid to lower total alkalinity; stabilizer (cyanuric acid); calcium chloride for calcium hardness; muriatic acid to lower pH or soda ash to raise it. Levels in ppm (pH for the pH chemicals). Returns the amount in fl oz, oz or lb, a readable amount, the number of common packages, the factor used and a safety line. Not for shock targets or water-balance (LSI) questions.
Target level in the same unit as current.
Current level: ppm (free chlorine, salt, alkalinity, stabilizer, calcium hardness) or pH for muriatic_acid_ph and soda_ash.
Pool volume in US gallons (from pool_volume if the user gave dimensions).
Product. muriatic_acid_ph lowers pH, muriatic_acid_ta lowers total alkalinity.
Only for muriatic_acid_ph and soda_ash: current TA in ppm (default 100); the pH dose scales with it.
Use this when someone asks how much of a pool chemical to add to go from a current to a target level: chlorine (liquid chlorine 12.5 %, bleach 10 % or 6 %, cal-hypo 65 % or 73 %, dichlor, trichlor) for free chlorine; salt for a salt chlorinator; baking soda to raise or muriatic acid to lower total alkalinity; stabilizer (cyanuric acid); calcium chloride for calcium hardness; muriatic acid to lower pH or soda ash to raise it. Levels in ppm (pH for the pH chemicals). Returns the amount in fl oz, oz or lb, a readable amount, the number of common packages, the factor used and a safety line. Not for shock targets or water-balance (LSI) questions.
| Argument | Type | Description |
|---|---|---|
| target* | number | Target level in the same unit as current. |
| current* | number | Current level: ppm (free chlorine, salt, alkalinity, stabilizer, calcium hardness) or pH for muriatic_acid_ph and soda_ash. |
| gallons* | number | Pool volume in US gallons (from pool_volume if the user gave dimensions). |
| chemical* | string | Product. muriatic_acid_ph lowers pH, muriatic_acid_ta lowers total alkalinity. |
| total_alkalinity | number | Only for muriatic_acid_ph and soda_ash: current TA in ppm (default 100); the pH dose scales with it. |
{
"type": "object",
"required": [
"chemical",
"gallons",
"current",
"target"
],
"properties": {
"target": {
"type": "number",
"description": "Target level in the same unit as current."
},
"current": {
"type": "number",
"description": "Current level: ppm (free chlorine, salt, alkalinity, stabilizer, calcium hardness) or pH for muriatic_acid_ph and soda_ash."
},
"gallons": {
"type": "number",
"maximum": 2000000,
"minimum": 100,
"description": "Pool volume in US gallons (from pool_volume if the user gave dimensions)."
},
"chemical": {
"enum": [
"liquid_chlorine_12_5",
"bleach_10",
"bleach_6",
"cal_hypo_65",
"cal_hypo_73",
"dichlor",
"trichlor",
"salt",
"baking_soda",
"stabilizer_cya",
"calcium_chloride",
"calcium_chloride_anhydrous",
"muriatic_acid_ph",
"muriatic_acid_ta",
"soda_ash"
],
"type": "string",
"description": "Product. muriatic_acid_ph lowers pH, muriatic_acid_ta lowers total alkalinity."
},
"total_alkalinity": {
"type": "number",
"maximum": 300,
"minimum": 20,
"description": "Only for muriatic_acid_ph and soda_ash: current TA in ppm (default 100); the pH dose scales with it."
}
},
"additionalProperties": false
}Use this when someone asks what size pool heater (BTU per hour) they need to raise the water a number of degrees Fahrenheit in a given time. Takes gallons, the temperature rise in °F and the hours (default 24), plus an optional buffer for surface heat loss (default 20 %, the same as the heater calculator on calculatepool.com). Returns the BTU/h required, the size with the buffer, the total BTU and the electric input of an equivalent heat pump. Not for heating cost per month or heater model recommendations.
| Argument | Type | Description |
|---|---|---|
| hours | number | Hours to reach the temperature (default 24). |
| gallons* | number | Pool volume in US gallons (from pool_volume if the user gave dimensions). |
| buffer_percent | number | Extra capacity for surface heat loss while heating (default 20). |
| temperature_rise_f* | number | Degrees Fahrenheit to raise the water. |
{
"type": "object",
"required": [
"gallons",
"temperature_rise_f"
],
"properties": {
"hours": {
"type": "number",
"maximum": 168,
"minimum": 1,
"description": "Hours to reach the temperature (default 24)."
},
"gallons": {
"type": "number",
"maximum": 2000000,
"minimum": 100,
"description": "Pool volume in US gallons (from pool_volume if the user gave dimensions)."
},
"buffer_percent": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Extra capacity for surface heat loss while heating (default 20)."
},
"temperature_rise_f": {
"type": "number",
"maximum": 60,
"minimum": 1,
"description": "Degrees Fahrenheit to raise the water."
}
},
"additionalProperties": false
}Use this when someone asks how many gallons a common pool size holds, e.g. a 24 ft round above-ground pool with a 52 in wall or a 16 x 32 inground pool, or wants a table of standard sizes. Returns inground rectangles (12x24 to 25x50 ft at 3.5, 4.5 and 5.5 ft average depth) and above-ground round and oval pools (12-33 ft round, 12x24 to 21x41 ft oval at 48, 52 and 54 in walls) with the factors used. For any other size or shape use pool_volume.
| Argument | Type | Description |
|---|---|---|
| kind | string | Which table (default all). |
{
"type": "object",
"required": [],
"properties": {
"kind": {
"enum": [
"all",
"inground",
"above_ground"
],
"type": "string",
"description": "Which table (default all)."
}
},
"additionalProperties": false
}Use this when someone wants to know how many gallons (or litres, cubic feet) a swimming pool holds from its shape and size: rectangle, round, oval, Roman, Grecian, kidney, L-shape or freeform, with one depth, a shallow and a deep end, or an above-ground wall height (48, 52, 54 in). Dimensions in feet or metres. Returns gallons, litres, cubic feet, cubic metres, surface area and the formula. Use it before chemical_dose, pump_size or heater_size when only dimensions are known.
| Argument | Type | Description |
|---|---|---|
| unit | string | Unit of every dimension and depth: ft (default) or m. |
| shape* | string | rect (default), round, oval, roman (half-circle ends), grecian (cut corners), kidney, lshape, free (freeform, needs area). |
| deep_depth | number | Water depth at the deep end (optional; average of the two is used). |
| dimensions* | object | |
| shallow_depth | number | Water depth at the shallow end, or the only depth for a constant-depth pool. |
| above_ground_wall_in | integer | Above-ground round or oval pool: wall height in inches instead of depths. |
Use this when someone asks what size pool pump they need or what flow rate turns their pool over in a given number of hours. Takes gallons and turnover hours (default 8). Returns gallons per minute, gallons per hour, a rule-of-thumb horsepower range, the minimum sand, cartridge and DE filter area for that flow, and pipe velocities. Not for electricity cost or pump model recommendations.
| Argument | Type | Description |
|---|---|---|
| gallons* | number | Pool volume in US gallons (from pool_volume if the user gave dimensions). |
| turnover_hours | number | Hours for one full turnover (default 8; 6 for heavy use). |
{
"type": "object",
"required": [
"gallons"
],
"properties": {
"gallons": {
"type": "number",
"maximum": 2000000,
"minimum": 100,
"description": "Pool volume in US gallons (from pool_volume if the user gave dimensions)."
},
"turnover_hours": {
"type": "number",
"maximum": 24,
"minimum": 1,
"description": "Hours for one full turnover (default 8; 6 for heavy use)."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"shape",
"dimensions"
],
"properties": {
"unit": {
"enum": [
"ft",
"m"
],
"type": "string",
"description": "Unit of every dimension and depth: ft (default) or m."
},
"shape": {
"enum": [
"rect",
"round",
"oval",
"roman",
"grecian",
"kidney",
"lshape",
"free"
],
"type": "string",
"description": "rect (default), round, oval, roman (half-circle ends), grecian (cut corners), kidney, lshape, free (freeform, needs area)."
},
"deep_depth": {
"type": "number",
"description": "Water depth at the deep end (optional; average of the two is used)."
},
"dimensions": {
"type": "object",
"required": [],
"properties": {
"area": {
"type": "number",
"description": "free: surface area in sq ft (or m² with unit m)."
},
"width": {
"type": "number",
"description": "rect, oval, roman, grecian, lshape."
},
"corner": {
"type": "number",
"description": "grecian: size of each 45° corner cut (optional)."
},
"length": {
"type": "number",
"description": "rect, oval, roman, grecian, kidney, lshape."
},
"width2": {
"type": "number",
"description": "lshape: second rectangle width."
},
"widthA": {
"type": "number",
"description": "kidney: width of the wide end."
},
"widthB": {
"type": "number",
"description": "kidney: width of the narrow end."
},
"length2": {
"type": "number",
"description": "lshape: second rectangle length."
},
"diameter": {
"type": "number",
"description": "round."
}
},
"additionalProperties": false
},
"shallow_depth": {
"type": "number",
"description": "Water depth at the shallow end, or the only depth for a constant-depth pool."
},
"above_ground_wall_in": {
"enum": [
48,
52,
54
],
"type": "integer",
"description": "Above-ground round or oval pool: wall height in inches instead of depths."
}
},
"additionalProperties": false
}