{"schema_version":"2.0","contract_version":"2.0.0","engine":"BLX Ops (live)","mcp_endpoint":"https://bluelux.com/mcp","tools":[{"name":"calculate_pool_dose","title":"Calculate pool chemical dose","description":"Return a modeled correction for an explicit target. Practical quantities require explicit application_policy_id selection. Supplied facility context is returned with an explicit assessment status; omitted context stays unknown. Status, constraints and reason codes are structured; no operating or compliance clearance is implied.","inputSchema":{"$defs":{"FacilityContext":{"additionalProperties":false,"allOf":[{"if":{"properties":{"sanitizer":{"const":"chlorine"}},"required":["sanitizer"]},"then":{"properties":{"sanitizer_system":{"not":{"const":"bromine"}}}}},{"if":{"properties":{"sanitizer":{"const":"bromine"}},"required":["sanitizer"]},"then":{"properties":{"sanitizer_system":{"not":{"enum":["liquid_chlorine","salt_generator","trichlor","dichlor"]}}}}}],"properties":{"use_type":{"anyOf":[{"enum":["residential","commercial"],"type":"string"},{"type":"null"}],"default":null,"title":"Use Type"},"water_body_type":{"anyOf":[{"enum":["pool","spa","wading_pool","spray_ground"],"type":"string"},{"type":"null"}],"default":null,"title":"Water Body Type"},"facility_type":{"anyOf":[{"enum":["private_residential","hoa_apartment","hotel","gym_club","municipal","school","therapy","splash_pad","other"],"type":"string"},{"type":"null"}],"default":null,"title":"Facility Type"},"environment":{"anyOf":[{"enum":["indoor","outdoor"],"type":"string"},{"type":"null"}],"default":null,"title":"Environment"},"feed_method":{"anyOf":[{"enum":["manual","automatic","mixed"],"type":"string"},{"type":"null"}],"default":null,"title":"Feed Method"},"sanitizer_system":{"anyOf":[{"enum":["liquid_chlorine","salt_generator","trichlor","dichlor","bromine","mixed"],"type":"string"},{"type":"null"}],"default":null,"title":"Sanitizer System"},"sanitizer":{"anyOf":[{"enum":["chlorine","bromine"],"type":"string"},{"type":"null"}],"default":null,"title":"Sanitizer"},"jurisdiction":{"anyOf":[{"maxLength":120,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Jurisdiction"},"operating_profile_id":{"anyOf":[{"maxLength":120,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Operating Profile Id"}},"title":"FacilityContext","type":"object"}},"additionalProperties":false,"allOf":[{"if":{"properties":{"chemical":{"const":"liquid_chlorine"}},"required":["chemical"]},"then":{"properties":{"current":{"maximum":100},"target":{"maximum":100}}}},{"if":{"properties":{"chemical":{"const":"muriatic_acid"}},"required":["chemical"]},"then":{"properties":{"current":{"maximum":8.5},"target":{"maximum":8.5}}}},{"if":{"properties":{"chemical":{"const":"sodium_bicarbonate"}},"required":["chemical"]},"then":{"properties":{"current":{"maximum":1000},"target":{"maximum":1000}}}},{"if":{"properties":{"chemical":{"const":"calcium_chloride"}},"required":["chemical"]},"then":{"properties":{"current":{"maximum":10000},"target":{"maximum":10000}}}},{"if":{"properties":{"chemical":{"const":"cyanuric_acid"}},"required":["chemical"]},"then":{"properties":{"current":{"maximum":1000},"target":{"maximum":1000}}}},{"if":{"properties":{"chemical":{"const":"pool_salt"}},"required":["chemical"]},"then":{"properties":{"current":{"maximum":10000},"target":{"maximum":10000}}}},{"if":{"properties":{"chemical":{"const":"soda_ash"}},"required":["chemical"]},"then":{"properties":{"current":{"maximum":8.2},"target":{"maximum":8.2}}}},{"if":{"properties":{"chemical":{"const":"muriatic_acid"}},"required":["chemical"]},"then":{"properties":{"current":{"minimum":6.8},"target":{"maximum":8.2,"minimum":6.8}}}},{"if":{"properties":{"chemical":{"const":"soda_ash"}},"required":["chemical"]},"then":{"properties":{"current":{"minimum":6.8},"target":{"minimum":6.8}}}},{"if":{"properties":{"chemical":{"enum":["liquid_chlorine","sodium_bicarbonate","calcium_chloride","cyanuric_acid","pool_salt"]}},"required":["chemical"]},"then":{"properties":{"total_alkalinity_ppm":{"type":"null"},"borates_ppm_as_boron":{"type":"null"},"free_chlorine_ppm":{"type":"null"},"temperature_f":{"type":"null"},"tds_ppm":{"type":"null"}}}},{"if":{"properties":{"chemical":{"enum":["sodium_bicarbonate","calcium_chloride","cyanuric_acid","pool_salt"]}},"required":["chemical"]},"then":{"properties":{"cyanuric_acid_ppm":{"type":"null"}}}},{"if":{"properties":{"chemical":{"enum":["soda_ash","sodium_bicarbonate","calcium_chloride","cyanuric_acid","pool_salt"]}},"required":["chemical"]},"then":{"properties":{"product_density_g_ml":{"type":"null"}}}},{"if":{"properties":{"chemical":{"not":{"const":"liquid_chlorine"}}},"required":["chemical"]},"then":{"properties":{"product_concentration_basis":{"type":"null"}}}},{"if":{"properties":{"product_concentration_basis":{"type":"string"}},"required":["product_concentration_basis"]},"then":{"properties":{"product_strength_percent":{"type":"number"}},"required":["product_strength_percent"]}},{"else":{"if":{"properties":{"chemical":{"const":"liquid_chlorine"}},"required":["chemical"]},"then":{"properties":{"product_density_g_ml":{"type":"null"}}}},"if":{"properties":{"product_concentration_basis":{"enum":["available_chlorine_weight_percent","sodium_hypochlorite_weight_percent"]}},"required":["product_concentration_basis"]},"then":{"properties":{"product_density_g_ml":{"type":"number"}},"required":["product_density_g_ml"]}}],"properties":{"chemical":{"enum":["liquid_chlorine","muriatic_acid","sodium_bicarbonate","calcium_chloride","cyanuric_acid","pool_salt","soda_ash"],"title":"Chemical","type":"string"},"context":{"anyOf":[{"$ref":"#/$defs/FacilityContext"},{"type":"null"}],"default":null},"application_policy_id":{"anyOf":[{"const":"bluelux_bounded_v1","type":"string"},{"type":"null"}],"default":null,"title":"Application Policy Id"},"volume_gallons":{"maximum":2000000,"minimum":100,"title":"Volume Gallons","type":"integer"},"current":{"maximum":100000,"minimum":0,"title":"Current","type":"number"},"target":{"maximum":100000,"minimum":0,"title":"Target","type":"number"},"product_profile_id":{"anyOf":[{"maxLength":120,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Product Profile Id"},"product_strength_percent":{"anyOf":[{"exclusiveMinimum":0,"maximum":100,"type":"number"},{"type":"null"}],"default":null,"title":"Product Strength Percent"},"product_concentration_basis":{"anyOf":[{"enum":["available_chlorine_trade_percent","available_chlorine_weight_percent","sodium_hypochlorite_weight_percent"],"type":"string"},{"type":"null"}],"default":null,"description":"Liquid chlorine only. Without property overrides, use the selected profile's basis and density. A strength-only override means trade percent; explicit weight bases require strength and density.","title":"Product Concentration Basis"},"product_density_g_ml":{"anyOf":[{"exclusiveMinimum":0,"maximum":3,"type":"number"},{"type":"null"}],"default":null,"title":"Product Density G Ml"},"total_alkalinity_ppm":{"anyOf":[{"maximum":1000,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Total Alkalinity Ppm"},"cyanuric_acid_ppm":{"anyOf":[{"maximum":1000,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Cyanuric Acid Ppm"},"borates_ppm_as_boron":{"anyOf":[{"maximum":1000,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Borates Ppm As Boron"},"free_chlorine_ppm":{"anyOf":[{"maximum":100,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Free Chlorine Ppm"},"temperature_f":{"anyOf":[{"maximum":140,"minimum":32,"type":"number"},{"type":"null"}],"default":null,"title":"Temperature F"},"tds_ppm":{"anyOf":[{"exclusiveMinimum":0,"maximum":20000,"type":"number"},{"type":"null"}],"default":null,"title":"Tds Ppm"}},"required":["chemical","volume_gallons","current","target"],"title":"DoseRequest","type":"object"}},{"name":"calculate_lsi","title":"Calculate Langelier Saturation Index","description":"Calculate LSI with the canonical BlueLux model and return only its public inputs, normalized values, assumptions, classification, and sources.","inputSchema":{"additionalProperties":false,"properties":{"ph":{"maximum":14,"minimum":0,"title":"Ph","type":"number"},"total_alkalinity_ppm":{"exclusiveMinimum":0,"maximum":1000,"title":"Total Alkalinity Ppm","type":"number"},"calcium_hardness_ppm":{"exclusiveMinimum":0,"maximum":10000,"title":"Calcium Hardness Ppm","type":"number"},"temperature_f":{"anyOf":[{"maximum":140,"minimum":32,"type":"number"},{"type":"null"}],"default":null,"title":"Temperature F"},"tds_ppm":{"anyOf":[{"exclusiveMinimum":0,"maximum":100000,"type":"number"},{"type":"null"}],"default":null,"title":"Tds Ppm"},"cyanuric_acid_ppm":{"anyOf":[{"maximum":1000,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Cyanuric Acid Ppm"},"calculation_profile":{"default":"bluelux_equilibrium_v1","enum":["bluelux_equilibrium_v1","phta_2024_table_v1"],"title":"Calculation Profile","type":"string"}},"required":["ph","total_alkalinity_ppm","calcium_hardness_ppm"],"title":"LsiRequest","type":"object"}},{"name":"list_product_profiles","title":"List public chemistry product profiles","description":"Return the reviewed, public-listed product-profile registry from the canonical BlueLux API. Internal catalog previews and tenant inventory are excluded.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}}},{"name":"get_product_profile","title":"Get a public chemistry product profile","description":"Return one public-listed versioned chemistry product profile from the canonical BlueLux API.","inputSchema":{"type":"object","additionalProperties":false,"required":["profile_id"],"properties":{"profile_id":{"type":"string","minLength":1,"maxLength":120}}}},{"name":"get_metals_protocol","title":"Get metals treatment protocol","description":"Return the diagnostic and treatment sequence for suspected iron, copper, manganese, stains, or colored water.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"symptom":{"type":"string"},"confirmed_metal":{"type":"string","enum":["iron","copper","manganese","unknown"]}}}},{"name":"get_nutrient_thresholds","title":"Interpret phosphate and nitrate","description":"Interpret phosphate and nitrate readings without presenting them as universal public-health limits.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"phosphate_ppb":{"type":"number"},"nitrate_ppm":{"type":"number"}}}},{"name":"diagnose_filter_circulation","title":"Diagnose filter and circulation","description":"Return deterministic diagnostic steps from flow, prime, current pressure, and clean-filter baseline.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"filter_pressure_psi":{"type":"number"},"baseline_pressure_psi":{"type":"number"},"visible_flow":{"type":"string","enum":["normal","low","none","surging"]},"pump_primed":{"type":"boolean"}}}},{"name":"get_seasonal_checklist","title":"Get startup or shutdown checklist","description":"Return an ordered pool startup or shutdown checklist for residential or public facilities.","inputSchema":{"type":"object","additionalProperties":false,"required":["action"],"properties":{"action":{"type":"string","enum":["startup","shutdown"]},"facility_type":{"type":"string","enum":["residential","public"]}}}},{"name":"search_playbook","title":"Search the BlueLux Playbook","description":"Search the BlueLux Playbook and return ranked passages with entry IDs, versions, sources, and canonical URLs.","inputSchema":{"type":"object","additionalProperties":false,"required":["query"],"properties":{"query":{"type":"string","minLength":2,"maxLength":500},"limit":{"type":"integer","minimum":1,"maximum":8}}}},{"name":"plan_pool_treatment","title":"Plan pool treatment","description":"Plan maintenance from supplied readings through the shared BlueLux planner. Omit policy_profile for the documented context default, or select its exact profile_id and version. Resubmit complete inputs for corrections. Preserve notice, units, holds, warnings and projections; guidance is advisory, never swimming-safety certification.","inputSchema":{"$defs":{"CustomProduct":{"additionalProperties":false,"properties":{"strength_percent":{"exclusiveMinimum":0,"maximum":100,"title":"Strength Percent","type":"number"},"concentration_basis":{"maxLength":80,"minLength":1,"title":"Concentration Basis","type":"string"},"density_g_ml":{"anyOf":[{"exclusiveMinimum":0,"maximum":3,"type":"number"},{"type":"null"}],"default":null,"title":"Density G Ml"}},"required":["strength_percent","concentration_basis"],"title":"CustomProduct","type":"object"},"FacilityContext":{"additionalProperties":false,"allOf":[{"if":{"properties":{"sanitizer":{"const":"chlorine"}},"required":["sanitizer"]},"then":{"properties":{"sanitizer_system":{"not":{"const":"bromine"}}}}},{"if":{"properties":{"sanitizer":{"const":"bromine"}},"required":["sanitizer"]},"then":{"properties":{"sanitizer_system":{"not":{"enum":["liquid_chlorine","salt_generator","trichlor","dichlor"]}}}}}],"properties":{"use_type":{"anyOf":[{"enum":["residential","commercial"],"type":"string"},{"type":"null"}],"default":null,"title":"Use Type"},"water_body_type":{"anyOf":[{"enum":["pool","spa","wading_pool","spray_ground"],"type":"string"},{"type":"null"}],"default":null,"title":"Water Body Type"},"facility_type":{"anyOf":[{"enum":["private_residential","hoa_apartment","hotel","gym_club","municipal","school","therapy","splash_pad","other"],"type":"string"},{"type":"null"}],"default":null,"title":"Facility Type"},"environment":{"anyOf":[{"enum":["indoor","outdoor"],"type":"string"},{"type":"null"}],"default":null,"title":"Environment"},"feed_method":{"anyOf":[{"enum":["manual","automatic","mixed"],"type":"string"},{"type":"null"}],"default":null,"title":"Feed Method"},"sanitizer_system":{"anyOf":[{"enum":["liquid_chlorine","salt_generator","trichlor","dichlor","bromine","mixed"],"type":"string"},{"type":"null"}],"default":null,"title":"Sanitizer System"},"sanitizer":{"anyOf":[{"enum":["chlorine","bromine"],"type":"string"},{"type":"null"}],"default":null,"title":"Sanitizer"},"jurisdiction":{"anyOf":[{"maxLength":120,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Jurisdiction"},"operating_profile_id":{"anyOf":[{"maxLength":120,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Operating Profile Id"}},"title":"FacilityContext","type":"object"},"PolicySelection":{"additionalProperties":false,"properties":{"profile_id":{"maxLength":120,"minLength":1,"title":"Profile Id","type":"string"},"version":{"maxLength":40,"minLength":1,"title":"Version","type":"string"}},"required":["profile_id","version"],"title":"PolicySelection","type":"object"}},"additionalProperties":false,"properties":{"policy_profile":{"$ref":"#/$defs/PolicySelection"},"custom_products":{"additionalProperties":{"$ref":"#/$defs/CustomProduct"},"propertyNames":{"enum":["liquid_chlorine","muriatic_acid","sodium_bicarbonate","calcium_chloride","cyanuric_acid","pool_salt","soda_ash"]},"title":"Custom Products","type":"object"},"volume_gallons":{"anyOf":[{"maximum":2000000,"minimum":100,"type":"integer"},{"type":"null"}],"default":null,"title":"Volume Gallons"},"ph":{"anyOf":[{"maximum":14,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Ph"},"free_chlorine":{"anyOf":[{"maximum":100,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Free Chlorine"},"total_chlorine":{"anyOf":[{"maximum":100,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Total Chlorine"},"total_alkalinity":{"anyOf":[{"maximum":1000,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Total Alkalinity"},"cyanuric_acid":{"anyOf":[{"maximum":1000,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Cyanuric Acid"},"calcium_hardness":{"anyOf":[{"maximum":10000,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Calcium Hardness"},"salt":{"anyOf":[{"maximum":10000,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Salt"},"tds":{"anyOf":[{"maximum":20000,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Tds"},"temperature":{"anyOf":[{"maximum":140,"minimum":32,"type":"number"},{"type":"null"}],"default":null,"title":"Temperature"},"algae":{"anyOf":[{"enum":["none","some","heavy"],"type":"string"},{"type":"null"}],"default":null,"title":"Algae"},"scale":{"anyOf":[{"enum":["none","some","heavy"],"type":"string"},{"type":"null"}],"default":null,"title":"Scale"},"water_clarity":{"anyOf":[{"enum":["clear","cloudy","green"],"type":"string"},{"type":"null"}],"default":null,"title":"Water Clarity"},"organic_load":{"anyOf":[{"enum":["low","medium","high"],"type":"string"},{"type":"null"}],"default":null,"title":"Organic Load"},"leaf_load":{"anyOf":[{"enum":["unknown","low","medium","high"],"type":"string"},{"type":"null"}],"default":null,"title":"Leaf Load"},"algae_history":{"anyOf":[{"enum":["none","recent","recurring"],"type":"string"},{"type":"null"}],"default":null,"title":"Algae History"},"algae_prone":{"anyOf":[{"enum":["unknown","none","recent","recurring"],"type":"string"},{"type":"null"}],"default":null,"title":"Algae Prone"},"sun_exposure":{"anyOf":[{"enum":["unknown","full_sun","mixed","heavy_shade"],"type":"string"},{"type":"null"}],"default":null,"title":"Sun Exposure"},"circulation":{"anyOf":[{"enum":["unknown","good","poor"],"type":"string"},{"type":"null"}],"default":null,"title":"Circulation"},"circulation_risk":{"anyOf":[{"enum":["unknown","good","watch","poor"],"type":"string"},{"type":"null"}],"default":null,"title":"Circulation Risk"},"salt_cell_status":{"anyOf":[{"enum":["unknown","ok","needs_maintenance","offline"],"type":"string"},{"type":"null"}],"default":null,"title":"Salt Cell Status"},"tablet_status":{"anyOf":[{"enum":["unknown","empty","low","adequate"],"type":"string"},{"type":"null"}],"default":null,"title":"Tablet Status"},"context":{"anyOf":[{"$ref":"#/$defs/FacilityContext"},{"type":"null"}],"default":null},"reading_source":{"anyOf":[{"enum":["digital","taylor_kit","strip","unknown"],"type":"string"},{"type":"null"}],"default":null,"title":"Reading Source"},"confirmed_readings":{"anyOf":[{"items":{"enum":["ph","free_chlorine","total_chlorine","total_alkalinity","cyanuric_acid","calcium_hardness","salt","temperature","tds"],"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Confirmed Readings"},"product_profile_ids":{"anyOf":[{"additionalProperties":{"type":"string"},"propertyNames":{"enum":["liquid_chlorine","muriatic_acid","sodium_bicarbonate","calcium_chloride","cyanuric_acid","pool_salt","soda_ash"]},"type":"object"},{"type":"null"}],"default":null,"title":"Product Profile Ids"},"reading_times":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"description":"Measurement ISO date/time per field; explicit null means date unknown. Chat stamps newly submitted readings as just taken unless the technician supplies another date. Preserve stored dates on reuse.","propertyNames":{"enum":["ph","free_chlorine","total_chlorine","total_alkalinity","cyanuric_acid","calcium_hardness","salt","temperature","tds"]},"title":"Reading Times","type":"object"},"reading_origins":{"additionalProperties":{"enum":["provided","history","image","unknown"],"type":"string"},"propertyNames":{"enum":["ph","free_chlorine","total_chlorine","total_alkalinity","cyanuric_acid","calcium_hardness","salt","temperature","tds"]},"title":"Reading Origins","type":"object"}},"title":"PlanRequest","type":"object"}},{"name":"list_policy_profiles","title":"List treatment policy profiles","description":"Discover public policy identities, supported scope, available/default versions and material changes. Private policy implementation is excluded. Product facts use the existing product-profile tools.","inputSchema":{"type":"object","additionalProperties":false,"properties":{}}},{"name":"get_policy_profile","title":"Get an exact treatment policy profile","description":"Get a policy by exact profile_id and version. Unknown, unsupported and withdrawn selections never fall back.","inputSchema":{"type":"object","additionalProperties":false,"required":["profile_id","version"],"properties":{"profile_id":{"type":"string","minLength":1,"maxLength":120},"version":{"type":"string","minLength":1,"maxLength":40}}}}]}