A headless, natural-language-driven, automated modelling workflow for HEC-RAS. Skills + an MCP server for Claude Code, Codex, Hermes, or OpenClaw: describe a goal in plain language and the agent inspects, edits, runs, reads, compares and plots a HEC-RAS model — 1D, 2D or 1D/2D — without ever opening the GUI.
Experimental / pre-release. One MCP server (10 tools) + 5 skills, a thin layer over ras-commander (MIT) and h5py. Verified end to end on HEC's official Muncie 2D example with HEC-RAS 7.0.1. Sibling of agentic-swmm-workflow (urban drainage) and Agentic-MIKE-Plus (MIKE+): together they cover sewer network → river / 2D flood hydraulics under one agentic pattern.
Paste this to your AI coding agent (Claude Code, Codex, Hermes, OpenClaw):
Install "Agentic HEC-RAS" for me: an MCP server + skills to drive HEC-RAS headless.
1. Clone https://github.com/Zhonghao1995/Agentic-HEC-RAS and skim its README.
2. With Python 3.10+:
python -m venv .venv
.venv\Scripts\python.exe -m pip install -e .
3. Register with me (Claude Code):
claude mcp add hec-ras -- "<abs-repo>\.venv\Scripts\python.exe" -m hecras_mcp.server
(Codex / Hermes / OpenClaw: copy config/mcp.sample.json)
4. Copy skills/* into ~/.claude/skills/, then run scripts/smoke_test.py (should list 10 tools).
5. Tell me which tools need HEC-RAS installed (only ras_run does) and where Ras.exe was found
(set HECRAS_EXE if it was not).
Two install profiles:
- Read / compare / plot / edit files. Cross-platform, no HEC-RAS:
pip install -e .— everything exceptras_runworks on any machine that has the.p##.hdfresults (or the project text files). - Run too. Windows + HEC-RAS 6.x / 7.0.1
installed (free download, no license).
Ras.exeis auto-detected in the default install folder, or setHECRAS_EXE.
- Natural-language-driven. "Run the 2D plan with 20 % more inflow and tell me how much the downstream stage rises" — the agent copies the project, edits the
.u##, runsRas.exe -c, reads the HDF, compares, plots, and writes a manifest. - Fully headless. No GUI, no COM controller: HEC-RAS's own command line (
Ras.exe -c project.prj plan.p##) inside a copied project folder. - MCP-native and portable. One server speaks the Model Context Protocol; works with Claude Code, Codex, Hermes or OpenClaw via a single config line.
- HEC-RAS optional for reading. Results (
.p##.hdf), comparison and figures need only Python — teammates without HEC-RAS can still analyse. - Verification-first.
ras_runreturns a QAstatus(max WSEL error, volume error %, ERROR / WARNING lines) the skills must gate on; every case ends with a sha256 manifest. - Small and testable. Pure-Python contracts (boundary-table rewriting, QA classification, comparison, manifest) with a HEC-RAS-free unit-test suite in CI; add a tool or skill by dropping in a file.
Skills (markdown playbooks) tell the agent when and how; the agent calls MCP tools; the tools call
ras-commander (project parsing, .p## edits, Ras.exe -c) and h5py (results). The server never imports
HEC-RAS itself, so it starts anywhere.
agent -> reads skills/ras-*/SKILL.md -> calls MCP tools -> ras-commander / h5py -> Ras.exe -c / .p##.hdf
| Tool | Does | HEC-RAS |
|---|---|---|
ras_project_info |
plans (title, g##/u##, sim window, intervals, cores, results present?), geometries, flow files, boundary conditions (river/reach/RS or 2D BC line, kind, interval, n, peak) | no |
ras_project_copy |
copy the whole project folder (terrain / DSS refs stay valid) before any edit or run | no |
ras_plan_set |
simulation window, computation / output / mapping interval, cores, short id, title, description, geometry, flow file | no |
ras_flow_set_hydrograph |
replace or scale one boundary table (flow / stage / lateral / precipitation / gate), set QMult, change interval | no |
ras_run |
Ras.exe -c headless run + QA: status, max WSEL error, volume error %, log tail, runtime, HDF path |
yes |
ras_results_summary |
run QA, volume accounting, cross-section peaks, 2D wet cells / max depth, reference lines, units | no |
ras_results_timeseries |
one series (cross section, reference line / point, boundary, 2D cell) with peak and timing | no |
ras_results_compare |
baseline vs scenario: delta peak / timing / RMSE / NSE / volume, or every cross section ranked by change | no |
ras_plot |
hydrograph overlay, max-WSE profile, 2D max-depth map (PNG) | no |
ras_manifest_write |
provenance manifest: project, plan, inputs, results, figures with sha256, run QA, edits, tool calls | no |
Five skills orchestrate them: ras-end-to-end (the SOP: modes, run directory, hard rules, stop rules, QA gates),
ras-model, ras-runner, ras-results, ras-audit.
Install the skills into any skills-aware agent (Claude Code, Codex, OpenCode, …) in one command, no clone needed:
npx skills add Zhonghao1995/Agentic-HEC-RAS # all 5; add --list to preview, or --skill <name> for oneBaseline vs +20 % upstream inflow, entirely through the tools (scripts/e2e_muncie.py): two 24-hour 1D/2D
runs of ~65 s each on 4 cores, downstream peak flow 21,000 → 25,200 cfs (+20.0 %), downstream max stage
938.7 → 940.7 ft (+2.0 ft), 2D area 4,905 → 4,997 wet cells, max depth 20.3 → 20.4 ft.
Full evidence (commands, tool returns, and the honest scope boundary) is in docs/verification.md.
- Operates on existing HEC-RAS projects: inspect, edit boundaries / plan settings, run, read, compare, plot, audit.
- Building a new model (terrain, 2D mesh, cross sections, infiltration layers, structures) still needs RAS Mapper / the GUI.
- Runs need Windows + HEC-RAS. HEC-RAS 7.0.1 ships Linux compute engines (
RasUnsteady, run via WSL) but they need Windows-side preprocessing; they are not wired intoras_runyet. - HEC-RAS may show its Terms and Conditions for Use form on headless launches;
ras_runaccepts it for you (accept_tcu, default true — read the terms at hec.usace.army.mil/software/hec-ras) and kills runs aftertimeout_s. - Gridded (DSS) precipitation and steady-flow (
.f##) profiles are read but not edited.
pip install -e ".[dev]"
pytest # ~3 s, no HEC-RAS needed
python scripts/smoke_test.py # tool discovery + real stdio MCP round-trip
python scripts/call_tool.py --list
python scripts/call_tool.py ras_results_summary "{\"hdf\": \"C:/models/Muncie/Muncie.p03.hdf\"}"The tests pin the .u## boundary-table writer (fixed-width, touching fields, count line, CRLF), the QA
classifier, the comparison metrics, the manifest, tool discovery and the server's failure shape. Add a tool
or skill by dropping a file under hecras_mcp/tools/ or skills/ (auto-discovered), and ship a test with it.
MIT © 2026 Zhonghao Zhang, University of Victoria. Built on ras-commander (MIT), h5py, pandas, matplotlib and the Model Context Protocol. HEC-RAS is developed and distributed free of charge by the U.S. Army Corps of Engineers Hydrologic Engineering Center; it is not open source and is not redistributed here.


