WaterTAP Engine MCP

WaterTAP Engine MCP

A water treatment process simulation engine that exposes WaterTAP capabilities through MCP and CLI adapters, enabling AI agents to build, solve, and optimize flowsheets using natural language.

Category
访问服务器

README

WaterTAP Engine MCP

⚠️ 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.

A water treatment process simulation engine exposing WaterTAP capabilities through dual adapters for AI agent integration.

Motivation

WaterTAP provides sophisticated equation-oriented models for water treatment processes (RO, NF, crystallizers, evaporators, biological treatment), but the modeling workflow requires substantial domain expertise: DOF management, proper scaling, sequential initialization, and solver diagnostics.

WaterTAP Engine MCP inverts this paradigm by making natural language the primary interface. Instead of manually managing DOF, scaling, and initialization, engineers can work with a companion skill that orchestrates these operations:

"Evaluate hardness removal (IX or lime/soda softening) upstream of RO in this ZLD flowsheet: compare regenerant and chemical costs against natural gas savings from reduced evaporator thermal load, and calculate the IRR on incremental pre-treatment CAPEX."

This enables:

  • Collapsed iteration cycles: Build -> solve -> diagnose -> patch -> re-solve without manual DOF tracking
  • Explicit hygiene operations: Every fix, scale, and init is visible and controllable
  • Structured diagnostics: DOF suggestions, scaling issues, and failure explanations surfaced directly to agents
  • Reproducible sessions: Version-controlled flowsheet definitions with deterministic metadata

The goal is not to replace domain expertise, but to remove friction so engineers can focus on design decisions rather than solver mechanics.

WaterTAP vs QSDsan: Solver Paradigms

This server is a sibling to qsdsan-engine-mcp but uses a fundamentally different solver approach:

Aspect WaterTAP (This Server) QSDsan
Solver Type Equation-oriented NLP (IPOPT) ODE integration (solve_ivp)
Modeling Framework Pyomo + IDAES BioSTEAM
Simulation Mode Steady-state algebraic Dynamic ODE time-stepping
Simulation Speed ~seconds to minutes per solve ~milliseconds to seconds per run
Optimization Native gradient-based (pyomo.environ.SolverFactory) Requires external optimizer
DOF Management Explicit - requires DOF=0 before solve Implicit - feed-forward sequential
Scaling Critical for convergence Not required
Sensitivities Automatic via NLP solver Finite-difference approximation

Steady-State vs Dynamic Simulation

WaterTAP (Equation-Oriented, Steady-State)

  • Solves a system of nonlinear algebraic equations: F(x) = 0
  • All variables solved simultaneously to find steady-state directly
  • Requires DOF = 0 (number of equations = number of unknowns)
  • Ideal for design optimization: "What membrane area minimizes LCOW?"
  • Supports native sensitivity analysis and gradient-based optimization
  • Slower per solve but faster for optimization (exact gradients)

QSDsan (ODE Integration, Dynamic)

  • Integrates differential equations forward in time: dx/dt = f(x,t)
  • Simulates transient behavior from t=0 to t=T
  • Variables update sequentially; no DOF constraint
  • Ideal for dynamic behavior: "How does effluent quality change during startup?"
  • Supports Monte Carlo sampling and scenario enumeration (fast per run)
  • Faster per run but requires many runs for optimization (finite-difference)

When to Use WaterTAP

  • Membrane process optimization: RO/NF with detailed concentration polarization, fouling models
  • Gradient-based optimization: Minimize LCOW, maximize recovery, optimal pressure
  • Rigorous thermodynamics: Multi-component phase equilibria, crystallization
  • Design decisions: Optimal membrane area, stage configuration, pressure setpoints
  • Sensitivity analysis: How does recovery change with feed salinity?

When to Use QSDsan

  • Biological treatment dynamics: Activated sludge transients, digester startup/upset
  • Rapid scenario enumeration: Monte Carlo uncertainty quantification, DOE
  • Time-series analysis: Diurnal patterns, storm events, process disturbances
  • Simpler mass balances: When steady-state is sufficient but dynamics are informative
  • Training simulators: Interactive "what-if" exploration with fast feedback

Architecture: Dual Adapters

The engine exposes identical functionality through two adapters:

                    +-------------------------------------+
                    |       WaterTAP Engine Core          |
                    |  (Registries, Pipeline, Sessions)   |
                    +-----------------+-------------------+
                                      |
              +-----------------------+---------------------+
              |                       |                     |
              v                       v                     v
     +----------------+      +----------------+     +----------------+
     |   MCP Adapter  |      |   CLI Adapter  |     |  Python API    |
     |   (server.py)  |      |   (cli.py)     |     |  (direct use)  |
     +----------------+      +----------------+     +----------------+
              |                       |
              v                       v
     +----------------+      +----------------+
     |  MCP Clients   |      |  Agent Skills  |
     |  (Claude, etc) |      |  (Claude Code) |
     +----------------+      +----------------+

MCP Adapter (server.py)

For MCP-compatible clients (Claude Desktop, Cline, etc.):

python server.py

CLI Adapter (cli.py)

For CLI-based agent runtimes and Agent Skills:

python cli.py --help

Tool Surface

Session Management Tools

Tool MCP CLI Description
create_session create_session session new Create new flowsheet session
get_session get_session session show Get session details
list_sessions list_sessions session list List all sessions
delete_session delete_session session delete Remove session

Registry & Discovery Tools

Tool MCP CLI Description
list_units list_units units list List available unit types
list_property_packages list_property_packages packages list List property packages
list_translators list_translators translators list List ASM/ADM translators
get_unit_spec get_unit_spec units spec Get DOF, scaling, init hints

Flowsheet Construction Tools

Tool MCP CLI Description
create_feed create_feed flowsheet add-feed Add feed with state
create_unit create_unit flowsheet add-unit Add unit operation
create_translator create_translator flowsheet add-translator Add ASM/ADM translator
connect_ports connect_ports flowsheet connect Wire units together
update_unit update_unit flowsheet update-unit Modify unit parameters
delete_unit delete_unit flowsheet delete-unit Remove unit
validate_flowsheet validate_flowsheet flowsheet validate Pre-build validation

DOF Management Tools

Tool MCP CLI Description
get_dof_status get_dof_status dof status Get DOF count per unit
fix_variable fix_variable dof fix Fix variable to value
unfix_variable unfix_variable dof unfix Release variable
list_unfixed_vars list_unfixed_vars dof unfixed Show unfixed variables

Scaling Tools

Tool MCP CLI Description
set_scaling_factor set_scaling_factor scale set Set explicit scaling
calculate_scaling_factors calculate_scaling_factors scale calculate Run IDAES scaling
report_scaling_issues report_scaling_issues scale report Find scaling problems

Solver Operations Tools

Tool MCP CLI Description
initialize_unit initialize_unit init unit Initialize single unit
initialize_flowsheet initialize_flowsheet init flowsheet Sequential initialization
propagate_state propagate_state init propagate State between ports
build_and_solve build_and_solve solve Full hygiene pipeline
get_solve_status get_solve_status status Job status
run_diagnostics run_diagnostics diagnose DiagnosticsToolbox

Zero-Order Tools

Tool MCP CLI Description
load_zo_parameters load_zo_parameters zo load Load from database
list_zo_databases list_zo_databases zo databases Available databases
get_zo_unit_parameters get_zo_unit_parameters zo params Unit parameters

Costing Tools

Tool MCP CLI Description
enable_costing enable_costing costing enable Enable costing block
add_unit_costing add_unit_costing costing add-unit Enable costing for unit
disable_unit_costing disable_unit_costing costing disable-unit Disable unit costing
set_costing_parameters set_costing_parameters costing set-params Set cost parameters
list_costed_units list_costed_units costing list Show costing status
compute_costing compute_costing costing compute Calculate LCOW, CapEx, OpEx
get_costing get_costing costing results Get costing results

