hydrata avatar

Hydrata - ANUGA Flood Simulation

hydrata/hydrata-mcp-server

Connects Claude to Hydrata Cloud for running ANUGA hydrodynamic flood simulations and retrieving results. You get tools to list projects, configure scenarios, start simulations on local or AWS compute backends (EC2 or Batch), poll run status, and pull back completed results. The typical flow is list your projects, pick a scenario, kick off a simulation, poll status until complete, then fetch the full run with timing and output. ANUGA itself is an open source shallow water equation solver from Geoscience Australia that runs on unstructured triangular meshes. Requires a Hydrata account. Useful if you're doing hydraulic modeling or flood risk analysis and want to script simulation runs through conversation.

GitHub stars
1
tools
42
transport
HTTP
last updated
Nov 3, 2026

Tools

42 tools

Public tool metadata for what this MCP can expose to an agent.

list_projectsList ANUGA simulation projects (paginated)

List ANUGA simulation projects (paginated)

No parameter schema in public metadata yet.

get_projectGet one project — name, projection, visibility, your role, `base_map` — plus `ui_url`, the link that opens its map

Get one project — name, projection, visibility, your role, `base_map` — plus `ui_url`, the link that opens its map

No parameter schema in public metadata yet.

get_scenarioGet a scenario's compact state — `computed_status`, its inputs (terrain, boundary, friction, inflow, rainfall, building, mesh region, culvert, resolution, duration), the mesh-triangle estimate + breakdown, the price (`compute_cost_estimate`, `vcpu_hours_estimate`) and the late...

Get a scenario's compact state — `computed_status`, its inputs (terrain, boundary, friction, inflow, rainfall, building, mesh region, culvert, resolution, duration), the mesh-triangle estimate + breakdown, the price (`compute_cost_estimate`, `vcpu_hours_estimate`) and the late...

No parameter schema in public metadata yet.

start_simulationStart a flood simulation (local/EC2/Batch backends); the returned run record has its presigned download links elided; hand-back link opens the run. A run over the agent key's monthly spend limit (default $0), or one Hydrata cannot price, is not started: the tool relays Hydrata...

Start a flood simulation (local/EC2/Batch backends); the returned run record has its presigned download links elided; hand-back link opens the run. A run over the agent key's monthly spend limit (default $0), or one Hydrata cannot price, is not started: the tool relays Hydrata...

No parameter schema in public metadata yet.

get_run_statusLightweight status poll (<50ms); `phase` is never empty (`preparing_inputs` while a computing run has no progress yet)

Lightweight status poll (<50ms); `phase` is never empty (`preparing_inputs` while a computing run has no progress yet)

No parameter schema in public metadata yet.

get_runFull run details with timing, log and result layers; presigned `s3_*_url` download links are elided

Full run details with timing, log and result layers; presigned `s3_*_url` download links are elided

No parameter schema in public metadata yet.

get_flow_hydrographFlow (Q) across a line you draw, at every frame of a completed run: peak, time of peak, volume and a mass balance, from the run's playback store (the model's flow, not a gauge reading)

Flow (Q) across a line you draw, at every frame of a completed run: peak, time of peak, volume and a mass balance, from the run's playback store (the model's flow, not a gauge reading)

No parameter schema in public metadata yet.

cancel_runCancel an in-flight simulation; hand-back link opens the scenario

Cancel an in-flight simulation; hand-back link opens the scenario

No parameter schema in public metadata yet.

retry_runRetry a failed simulation (rebuilds the scenario as a new run); hand-back link opens the scenario

Retry a failed simulation (rebuilds the scenario as a new run); hand-back link opens the scenario

No parameter schema in public metadata yet.

list_runsList runs across a project (with status filter); presigned `s3_*_url` download links are elided from every row

List runs across a project (with status filter); presigned `s3_*_url` download links are elided from every row

No parameter schema in public metadata yet.

