Calculate Pool

Swimming pool math: volume in gallons, chemical doses, pump flow and heater BTU for any pool.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
97%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,794Tokens (tool definitions)
~4.6 KBTypical response size
Significant attention impact (2.18% of 128k context)

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": {
    "calculatepool": {
      "url": "https://calculatepool.com/mcp?src=mcp"
    }
  }
}

Remote endpoints

https://calculatepool.com/mcp?src=mcpstreamable-http

What it can do

Tool inventory

Tools (5)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢pool_volume(shape, unit, dimensions, shallow_depth, deep_depth, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "shape": {
      "type": "string",
      "enum": [
        "rect",
        "round",
        "oval",
        "roman",
        "grecian",
        "kidney",
        "lshape",
        "free"
      ],
      "description": "rect (default), round, oval, roman (half-circle ends), grecian (cut corners), kidney, lshape, free (freeform, needs area)."
    },
    "unit": {
      "type": "string",
      "enum": [
        "ft",
        "m"
      ],
      "description": "Unit of every dimension and depth: ft (default) or m."
    },
    "dimensions": {
      "type": "object",
      "properties": {
        "length": {
          "type": "number",
          "description": "rect, oval, roman, grecian, kidney, lshape."
        },
        "width": {
          "type": "number",
          "description": "rect, oval, roman, grecian, lshape."
        },
        "diameter": {
          "type": "number",
          "description": "round."
        },
        "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."
        },
        "width2": {
          "type": "number",
          "description": "lshape: second rectangle width."
        },
        "corner": {
          "type": "number",
          "description": "grecian: size of each 45° corner cut (optional)."
        },
        "area": {
          "type": "number",
          "description": "free: surface area in sq ft (or m² with unit m)."
        }
      },
      "required": [],
      "additionalProperties": false
    },
    "shallow_depth": {
      "type": "number",
      "description": "Water depth at the shallow end, or the only depth for a constant-depth pool."
    },
    "deep_depth": {
      "type": "number",
      "description": "Water depth at the deep end (optional; average of the two is used)."
    },
    "above_ground_wall_in": {
      "type": "integer",
      "enum": [
        48,
        52,
        54
      ],
      "description": "Above-ground round or oval pool: wall height in inches instead of depths."
    }
  },
  "required": [
    "shape",
    "dimensions"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "shape": {
      "type": "string"
    },
    "unit_in": {
      "type": "string"
    },
    "gallons": {
      "type": "integer"
    },
    "litres": {
      "type": "integer"
    },
    "cubic_feet": {
      "type": "number"
    },
    "cubic_metres": {
      "type": "number"
    },
    "surface_area_sqft": {
      "type": "number"
    },
    "average_depth_ft": {
      "type": "number"
    },
    "formula": {
      "type": "string"
    },
    "above_ground_wall_in": {
      "type": "integer"
    },
    "link": {
      "type": "string",
      "description": "Page of calculatepool.com for the same calculation."
    }
  },
  "required": [
    "shape",
    "unit_in",
    "gallons",
    "litres",
    "cubic_feet",
    "cubic_metres",
    "surface_area_sqft",
    "average_depth_ft",
    "formula",
    "link"
  ],
  "additionalProperties": false
}
🟢chemical_dose(chemical, gallons, current, target, total_alkalinity)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "chemical": {
      "type": "string",
      "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"
      ],
      "description": "Product. muriatic_acid_ph lowers pH, muriatic_acid_ta lowers total alkalinity."
    },
    "gallons": {
      "type": "number",
      "minimum": 100,
      "maximum": 2000000,
      "description": "Pool volume in US gallons (from pool_volume if the user gave dimensions)."
    },
    "current": {
      "type": "number",
      "description": "Current level: ppm (free chlorine, salt, alkalinity, stabilizer, calcium hardness) or pH for muriatic_acid_ph and soda_ash."
    },
    "target": {
      "type": "number",
      "description": "Target level in the same unit as current."
    },
    "total_alkalinity": {
      "type": "number",
      "minimum": 20,
      "maximum": 300,
      "description": "Only for muriatic_acid_ph and soda_ash: current TA in ppm (default 100); the pH dose scales with it."
    }
  },
  "required": [
    "chemical",
    "gallons",
    "current",
    "target"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "chemical": {
      "type": "string"
    },
    "product": {
      "type": "string"
    },
    "gallons": {
      "type": "number"
    },
    "parameter": {
      "type": "string"
    },
    "current": {
      "type": "number"
    },
    "target": {
      "type": "number"
    },
    "direction": {
      "type": "string",
      "enum": [
        "raise",
        "lower"
      ]
    },
    "total_alkalinity": {
      "type": "number"
    },
    "amount": {
      "type": "number"
    },
    "unit": {
      "type": "string",
      "enum": [
        "fl oz",
        "oz",
        "lb"
      ]
    },
    "amount_text": {
      "type": "string"
    },
    "packages": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "count": {
              "type": "integer"
            },
            "package": {
              "type": "string"
            },
            "text": {
              "type": "string"
            },
            "note": {
              "type": "string"
            }
          },
          "required": [
            "count",
            "package",
            "text",
            "note"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "factor": {
      "type": "string"
    },
    "note": {
      "type": "string"
    },
    "safety": {
      "type": "string"
    },
    "link": {
      "type": "string",
      "description": "Page of calculatepool.com for the same calculation."
    }
  },
  "required": [
    "chemical",
    "product",
    "gallons",
    "parameter",
    "current",
    "target",
    "direction",
    "amount",
    "unit",
    "amount_text",
    "packages",
    "factor",
    "note",
    "safety",
    "link"
  ],
  "additionalProperties": false
}
🟢pump_size(gallons, turnover_hours)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "gallons": {
      "type": "number",
      "minimum": 100,
      "maximum": 2000000,
      "description": "Pool volume in US gallons (from pool_volume if the user gave dimensions)."
    },
    "turnover_hours": {
      "type": "number",
      "minimum": 1,
      "maximum": 24,
      "description": "Hours for one full turnover (default 8; 6 for heavy use)."
    }
  },
  "required": [
    "gallons"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "gallons": {
      "type": "number"
    },
    "turnover_hours": {
      "type": "number"
    },
    "gpm": {
      "type": "number"
    },
    "gallons_per_hour": {
      "type": "integer"
    },
    "hp_hint": {
      "type": "string"
    },
    "filter_min_sqft": {
      "type": "object",
      "properties": {
        "sand": {
          "type": "number"
        },
        "cartridge": {
          "type": "number"
        },
        "de": {
          "type": "number"
        }
      },
      "required": [
        "sand",
        "cartridge",
        "de"
      ],
      "additionalProperties": false
    },
    "pipe_velocity_fps": {
      "type": "object",
      "properties": {
        "1.5_in": {
          "type": "number"
        },
        "2_in": {
          "type": "number"
        },
        "2.5_in": {
          "type": "number"
        }
      },
      "required": [
        "1.5_in",
        "2_in",
        "2.5_in"
      ],
      "additionalProperties": false
    },
    "note": {
      "type": "string"
    },
    "link": {
      "type": "string",
      "description": "Page of calculatepool.com for the same calculation."
    }
  },
  "required": [
    "gallons",
    "turnover_hours",
    "gpm",
    "gallons_per_hour",
    "hp_hint",
    "filter_min_sqft",
    "pipe_velocity_fps",
    "note",
    "link"
  ],
  "additionalProperties": false
}
🟢heater_size(gallons, temperature_rise_f, hours, buffer_percent)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "gallons": {
      "type": "number",
      "minimum": 100,
      "maximum": 2000000,
      "description": "Pool volume in US gallons (from pool_volume if the user gave dimensions)."
    },
    "temperature_rise_f": {
      "type": "number",
      "minimum": 1,
      "maximum": 60,
      "description": "Degrees Fahrenheit to raise the water."
    },
    "hours": {
      "type": "number",
      "minimum": 1,
      "maximum": 168,
      "description": "Hours to reach the temperature (default 24)."
    },
    "buffer_percent": {
      "type": "number",
      "minimum": 0,
      "maximum": 100,
      "description": "Extra capacity for surface heat loss while heating (default 20)."
    }
  },
  "required": [
    "gallons",
    "temperature_rise_f"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "gallons": {
      "type": "number"
    },
    "temperature_rise_f": {
      "type": "number"
    },
    "hours": {
      "type": "number"
    },
    "buffer_percent": {
      "type": "number"
    },
    "btu_per_hour_required": {
      "type": "integer"
    },
    "btu_per_hour_with_buffer": {
      "type": "integer"
    },
    "total_btu": {
      "type": "integer"
    },
    "heat_pump_kw_input_cop5": {
      "type": "number"
    },
    "note": {
      "type": "string"
    },
    "link": {
      "type": "string",
      "description": "Page of calculatepool.com for the same calculation."
    }
  },
  "required": [
    "gallons",
    "temperature_rise_f",
    "hours",
    "buffer_percent",
    "btu_per_hour_required",
    "btu_per_hour_with_buffer",
    "total_btu",
    "heat_pump_kw_input_cop5",
    "note",
    "link"
  ],
  "additionalProperties": false
}
🟢pool_facts(kind)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "all",
        "inground",
        "above_ground"
      ],
      "description": "Which table (default all)."
    }
  },
  "required": [],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string"
    },
    "rows": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "pool": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "gallons": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "depth": {
                  "type": "string"
                },
                "gallons": {
                  "type": "integer"
                }
              },
              "required": [
                "depth",
                "gallons"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "pool",
          "kind",
          "gallons"
        ],
        "additionalProperties": false
      }
    },
    "factors": {
      "type": "object",
      "properties": {
        "gallons_per_cubic_foot": {
          "type": "number"
        },
        "round_and_oval_factor": {
          "type": "number"
        },
        "litres_per_gallon": {
          "type": "number"
        }
      },
      "required": [
        "gallons_per_cubic_foot",
        "round_and_oval_factor",
        "litres_per_gallon"
      ],
      "additionalProperties": false
    },
    "note": {
      "type": "string"
    },
    "link": {
      "type": "string",
      "description": "Page of calculatepool.com for the same calculation."
    }
  },
  "required": [
    "kind",
    "rows",
    "factors",
    "note",
    "link"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools