Water Chemistry MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Water Chemistry MCP ServerCalculate lime dose for softening to 80 mg/L hardness"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Water Chemistry MCP Server
Advanced water chemistry modeling MCP server powered by PHREEQC, designed for industrial wastewater treatment applications. This server provides sophisticated chemical equilibrium and kinetic modeling capabilities through a modern Model Context Protocol (MCP) interface.
⚠️ DEVELOPMENT STATUS: This project is under active development and is not yet production-ready. APIs, interfaces, and functionality may change without notice. Use at your own risk for evaluation and testing purposes only. Not recommended for production deployments.
Features
17 Registered MCP Tools
Core Analysis Tools (5)
calculate_solution_speciation - Complete water quality analysis including pH, ionic strength, saturation indices
simulate_chemical_addition - Treatment simulation with precipitation modeling
simulate_solution_mixing - Stream blending analysis with precipitation
predict_scaling_potential - Mineral scaling risk assessment
batch_process_scenarios - Parallel scenario processing and optimization
Advanced PHREEQC Tools (6)
calculate_dosing_requirement - Binary search for target pH/hardness/SI
query_thermodynamic_database - Query minerals, elements, species from databases
simulate_kinetic_reaction - Time-dependent reaction modeling
simulate_gas_phase_interaction - Gas-water equilibration (CO2 stripping, O2 transfer)
simulate_redox_adjustment - pe/Eh/redox couple adjustment
simulate_surface_interaction - Surface complexation modeling
Optimization Tools (5)
generate_lime_softening_curve - Complete dose-response curves in single call
calculate_lime_softening_dose - Optimal lime dose for target hardness
calculate_dosing_requirement_enhanced - Multi-objective dosing optimization
optimize_multi_reagent_treatment - Multi-reagent with 4 strategies (weighted_sum, pareto_front, sequential, robust)
calculate_phosphorus_removal_dose - Unified P removal with 4 strategies (iron, aluminum, struvite, calcium phosphate)
Diagnostics (1)
get_engine_status - Engine health check and database availability
Phosphorus Removal Strategies
The unified calculate_phosphorus_removal_dose tool supports multiple coagulant/precipitation strategies:
Strategy | Reagents | Mechanism | Typical Metal:P |
| FeCl3, FeSO4, FeCl2 | HFO adsorption + Strengite/Vivianite | 2.0-3.5 |
| AlCl3, Al2(SO4)3 | HAO adsorption + Variscite | 2.5-4.0 |
| MgCl2, MgO, Mg(OH)2 | Struvite crystallization | 1.0 (stoich) |
| Ca(OH)2, CaCl2 | Brushite/HAP precipitation | 1.5-2.0 |
Features:
Inline PHREEQC blocks for phases not in standard databases (Struvite, Variscite, HAO surface)
SI triggers for metastability control (slow-precipitation phases)
Sulfide sensitivity sweep for anaerobic iron (runs [0, 20, 50, 100] mg/L scenarios)
HFO/HAO surface complexation with phase-linked site scaling
Convergence tracking with
converged,target_met, andresidual_error_mg_lfieldsStatus semantics:
success,success_with_warning,infeasible,input_errorP partitioning outputs:
phase_moles_mmol_per_L,p_adsorbed_mg_L,p_dissolved_mg_LRedox diagnostics:
redox_control_variable,target_pO2_atmfor O2 equilibrium modeChemistry validations: Ca competition warning for struvite, alkalinity check for Ca-P
Advanced Capabilities
Multi-database Support: phreeqc.dat, minteq.dat, minteq.v4.dat, llnl.dat, wateq4f.dat, pitzer.dat
PHREEQC Subprocess Support: Optional standalone PHREEQC executable for extended compatibility
Cross-platform Compatibility: Linux, macOS, and WSL environments
Kinetic & Equilibrium Modeling: Both instantaneous and time-dependent processes
Multi-objective Optimization: Pareto front, weighted sum, sequential, and robust strategies
FAIL LOUDLY Error Handling: Typed exceptions instead of silent failures
Related MCP server: SWMM-MCP
Quick Start
Installation
git clone https://github.com/puran-water/water-chemistry-mcp.git
cd water-chemistry-mcp
pip install -r requirements.txtStart the Server
python server.pyExample Usage
# Lime softening simulation
from tools.chemical_addition import simulate_chemical_addition
input_data = {
"initial_solution": {
"units": "mmol/L",
"analysis": {
"Ca": 3.0,
"Mg": 1.6,
"Alkalinity": 3.3,
"Cl": 1.0
},
"database": "minteq.v4.dat",
"temperature_celsius": 25.0
},
"reactants": [{"formula": "Ca(OH)2", "amount": 5.0, "units": "mmol"}],
"allow_precipitation": True
}
result = await simulate_chemical_addition(input_data)Phosphorus Removal Example
# Iron coagulation for P removal
from tools.phosphorus_removal import calculate_phosphorus_removal_dose
input_data = {
"initial_solution": {
"ph": 7.0,
"analysis": {
"P": 5.0,
"Ca": 50,
"Mg": 10,
"Alkalinity": "as CaCO3 100"
},
"units": "mg/L"
},
"target_residual_p_mg_l": 0.5,
"strategy": {
"strategy": "iron",
"reagent": "FeCl3"
},
"database": "minteq.v4.dat"
}
result = await calculate_phosphorus_removal_dose(input_data)Optimization Example
# Multi-reagent optimization with Pareto front
from tools.optimization_tools import optimize_multi_reagent_treatment
input_data = {
"initial_water": {
"units": "mmol/L",
"analysis": {"Ca": 2.0, "Mg": 1.0, "Alkalinity": 2.5},
"pH": 7.0,
"database": "minteq.v4.dat"
},
"reagents": [
{"formula": "Ca(OH)2", "min_dose": 0.5, "max_dose": 5.0}
],
"objectives": [
{"parameter": "pH", "value": 10.5, "weight": 0.5},
{"parameter": "total_hardness", "value": 80, "weight": 0.5}
],
"optimization_strategy": "pareto_front",
"grid_points": 10
}
result = await optimize_multi_reagent_treatment(input_data)Scientific Integrity Features
PHREEQC-Only Results: All user-facing results use pure PHREEQC thermodynamic calculations
Comprehensive Mineral Lists: Default precipitation modeling includes full database minerals
Accurate TDS Calculations: Based on individual species concentrations
Smart Optimization Bounds: Stoichiometry provides efficient search ranges internally
FAIL LOUDLY: All errors raise typed exceptions (DosingConvergenceError, TermNotFoundError, etc.)
Database Support
Database | Purpose | Elements | Minerals |
minteq.v4.dat | Recommended for softening & P removal (has Brucite) | 50+ | 300+ |
minteq.dat | General purpose | 50+ | 300+ |
phreeqc.dat | Standard PHREEQC | 40+ | 200+ |
llnl.dat | Comprehensive elements | 80+ | 500+ |
wateq4f.dat | Natural waters | 60+ | 400+ |
Testing
# Run all tests
pytest
# With coverage
pytest --cov=tools --cov=utils --cov-report=html
# Specific test files
pytest tests/test_phosphorus_removal.py -vProject Structure
water-chemistry-mcp/
├── tools/ # MCP tools (17 total)
│ ├── solution_speciation.py # Water quality analysis
│ ├── chemical_addition.py # Chemical dosing
│ ├── solution_mixing.py # Stream blending
│ ├── scaling_potential.py # Scaling assessment
│ ├── batch_processing.py # Parallel processing
│ ├── dosing_requirement.py # Dosing optimization
│ ├── optimization_tools.py # Advanced optimization (4 tools)
│ ├── phosphorus_removal.py # Unified P removal (4 strategies)
│ ├── thermodynamic_database.py # Database queries
│ ├── kinetic_reaction.py # Kinetic modeling
│ ├── gas_phase.py # Gas-water equilibria
│ ├── redox_adjustment.py # Redox control
│ ├── surface_interaction.py # Surface complexation
│ ├── phreeqc/ # PHREEQC engine package
│ │ ├── backend.py # Subprocess execution + engine status
│ │ ├── parser.py # Output parsing
│ │ ├── simulation.py # Simulation orchestration
│ │ └── optimizer.py # Dosing optimization
│ ├── schemas.py # Core Pydantic schemas
│ └── schemas_ferric.py # P removal specific schemas
├── utils/ # Utility modules
│ ├── exceptions.py # Typed exceptions (FAIL LOUDLY)
│ ├── database_management.py # Database handling
│ ├── database_registry.py # Database path registry
│ ├── constants.py # Mineral mappings
│ ├── helpers.py # PHREEQC block builders
│ ├── ferric_phases.py # Fe/Al phase definitions
│ ├── inline_phases.py # Inline PHREEQC blocks (Struvite, Variscite, HAO)
│ ├── amorphous_phases.py # Amorphous phase handling
│ ├── convergence_strategies.py # Binary search strategies
│ └── import_helpers.py # PhreeqPython detection
├── tests/ # Test suite
├── server.py # MCP server entry point
└── CLAUDE.md # AI agent documentationConfiguration
Environment Variables
PHREEQC_EXECUTABLE=/usr/local/bin/phreeqc # Optional: standalone PHREEQC executable
USE_PHREEQC_SUBPROCESS=1 # Enable subprocess mode
WATER_CHEMISTRY_DEBUG=1 # Enable debug loggingMCP Client Configuration
For Claude Desktop:
{
"mcpServers": {
"water-chemistry": {
"command": "python",
"args": ["/path/to/water-chemistry-mcp/server.py"]
}
}
}Current Status
Server Version: 3.1
17 registered MCP tools
Unified phosphorus removal with 4 strategies (Fe/Al/Mg/Ca)
Inline PHREEQC blocks for Struvite, Variscite, HAO surface
NEW: Sulfide sensitivity sweep for anaerobic iron dosing
NEW: Convergence tracking and status semantics (
success_with_warning)NEW: P partitioning outputs (phase moles, adsorbed P, dissolved P)
NEW: Enhanced redox diagnostics with control variable and pO2 fields
FAIL LOUDLY error handling with typed exceptions
Optional PHREEQC subprocess execution
Multi-objective optimization with 4 strategies
Comprehensive test coverage (390+ tests)
Documentation
CLAUDE.md - AI agent system prompt with usage examples
tests/README.md - Testing documentation
Requirements
Python 3.9+
PhreeqPython 1.5.2+
PHREEQC databases (bundled with PhreeqPython or repo-local)
See requirements.txt for full dependencies
License
This project is licensed under the MIT License - see the LICENSE file for details.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceA specialized MCP server for Metal-Organic Framework research that provides tools for database searching, structural optimization, and energy calculations via ASE. It enables scientific workflows by allowing users to interact with MOF data and perform chemical simulations through a standard SSE interface.MIT
- AlicenseBqualityDmaintenanceAn MCP server that provides a toolbox for interacting with EPA SWMM stormwater models, enabling users to analyze model data and interpret results through LLM-driven tools. It assists stormwater modelers in understanding hydraulic systems and modeling behavior using natural language interfaces.186MIT
- Flicense-qualityFmaintenanceAn intelligent MCP server for the automated design and sizing of aerobic biological wastewater treatment systems using membrane bioreactor (MBR) technology. It leverages ASM2d kinetics to perform mass balance calculations, flowsheet selection, and generate detailed engineering reports.
- Alicense-qualityDmaintenanceA collection of MCP servers for chemical engineering and chemistry applications, enabling AI assistants to perform thermodynamic calculations, equation of state modeling, and phase equilibrium computations.MIT
Related MCP Connectors
Educational MCP server with 17 math/stats tools, visualizations, and persistent workspace
Hosted MCP endpoint with realistic fake data for prototyping agents. 12 tools, no setup.
Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/puran-water/water-chemistry-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server