Results Tools

Tool MCP CLI Description
get_results get_results results Overall solve results
get_stream_results get_stream_results results streams Stream tables
get_unit_results get_unit_results results units Unit performance

Property Packages

13 supported property packages:

Package Components Use Case
SEAWATER H2O + TDS Seawater RO/NF, mass basis
NACL H2O + NaCl Brackish RO, mass basis
NACL_T_DEP H2O + NaCl Temperature-dependent thermal
WATER H2O Pure water, Liq + Vap
MCAS Multi-ion Ion-specific NF, molar basis
ZERO_ORDER Database-driven Simple ZO models
ASM1 13 Activated sludge (basic)
ASM2D 19 Activated sludge with bio-P
ASM3 - Activated sludge extended
MODIFIED_ASM2D - Modified ASM2d
ADM1 63 Anaerobic digestion
MODIFIED_ADM1 - Modified ADM1
ADM1_VAPOR - ADM1 vapor phase

Warning - Class-Name Collisions:

  • NaClParameterBlock exists in both NaCl_prop_pack.py AND NaCl_T_dep_prop_pack.py
  • WaterParameterBlock exists in both water_prop_pack.py AND zero_order_properties.py

Always use the full module path from the registry, not the class name alone.

Translators

Only ASM↔ADM translators exist in WaterTAP! The registry includes 8 translators:

Core Translators (4):

Source Destination Translator
ASM1 ADM1 Translator_ASM1_ADM1
ADM1 ASM1 Translator_ADM1_ASM1
ASM2D ADM1 Translator_ASM2d_ADM1
ADM1 ASM2D Translator_ADM1_ASM2d

Modified Model Translators (4):

Source Destination Translator
ModifiedASM2D ADM1 Translator_ModifiedASM2d_ADM1
ADM1 ModifiedASM2D Translator_ADM1_ModifiedASM2d
ASM2D ModifiedADM1 Translator_ASM2d_ModifiedADM1
ModifiedADM1 ASM2D Translator_ModifiedADM1_ASM2d

For non-biological flowsheets, use the same property package throughout.

Unit Registry

21+ unit operations available across categories:

  • Membrane: ReverseOsmosis0D, ReverseOsmosis1D, Nanofiltration0D, NanofiltrationDSPMDE0D
  • Zero-Order: NanofiltrationZO, UltraFiltrationZO, PumpZO, FeedZO
  • Thermal: Evaporator, Condenser, Compressor, Crystallization
  • Pumps/ERD: Pump, EnergyRecoveryDevice, PressureExchanger
  • Utilities: Feed, Product, Mixer, Separator (from IDAES)
  • Biological: (Use property package compatibility for ASM/ADM)
# List all units
python cli.py units list --json-out

# Filter by category
python cli.py units list --category membrane

Solver Hygiene Pipeline

The build_and_solve tool runs the full hygiene pipeline:

IDLE -> DOF_CHECK -> SCALING -> INITIALIZATION -> PRE_SOLVE_DIAGNOSTICS -> SOLVING
                                                                              |
COMPLETED <-- POST_SOLVE_DIAGNOSTICS <----------------------------------------+
    ^              | (if failed)                                              |
    +------- RELAXED_SOLVE ---------------------------------------------------+
                   | (if still fails)
                FAILED

Each stage provides structured output for diagnosis:

  • DOF_CHECK: Underspecified/overspecified analysis with suggestions
  • SCALING: Unscaled variables and constraint warnings
  • INITIALIZATION: Per-unit init status and DOF after init
  • DIAGNOSTICS: Constraint residuals, bound violations

Quick Start

Using CLI

# Create session
python cli.py session new --property-package SEAWATER --id my_ro

