Hydrata - ANUGA Flood Simulation
Server Details
Run ANUGA flood simulations, track progress, and retrieve results on Hydrata Cloud.
- Status
- Healthy
- Uptime
- 99.8% over 55 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- Hydrata/hydrata-mcp-server
- GitHub Stars
- 1
- Server Listing
- Hydrata MCP Server
TDQS
Scored across 17 tools
Each tool maps to a distinct stage of the flood-simulation lifecycle: project, terrain upload, input layers, time series, scenario build, and run execution. get_run and get_run_status are explicitly differentiated for heavy detail vs lightweight polling, so there is no real ambiguity.
All tools follow a consistent snake_case verb_noun pattern: create_, get_, list_, build_, start_, cancel_, retry_, attach_. Even multi-step terrain tools are clearly ordered with presign_ and finalize_ prefixes, making the tool names predictable and predictable in intent.
At 17 tools, this is slightly above the typical 3-15 range, but each tool corresponds to a distinct workflow step in a genuinely complex domain. The count is not padded; it reflects the separate stages of terrain import, scenario packaging, and run lifecycle management.
The core simulation path is well covered: project creation, terrain upload, input attachment, time series, scenario build, run start, polling, cancel, and retry. However, there are notable gaps for management operations, including no update/delete tools for projects or scenarios, no list tool for input layers, and no way to list or fetch time series directly through the tool surface.
Available Tools
19 toolsattach_input_layerAttach an uploaded layer as a project inputIdempotentInspect
Attach a GeoJSON you uploaded to GeoNode as the project's boundary, friction, inflow, rainfall, building or mesh_region layer.
The agent moves the bytes: first upload the GeoJSON yourself, with the same credential, to GeoNode's upload endpoint at the site origin:
curl -sS -u <user>:<password> -F "base_file=@/path/rainfall.geojson" https://<site>/api/v2/uploads/upload/→ JSON with execution_id. Then call this tool with it. The tool polls
GET /api/v2/resource-service/execution-status/ (bounded by
timeout_seconds; statuses ready → running → finished | failed), reads the
new dataset's pk, and PATCHes it onto the project's DEFAULT row of that
kind ('Boundary 01' … 'MeshRegion 01' — the six rows the terrain import
seeds ~30 s after get_terrain reports ready; if the list is still empty
the tool says so: run finalize_terrain_upload / wait for get_terrain first).
outcome is exactly one of: attached (row_id, gn_layer, dataset_pk,
dataset_alternate — the WFS typename — and every row id seen);
timed_out (the import is still running: call again with the same
arguments); upload_failed (the execution record, incl. its log, is
returned verbatim — fix the file and upload again); no_default_row;
no_dataset (finished but no resource was recorded). The PATCH is
refused with a 400 if the dataset is not owned by you.
Refused, with no request made: kind breakline and kind culvert — no
REST create path exists for either at HEAD (TASK-3040 AC6), and culvert
flow is not conveyed by run_anuga, so attaching one would only pretend.
Also refused without a request: an execution_id that is not the UUID the
upload returned.
One GeoJSON per kind: all of a kind's features travel in that one file. A
rainfall polygon names its gauge in its data property — create that
gauge with create_time_series under the exact same name.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Which input the uploaded layer is: boundary, friction, inflow, rainfall, building or mesh_region ('structure' is a deprecated alias of building). breakline and culvert are refused (see below). | |
| project_id | Yes | The project ID | |
| execution_id | Yes | `execution_id` returned by your multipart POST to <origin>/api/v2/uploads/upload/ | |
| timeout_seconds | No | How long this call keeps polling the upload before it returns `timed_out` (default 240, ceiling 280 — the prod /mcp/ proxy cuts a call at 300 s). 0 = one status read, no waiting. | |
| poll_interval_seconds | No | Seconds between polls (default 5) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
build_scenarioBuild a scenario's mesh and packageInspect
Build a scenario's package (mesh + inputs) after showing what it will cost, and poll until built.
Order of operations, so the number is shown before anything is spent:
GET the scenario detail. A record with no
boundary/computed_statuskeys is a non-member's read of a public project → refused: a build needs the EDITOR role.Re-call checks on
latest_run(a re-POST is NOT deduplicated afterbuilt/complete— it would dispatch a duplicate build): no run → proceed; runcreated/building→ resume polling, no POST; runbuilt/queued/computing/processing/completewithlatest_run_is_validnot false → return that state, no POST unless rebuild=true; runerror/cancelled, orlatest_run_is_validfalse (the scenario was edited since the build) → proceed.Spend gates, each a refusal with
outcome: "refused"and no POST: the scenario has no boundary or its boundary row has no features (the server would admit the build and fail it in make_package); the estimate is None (resolution is 0/unset); the estimate is above 100,000 triangles and confirm is not true — the refusal states the number; re-call with confirm=true to proceed. An estimate of 0 over a boundary WITH features is buildable and is reported, not refused.POST /projects//scenarios//build/. Every 4xx comes back verbatim as a normal result with
http_status: 422 MESH_TOO_LARGE (error_code,estimate,ceiling,detail— the server's hard ceiling; coarsenresolutionor shrink the boundary; no run was created), 409 COMPUTE_TARGET_UNAVAILABLE, 400/403/404. A 409 WITHOUT an error_code is the dedup body ({status, run_id, detail}: a build is already in flight) — the tool resumes polling that run.On 202 poll the detail's
computed_status(created → building → built | error), bounded by timeout_seconds.
Returns a COMPACT state, never the whole detail: outcome (built, error,
cancelled, complete/queued/computing/processing for a run past the build,
timed_out, or refused), computed_status, mesh_triangle_count_estimate,
posted, the POST's build body + http_status when one was made, and
the latest run's run_id, run_status, error_message, user_message,
mesh_triangle_count. timed_out is normal (make_package re-downloads
the terrain from S3 every build; minutes): call again with the same
arguments — step 2 resumes polling the same run, it never POSTs twice —
or cancel_run(run_id) if the run is stuck in created with no worker.
error is terminal: error_message says why (fix the inputs, then call
again — an errored latest run is rebuilt).
Units: resolution — on the SCENARIO and on every MeshRegion FEATURE — is
a LENGTH in metres; ANUGA maximum_triangle_area = resolution²/2 (FloatField
default 100, not nullable; 0 makes the estimate None), and the estimate
prices both the same way (TASK-3186). The smallest value becomes the raster
cell size. A MeshRegion feature must carry resolution_units = m (features
drawn in the map are marked automatically); an unmarked one makes the build
answer 422 MESH_REGION_UNITS_UNMARKED, naming the conversion an operator runs.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Required (true) when the estimate is above 100,000 triangles — the tool refuses first and tells you the number. Default false. | |
| rebuild | No | true to dispatch a NEW build of a scenario whose latest run is already built/complete and still valid (default false: the tool returns that state instead of duplicating the build). | |
| project_id | Yes | The project ID | |
| scenario_id | Yes | The scenario ID from create_scenario | |
| timeout_seconds | No | How long this call keeps polling before it returns `timed_out` (default 240, ceiling 280 — the prod /mcp/ proxy cuts a call at 300 s). 0 = one status read, no waiting. | |
| poll_interval_seconds | No | Seconds between polls (default 5) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
cancel_runCancel a runDestructiveIdempotentInspect
Cancel an in-flight simulation run.
Works on runs in built, queued, or computing status. Cleans up compute resources (terminates EC2 instance, Celery task, or Batch job).
Returns 409 if the run is already in a terminal state (complete, cancelled, or error).
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | The run ID to cancel |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
create_projectCreate a projectInspect
Create a new ANUGA project. Returns the project record including its id, base_map and ui_url.
The caller's own account becomes the owner. projection is the projected
CRS every scenario in the project is meshed and run in — pick the UTM zone
covering the site. The project's map is created alongside it; ui_url
opens it — give it to the user. Next step for a new project:
presign_terrain_upload.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Project name | |
| projection | Yes | Working CRS as an EPSG string, normally the UTM zone of the site, e.g. 'EPSG:32756' (WGS 84 / UTM 56S) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
create_scenarioCreate a draft scenarioInspect
Create a DRAFT scenario (no build, no run) and report its mesh-triangle estimate.
POSTs /projects//scenarios/ with the write fields, then GETs the
scenario detail — the create response carries NO estimate; the detail's
mesh_triangle_count_estimate (+ _breakdown) does. Returns a compact
record (the same fields get_scenario answers with): id, name, the FK ids
as stored, resolution, duration, computed_status (created = no run
yet), the estimate and its breakdown, the price (compute_cost_estimate
in USD, vcpu_hours_estimate), inflow_anchor_mismatch, and
http_status. Next step: build_scenario (which asks for
confirm=true above 100,000 triangles). Nothing is meshed or queued here.
Units: resolution — on the SCENARIO and on every MeshRegion FEATURE — is
a LENGTH in metres; ANUGA maximum_triangle_area = resolution²/2 (FloatField
default 100, not nullable; 0 makes the estimate None), and the estimate
prices both the same way (TASK-3186). The smallest value becomes the raster
cell size. A MeshRegion feature must carry resolution_units = m (features
drawn in the map are marked automatically); an unmarked one makes the build
answer 422 MESH_REGION_UNITS_UNMARKED, naming the conversion an operator runs.
The server does NOT validate that the FK ids belong to project_id —
pass the row ids attach_input_layer / get_terrain returned for THIS
project. Every FK is nullable at create time, and the build fails later
on a scenario with no terrain, or with neither an inflow nor a rainfall.
A boundary whose row has no features (the default 'Boundary 01' before
attach_input_layer) is accepted here and refused by build_scenario. The
estimate is None when resolution is 0; an estimate of 0 with a real
boundary is a very coarse mesh, not an error.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Scenario name | |
| inflow | No | Inflow row id (optional; the build needs an inflow OR a rainfall) | |
| terrain | No | Terrain id (get_terrain → terrain.id); the build fails without one | |
| boundary | No | Boundary row id (attach_input_layer kind=boundary → row_id) | |
| building | No | Building row id (optional) | |
| duration | Yes | Simulation duration in seconds (e.g. 43200 = 12 h) | |
| friction | No | Friction row id (optional) | |
| rainfall | No | Rainfall row id (optional; the build needs an inflow OR a rainfall) | |
| structure | No | Deprecated alias of `building` (TASK-3586); ignored when `building` is given. | |
| project_id | Yes | The project ID | |
| resolution | Yes | Mesh resolution as a LENGTH in metres (ANUGA maximum_triangle_area = resolution²/2). Coarser (larger) = fewer triangles: on a ~13 km² boundary 36-40 m gives ~16-20k triangles, 10 m ~255k, 1 m ~25M (refused by the API). | |
| description | No | Free-text description (optional) | |
| mesh_region | No | MeshRegion row id (optional): finer meshing inside its polygons, each feature's `resolution` a LENGTH in metres (see the units note). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
create_time_seriesCreate a time seriesInspect
Create a time series (rain gauge, hydrograph, tide/stage) in a project.
POSTs /projects//time-series/ with series_type and units as
top-level fields. series_type is checked against the four choices and
data against the {"rowData": [{timestamp, value}, ...]} shape before any
request is made — the API answers 500 (not 400) to a malformed row.
Returns a compact record — id, name, series_type, units, timezone,
row_count, http_status — not the echoed rows; fetch the full row with the
REST API (GET /projects//time-series//) if you need to round-trip it.
A rainfall polygon references its gauge by the series NAME, so create the
gauges with the exact names the rainfall GeoJSON's features carry.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | The rows: {"rowData": [{"timestamp": "1998-08-17T00:00:00", "value": 1.5}, ...]}. Timestamps ISO 8601 (a trailing Z is tolerated), values numeric. Validated here before anything is sent. | |
| name | Yes | Series name, kept VERBATIM — a rainfall polygon binds to its gauge by this exact name (its `data` property), so use the name the GeoJSON features carry | |
| units | No | Display label for the values, e.g. 'mm/hr', 'm^3/s', 'm' (optional) | |
| source | No | Where the data came from, e.g. a gauge id or agency (optional) | |
| timezone | No | IANA timezone of the timestamps (default 'UTC'), e.g. 'Australia/Sydney' | UTC |
| project_id | Yes | The project ID | |
| description | No | Free-text description (optional) | |
| series_type | No | One of hyetograph (rainfall depth/intensity — the default), hydrograph (flow, read by the Hydrographs panel and inflow boundaries), stage (water level, e.g. a tide) or generic. Sent as a top-level field. | hyetograph |
| location_name | No | Human-readable location of the gauge (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
finalize_terrain_uploadRegister an uploaded terrainInspect
Step 2 of a terrain import: register the PUT GeoTIFF as a Terrain and start the import.
Call this only after the presigned PUT returned 200. Creates the Terrain row
(status creating) and queues the import chain — reproject to UTM, publish
the layer + hillshade, style — which also seeds the project's six default
boundary, friction, inflow, rainfall, building and mesh-region rows.
Returns 202 with the terrain record; keep its id for get_terrain. A 400 UPLOAD_NOT_FOUND
means no object is at staging_key: the PUT did not land (check its status
code and Content-Type) — do not retry finalize until it has.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Terrain title (default: the filename without .tif) | |
| process_id | No | `process_id` returned by presign_terrain_upload (pass it so the upload's progress record is reused; the API tolerates its absence) | |
| project_id | Yes | The project ID | |
| staging_key | Yes | `staging_key` returned by presign_terrain_upload |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_projectGet a project and its map linkRead-onlyIdempotentInspect
Get one ANUGA project: id, name, projection, visibility, your role, its base map — and the link to it.
Returns the project record (id, name, projection (EPSG code),
simple_view_config, visibility, owner_username, my_role,
base_map) plus ui_url: the link that opens the project's map, for the
user (<site>/catalogue/#/map/<base_map>; null while a new project's map
is still being created). Scenarios are NOT listed here — use get_scenario
with a scenario id.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_runGet a run's full recordRead-onlyIdempotentInspect
Get full details of a simulation run including timing and results.
Returns the complete run record: status, progress, timing (start/end timestamps, duration), compute details (backend, instance type, cost), mesh info, error messages, and result log. Use get_run_status for lightweight polling; use this for final results.
The presigned s3_*_url download links are ELIDED — each is a 6-hour
capability and no tool relays one. The results stay viewable through the
gn_layer_* entries (published WMS layers on the project's map).
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | The run ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_run_statusPoll a run's statusRead-onlyIdempotentInspect
Lightweight status check for a simulation run (fast, <50ms).
Use this for polling instead of get_run. Returns only: id, status,
phase, progress_pct (0-100), eta_seconds, error_message, and
compute_backend.
phase is never empty: it is status, except preparing_inputs while a
computing run has no progress yet (it is downloading its input package
and building the domain — minutes on a big model; this is NOT a stall).
Poll every 5-10 seconds. Terminal states: complete, error, cancelled.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | The run ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_scenarioGet a scenario's state, inputs and priceRead-onlyIdempotentInspect
Get a scenario's COMPACT state: its computed_status, inputs, estimate and price.
Returns a compact record, never the raw ~50 KB detail: scenario_id,
computed_status, mesh_triangle_count_estimate and its _breakdown,
latest_run_is_valid, the latest run's run_id, run_status,
error_message, user_message, status_detail and mesh_triangle_count
— plus what the scenario IS and what it will cost: name, description,
project, resolution, duration, the input row ids (terrain,
boundary, friction, inflow, rainfall, building, mesh_region),
compute_cost_estimate (USD), vcpu_hours_estimate, and
inflow_anchor_mismatch (null unless an inflow series starts after the
model does, whose first value is then held backwards).
The computed_status field (there is NO status key on a scenario) is
derived from the latest run and will be one of: created, building, built,
queued, computing, processing, complete, error, or cancelled — created
also means no run exists yet. A scenario must be built before it can be
run. latest_run_is_valid is false after any edit since the last build.
A non-member reading a public project's scenario gets a reduced record:
the fields the server withholds (the input ids, the price,
inflow_anchor_mismatch) are ABSENT here rather than reported as null —
"withheld" is not "no terrain, no cost" — while the run-state keys,
computed_status among them, read null.
No presigned S3 URL is returned by any read tool (each is a 6-hour
capability): results stay viewable through a run's gn_layer_* WMS
entries — use get_run for the full run record.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID | |
| scenario_id | Yes | The scenario ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_terrainWait for a terrain importRead-onlyIdempotentInspect
Poll a terrain's import until it is ready (or error), bounded by timeout_seconds.
Returns outcome — exactly one of ready, error, timed_out, not_found
(the project has no terrain yet; an unknown terrain_id is an API 404 error
instead) — plus the last status seen (creating → styling → ready | error)
and phase (that status, or not_found; never empty),
polls, elapsed_seconds and the full terrain record (its gn_layer is
the published elevation dataset pk once ready). An import takes minutes to
tens of minutes (the SAME 32 MB 1 m DEM measured 4.5 min once and 26 min
once — the worker's S3 download speed dominates), so timed_out is normal
and NOT a failure: keep calling with the same arguments while status is
still creating/styling; several calls in a row is expected. error is
terminal — the import failed and no default input rows were seeded; upload
a corrected GeoTIFF as a new terrain.
ready is written by the import task; the project's default input rows
(Boundary 01, Friction 01, Inflow 01, Rainfall 01, Building 01,
MeshRegion 01, one GeoNode layer each) are seeded by the NEXT task in the
chain and appear over the following ~30 s. Poll the input-layer list until
it is non-empty before attaching your own layer to a default row.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID | |
| terrain_id | No | The terrain ID from finalize_terrain_upload. Omit to follow the project's newest terrain. | |
| timeout_seconds | No | How long this call keeps polling before it returns `timed_out` (default 240, ceiling 280 — the prod /mcp/ proxy cuts a call at 300 s). 0 = one status read, no waiting. | |
| poll_interval_seconds | No | Seconds between polls (default 5) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
list_inputsList a project's input layersRead-onlyIdempotentInspect
List every input layer row of a project, per kind, with whether it has features.
For each of boundary, friction, inflow, rainfall, building and mesh_region:
the rows (row_id, title, gn_layer — the dataset pk — and
dataset_alternate, the workspace:name WFS typename) and has_features.
has_features comes from the API for boundary, rainfall and mesh_region;
for friction, inflow and building (whose records do not carry it) it is a
WFS feature count, at most 24 lookups per call — past that, or when a
lookup fails, it is null (unknown, not false). A row with no gn_layer
has no layer yet (has_features false). Use the row ids with
create_scenario; this is the listing primitive — no need to probe files.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
list_projectsList projectsRead-onlyIdempotentInspect
List ANUGA simulation projects accessible to the authenticated user.
Returns a paginated list of projects with their names, projections, and base map references.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| page_size | No | Results per page, max 100 (default 100) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
list_runsList a project's runsRead-onlyIdempotentInspect
List all simulation runs across all scenarios in a project.
Returns a paginated list of runs. Optionally filter by status
to find active, completed, or failed runs. Each row's presigned
s3_*_url download links are elided (6-hour capabilities).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| page_size | No | Results per page, max 100 (default 100) | |
| project_id | Yes | The project ID | |
| status_filter | No | Filter by status: created, building, built, queued, computing, processing, complete, error, cancelled. Omit for all. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
list_time_seriesList a project's time seriesRead-onlyIdempotentInspect
List a project's time series (rain gauges, hydrographs, tides) — never their rows.
Each series: id, name (a rainfall polygon binds to its gauge by this
exact name), series_type, units, timezone, row_count,
first_timestamp and last_timestamp. The data rows themselves are
dropped (a project's list is megabytes); fetch one series with the REST API
(GET /projects//time-series//) if you need its values.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
presign_terrain_uploadGet a terrain upload URLInspect
Step 1 of a terrain import: get a presigned S3 PUT URL for a GeoTIFF DEM.
The agent moves the bytes itself — no tool accepts file contents. After this
call, PUT the file straight to upload_url, sending the SAME Content-Type
you passed here (it is part of the signature; a mismatch is a 403
SignatureDoesNotMatch before it is anything else):
curl -sS -X PUT -H "Content-Type: image/tiff" --upload-file /path/dem.tif "$UPLOAD_URL"then call finalize_terrain_upload with the returned staging_key and
process_id. Nothing exists in Hydrata until finalize; the URL expires after
expires_in seconds (3600).
Platform guidance: keep the terrain extent within 5° across and 40,000 km²
(200 × 200 km). The API enforces that cap on its bbox-fetch path; an
uploaded GeoTIFF is only rejected above 5 GiB, but a larger DEM will not
mesh or run well. The GeoTIFF must carry a CRS; the import reprojects it to
the site's UTM zone and builds a hillshade. Fallback when a presigned PUT is
impossible: multipart-POST the file with the same credential to
/api/v2/anuga/projects//terrain/upload/ (form field file, optional
title), which creates the terrain in one step — then get_terrain.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | File size in bytes (`stat -c %s <file>`). The API rejects > 5 GiB up front. Omit if unknown. | |
| filename | Yes | Base name of the GeoTIFF, e.g. 'dem.tif' (a name only — never contents) | |
| project_id | Yes | The project ID | |
| content_type | No | MIME type the PUT will send (default 'image/tiff'). It is SIGNED into the URL, so the PUT must send exactly this Content-Type header. | image/tiff |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
retry_runRetry a failed runInspect
Retry a failed simulation run.
Resets an errored run back to 'created' status and triggers a new package build. The same run ID is reused. Only valid when status is 'error'. Returns 409 for any other state.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | The run ID to retry |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
start_simulationStart a simulation run (spends compute)Inspect
Start a flood simulation run for a built scenario.
The scenario must be in 'built' status. Returns 202 with the new run. The run transitions through: built → queued → computing → processing → complete.
After starting, poll get_run_status to track progress. Returns 409
if the scenario is not in the correct state. The returned run record has
its presigned s3_*_url links elided (6-hour capabilities).
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes | The scenario ID to run | |
| compute_backend | No | Compute backend: 'local' (Celery), 'ec2' (dedicated instance), or 'batch' (AWS Batch spot, cheapest). Default: 'local' | local |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
attach_input_layer1 field changed- changed
Input schema / properties / kind / descriptionPrevious value: -"Which input the uploaded layer is: boundary, friction, inflow, rainfall, structure or mesh_region. breakline and culvert are refused (see below)."New value: +"Which input the uploaded layer is: boundary, friction, inflow, rainfall, building or mesh_region ('structure' is a deprecated alias of building). breakline and culvert are refused (see below)."
- Changed
create_scenario2 fields changed- added
Input schema / properties / buildingAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Building row id (optional)" +} - changed
Input schema / properties / structure / descriptionPrevious value: -"Structure row id (optional)"New value: +"Deprecated alias of `building` (TASK-3586); ignored when `building` is given."
19 tool updates
- Changed
attach_input_layer3 fields changed- removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
build_scenario3 fields changed- removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
cancel_run3 fields changed- removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
create_project3 fields changed- removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
create_scenario4 fields changed- changed
Input schema / properties / mesh_region / descriptionPrevious value: -"MeshRegion row id (optional). Leave UNSET unless you want the regions' finer meshing — see the units note: they mesh ~15x more than estimated."New value: +"MeshRegion row id (optional): finer meshing inside its polygons, each feature's `resolution` a LENGTH in metres (see the units note)." - removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
create_time_series3 fields changed- removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
finalize_terrain_upload3 fields changed- removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
get_project3 fields changed- removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
get_run3 fields changed- removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
get_run_status3 fields changed- removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
get_scenario3 fields changed- removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
get_terrain3 fields changed- removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Added
list_inputs - Changed
list_projects3 fields changed- removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
list_runs3 fields changed- removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Added
list_time_series - Changed
presign_terrain_upload3 fields changed- removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
retry_run3 fields changed- removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
- Changed
start_simulation3 fields changed- removed
Output schema / propertiesRemoved value: -{ - "result": { - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - removed
Output schema / x-fastmcp-wrap-resultRemoved value: -true
8 tool updates
- Added
attach_input_layer - Added
build_scenario - Added
create_project - Added
create_scenario - Added
create_time_series - Added
finalize_terrain_upload - Added
get_terrain - Added
presign_terrain_upload
9 tool updates
- First observed
cancel_run - First observed
get_project - First observed
get_run - First observed
get_run_status - First observed
get_scenario - First observed
list_projects - First observed
list_runs - First observed
retry_run - First observed
start_simulation
Related MCP Connectors
Run AI models, create deployments, and manage predictions via cloud API
Flood MCP — wraps Open-Meteo Flood API (free, no auth)
Manage racing sessions, telemetry, tracks, vehicles, teams, and licensed cloud features.
1SWAT+ watershed models for any river in the lower 48 states, with groundwater and PFAS data
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceEnables search and retrieval of calibrated SWAT+ watershed models, national groundwater lithology and PFAS inventories, plus API-key-secured ordering and downloading of custom watershed models.1MIT- AlicenseAqualityBmaintenanceEnables AI assistants to run engineering simulations on cloudHPC, including inspecting cases, getting resource advice, uploading, launching, monitoring, diagnosing errors, and downloading results.19Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables Claude to drive HEC-RAS headless — inspecting projects, validating and executing 1D steady, 1D unsteady and 2D plans, and reading hydraulic results from HDF5 files. It also supports limited model modification, such as setting steady discharges, all without the Windows desktop application or a programmatic API.MIT
- AlicenseAqualityCmaintenanceEnables headless control of DHI MIKE Zero, including launching and batch-running simulations, monitoring job progress and logs, and reading/plotting simulation results from DFS and RES1D files.15MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.