list_inputsEvery input row of a project per kind (boundary, friction, inflow, rainfall, building, mesh region, culvert) — row id, title, dataset, WFS typename and whether it has features — so the agent never has to probe files

Every input row of a project per kind (boundary, friction, inflow, rainfall, building, mesh region, culvert) — row id, title, dataset, WFS typename and whether it has features — so the agent never has to probe files

No parameter schema in public metadata yet.

list_time_seriesA project's time series — id, name, type, units, row count and first/last timestamp; the data rows are never returned

A project's time series — id, name, type, units, row count and first/last timestamp; the data rows are never returned

No parameter schema in public metadata yet.

create_projectCreate an ANUGA project with a name and EPSG projection; returns its `base_map` and the `ui_url` of its map

Create an ANUGA project with a name and EPSG projection; returns its `base_map` and the `ui_url` of its map

No parameter schema in public metadata yet.

presign_terrain_uploadReturn a presigned URL + key so the agent PUTs the terrain GeoTIFF itself (no file bytes pass through MCP)

Return a presigned URL + key so the agent PUTs the terrain GeoTIFF itself (no file bytes pass through MCP)

No parameter schema in public metadata yet.

finalize_terrain_uploadRegister the uploaded terrain; the import chain seeds the project's six default boundary/friction/inflow/rainfall/building/mesh-region rows (no culvert row: `attach_input_layer` creates 'Culvert 01' on demand)

Register the uploaded terrain; the import chain seeds the project's six default boundary/friction/inflow/rainfall/building/mesh-region rows (no culvert row: `attach_input_layer` creates 'Culvert 01' on demand)

No parameter schema in public metadata yet.

get_terrainPoll the terrain until it is ready (bounded; `timed_out` means call again); `phase` is never empty; summary = WGS84 bbox, elevation min/max, nodata fraction, native CRS; the link frames the DEM

Poll the terrain until it is ready (bounded; `timed_out` means call again); `phase` is never empty; summary = WGS84 bbox, elevation min/max, nodata fraction, native CRS; the link frames the DEM

No parameter schema in public metadata yet.

list_terrain_sourcesThe terrain Hydrata can fetch for a site, finest first (Copernicus GLO-30 worldwide, finer regional LiDAR such as Geoscience Australia 5 m where it has data), with coverage, size cap, vertical datum and licence

The terrain Hydrata can fetch for a site, finest first (Copernicus GLO-30 worldwide, finer regional LiDAR such as Geoscience Australia 5 m where it has data), with coverage, size cap, vertical datum and licence

No parameter schema in public metadata yet.

create_terrain_from_sourceHave Hydrata fetch, reproject and publish a DEM from one of those sources, then wait for the import like `get_terrain`

Have Hydrata fetch, reproject and publish a DEM from one of those sources, then wait for the import like `get_terrain`

No parameter schema in public metadata yet.

sample_terrainGround level at points (null where the terrain has no data), to place a culvert, inflow or boundary on the ground

Ground level at points (null where the terrain has no data), to place a culvert, inflow or boundary on the ground

No parameter schema in public metadata yet.

terrain_profileGround along a line (a cross-section) with the lowest sample, to find where a channel runs

Ground along a line (a cross-section) with the lowest sample, to find where a channel runs

No parameter schema in public metadata yet.

create_time_seriesCreate a time series (rain gauge, hydrograph or tide/stage — `series_type` and `units` are top-level fields) from `{"rowData": [...]}`; a rainfall polygon binds to its gauge by the series name; summary = row count + first/last timestamp; the link opens the Hydrology panel

Create a time series (rain gauge, hydrograph or tide/stage — `series_type` and `units` are top-level fields) from `{"rowData": [...]}`; a rainfall polygon binds to its gauge by the series name; summary = row count + first/last timestamp; the link opens the Hydrology panel

No parameter schema in public metadata yet.

update_time_seriesCorrect a time series (PATCH); the same validation as create, and a series a built scenario uses sends that scenario back for rebuild and review

