
Usgs Water Mcp Server
Connects Claude to the USGS Instantaneous Values and Daily Values APIs covering roughly 8,000 stream gages and groundwater monitoring sites across the United States. You get seven tools: discover sites by bounding box or watershed HUC, pull current readings in near real time, fetch historical daily or instantaneous series, and check current conditions against percentile ranks from the full period of record. Large time series automatically spill to DuckDB-backed DataCanvas tables when enabled, so you can run SQL aggregations without truncation. Useful for hydrologic analysis, drought and flood assessment, or any workflow that needs authoritative water data with geographic and temporal filtering. Supports both stdio and streamable HTTP transports, with a public hosted instance available.
- GitHub stars
- 3
- tools
- 8
- auth
- Secret needed
- transport
- STDIO, HTTP
- env vars
- 10
- last updated
- Nov 11, 2026
Install
From registry metadata$ npx add-mcp https://usgs-water.caseyjhand.com/mcp --name usgs-waterRun in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.
Review the command, arguments and environment values before installing. MCP servers run with your local permissions.
Other ways
Claude Code
$ claude mcp add --transport http usgs-water https://usgs-water.caseyjhand.com/mcpRun in your terminal. Add --scope user to make it available in every project.
Tools
Verified live · 8 toolsVerified live against the running server on Nov 6, 2026.
water_list_parametersLook up USGS parameter codes — the 5-digit codes every other tool's parameterCd takes. With no query, lists a curated set of well-known codes with names, units, and thematic group, from a built-in table (no network call): 00060 = "Discharge" (ft³/s), 00065 = "Gage height" (ft)...2 params
Look up USGS parameter codes — the 5-digit codes every other tool's parameterCd takes. With no query, lists a curated set of well-known codes with names, units, and thematic group, from a built-in table (no network call): 00060 = "Discharge" (ft³/s), 00065 = "Gage height" (ft)...
groupstringstreamflow · groundwater · temperature · meteorological · water-quality · alldefault: allquerystringwater_find_sitesFind USGS water monitoring sites by bounding box, state, county, or HUC watershed code, filtered by site type and parameter availability. Returns site numbers, names, coordinates, types, altitude, and (in expanded mode) drainage area. Call this first — water_get_readings, wate...11 params
Find USGS water monitoring sites by bounding box, state, county, or HUC watershed code, filtered by site type and parameter availability. Returns site numbers, names, coordinates, types, altitude, and (in expanded mode) drainage area. Call this first — water_get_readings, wate...
bboxstringcanvas_idstringcountyCdstringhasDataTypeCdstringhucstringlimitintegeroffsetintegerparameterCdstringsiteOutputstringbasic · expandeddefault: basicsiteTypestringstateCdstringwater_get_readingsGet the latest instantaneous (~15-min, real-time) values for up to 100 USGS sites in one call — per-site, per-parameter records with timestamp, value, unit, and provisional/approved qualifiers. Omitting parameterCd returns every parameter each site publishes. A site measuring...3 params
Get the latest instantaneous (~15-min, real-time) values for up to 100 USGS sites in one call — per-site, per-parameter records with timestamp, value, unit, and provisional/approved qualifiers. Omitting parameterCd returns every parameter each site publishes. A site measuring...
parameterCdarrayperiodstringsites*arraywater_get_seriesGet a daily or instantaneous time series for one USGS site and parameter over a date range, as time-ordered value records. NWIS can hold several series for one query — one per daily statistic (mean, maximum, minimum) and one per sensor (method); this returns one, reporting its...8 params
Get a daily or instantaneous time series for one USGS site and parameter over a date range, as time-ordered value records. NWIS can hold several series for one query — one per daily statistic (mean, maximum, minimum) and one per sensor (method); this returns one, reporting its...
canvas_idstringendDate*stringmethodIdstringparameterCd*stringseriesTypestringdaily · instantaneousdefault: dailysite*stringstartDate*stringstatCdstringwater_get_site_data_catalogDiscover a USGS site’s parameters, sensors, statistics, and UTC record bounds before calling water_get_series. Find site numbers with water_find_sites. Each row is a distinct series; metadata bounds may contain gaps and lag observations. For water_get_series, take YYYY-MM-DD f...5 params
Discover a USGS site’s parameters, sensors, statistics, and UTC record bounds before calling water_get_series. Find site numbers with water_find_sites. Each row is a distinct series; metadata bounds may contain gaps and lag observations. For water_get_series, take YYYY-MM-DD f...
cursorstringlimitintegerparameterCdstringseriesTypestringdaily · instantaneoussite*stringwater_get_conditionsGet a USGS site's current reading ranked against its full period-of-record daily-mean percentiles for the same calendar day — a "how unusual is this" percentileClass (record-high to record-low), not a flood-stage or drought determination (this tool fetches no authoritative thr...2 params
Get a USGS site's current reading ranked against its full period-of-record daily-mean percentiles for the same calendar day — a "how unusual is this" percentileClass (record-high to record-low), not a flood-stage or drought determination (this tool fetches no authoritative thr...
parameterCd*stringsite*stringwater_dataframe_queryRun a read-only SQL SELECT against water data tables staged on a DataCanvas by water_get_series or water_find_sites. Workflow: run water_get_series or water_find_sites (get canvas_id + table_name) → water_dataframe_describe (confirm the table and its columns) → water_dataframe...2 params
Run a read-only SQL SELECT against water data tables staged on a DataCanvas by water_get_series or water_find_sites. Workflow: run water_get_series or water_find_sites (get canvas_id + table_name) → water_dataframe_describe (confirm the table and its columns) → water_dataframe...
canvas_id*stringsql*stringwater_dataframe_describeList tables and columns staged on a DataCanvas by water_get_series or water_find_sites. Call this after water_get_series or water_find_sites returns a canvas_id to discover the exact table name and column types before writing a query. Then pass the table name to water_datafram...1 params
List tables and columns staged on a DataCanvas by water_get_series or water_find_sites. Call this after water_get_series or water_find_sites returns a canvas_id to discover the exact table name and column types before writing a query. Then pass the table name to water_datafram...
canvas_id*stringSponsors
Configuration
USGS_USER_AGENTCustom User-Agent string for USGS Water Data API requests. Defaults to a descriptive identifier including the repo URL.
USGS_REQUEST_TIMEOUT_MSdefault: 30000HTTP request timeout in milliseconds for each USGS Water Data API request. Every tool call also has a shared 45-second deadline across its requests and retries. Default: 30000.
USGS_API_KEYsecretOptional api.data.gov key for the USGS Water Data APIs, sent as the X-Api-Key header. Without one, requests share the anonymous per-IP hourly limit (1,000 requests on the OGC collections); a shared or hosted deployment should set one.
WATER_DATAFRAME_DROP_ENABLEDdefault: falseSet to true to make water_dataframe_drop callable — it removes one staged table from a DataCanvas. Off by default, which lists the tool as disabled. Needs CANVAS_PROVIDER_TYPE=duckdb to have anything to drop.
MCP_LOG_LEVELdefault: infoSets the minimum log level for output (e.g., 'debug', 'info', 'warn').
MCP_TRANSPORT_TYPEdefault: httpSelects the HTTP transport.
MCP_HTTP_HOSTdefault: 127.0.0.1The hostname for the HTTP server.
MCP_HTTP_PORTdefault: 3010The port to run the HTTP server on.
MCP_HTTP_ENDPOINT_PATHdefault: /mcpThe endpoint path for the MCP server.
MCP_AUTH_MODEdefault: noneAuthentication mode to use: 'none', 'jwt', or 'oauth'.
Readme
@cyanheads/usgs-water-mcp-server
Query real-time and historical water data from ~8,000 USGS stream gages and groundwater wells via MCP. STDIO or Streamable HTTP.
Details
- Repository
- github.com/cyanheads/usgs-water-mcp-server
- Category
- Data & Analytics
- Package
@cyanheads/usgs-water-mcp-server- Transport
- STDIO, HTTP
- Auth
- Required
- Registry
- MCP registry, active
- Resources
- 5
- Tools verified
- Nov 6, 2026
More from cyanheads
- Wikidata Mcp Server3
- Worldbank Mcp Server3
- Mcp Ts Core153
- Arxiv Mcp Server7
- Bluesky Mcp Server2
- Fbi Crime Mcp Server2
- Fema Mcp Server2
- Imf Mcp Server2
- Nonprofit Explorer Mcp Server2
- Onebusaway Mcp Server2
- Openfec Mcp Server2
- Openfoodfacts Mcp Server2
- Reliefweb Mcp Server2
- Smithsonian Mcp Server2
- Stackexchange Mcp Server2
- Wsdot Mcp Server2
- Oecd Mcp Server4
- Socrata Mcp Server4
- Census Mcp Server3
- Who Gho Mcp Server3
- Bls Labor Mcp Server1
- College Scorecard Mcp Server1
- Cpsc Recalls Mcp Server1
- Cyanheads Mcp Server1