# Add feed and units
python cli.py flowsheet add-feed --session my_ro --flow 100 \
  --tds 35000 --temp 25 --pressure 1.01

python cli.py flowsheet add-unit --session my_ro --type ReverseOsmosis0D \
  --id RO1 --config '{"has_pressure_change": true}'

# Fix DOF
python cli.py dof fix --session my_ro --unit RO1 --var "A_comp[0, H2O]" --value 4.2e-12
python cli.py dof fix --session my_ro --unit RO1 --var "B_comp[0, TDS]" --value 3.5e-8
python cli.py dof fix --session my_ro --unit RO1 --var area --value 50
python cli.py dof fix --session my_ro --unit RO1 --var "permeate.pressure[0]" --value 101325

# Check DOF
python cli.py dof status --session my_ro

# Solve
python cli.py solve --session my_ro --run-full-pipeline

Using MCP

Configure in your MCP client (e.g., Claude Desktop config.json):

{
  "mcpServers": {
    "watertap-engine": {
      "command": "python",
      "args": ["/path/to/watertap-engine-mcp/server.py"]
    }
  }
}

Then use natural language with the companion skill:

"Evaluate hardness removal upstream of RO in this ZLD flowsheet and calculate the IRR on incremental pre-treatment CAPEX based on reduced evaporator thermal load."

Installation

# Clone repository
git clone https://github.com/puran-water/watertap-engine-mcp.git
cd watertap-engine-mcp

# Create virtual environment
python -m venv venv
source venv/bin/activate  # or venv\Scripts\activate on Windows

# Install dependencies
pip install -r requirements.txt

# For full WaterTAP support (optional, for solve operations):
pip install watertap idaes-pse pyomo

Dependencies

  • Python 3.10+
  • WaterTAP 1.0+ (optional, for solve)
  • IDAES-PSE 2.0+ (optional, for solve)
  • FastMCP (for MCP adapter)
  • Typer (for CLI adapter)

File Structure

watertap-engine-mcp/
├── server.py              # MCP Adapter (FastMCP) - 57 tools
├── cli.py                 # CLI Adapter (typer)
├── worker.py              # Background job worker
├── core/
│   ├── property_registry.py    # 13 property packages
│   ├── translator_registry.py  # ASM/ADM translators
│   ├── unit_registry.py        # Unit specs with DOF, scaling
│   ├── water_state.py          # Feed state abstraction
│   └── session.py              # Session management
├── solver/
│   ├── pipeline.py             # Hygiene pipeline state machine
│   ├── dof_resolver.py         # DOF analysis
│   ├── scaler.py               # Scaling tools
│   ├── initializer.py          # Sequential initialization
│   ├── diagnostics.py          # DiagnosticsToolbox wrapper
│   └── recovery.py             # Failure recovery
├── utils/
│   ├── model_builder.py        # Session -> Pyomo model
│   ├── auto_translator.py      # Translator insertion
│   ├── job_manager.py          # Background jobs
│   ├── state_translator.py     # Feed state conversion
│   └── topo_sort.py            # Topological sort
├── templates/                  # Pre-built flowsheet templates
│   ├── ro_train.py
│   ├── nf_softening.py
│   └── mvc_crystallizer.py
├── jobs/                       # Session/job persistence (runtime)
└── tests/                      # 373 tests

Companion Skill

The watertap-flowsheet-builder skill (at ~/skills/watertap-skill/) provides domain intelligence:

  • DOF suggestions with typical values for each unit type
  • Property package selection guidance
  • Translator selection for biological chains
  • Failure diagnosis patterns
  • Workflow orchestration for common flowsheets

The skill orchestrates the atomic server tools - server provides explicit operations, skill provides intelligence.

Testing

# Run all tests
pytest tests/ -v

# Skip slow tests
pytest tests/ -v -m "not slow"

License

MIT

Acknowledgments

Built on WaterTAP by the National Alliance for Water Innovation (NAWI).

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选