River Level MCP
Server Details
Live US river levels, streamflow and NWS flood forecasts from USGS stream gauges.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- theluckystrike/river-level-mcp
- GitHub Stars
- 0
- Server Listing
- river-level-mcp
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 4 tools
Each tool targets a distinct question: discovery (find_river_gauges), real-time reading (get_river_level), forward outlook (get_flood_forecast), and past trend (get_river_history). There is some intentional overlap — get_flood_forecast also returns the latest observation and flood stages, which get_river_level also reports — but the descriptions make clear which tool answers which question.
All four tools follow a strict verb_noun pattern (find_river_gauges, get_flood_forecast, get_river_history, get_river_level) in snake_case. The single discovery verb 'find' versus 'get' for data retrieval is a meaningful, consistent distinction rather than a deviation.
Four tools is well-scoped for a focused river-data server: search, current reading, forecast, and history. Each covers a separate data source or time horizon, so none feel redundant or padded.
The surface covers the full lifecycle of a gauge question — find it, read it now, see its forecast, see its history — with no dead ends for typical queries. Minor gaps exist (e.g. no multi-gauge comparison, no flood-alert listing across a region, no historical crest lookup beyond what's embedded), but agents can work around these with the existing tools.
Available Tools
4 toolsfind_river_gaugesFind river gaugesARead-onlyIdempotentInspect
Search USGS stream gauges nationwide by river and place name (for example "mississippi st louis", "potomac little falls"), by state, or within a radius of a latitude and longitude. Returns site numbers with whether each is reporting now and its latest stage and flow, active gauges first.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Words from the gauge name: river plus town, for example "colorado river austin". Words like river, at and near are ignored. | |
| state | No | Two-letter state code (MO) or full state name (Missouri). | |
| latitude | No | Latitude for a nearby search, for example 38.63. | |
| longitude | No | Longitude for a nearby search, for example -90.18. | |
| radius_miles | No | Radius for a latitude and longitude search, 1 to 100 miles. Default 15. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, open-world, non-destructive, so the safety profile is set. The description adds real context beyond that: results include site numbers, current reporting status, latest stage and flow, and are ordered with active gauges first — useful for interpreting a response with no output schema. It does not mention result caps or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the search modes and ends with what is returned. It earns most of its words, though the parenthetical examples duplicate the schema examples and the sentence is long enough to be slightly hard to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly spends words on the return shape (site numbers, reporting flag, stage, flow, ordering). Remaining gaps are minor for a discovery tool: no note on parameter combination behavior, result limits, or empty-result handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented with examples and constraints. The description echoes the same examples ('mississippi st louis') and mentions the modes but adds no new semantics such as what happens when query and state are both supplied. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search USGS stream gauges) and enumerates the three search modes (river/place name, state, radius around a lat/long). This clearly distinguishes it from the get_river_level / get_river_history / get_flood_forecast siblings, which look up a known site rather than discover one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by giving example queries and describing each search mode, so an agent can infer which input to supply. However, it never says when to prefer this tool over a sibling (e.g., 'use this first to find a site number, then call get_river_level'), nor whether criteria can be combined or which takes precedence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flood_forecastGet river flood forecastARead-onlyIdempotentInspect
The current NOAA National Water Prediction Service river forecast for a gauge: the forecast stage and flow series, the forecast crest with its flood category, the latest observation, flood stages and the record crest. Works for NWS forecast points (accepts the NWS id or the USGS site number). Forecasts are reissued several times a day.
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes | USGS site number (for example "07010000" for the Mississippi River at St. Louis) or an NWS gauge id (for example "EADM7"). Use find_river_gauges to look one up. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile is covered. The description adds genuinely new behavioral context: coverage is limited to NWS forecast points, either an NWS id or USGS site number is accepted, and forecast values are refreshed multiple times daily (freshness/staleness caveat). Error behavior for non-forecast gauges is not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all substantive: identity and return payload first, then input applicability, then freshness. No boilerplate or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by enumerating the returned fields including crest, flood category, observations, and flood stages. Combined with the coverage constraint and refresh cadence, an agent has everything needed to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'site' parameter is fully documented with examples and a pointer to find_river_gauges. The description restates the dual-id acceptance but adds no syntax, format, or validation detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('current NOAA NWPS river forecast for a gauge') and enumerates exactly what is returned — forecast stage/flow series, crest with flood category, latest observation, flood stages, record crest. That inventory makes it distinguishable from get_river_level and get_river_history without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear applicability condition ('Works for NWS forecast points') and a recency note ('reissued several times a day'), which tells the agent when the data is valid. It does not explicitly contrast with the sibling tools (e.g., use get_river_level for observed current level), so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_river_historyGet river level historyARead-onlyIdempotentInspect
Daily mean streamflow (default) or stage for a USGS gauge over the last 2 to 366 days, with first, last, low, high, mean and change. Use it for trend, drought and "is the river rising" questions. Many gauges publish daily means for discharge only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Days back from today, 2 to 366. Default 30. | |
| site | Yes | USGS site number (for example "07010000" for the Mississippi River at St. Louis) or an NWS gauge id (for example "EADM7"). Use find_river_gauges to look one up. | |
| parameter | No | discharge (streamflow, ft3/s), gage_height (stage, ft) or water_temperature (deg C). Default discharge. | discharge |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description earns credit beyond that by naming the return aggregates and warning that many gauges publish daily means for discharge only, a real data-availability caveat the agent could not infer elsewhere.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no waste: output content first, usage contexts second, data caveat last. Everything is front-loaded and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so spelling out the returned aggregates is necessary and done. Minor gaps remain -- how 'change' is computed or reported, unit/timezone handling, and behavior on missing data -- but nothing that would prevent a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so site, days and the parameter enum are fully documented in the schema. The description adds only terminology mapping (streamflow = discharge, stage = gage_height) and the default of daily means, which is marginal value over the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: daily mean streamflow or stage for a USGS gauge over 2-366 days, and it enumerates the returned aggregates (first, last, low, high, mean, change). What it lacks is explicit differentiation from the sibling get_river_level, which the agent must infer from the word 'history'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete use contexts -- trend, drought, and 'is the river rising' questions -- which clearly frames when to reach for this tool over a point-in-time reading. There are no explicit exclusions or a named alternative for current conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_river_levelGet current river levelARead-onlyIdempotentInspect
Current river stage (gage height in feet), streamflow (discharge in cubic feet per second) and water temperature where measured, read now from a USGS stream gauge (readings every 5 to 60 minutes). Adds the NWS flood stages (action, minor, moderate, major), the current flood category, feet below flood stage and the record crest when the gauge is an NWS forecast point. Flags readings over 48 hours old. Your training data cannot know today's river level.
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes | USGS site number (for example "07010000" for the Mississippi River at St. Louis) or an NWS gauge id (for example "EADM7"). Use find_river_gauges to look one up. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, yet the description adds substantive behavior beyond them: source (USGS), update cadence of every 5 to 60 minutes, conditional enrichment with NWS flood stages and record crest only when the gauge is an NWS forecast point, and explicit flagging of readings older than 48 hours. That last detail is exactly the staleness caveat an agent needs to interpret the result correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the returned measurements come first, then the flood-stage enrichment, then the staleness caveat. The closing line about training data is slightly rhetorical and could be trimmed, but every other clause carries real information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single required parameter, no output schema, and full annotation coverage, the description supplies everything else an agent needs: data source, units, refresh interval, optional fields, staleness handling, and lookup path. Nothing material is left unspecified for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the lone 'site' parameter is already documented with both USGS and NWS id examples plus a pointer to find_river_gauges. The description adds no format or validation detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Current river stage... read now from a USGS stream gauge') and enumerates exactly what comes back: gage height, discharge, water temperature, plus NWS flood stages and category. The phrase 'read now' implicitly separates it from get_river_history (past) and get_flood_forecast (future), so an agent can distinguish it without opening another schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear usage context by framing the tool as real-time data and noting 'Your training data cannot know today's river level,' which tells the agent when this is necessary. It stops short of explicitly naming alternatives (e.g. 'for historical values use get_river_history'), so exclusion guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- First observed
find_river_gauges - First observed
get_flood_forecast - First observed
get_river_history - First observed
get_river_level
Related MCP Connectors
Real-time water levels and flow rates from USGS stream gauges
Live US lake and reservoir water levels from USGS, USACE, CDEC, USBR and TWDB gauges.
River levels & flood alerts: USGS gauges. $0.01/query. Register in-session — free testnet funds.
Real-time river and lake levels from Water Survey of Canada gauges near any postal code.
Related MCP Servers
- AlicenseAqualityAmaintenanceProvides hydrology data (river levels, streamflow, flood forecasts, water quality) from USGS, NOAA, and SWOT, preserving units, datums, timezones, and data quality for AI agents.1365 PyPIMIT
- AlicenseAqualityCmaintenanceEnables querying USGS water data including real-time and historical streamflow, gage height, and water temperature from USGS gauges across the United States.3MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to query live and historical USGS water data — real-time streamflow, gage height, temperature, precipitation, turbidity and other parameters — for individual gauge sites, and to discover which gauges are actively reporting a given parameter across a US state. Runs either as a keyless local stdio server or through a hosted gateway endpoint, with daily-value time series for trends and hydrographs.211 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables querying live USGS stream gauge data by river name or location, retrieving current water-quality readings (temperature, pH, dissolved oxygen, turbidity), and ranking locations by EPA Clean Water Act compliance scores and grades. Supports comparing multiple watersheds best-to-worst, with no API keys required.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.