Correct a time series (PATCH); the same validation as create, and a series a built scenario uses sends that scenario back for rebuild and review

No parameter schema in public metadata yet.

delete_time_seriesDelete a time series (Manager role); refused while a layer feature still uses it, naming the layer and feature

Delete a time series (Manager role); refused while a layer feature still uses it, naming the layer and feature

No parameter schema in public metadata yet.

attach_input_layerAttach a GeoJSON dataset the agent already uploaded as the project's boundary/friction/inflow/rainfall/building/mesh-region or culvert layer (kind `structure` = deprecated alias of `building`); culvert attributes are mapped onto the culvert fields with defaults filled, and `cu...

Attach a GeoJSON dataset the agent already uploaded as the project's boundary/friction/inflow/rainfall/building/mesh-region or culvert layer (kind `structure` = deprecated alias of `building`); culvert attributes are mapped onto the culvert fields with defaults filled, and `cu...

No parameter schema in public metadata yet.

describe_input_kindsWhat each input layer kind looks like (geometry, properties, allowed values, a minimal example), generated from the definitions the build reads

What each input layer kind looks like (geometry, properties, allowed values, a minimal example), generated from the definitions the build reads

No parameter schema in public metadata yet.

read_input_layerRead a project input layer's features as GeoJSON, each with its author (a person, or the agent that wrote it)

Read a project input layer's features as GeoJSON, each with its author (a person, or the agent that wrote it)

No parameter schema in public metadata yet.

write_input_layerWrite an input layer (boundary, friction, inflow, rainfall, building, mesh region or culvert) from GeoJSON sent in the call; `target` writes a separate row for a variant

Write an input layer (boundary, friction, inflow, rainfall, building, mesh region or culvert) from GeoJSON sent in the call; `target` writes a separate row for a variant

No parameter schema in public metadata yet.

request_input_uploadThe link where the person uploads a big input layer (over about 150 KB) in their browser: GeoJSON, zipped shapefile or GeoPackage up to 100 MB

The link where the person uploads a big input layer (over about 150 KB) in their browser: GeoJSON, zipped shapefile or GeoPackage up to 100 MB

No parameter schema in public metadata yet.

create_scenarioCreate a draft scenario and return its mesh-triangle estimate and price (`resolution` — scenario and mesh-region — is a length in metres); the link opens the scenario

Create a draft scenario and return its mesh-triangle estimate and price (`resolution` — scenario and mesh-region — is a length in metres); the link opens the scenario

No parameter schema in public metadata yet.

update_scenarioEdit a scenario's name, description, resolution, duration or attached inputs; never builds or runs, the changed scenario is marked stale

Edit a scenario's name, description, resolution, duration or attached inputs; never builds or runs, the changed scenario is marked stale

No parameter schema in public metadata yet.

clone_scenarioCopy a scenario into a sibling for a variant (no run copied, nothing built), with overrides checked before the copy is made

Copy a scenario into a sibling for a variant (no run copied, nothing built), with overrides checked before the copy is made

No parameter schema in public metadata yet.

build_scenarioBuild the scenario package; shows the estimate first and needs `confirm=true` above 100,000 triangles; polls `computed_status` to built; never re-posts a build that is in flight or already built (`rebuild=true` to force one); surfaces the server's 422 refusals (MESH_TOO_LARGE,...

Build the scenario package; shows the estimate first and needs `confirm=true` above 100,000 triangles; polls `computed_status` to built; never re-posts a build that is in flight or already built (`rebuild=true` to force one); surfaces the server's 422 refusals (MESH_TOO_LARGE,...

No parameter schema in public metadata yet.

create_observation_layerCreate a flood observation layer (project-level, never a scenario input) with its vertical datum (`terrain`, `AHD`, `EGM2008`, `ellipsoidal`, or `local` + `datum_offset_m`); waits for the map layer (`ready`, bounded); the link frames it in the Observations group

