geotap-mcp-server 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +757 -0
- package/package.json +54 -0
- package/src/api.js +117 -0
- package/src/index.js +79 -0
- package/src/sources.js +193 -0
- package/src/tools.js +952 -0
- package/tests/workflow-tests.js +940 -0
package/README.md
ADDED
|
@@ -0,0 +1,757 @@
|
|
|
1
|
+
# GeoTap Developer
|
|
2
|
+
|
|
3
|
+
**One API for 28+ US federal environmental and infrastructure data sources.**
|
|
4
|
+
|
|
5
|
+
GeoTap aggregates data from FEMA, USGS, EPA, NOAA, USDA, USFWS, DOT, Census, and more into a single REST API. This repository contains:
|
|
6
|
+
|
|
7
|
+
- **REST API documentation** — query federal data programmatically
|
|
8
|
+
- **MCP Server** — connect GeoTap to Claude, Cursor, Windsurf, and other AI tools
|
|
9
|
+
|
|
10
|
+
> **Web App**: [geotapdata.com](https://geotapdata.com) — no code required, draw on a map and explore data visually.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Data Sources
|
|
15
|
+
|
|
16
|
+
| Agency | Data Available |
|
|
17
|
+
|--------|---------------|
|
|
18
|
+
| **FEMA** | Flood zones, FIRM panels, flood insurance rate maps, floodway boundaries |
|
|
19
|
+
| **USGS** | Elevation (3DEP at 1m/10m/30m), geology, streamgages, groundwater, land use (NLCD), StreamStats, National Streamflow Statistics (NSS) |
|
|
20
|
+
| **EPA** | Water quality (ATTAINS), Superfund sites, brownfields, TRI toxic releases, USTs, NPDES outfalls |
|
|
21
|
+
| **NOAA** | Rainfall (Atlas 14), IDF curves, tide stations, climate projections (CMIP6), weather stations, radar |
|
|
22
|
+
| **USDA/NRCS** | Soils (SSURGO), curve numbers, hydrologic soil groups, TR-55 parameters |
|
|
23
|
+
| **USFWS** | Wetlands (NWI), endangered species, critical habitat |
|
|
24
|
+
| **DOT** | Bridges, tunnels, National Bridge Inventory |
|
|
25
|
+
| **Census** | Demographics, boundaries, TIGER geographic data |
|
|
26
|
+
| **USACE** | Dams, levees, navigation channels |
|
|
27
|
+
| **NHD** | Stream flowlines, hydrography, watershed boundaries (HUC-8/10/12) |
|
|
28
|
+
| **Other** | Power plants, mines, tribal lands, building footprints, and more |
|
|
29
|
+
|
|
30
|
+
Every API response includes **source attribution** — the federal agency, dataset name, and reference URL — so you always know where the data came from.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Quick Start
|
|
35
|
+
|
|
36
|
+
### Option 1: REST API
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# Get flood zones, wetlands, soils, and 16 more layers for a location
|
|
40
|
+
curl "https://geotapdata.com/api/v1/spatial/near?lat=30.267&lng=-97.743&radius=0.5"
|
|
41
|
+
|
|
42
|
+
# Get NOAA Atlas 14 rainfall data
|
|
43
|
+
curl "https://geotapdata.com/api/v1/rainfall/atlas14?lat=30.267&lon=-97.743"
|
|
44
|
+
|
|
45
|
+
# Geocode an address
|
|
46
|
+
curl "https://geotapdata.com/api/v1/geocode?address=123+Main+St+Austin+TX"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Option 2: MCP Server (for AI tools)
|
|
50
|
+
|
|
51
|
+
Add to Claude Desktop or Cursor config:
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"mcpServers": {
|
|
55
|
+
"geotap": {
|
|
56
|
+
"command": "npx",
|
|
57
|
+
"args": ["-y", "geotap-mcp-server"]
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Then ask: *"What are the flood zones at 123 Main St, Austin TX?"*
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## REST API Reference
|
|
68
|
+
|
|
69
|
+
**Base URL**: `https://geotapdata.com/api/v1`
|
|
70
|
+
|
|
71
|
+
### Authentication
|
|
72
|
+
|
|
73
|
+
API keys are **optional** during the open beta. All endpoints work without authentication.
|
|
74
|
+
|
|
75
|
+
| Method | Details |
|
|
76
|
+
|--------|---------|
|
|
77
|
+
| **Header** | `X-API-Key: your-key-here` |
|
|
78
|
+
| **Query param** | `?api_key=your-key-here` |
|
|
79
|
+
| **Register** | `POST https://geotapdata.com/api/keys/register` with `{"email": "you@example.com"}` |
|
|
80
|
+
|
|
81
|
+
Authenticated requests get higher rate limits and usage tracking.
|
|
82
|
+
|
|
83
|
+
### Rate Limits
|
|
84
|
+
|
|
85
|
+
| Tier | Monthly Requests | Burst (per min) | Cost |
|
|
86
|
+
|------|-----------------|------------------|------|
|
|
87
|
+
| **Unauthenticated** | No limit | 100/min (IP-based) | Free |
|
|
88
|
+
| **Free** (with key) | 50 | 5/min | Free |
|
|
89
|
+
| **Starter** | 1,000 | 20/min | Coming soon |
|
|
90
|
+
| **Pro** | 10,000 | 60/min | Coming soon |
|
|
91
|
+
| **Enterprise** | 100,000 | 200/min | Coming soon |
|
|
92
|
+
|
|
93
|
+
Rate limit headers are included in every response: `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`.
|
|
94
|
+
|
|
95
|
+
### Response Format
|
|
96
|
+
|
|
97
|
+
Every response includes:
|
|
98
|
+
|
|
99
|
+
```json
|
|
100
|
+
{
|
|
101
|
+
"success": true,
|
|
102
|
+
"data": { ... },
|
|
103
|
+
"_meta": {
|
|
104
|
+
"sources": [
|
|
105
|
+
{
|
|
106
|
+
"agency": "FEMA",
|
|
107
|
+
"dataset": "National Flood Hazard Layer (NFHL)",
|
|
108
|
+
"url": "https://www.fema.gov/flood-maps/national-flood-hazard-layer"
|
|
109
|
+
}
|
|
110
|
+
],
|
|
111
|
+
"retrievedAt": "2026-03-19T12:00:00.000Z",
|
|
112
|
+
"disclaimer": "Data sourced from US federal agencies via GeoTap..."
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
### Endpoints
|
|
120
|
+
|
|
121
|
+
#### Geocoding
|
|
122
|
+
|
|
123
|
+
| Method | Endpoint | Description |
|
|
124
|
+
|--------|----------|-------------|
|
|
125
|
+
| GET | `/geocode?address={address}` | Convert a US address to coordinates |
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
curl "https://geotapdata.com/api/v1/geocode?address=456+Oak+Ave+Houston+TX"
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
#### Spatial Queries
|
|
132
|
+
|
|
133
|
+
| Method | Endpoint | Description |
|
|
134
|
+
|--------|----------|-------------|
|
|
135
|
+
| GET | `/spatial/near?lat={lat}&lng={lng}&radius={km}` | Query all layers near a point |
|
|
136
|
+
| POST | `/spatial/in-polygon` | Query all layers within a polygon |
|
|
137
|
+
| POST | `/spatial/summary` | Feature counts per layer (fast) |
|
|
138
|
+
| GET | `/spatial/bbox?bbox={w,s,e,n}` | Query layers in a bounding box |
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
# All environmental data within 0.5 km of a point
|
|
142
|
+
curl "https://geotapdata.com/api/v1/spatial/near?lat=34.05&lng=-118.25&radius=0.5"
|
|
143
|
+
|
|
144
|
+
# Specific layers only
|
|
145
|
+
curl "https://geotapdata.com/api/v1/spatial/near?lat=34.05&lng=-118.25&radius=0.5&layers=flood_zones,wetlands,soil_map_units"
|
|
146
|
+
|
|
147
|
+
# Query within a polygon
|
|
148
|
+
curl -X POST "https://geotapdata.com/api/v1/spatial/in-polygon" \
|
|
149
|
+
-H "Content-Type: application/json" \
|
|
150
|
+
-d '{
|
|
151
|
+
"polygon": {
|
|
152
|
+
"type": "Polygon",
|
|
153
|
+
"coordinates": [[[-97.75,30.26],[-97.74,30.26],[-97.74,30.27],[-97.75,30.27],[-97.75,30.26]]]
|
|
154
|
+
}
|
|
155
|
+
}'
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
#### Data Layers
|
|
159
|
+
|
|
160
|
+
| Method | Endpoint | Description |
|
|
161
|
+
|--------|----------|-------------|
|
|
162
|
+
| GET | `/layers` | List all available data layers |
|
|
163
|
+
| GET | `/layers/{name}` | Get metadata for a layer |
|
|
164
|
+
| GET | `/layers/{name}/features?bbox={w,s,e,n}` | Get features from a layer |
|
|
165
|
+
|
|
166
|
+
**Available layer names**: `flood_zones`, `wetlands`, `soil_map_units`, `dem_elevation`, `nlcd_land_cover`, `contours`, `building_footprints`, `stream_gauges`, `streams_rivers`, `weather_alerts`, `critical_habitat`, `protected_lands`, `brownfields`, `superfund`, `ust`, `npdes_outfalls`, `dams`, `levees`, `impaired_waters`, `satellite_imagery`, `sole_source_aquifers`
|
|
167
|
+
|
|
168
|
+
#### Rainfall & Precipitation
|
|
169
|
+
|
|
170
|
+
| Method | Endpoint | Description |
|
|
171
|
+
|--------|----------|-------------|
|
|
172
|
+
| GET | `/rainfall/atlas14?lat={lat}&lon={lon}` | NOAA Atlas 14 precipitation frequency |
|
|
173
|
+
| GET | `/rainfall/atlas14/idf?lat={lat}&lon={lon}` | IDF curve data |
|
|
174
|
+
| POST | `/rainfall/hyetograph` | Generate design storm hyetograph |
|
|
175
|
+
| POST | `/rainfall/export` | Export hyetograph as CSV/JSON |
|
|
176
|
+
| GET | `/rainfall/distributions` | List rainfall distribution types |
|
|
177
|
+
| GET | `/rainfall/recommend?lat={lat}&lon={lon}` | Recommended SCS distribution |
|
|
178
|
+
| GET | `/rainfall/climate/scenarios` | Available climate scenarios |
|
|
179
|
+
| GET | `/rainfall/climate/factors?lat={lat}&lon={lon}&horizon={h}&scenario={s}` | Climate change multipliers |
|
|
180
|
+
| POST | `/rainfall/climate/project` | Future rainfall projections |
|
|
181
|
+
| GET | `/rainfall/uncertainty/bounds?lat={lat}&lon={lon}&returnPeriod={rp}&duration={d}` | Confidence intervals |
|
|
182
|
+
| POST | `/rainfall/uncertainty/envelope` | Monte Carlo uncertainty bands |
|
|
183
|
+
| POST | `/rainfall/uncertainty/sensitivity` | Parameter sensitivity analysis |
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
# Atlas 14 rainfall for all durations and return periods
|
|
187
|
+
curl "https://geotapdata.com/api/v1/rainfall/atlas14?lat=32.78&lon=-96.80"
|
|
188
|
+
|
|
189
|
+
# Generate a 25-year, 24-hour design storm hyetograph
|
|
190
|
+
curl -X POST "https://geotapdata.com/api/v1/rainfall/hyetograph" \
|
|
191
|
+
-H "Content-Type: application/json" \
|
|
192
|
+
-d '{
|
|
193
|
+
"latitude": 32.78,
|
|
194
|
+
"longitude": -96.80,
|
|
195
|
+
"returnPeriod": "25yr",
|
|
196
|
+
"duration": 24,
|
|
197
|
+
"timeInterval": 15,
|
|
198
|
+
"distribution": "SCS Type III"
|
|
199
|
+
}'
|
|
200
|
+
|
|
201
|
+
# Climate-adjusted rainfall projection
|
|
202
|
+
curl -X POST "https://geotapdata.com/api/v1/rainfall/climate/project" \
|
|
203
|
+
-H "Content-Type: application/json" \
|
|
204
|
+
-d '{
|
|
205
|
+
"latitude": 32.78,
|
|
206
|
+
"longitude": -96.80,
|
|
207
|
+
"returnPeriod": "100yr",
|
|
208
|
+
"duration": 24,
|
|
209
|
+
"horizon": "mid-century",
|
|
210
|
+
"scenario": "SSP5-8.5"
|
|
211
|
+
}'
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
#### Watershed & Hydrology
|
|
215
|
+
|
|
216
|
+
| Method | Endpoint | Description |
|
|
217
|
+
|--------|----------|-------------|
|
|
218
|
+
| POST | `/watershed/delineate` | Delineate watershed (USGS StreamStats) |
|
|
219
|
+
| GET | `/watershed/characteristics?lat={lat}&lng={lng}` | Basin parameters |
|
|
220
|
+
| GET | `/watershed/flow-statistics?lat={lat}&lng={lng}` | Peak/low flow estimates |
|
|
221
|
+
| GET | `/watershed/flowlines?bbox={w,s,e,n}` | Stream network (NHD) |
|
|
222
|
+
| GET | `/watershed/water-quality?bbox={w,s,e,n}` | Watershed water quality |
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
# Delineate watershed from a pour point
|
|
226
|
+
curl -X POST "https://geotapdata.com/api/v1/watershed/delineate" \
|
|
227
|
+
-H "Content-Type: application/json" \
|
|
228
|
+
-d '{"lat": 36.12, "lng": -97.06}'
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
#### Hydrology Toolkit
|
|
232
|
+
|
|
233
|
+
| Method | Endpoint | Description |
|
|
234
|
+
|--------|----------|-------------|
|
|
235
|
+
| POST | `/hydrology/analyze` | Complete hydrologic analysis (CN, Tc, peak flow) |
|
|
236
|
+
| GET | `/hydrology/distributions` | Available rainfall distributions |
|
|
237
|
+
| GET | `/hydrology/distribution?lat={lat}&lon={lon}` | Recommended distribution |
|
|
238
|
+
|
|
239
|
+
#### Curve Number
|
|
240
|
+
|
|
241
|
+
| Method | Endpoint | Description |
|
|
242
|
+
|--------|----------|-------------|
|
|
243
|
+
| GET | `/cn/lookup?nlcd={code}&hsg={group}` | Lookup CN for land use + soil |
|
|
244
|
+
| GET | `/cn/tables` | Complete CN lookup tables |
|
|
245
|
+
| POST | `/cn/analyze` | Weighted CN for catchment polygons |
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
# Lookup curve number for developed land on B soils
|
|
249
|
+
curl "https://geotapdata.com/api/v1/cn/lookup?nlcd=22&hsg=B"
|
|
250
|
+
|
|
251
|
+
# Calculate weighted CN for a catchment
|
|
252
|
+
curl -X POST "https://geotapdata.com/api/v1/cn/analyze" \
|
|
253
|
+
-H "Content-Type: application/json" \
|
|
254
|
+
-d '{"catchments": {"type": "FeatureCollection", "features": [...]}}'
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
#### Water Quality
|
|
258
|
+
|
|
259
|
+
| Method | Endpoint | Description |
|
|
260
|
+
|--------|----------|-------------|
|
|
261
|
+
| POST | `/water-quality/receiving-water` | EPA ATTAINS data with downstream trace |
|
|
262
|
+
| GET | `/water-quality/impairments?huc12={code}` | Impairments by HUC-12 |
|
|
263
|
+
| GET | `/water-quality/watershed?lat={lat}&lon={lon}` | Identify HUC-12 for a point |
|
|
264
|
+
|
|
265
|
+
#### Waterway Permits
|
|
266
|
+
|
|
267
|
+
| Method | Endpoint | Description |
|
|
268
|
+
|--------|----------|-------------|
|
|
269
|
+
| POST | `/waterway-permits/features` | Find streams, wetlands, waterbodies |
|
|
270
|
+
| POST | `/waterway-permits/analyze` | Determine required permits |
|
|
271
|
+
|
|
272
|
+
#### Monitoring Stations
|
|
273
|
+
|
|
274
|
+
| Method | Endpoint | Description |
|
|
275
|
+
|--------|----------|-------------|
|
|
276
|
+
| GET | `/stations?bbox={w,s,e,n}` | Find USGS/NOAA stations |
|
|
277
|
+
| GET | `/stations/search?q={query}` | Search by name or ID |
|
|
278
|
+
| GET | `/stations/types` | Available station types |
|
|
279
|
+
| GET | `/stations/watersheds?bbox={w,s,e,n}` | HUC watershed boundaries |
|
|
280
|
+
| GET | `/stations/watersheds/{hucCode}` | Specific watershed by HUC code |
|
|
281
|
+
|
|
282
|
+
#### Gage Intelligence
|
|
283
|
+
|
|
284
|
+
**Gauged sites** (requires USGS station ID):
|
|
285
|
+
|
|
286
|
+
| Method | Endpoint | Description |
|
|
287
|
+
|--------|----------|-------------|
|
|
288
|
+
| GET | `/gage-intelligence/{siteId}/flood-frequency` | Bulletin 17C flood frequency |
|
|
289
|
+
| GET | `/gage-intelligence/{siteId}/flow-duration` | Flow duration curve |
|
|
290
|
+
| GET | `/gage-intelligence/{siteId}/low-flow` | 7Q10, 7Q2, harmonic mean |
|
|
291
|
+
| GET | `/gage-intelligence/{siteId}/storm-events` | Historical storm events |
|
|
292
|
+
| GET | `/gage-intelligence/{siteId}/storm-events/{eventId}` | Storm event detail |
|
|
293
|
+
| GET | `/gage-intelligence/{siteId}/storm-events/{eventId}/export` | Export for HEC-HMS |
|
|
294
|
+
| GET | `/gage-intelligence/{siteId}/summary` | Gage overview |
|
|
295
|
+
| GET | `/gage-intelligence/{siteId}/published-stats` | Official USGS GageStats |
|
|
296
|
+
| GET | `/gage-intelligence/{siteId}/compare` | Computed vs. published QA |
|
|
297
|
+
|
|
298
|
+
**Ungaged sites** (regional regression):
|
|
299
|
+
|
|
300
|
+
| Method | Endpoint | Description |
|
|
301
|
+
|--------|----------|-------------|
|
|
302
|
+
| POST | `/gage-intelligence/ungaged/estimate` | NSS flood frequency estimate |
|
|
303
|
+
| POST | `/gage-intelligence/ungaged/estimate-all` | All available statistics |
|
|
304
|
+
| GET | `/gage-intelligence/ungaged/regions?state={ST}` | NSS regions by state |
|
|
305
|
+
| GET | `/gage-intelligence/ungaged/parameters?state={ST}` | Required basin characteristics |
|
|
306
|
+
|
|
307
|
+
**Watershed similarity**:
|
|
308
|
+
|
|
309
|
+
| Method | Endpoint | Description |
|
|
310
|
+
|--------|----------|-------------|
|
|
311
|
+
| POST | `/gage-intelligence/similarity/find` | Find analog watersheds |
|
|
312
|
+
| POST | `/gage-intelligence/similarity/find-with-stats` | Similar watersheds + stats |
|
|
313
|
+
| POST | `/gage-intelligence/similarity/recommend-index` | Best reference gage |
|
|
314
|
+
| POST | `/gage-intelligence/similarity/transfer` | Transfer statistics (DA ratio) |
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
# Flood frequency at USGS gage 08158000 (Colorado River at Austin)
|
|
318
|
+
curl "https://geotapdata.com/api/v1/gage-intelligence/08158000/flood-frequency"
|
|
319
|
+
|
|
320
|
+
# 7Q10 low flow for NPDES permits
|
|
321
|
+
curl "https://geotapdata.com/api/v1/gage-intelligence/08158000/low-flow"
|
|
322
|
+
|
|
323
|
+
# Estimate flood frequency at an ungaged site
|
|
324
|
+
curl -X POST "https://geotapdata.com/api/v1/gage-intelligence/ungaged/estimate" \
|
|
325
|
+
-H "Content-Type: application/json" \
|
|
326
|
+
-d '{"state": "TX", "region": "4", "parameters": {"drainageArea": 10.5}}'
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
#### Elevation & Terrain
|
|
330
|
+
|
|
331
|
+
| Method | Endpoint | Description |
|
|
332
|
+
|--------|----------|-------------|
|
|
333
|
+
| GET | `/spatial/dem-stats?bbox={w,s,e,n}` | Min/max/mean elevation |
|
|
334
|
+
| GET | `/spatial/contours?bbox={w,s,e,n}` | Contour lines |
|
|
335
|
+
| GET | `/spatial/contour-intervals` | Available intervals |
|
|
336
|
+
| POST | `/spatial/dem-export` | Export DEM as GeoTIFF |
|
|
337
|
+
| POST | `/spatial/contours-export` | Export contours |
|
|
338
|
+
| GET | `/spatial/dem-availability?bbox={w,s,e,n}` | Check resolution availability |
|
|
339
|
+
| GET | `/spatial/dem-resolutions` | Available DEM resolutions |
|
|
340
|
+
|
|
341
|
+
#### Land Use
|
|
342
|
+
|
|
343
|
+
| Method | Endpoint | Description |
|
|
344
|
+
|--------|----------|-------------|
|
|
345
|
+
| POST | `/spatial/nlcd-export` | Export NLCD land cover (GeoTIFF or vector) |
|
|
346
|
+
|
|
347
|
+
#### Site Analysis & Reports
|
|
348
|
+
|
|
349
|
+
| Method | Endpoint | Description |
|
|
350
|
+
|--------|----------|-------------|
|
|
351
|
+
| POST | `/site-analysis/report` | Comprehensive environmental report |
|
|
352
|
+
| GET | `/site-analysis/report/{jobId}` | Check report status |
|
|
353
|
+
| POST | `/constraints/report` | Environmental constraints assessment |
|
|
354
|
+
| GET | `/constraints/report/{jobId}` | Check constraints status |
|
|
355
|
+
| GET | `/constraints/config` | Constraint configuration options |
|
|
356
|
+
| POST | `/site-developability/report` | Developability score (0-100) |
|
|
357
|
+
| GET | `/site-developability/config` | Scoring methodology |
|
|
358
|
+
|
|
359
|
+
```bash
|
|
360
|
+
# Generate a full site analysis
|
|
361
|
+
curl -X POST "https://geotapdata.com/api/v1/site-analysis/report" \
|
|
362
|
+
-H "Content-Type: application/json" \
|
|
363
|
+
-d '{
|
|
364
|
+
"geometry": {"type": "Point", "coordinates": [-97.74, 30.27]},
|
|
365
|
+
"projectName": "Oak Hill Development"
|
|
366
|
+
}'
|
|
367
|
+
|
|
368
|
+
# Check status (reports take 30-60 seconds)
|
|
369
|
+
curl "https://geotapdata.com/api/v1/site-analysis/report/{jobId}"
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
#### Export
|
|
373
|
+
|
|
374
|
+
| Method | Endpoint | Description |
|
|
375
|
+
|--------|----------|-------------|
|
|
376
|
+
| GET | `/export/config/options` | Available formats and CRS |
|
|
377
|
+
| POST | `/export` | Export data (GeoJSON, Shapefile, KML, CSV) |
|
|
378
|
+
| GET | `/export/{jobId}` | Check export status + download URL |
|
|
379
|
+
| GET | `/export/{jobId}/download` | Download exported file |
|
|
380
|
+
|
|
381
|
+
```bash
|
|
382
|
+
# Export flood zones and wetlands as a shapefile
|
|
383
|
+
curl -X POST "https://geotapdata.com/api/v1/export" \
|
|
384
|
+
-H "Content-Type: application/json" \
|
|
385
|
+
-d '{
|
|
386
|
+
"layers": ["flood_zones", "wetlands"],
|
|
387
|
+
"format": "shapefile",
|
|
388
|
+
"geometry": {"type": "Polygon", "coordinates": [[...]]}
|
|
389
|
+
}'
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
#### Satellite Imagery
|
|
393
|
+
|
|
394
|
+
| Method | Endpoint | Description |
|
|
395
|
+
|--------|----------|-------------|
|
|
396
|
+
| POST | `/spatial/satellite-export` | Export aerial imagery as GeoTIFF |
|
|
397
|
+
| GET | `/spatial/satellite-resolutions` | Available resolutions |
|
|
398
|
+
|
|
399
|
+
#### Health & Status
|
|
400
|
+
|
|
401
|
+
| Method | Endpoint | Description |
|
|
402
|
+
|--------|----------|-------------|
|
|
403
|
+
| GET | `/health` | API health check |
|
|
404
|
+
| GET | `/status` | All data source connectivity |
|
|
405
|
+
| GET | `/status/{apiName}` | Specific API status |
|
|
406
|
+
| GET | `/docs` | API documentation (JSON) |
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
## MCP Server
|
|
411
|
+
|
|
412
|
+
The MCP (Model Context Protocol) server wraps the REST API into **83 AI-native tools** that Claude, Cursor, Windsurf, and other AI assistants can call directly.
|
|
413
|
+
|
|
414
|
+
### Installation
|
|
415
|
+
|
|
416
|
+
#### Claude Desktop
|
|
417
|
+
|
|
418
|
+
Add to your `claude_desktop_config.json`:
|
|
419
|
+
|
|
420
|
+
```json
|
|
421
|
+
{
|
|
422
|
+
"mcpServers": {
|
|
423
|
+
"geotap": {
|
|
424
|
+
"command": "npx",
|
|
425
|
+
"args": ["-y", "geotap-mcp-server"]
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
#### Cursor
|
|
432
|
+
|
|
433
|
+
Add to your Cursor MCP settings:
|
|
434
|
+
|
|
435
|
+
```json
|
|
436
|
+
{
|
|
437
|
+
"mcpServers": {
|
|
438
|
+
"geotap": {
|
|
439
|
+
"command": "npx",
|
|
440
|
+
"args": ["-y", "geotap-mcp-server"]
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
#### Windsurf / Other MCP Clients
|
|
447
|
+
|
|
448
|
+
```bash
|
|
449
|
+
npm install -g geotap-mcp-server
|
|
450
|
+
geotap-mcp
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
### Configuration
|
|
454
|
+
|
|
455
|
+
| Variable | Description | Default |
|
|
456
|
+
|----------|-------------|---------|
|
|
457
|
+
| `GEOTAP_API_URL` | API base URL | `https://geotapdata.com/api/v1` |
|
|
458
|
+
| `GEOTAP_API_KEY` | Optional API key | (none — free tier) |
|
|
459
|
+
|
|
460
|
+
With API key:
|
|
461
|
+
```json
|
|
462
|
+
{
|
|
463
|
+
"mcpServers": {
|
|
464
|
+
"geotap": {
|
|
465
|
+
"command": "npx",
|
|
466
|
+
"args": ["-y", "geotap-mcp-server"],
|
|
467
|
+
"env": {
|
|
468
|
+
"GEOTAP_API_KEY": "your-api-key-here"
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
### What You Can Ask
|
|
476
|
+
|
|
477
|
+
- *"What are the flood zones at 123 Main St, Austin TX?"*
|
|
478
|
+
- *"Is this property in a wetland?"*
|
|
479
|
+
- *"What soil types are on this site?"*
|
|
480
|
+
- *"What's the 100-year rainfall for Dallas?"*
|
|
481
|
+
- *"Delineate the watershed at this point"*
|
|
482
|
+
- *"Are there any EPA Superfund sites near here?"*
|
|
483
|
+
- *"What's the curve number for this drainage area?"*
|
|
484
|
+
- *"What are the peak flood flows for this stream?"*
|
|
485
|
+
- *"What's the 7Q10 low flow at this gauge?"*
|
|
486
|
+
- *"Generate a design storm hyetograph for a 25-year, 24-hour event"*
|
|
487
|
+
- *"How will climate change affect rainfall at this location?"*
|
|
488
|
+
- *"Run a full environmental site analysis for this parcel"*
|
|
489
|
+
- *"What permits do I need to build near this stream?"*
|
|
490
|
+
- *"Export this data as a shapefile"*
|
|
491
|
+
|
|
492
|
+
### Available Tools (83)
|
|
493
|
+
|
|
494
|
+
<details>
|
|
495
|
+
<summary>Spatial Queries (4)</summary>
|
|
496
|
+
|
|
497
|
+
- **get_environmental_data_for_area** — Query all 28+ data sources within a polygon
|
|
498
|
+
- **get_environmental_data_near_point** — Query all data sources near a lat/lng point
|
|
499
|
+
- **get_environmental_summary** — Quick feature counts per layer for an area
|
|
500
|
+
- **get_environmental_data_in_bbox** — Query data within a bounding box
|
|
501
|
+
</details>
|
|
502
|
+
|
|
503
|
+
<details>
|
|
504
|
+
<summary>Data Layers (3)</summary>
|
|
505
|
+
|
|
506
|
+
- **list_data_layers** — List all 28+ available data sources
|
|
507
|
+
- **get_layer_details** — Get metadata about a specific layer
|
|
508
|
+
- **get_layer_features** — Get features from a specific data layer
|
|
509
|
+
</details>
|
|
510
|
+
|
|
511
|
+
<details>
|
|
512
|
+
<summary>Rainfall & Precipitation (14)</summary>
|
|
513
|
+
|
|
514
|
+
- **get_rainfall_data** — NOAA Atlas 14 precipitation frequency estimates
|
|
515
|
+
- **get_idf_curves** — Intensity-Duration-Frequency curve data
|
|
516
|
+
- **generate_hyetograph** — Design storm rainfall distribution over time
|
|
517
|
+
- **export_hyetograph** — Export hyetograph as CSV/JSON for modeling software
|
|
518
|
+
- **list_rainfall_distributions** — All available temporal distribution types
|
|
519
|
+
- **get_rainfall_distribution** — Recommended SCS distribution for a location
|
|
520
|
+
- **get_climate_scenarios** — Available climate change scenarios and horizons
|
|
521
|
+
- **get_climate_change_factors** — Climate adjustment multipliers for a location
|
|
522
|
+
- **get_climate_change_rainfall_projection** — Future rainfall under climate scenarios
|
|
523
|
+
- **get_rainfall_uncertainty_bounds** — Atlas 14 confidence intervals
|
|
524
|
+
- **generate_uncertainty_envelope** — Monte Carlo uncertainty bands for design storms
|
|
525
|
+
- **run_rainfall_sensitivity_analysis** — Parameter sensitivity analysis
|
|
526
|
+
- **get_design_approaches** — Risk-based design confidence levels
|
|
527
|
+
- **check_rainfall_service_status** — NOAA Atlas 14 availability check
|
|
528
|
+
</details>
|
|
529
|
+
|
|
530
|
+
<details>
|
|
531
|
+
<summary>Watershed & Hydrology (5)</summary>
|
|
532
|
+
|
|
533
|
+
- **delineate_watershed** — Trace watershed boundary from a pour point (USGS StreamStats)
|
|
534
|
+
- **get_watershed_characteristics** — Basin physical/hydrologic parameters
|
|
535
|
+
- **get_flow_statistics** — Peak and low flow estimates (regional regression)
|
|
536
|
+
- **get_flowlines** — Stream network from NHD
|
|
537
|
+
- **get_watershed_water_quality** — Water quality in the containing watershed
|
|
538
|
+
</details>
|
|
539
|
+
|
|
540
|
+
<details>
|
|
541
|
+
<summary>Hydrology Toolkit (3)</summary>
|
|
542
|
+
|
|
543
|
+
- **analyze_hydrology** — Complete hydrologic analysis (CN, Tc, SCS runoff, peak flow)
|
|
544
|
+
- **get_hydrology_distributions** — Available rainfall distributions for analysis
|
|
545
|
+
- **get_hydrology_distribution_for_location** — Recommended distribution for a point
|
|
546
|
+
</details>
|
|
547
|
+
|
|
548
|
+
<details>
|
|
549
|
+
<summary>Curve Number / Runoff (3)</summary>
|
|
550
|
+
|
|
551
|
+
- **lookup_curve_number** — SCS CN for a land use + soil type combination
|
|
552
|
+
- **get_curve_number_tables** — Complete CN lookup tables
|
|
553
|
+
- **analyze_curve_numbers** — Weighted CN calculation for catchment areas
|
|
554
|
+
</details>
|
|
555
|
+
|
|
556
|
+
<details>
|
|
557
|
+
<summary>Water Quality (3)</summary>
|
|
558
|
+
|
|
559
|
+
- **get_water_quality** — EPA ATTAINS impairment data with downstream trace
|
|
560
|
+
- **get_water_impairments** — Quick impairment check by HUC-12
|
|
561
|
+
- **get_watershed_for_point** — Identify HUC-12 watershed for a location
|
|
562
|
+
</details>
|
|
563
|
+
|
|
564
|
+
<details>
|
|
565
|
+
<summary>Waterway Permits (2)</summary>
|
|
566
|
+
|
|
567
|
+
- **find_water_features** — Find streams, wetlands, waterbodies in an area
|
|
568
|
+
- **analyze_permit_requirements** — Determine required permits (Section 404, NPDES, etc.)
|
|
569
|
+
</details>
|
|
570
|
+
|
|
571
|
+
<details>
|
|
572
|
+
<summary>Elevation & Terrain (7)</summary>
|
|
573
|
+
|
|
574
|
+
- **get_elevation_stats** — Min/max/mean elevation (USGS 3DEP)
|
|
575
|
+
- **get_contour_lines** — Generate topographic contour lines
|
|
576
|
+
- **get_contour_interval_options** — Available contour intervals
|
|
577
|
+
- **export_dem** — Export DEM as GeoTIFF (1m/10m/30m)
|
|
578
|
+
- **export_contours** — Export contour lines as GeoJSON
|
|
579
|
+
- **check_dem_availability** — Check which resolutions are available
|
|
580
|
+
- **get_dem_resolution_options** — Available DEM resolutions
|
|
581
|
+
</details>
|
|
582
|
+
|
|
583
|
+
<details>
|
|
584
|
+
<summary>Land Use / Land Cover (1)</summary>
|
|
585
|
+
|
|
586
|
+
- **export_land_use** — NLCD land cover data (GeoTIFF or vector)
|
|
587
|
+
</details>
|
|
588
|
+
|
|
589
|
+
<details>
|
|
590
|
+
<summary>Monitoring Stations (3)</summary>
|
|
591
|
+
|
|
592
|
+
- **find_monitoring_stations** — Search for USGS/NOAA/EPA stations
|
|
593
|
+
- **search_stations** — Search stations by name or ID
|
|
594
|
+
- **get_station_types** — Available station type configurations
|
|
595
|
+
</details>
|
|
596
|
+
|
|
597
|
+
<details>
|
|
598
|
+
<summary>Gage Intelligence — Gauged Sites (9)</summary>
|
|
599
|
+
|
|
600
|
+
- **get_flood_frequency_analysis** — Bulletin 17C flood frequency at a USGS gauge
|
|
601
|
+
- **get_flow_duration_curve** — Flow duration curve and percentiles
|
|
602
|
+
- **get_low_flow_statistics** — 7Q10, 7Q2, harmonic mean (NPDES critical flows)
|
|
603
|
+
- **get_storm_events** — Detect and analyze historical storm events
|
|
604
|
+
- **get_storm_event_detail** — Detailed data for a specific storm event
|
|
605
|
+
- **export_storm_event_for_modeling** — Export storm event for HEC-HMS
|
|
606
|
+
- **get_gage_summary** — Quick overview of available data at a gauge
|
|
607
|
+
- **get_published_gage_statistics** — Official USGS GageStats values
|
|
608
|
+
- **compare_computed_vs_published_stats** — QA comparison of computed vs. published
|
|
609
|
+
</details>
|
|
610
|
+
|
|
611
|
+
<details>
|
|
612
|
+
<summary>Gage Intelligence — Ungaged Sites (4)</summary>
|
|
613
|
+
|
|
614
|
+
- **estimate_ungaged_flood_frequency** — NSS regional regression estimates
|
|
615
|
+
- **estimate_all_ungaged_statistics** — All available statistics for ungaged site
|
|
616
|
+
- **get_ungaged_nss_regions** — Available NSS regions by state
|
|
617
|
+
- **get_ungaged_required_parameters** — Required basin characteristics for estimation
|
|
618
|
+
</details>
|
|
619
|
+
|
|
620
|
+
<details>
|
|
621
|
+
<summary>Gage Intelligence — Watershed Similarity (4)</summary>
|
|
622
|
+
|
|
623
|
+
- **find_similar_watersheds** — Find analog gauged watersheds
|
|
624
|
+
- **find_similar_watersheds_with_stats** — Similar watersheds with published stats
|
|
625
|
+
- **recommend_index_gage** — Best reference gage for flow transfer
|
|
626
|
+
- **transfer_flood_statistics** — Transfer statistics via drainage area ratio
|
|
627
|
+
</details>
|
|
628
|
+
|
|
629
|
+
<details>
|
|
630
|
+
<summary>Site Analysis & Reports (7)</summary>
|
|
631
|
+
|
|
632
|
+
- **generate_site_analysis** — Comprehensive environmental site analysis
|
|
633
|
+
- **get_site_analysis_status** — Check analysis job status
|
|
634
|
+
- **generate_constraints_report** — Environmental constraints assessment
|
|
635
|
+
- **get_constraints_report_status** — Check constraints report status
|
|
636
|
+
- **get_constraints_config** — Available constraint configuration options
|
|
637
|
+
- **generate_developability_report** — Site development feasibility score (0-100)
|
|
638
|
+
- **get_developability_config** — Scoring methodology and options
|
|
639
|
+
</details>
|
|
640
|
+
|
|
641
|
+
<details>
|
|
642
|
+
<summary>Export (3)</summary>
|
|
643
|
+
|
|
644
|
+
- **get_export_options** — Available formats and CRS options
|
|
645
|
+
- **export_data** — Export to GeoJSON, Shapefile, KML, CSV, GeoPackage
|
|
646
|
+
- **get_export_status** — Check export job status
|
|
647
|
+
</details>
|
|
648
|
+
|
|
649
|
+
<details>
|
|
650
|
+
<summary>Utilities (8)</summary>
|
|
651
|
+
|
|
652
|
+
- **geocode_address** — Convert address to coordinates
|
|
653
|
+
- **check_api_status** — Check all data source connectivity
|
|
654
|
+
- **check_specific_api_status** — Check a specific API's status
|
|
655
|
+
- **get_firm_panels** — FEMA FIRM map panel numbers
|
|
656
|
+
- **get_huc_watersheds** — HUC watershed boundaries
|
|
657
|
+
- **get_huc_watershed_by_code** — Specific watershed by HUC code
|
|
658
|
+
- **export_satellite_imagery** — Aerial/satellite imagery as GeoTIFF
|
|
659
|
+
- **get_satellite_resolution_options** — Available imagery resolutions
|
|
660
|
+
</details>
|
|
661
|
+
|
|
662
|
+
---
|
|
663
|
+
|
|
664
|
+
## Use Cases
|
|
665
|
+
|
|
666
|
+
### Civil & Environmental Engineering
|
|
667
|
+
- Stormwater design: rainfall (Atlas 14, IDF curves, hyetographs), curve numbers, time of concentration, peak discharge
|
|
668
|
+
- Flood analysis: Bulletin 17C flood frequency, flow duration curves, regional regression estimates
|
|
669
|
+
- Watershed delineation and hydrologic modeling inputs (HEC-HMS, SWMM)
|
|
670
|
+
- Low-flow analysis for NPDES permits (7Q10, 7Q2, harmonic mean flow)
|
|
671
|
+
- Ungaged site estimation using NSS regression equations and watershed similarity
|
|
672
|
+
- Climate-adjusted design storms for infrastructure resilience
|
|
673
|
+
|
|
674
|
+
### Real Estate & Development
|
|
675
|
+
- Environmental due diligence for property transactions
|
|
676
|
+
- Site feasibility and developability scoring (0-100 scale)
|
|
677
|
+
- Flood zone, wetland, and contamination screening
|
|
678
|
+
- Permit pathway analysis (Section 404, NPDES, floodplain development)
|
|
679
|
+
|
|
680
|
+
### Environmental Consulting
|
|
681
|
+
- Phase I ESA desktop data gathering (EPA sites, water quality)
|
|
682
|
+
- Wetland delineation support (NWI + soils + hydrology)
|
|
683
|
+
- Endangered species habitat screening (USFWS critical habitat)
|
|
684
|
+
- Water quality impairment assessment (EPA ATTAINS 303(d) list)
|
|
685
|
+
|
|
686
|
+
### AI-Powered Research
|
|
687
|
+
- Natural language queries across 28+ federal databases
|
|
688
|
+
- Automated environmental screening reports
|
|
689
|
+
- Cross-agency data correlation and analysis
|
|
690
|
+
|
|
691
|
+
---
|
|
692
|
+
|
|
693
|
+
## Example Workflows
|
|
694
|
+
|
|
695
|
+
### Quick Site Screening
|
|
696
|
+
```
|
|
697
|
+
User: "What environmental concerns are there at 456 Oak Ave, Houston TX?"
|
|
698
|
+
|
|
699
|
+
1. geocode_address → get coordinates
|
|
700
|
+
2. get_environmental_data_near_point → flood zones, wetlands, soils, EPA sites
|
|
701
|
+
3. Summarize findings in plain language
|
|
702
|
+
```
|
|
703
|
+
|
|
704
|
+
### Stormwater Design Package
|
|
705
|
+
```
|
|
706
|
+
User: "I need a complete stormwater design package for this 50-acre site in Dallas"
|
|
707
|
+
|
|
708
|
+
1. geocode_address → coordinates
|
|
709
|
+
2. get_rainfall_data → Atlas 14 depths for all return periods
|
|
710
|
+
3. get_rainfall_distribution → SCS Type III for Dallas
|
|
711
|
+
4. generate_hyetograph → 25-year, 24-hour design storm
|
|
712
|
+
5. delineate_watershed → drainage area boundary
|
|
713
|
+
6. analyze_curve_numbers → weighted CN from land use + soils
|
|
714
|
+
7. analyze_hydrology → time of concentration + peak discharge
|
|
715
|
+
8. get_water_quality → receiving water impairments
|
|
716
|
+
9. analyze_permit_requirements → required permits
|
|
717
|
+
```
|
|
718
|
+
|
|
719
|
+
### Ungaged Flood Estimation
|
|
720
|
+
```
|
|
721
|
+
User: "What's the 100-year flood at 30.5, -97.8? There's no gauge there."
|
|
722
|
+
|
|
723
|
+
1. get_ungaged_nss_regions → find the NSS region for Texas
|
|
724
|
+
2. get_watershed_characteristics → get basin parameters
|
|
725
|
+
3. estimate_ungaged_flood_frequency → regional regression estimate
|
|
726
|
+
4. find_similar_watersheds_with_stats → validate with nearby gauged data
|
|
727
|
+
5. recommend_index_gage → find best reference gage
|
|
728
|
+
6. transfer_flood_statistics → drainage area ratio transfer for comparison
|
|
729
|
+
```
|
|
730
|
+
|
|
731
|
+
### Environmental Due Diligence
|
|
732
|
+
```
|
|
733
|
+
User: "Run full environmental due diligence on this 20-acre parcel"
|
|
734
|
+
|
|
735
|
+
1. generate_site_analysis → comprehensive environmental report
|
|
736
|
+
2. generate_developability_report → 0-100 feasibility score
|
|
737
|
+
3. find_water_features → jurisdictional waters on site
|
|
738
|
+
4. analyze_permit_requirements → permit pathway and costs
|
|
739
|
+
5. get_water_quality → downstream receiving water assessment
|
|
740
|
+
```
|
|
741
|
+
|
|
742
|
+
---
|
|
743
|
+
|
|
744
|
+
## Contributing
|
|
745
|
+
|
|
746
|
+
Contributions welcome! Please open an issue or pull request.
|
|
747
|
+
|
|
748
|
+
## License
|
|
749
|
+
|
|
750
|
+
MIT
|
|
751
|
+
|
|
752
|
+
## Links
|
|
753
|
+
|
|
754
|
+
- **Web App**: [geotapdata.com](https://geotapdata.com)
|
|
755
|
+
- **API Docs (JSON)**: [geotapdata.com/api/v1/docs](https://geotapdata.com/api/v1/docs)
|
|
756
|
+
- **Issues**: [GitHub Issues](https://github.com/jcholly/geotap-developer/issues)
|
|
757
|
+
- **npm**: [geotap-mcp-server](https://www.npmjs.com/package/geotap-mcp-server)
|