Usgs MCP Server

Query real-time and historical USGS water data from ~8,000 stream gages and groundwater wells.

Remote serverstreamable-http

What is the Usgs MCP server?

Most file and storage access work still happens through a UI a human drives. Usgs MCP server moves it into the conversation instead. Query real-time and historical USGS water data from ~8,000 stream gages and groundwater wells.

The short version

  • Declarative tool and resource definitions — single file per primitive, framework handles registration and validation
  • Unified error handling — handlers throw, framework catches, classifies, and formats
  • Pluggable auth: none, jwt, oauth
  • Swappable storage backends: in-memory, filesystem, Supabase, Cloudflare KV/R2/D1
  • Structured logging with optional OpenTelemetry tracing
  • STDIO and Streamable HTTP transports

The tools it exposes

The server publishes 9 tools. What each one is for:

  • water_list_parameters — Static lookup of well-known USGS parameter codes with names, units, and domain. No network call
  • water_find_sites — Find USGS monitoring sites by bounding box, state, county, or HUC watershed. Filter by site type and parameter availability. Large match sets spill
  • water_get_readings — Get the latest instantaneous values (~15 min real-time) for up to 100 USGS sites
  • water_get_series — Get a time series of daily or instantaneous values for a site over a date range. Large ranges spill to DataCanvas
  • water_get_conditions — Get current hydrologic conditions ranked against the full period-of-record percentile statistics
  • water_dataframe_describe — List tables and columns staged on a DataCanvas by water_get_series or water_find_sites
  • water_dataframe_query — Run a read-only SQL SELECT against the time-series and site tables staged by water_get_series and water_find_sites
  • Prerequisites — The Prerequisites tool exposed by this server
  • Installation — The Installation tool exposed by this server

Getting it running

Because this one is hosted, setup is mostly authentication — you point your client at the endpoint and approve access. Nothing runs on your machine, so there is no runtime to keep patched.

What it needs from you

Configuration is passed through the environment: MCP_TRANSPORT_TYPE, MCP_LOG_LEVEL. Treat anything key-shaped as a real credential — scope it to the minimum the server needs, and rotate it if it ever lands in a shared config.

  • Bun v1.3.14 or higher (or Node.js v24+). - No API key required — USGS NWIS is a free, public API.

How it compares

Among the file and storage access options, the useful question is rarely "what can it do" but "what does it cost you to run" — permissions, credentials, and how much of your context its toolset consumes. Usgs's toolset — water_list_parameters, water_find_sites, water_get_readings and 6 more — is a fair guide to whether it matches your workflow. It is maintained by cyanheads; worth a glance at recent repository activity before you build anything load-bearing on it.

This entry was verified against Usgs's own documentation before publication; SyncDev keeps the directory reviewed rather than auto-generated.

Things to watch

  • Your data travels to the provider's service, so the usual questions apply about what you send and what they retain.
  • With 9 tools registered it takes up a noticeable share of the context window; turn it off in projects that never touch Usgs.
  • Keep per-call confirmation enabled while you learn its behaviour; it is the cheapest safeguard you have.

Available tools

ToolWhat it does
water_list_parametersStatic lookup of well-known USGS parameter codes with names, units, and domain. No network call.
water_find_sitesFind USGS monitoring sites by bounding box, state, county, or HUC watershed. Filter by site type and parameter availability. Large match sets spill to DataCanvas.
water_get_readingsGet the latest instantaneous values (~15 min real-time) for up to 100 USGS sites.
water_get_seriesGet a time series of daily or instantaneous values for a site over a date range. Large ranges spill to DataCanvas.
water_get_conditionsGet current hydrologic conditions ranked against the full period-of-record percentile statistics.
water_dataframe_describeList tables and columns staged on a DataCanvas by water_get_series or water_find_sites.
water_dataframe_queryRun a read-only SQL SELECT against the time-series and site tables staged by water_get_series and water_find_sites.
PrerequisitesThe Prerequisites tool exposed by this server.
InstallationThe Installation tool exposed by this server.

How to install the Usgs MCP server

{
  "mcpServers": {
    "usgs-water-mcp-server": {
      "type": "streamable-http",
      "url": "https://usgs-water.caseyjhand.com/mcp"
    }
  }
}

Configuration as documented by the project. Restart the client after saving.

Configuration

  • Bun v1.3.14 or higher (or Node.js v24+). - No API key required — USGS NWIS is a free, public API.
VariableDescriptionRequired
MCP_TRANSPORT_TYPEConfiguration value read at startup.Optional
MCP_LOG_LEVELConfiguration value read at startup.Optional

Example prompts to try

  • Use Usgs to water list parameters.
  • Use Usgs to water find sites.
  • Use Usgs to water get readings.

Frequently asked questions

It connects Usgs to MCP-compatible AI assistants such as Claude and Cursor, exposing 9 tools (water_list_parameters, water_find_sites, water_get_readings, and more) that the assistant can call on your behalf. Instead of copying data back and forth by hand, the assistant works with Usgs directly.