Create a flood observation layer (project-level, never a scenario input) with its vertical datum (`terrain`, `AHD`, `EGM2008`, `ellipsoidal`, or `local` + `datum_offset_m`); waits for the map layer (`ready`, bounded); the link frames it in the Observations group

No parameter schema in public metadata yet.

list_observationsA project's flood observation layers, or one layer's observations — `fid`, subtype, stage/depth, sigma, bound, observed window in UTC, datum status (`unknown` = not scored), `photo_count` and `problems`

A project's flood observation layers, or one layer's observations — `fid`, subtype, stage/depth, sigma, bound, observed window in UTC, datum status (`unknown` = not scored), `photo_count` and `problems`

No parameter schema in public metadata yet.

add_observationsAdd Flood marks, Timed levels, Gauge records and Dry points (up to 200 per call; `srid` for native coordinates, `entry_timezone` for naive times); the API validates each one, refused rows come back with the field that is wrong while the rest land

Add Flood marks, Timed levels, Gauge records and Dry points (up to 200 per call; `srid` for native coordinates, `entry_timezone` for naive times); the API validates each one, refused rows come back with the field that is wrong while the rest land

No parameter schema in public metadata yet.

update_observationEdit one observation (PATCH of the fields given; validated against the stored observation)

Edit one observation (PATCH of the fields given; validated against the stored observation)

No parameter schema in public metadata yet.

delete_observationDelete one observation and its photos

Delete one observation and its photos

No parameter schema in public metadata yet.

add_observation_photo_linkAttach a photo to an observation as a reference link only (stored, never fetched); a photo FILE is refused with the UI path — the engineer uploads files in the photo strip on the observation's form in the map

Attach a photo to an observation as a reference link only (stored, never fetched); a photo FILE is refused with the UI path — the engineer uploads files in the photo strip on the observation's form in the map

No parameter schema in public metadata yet.

get_observation_comparisonHow a historic run compares with the project's flood observations: `headline` (figures at a tolerance, 0.3 m default; no pass or fail), `statistics` (n, within, bias, RMSE, weighted RMSE, MAE, max), Gauge record peak/timing/NSE, datum checks and one row per observation (residu...

How a historic run compares with the project's flood observations: `headline` (figures at a tolerance, 0.3 m default; no pass or fail), `statistics` (n, within, bias, RMSE, weighted RMSE, MAE, max), Gauge record peak/timing/NSE, datum checks and one row per observation (residu...

No parameter schema in public metadata yet.

set_observation_exclusionExclude one observation from a run's comparison with the engineer's reason (required: the tool refuses a blank one and the agent must ask), or include it again; logged with user and reason; returns `headline_after`

Exclude one observation from a run's comparison with the engineer's reason (required: the tool refuses a blank one and the agent must ask), or include it again; logged with user and reason; returns `headline_after`

No parameter schema in public metadata yet.

set_comparison_toleranceSave the project's default comparison tolerance (metres, above 0 and at most 5; Editor+). `get_observation_comparison` uses it unless `tolerance` is passed, which saves nothing

Save the project's default comparison tolerance (metres, above 0 and at most 5; Editor+). `get_observation_comparison` uses it unless `tolerance` is passed, which saves nothing

No parameter schema in public metadata yet.

suggest_capabilityTell the Hydrata team about something the person asked for that no tool can do (read-only; the reply gives the words to say to the person; 20 a day per person)

Tell the Hydrata team about something the person asked for that no tool can do (read-only; the reply gives the words to say to the person; 20 a day per person)

No parameter schema in public metadata yet.

Sponsors

Readme

hydrata-mcp-server

License: MIT

MCP server for Hydrata Cloud — build ANUGA flood models from terrain and input layers, run simulations, track progress, and retrieve results through the Model Context Protocol.

Connect and authenticate

Endpoint: https://hydrata.com/mcp/ — Transport: Streamable HTTP.


View the full README on GitHub

Details

Repository
github.com/hydrata/hydrata-mcp-server
Website
hydrata.com/docs/mcp
Transport
HTTP
Registry
MCP registry, active