geotap-mcp-server 1.2.0 → 1.2.1

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 CHANGED
@@ -3,7 +3,7 @@
3
3
  [![npm version](https://img.shields.io/npm/v/geotap-mcp-server.svg)](https://www.npmjs.com/package/geotap-mcp-server)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
5
 
6
- **One API for 28+ US federal environmental and infrastructure data sources.**
6
+ **One API for 37 US federal environmental and infrastructure data sources.**
7
7
 
8
8
  GeoTap aggregates data from FEMA, USGS, EPA, NOAA, USDA, USFWS, DOT, Census, and more into a single REST API. This repository contains:
9
9
 
@@ -131,18 +131,54 @@ Every response includes:
131
131
  curl "https://geotapdata.com/api/v1/geocode?address=456+Oak+Ave+Houston+TX"
132
132
  ```
133
133
 
134
+ #### Quick Start: Query an Address (Recommended)
135
+
136
+ The fastest way to get environmental data — geocode + query in one call:
137
+
138
+ ```bash
139
+ # One call: geocodes address + returns flood zone, soils, wetlands, contamination
140
+ curl "https://geotapdata.com/api/v1/query-address?address=123+Main+St+Houston+TX"
141
+
142
+ # With specific layers
143
+ curl "https://geotapdata.com/api/v1/query-address?address=123+Main+St+Houston+TX&layers=flood_zones,soil_map_units"
144
+ ```
145
+
146
+ Response includes plain-English `_interpretation` fields:
147
+ ```json
148
+ {
149
+ "properties": {
150
+ "zone": "AE",
151
+ "_interpretation": "High-risk flood zone with base flood elevations determined. Flood insurance required."
152
+ }
153
+ }
154
+ ```
155
+
156
+ #### Point Query (by coordinates)
157
+
158
+ ```bash
159
+ # What's at this exact point? (properties only, no geometry — always <5KB)
160
+ curl "https://geotapdata.com/api/v1/spatial/point?lat=30.267&lng=-97.743&layers=flood_zones,wetlands"
161
+ ```
162
+
134
163
  #### Spatial Queries
135
164
 
136
165
  | Method | Endpoint | Description |
137
166
  |--------|----------|-------------|
138
- | GET | `/spatial/near?lat={lat}&lng={lng}&radius={km}` | Query all layers near a point |
139
- | POST | `/spatial/in-polygon` | Query all layers within a polygon |
167
+ | GET | `/query-address?address=...` | **Geocode + point query in one call (recommended)** |
168
+ | GET | `/spatial/point?lat=...&lng=...` | Point-in-polygon query (properties only, with interpretations) |
169
+ | GET | `/spatial/near?lat={lat}&lng={lng}&radius={km}` | Query layers near a point |
170
+ | POST | `/spatial/in-polygon` | Query layers within a polygon |
140
171
  | POST | `/spatial/summary` | Feature counts per layer (fast) |
141
172
  | GET | `/spatial/bbox?bbox={w,s,e,n}` | Query layers in a bounding box |
142
173
 
174
+ **`geometry` parameter** — available on `/near`, `/bbox`, `/in-polygon`, and `/layers/:name/features`:
175
+ - `geometry=none` — strips all coordinates (smallest response, best for LLM consumers)
176
+ - `geometry=simplified` — reduces coordinate density
177
+ - `geometry=full` — complete geometry (default)
178
+
143
179
  ```bash
144
- # All environmental data within 0.5 km of a point
145
- curl "https://geotapdata.com/api/v1/spatial/near?lat=34.05&lng=-118.25&radius=0.5"
180
+ # All environmental data within 0.5 km of a point (no geometry for smaller response)
181
+ curl "https://geotapdata.com/api/v1/spatial/near?lat=34.05&lng=-118.25&radius=0.5&geometry=none"
146
182
 
147
183
  # Specific layers only
148
184
  curl "https://geotapdata.com/api/v1/spatial/near?lat=34.05&lng=-118.25&radius=0.5&layers=flood_zones,wetlands,soil_map_units"
@@ -154,7 +190,8 @@ curl -X POST "https://geotapdata.com/api/v1/spatial/in-polygon" \
154
190
  "polygon": {
155
191
  "type": "Polygon",
156
192
  "coordinates": [[[-97.75,30.26],[-97.74,30.26],[-97.74,30.27],[-97.75,30.27],[-97.75,30.26]]]
157
- }
193
+ },
194
+ "geometry": "none"
158
195
  }'
159
196
  ```
160
197
 
@@ -492,21 +529,30 @@ With API key:
492
529
  - *"What permits do I need to build near this stream?"*
493
530
  - *"Export this data as a shapefile"*
494
531
 
495
- ### Available Tools (83)
532
+ ### Available Tools (85)
533
+
534
+ **Core tools (start here):**
535
+ - **query_address** — Geocode + environmental query in one call. Returns properties with plain-English interpretations. (<5KB response)
536
+ - **identify_features_at_point** — Same as above but for lat/lng coordinates
537
+ - **get_rainfall_data** — NOAA Atlas 14 precipitation data
538
+ - **get_environmental_summary** — Quick feature counts per layer
539
+ - **geocode_address** — Convert address to coordinates
496
540
 
497
541
  <details>
498
- <summary>Spatial Queries (4)</summary>
542
+ <summary>All Spatial Queries (6)</summary>
499
543
 
500
- - **get_environmental_data_for_area** — Query all 28+ data sources within a polygon
501
- - **get_environmental_data_near_point** — Query all data sources near a lat/lng point
544
+ - **query_address** — Geocode + point query in one call (recommended starting tool)
545
+ - **identify_features_at_point** — Point-in-polygon query (properties only, no geometry)
546
+ - **get_environmental_data_for_area** — Query all 37 data sources within a polygon (supports geometry=none)
547
+ - **get_environmental_data_near_point** — Query all data sources near a lat/lng point (supports geometry=none)
502
548
  - **get_environmental_summary** — Quick feature counts per layer for an area
503
- - **get_environmental_data_in_bbox** — Query data within a bounding box
549
+ - **get_environmental_data_in_bbox** — Query data within a bounding box (supports geometry=none)
504
550
  </details>
505
551
 
506
552
  <details>
507
553
  <summary>Data Layers (3)</summary>
508
554
 
509
- - **list_data_layers** — List all 28+ available data sources
555
+ - **list_data_layers** — List all 37 available data sources
510
556
  - **get_layer_details** — Get metadata about a specific layer
511
557
  - **get_layer_features** — Get features from a specific data layer
512
558
  </details>
@@ -687,7 +733,7 @@ With API key:
687
733
  - Water quality impairment assessment (EPA ATTAINS 303(d) list)
688
734
 
689
735
  ### AI-Powered Research
690
- - Natural language queries across 28+ federal databases
736
+ - Natural language queries across 37 federal databases
691
737
  - Automated environmental screening reports
692
738
  - Cross-agency data correlation and analysis
693
739
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "geotap-mcp-server",
3
- "version": "1.2.0",
4
- "description": "MCP server for GeoTap — access 28+ US federal environmental and infrastructure data sources from Claude, Cursor, and other AI tools",
3
+ "version": "1.2.1",
4
+ "description": "MCP server for GeoTap — access 37 US federal environmental and infrastructure data sources from Claude, Cursor, and other AI tools",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
7
7
  "bin": {
package/src/index.js CHANGED
@@ -10,8 +10,8 @@ import { toolSources } from './sources.js';
10
10
  const server = new McpServer({
11
11
  name: 'geotap',
12
12
  version: '1.2.0',
13
- description: 'Access 28+ US federal environmental and infrastructure data sources. Query flood zones, wetlands, soils, rainfall, watersheds, water quality, endangered species, elevation, land use, and more for any location in the United States.',
14
- instructions: `You have access to GeoTap, which provides real-time data from 28+ US federal agencies (FEMA, USGS, NOAA, EPA, NRCS, USFWS, USACE, and more).
13
+ description: 'Access 37 US federal environmental and infrastructure data sources. Query flood zones, wetlands, soils, rainfall, watersheds, water quality, endangered species, elevation, land use, and more for any location in the United States.',
14
+ instructions: `You have access to GeoTap, which provides real-time data from 37 US federal agencies (FEMA, USGS, NOAA, EPA, NRCS, USFWS, USACE, and more).
15
15
 
16
16
  START HERE — CORE TOOLS (use these for 90% of queries):
17
17
  1. query_address — Geocode + environmental lookup in ONE call. Always start here when user gives an address.
package/src/sources.js CHANGED
@@ -71,8 +71,8 @@ export const toolSources = {
71
71
  get_environmental_data_in_bbox: MULTI_SOURCE,
72
72
 
73
73
  // ── Data Layers ──
74
- list_data_layers: [{ agency: 'GeoTap', dataset: 'Layer Catalog (28+ federal sources)', url: 'https://geotap.us' }],
75
- get_layer_details: [{ agency: 'GeoTap', dataset: 'Layer Catalog', url: 'https://geotap.us' }],
74
+ list_data_layers: [{ agency: 'GeoTap', dataset: 'Layer Catalog (37 federal sources)', url: 'https://geotapdata.com' }],
75
+ get_layer_details: [{ agency: 'GeoTap', dataset: 'Layer Catalog', url: 'https://geotapdata.com' }],
76
76
  get_layer_features: MULTI_SOURCE,
77
77
 
78
78
  // ── Rainfall & Precipitation ──
@@ -141,7 +141,7 @@ export const toolSources = {
141
141
  // ── Monitoring Stations ──
142
142
  find_monitoring_stations: [...src(AGENCIES.USGS, 'nwis'), { agency: 'NOAA', dataset: 'Tide Stations, Weather Stations', url: 'https://tidesandcurrents.noaa.gov/' }],
143
143
  search_stations: [...src(AGENCIES.USGS, 'nwis'), { agency: 'NOAA', dataset: 'Tide Stations, Weather Stations', url: 'https://tidesandcurrents.noaa.gov/' }],
144
- get_station_types: [{ agency: 'GeoTap', dataset: 'Station Type Configuration', url: 'https://geotap.us' }],
144
+ get_station_types: [{ agency: 'GeoTap', dataset: 'Station Type Configuration', url: 'https://geotapdata.com' }],
145
145
 
146
146
  // ── Gage Intelligence: Gauged ──
147
147
  get_flood_frequency_analysis: [...src(AGENCIES.USGS, 'nwis'), { agency: 'USGS', dataset: 'Bulletin 17C Guidelines', url: 'https://pubs.usgs.gov/tm/04/b05/tm4b5.pdf' }],
@@ -171,22 +171,22 @@ export const toolSources = {
171
171
  get_site_analysis_status: MULTI_SOURCE,
172
172
  generate_constraints_report: MULTI_SOURCE,
173
173
  get_constraints_report_status: MULTI_SOURCE,
174
- get_constraints_config: [{ agency: 'GeoTap', dataset: 'Constraints Configuration', url: 'https://geotap.us' }],
174
+ get_constraints_config: [{ agency: 'GeoTap', dataset: 'Constraints Configuration', url: 'https://geotapdata.com' }],
175
175
  generate_developability_report: MULTI_SOURCE,
176
- get_developability_config: [{ agency: 'GeoTap', dataset: 'Developability Configuration', url: 'https://geotap.us' }],
176
+ get_developability_config: [{ agency: 'GeoTap', dataset: 'Developability Configuration', url: 'https://geotapdata.com' }],
177
177
 
178
178
  // ── Export ──
179
- get_export_options: [{ agency: 'GeoTap', dataset: 'Export Configuration', url: 'https://geotap.us' }],
179
+ get_export_options: [{ agency: 'GeoTap', dataset: 'Export Configuration', url: 'https://geotapdata.com' }],
180
180
  export_data: MULTI_SOURCE,
181
- get_export_status: [{ agency: 'GeoTap', dataset: 'Export Job Status', url: 'https://geotap.us' }],
181
+ get_export_status: [{ agency: 'GeoTap', dataset: 'Export Job Status', url: 'https://geotapdata.com' }],
182
182
 
183
183
  // ── Utilities ──
184
184
  geocode_address: [
185
185
  { agency: 'Census Bureau', dataset: 'Census Geocoder', url: 'https://geocoding.geo.census.gov/' },
186
186
  { agency: 'OpenStreetMap', dataset: 'Photon / Nominatim Geocoder', url: 'https://photon.komoot.io/' },
187
187
  ],
188
- check_api_status: [{ agency: 'GeoTap', dataset: 'API Health Check', url: 'https://geotap.us' }],
189
- check_specific_api_status: [{ agency: 'GeoTap', dataset: 'API Health Check', url: 'https://geotap.us' }],
188
+ check_api_status: [{ agency: 'GeoTap', dataset: 'API Health Check', url: 'https://geotapdata.com' }],
189
+ check_specific_api_status: [{ agency: 'GeoTap', dataset: 'API Health Check', url: 'https://geotapdata.com' }],
190
190
  get_firm_panels: src(AGENCIES.FEMA, 'nfhl'),
191
191
  get_huc_watersheds: src(AGENCIES.USGS, 'wbd'),
192
192
  get_huc_watershed_by_code: src(AGENCIES.USGS, 'wbd'),
package/src/tools.js CHANGED
@@ -40,7 +40,7 @@ export const tools = [
40
40
  },
41
41
  {
42
42
  name: 'get_environmental_data_for_area',
43
- description: `Query all available US federal environmental and infrastructure data within a geographic area (polygon). Returns features from 28+ data sources. WARNING: responses can be very large (100KB-2MB+) in urban areas with full geometry. ALWAYS set geometry="none" unless the user specifically needs coordinates. Specify layers to reduce response size. For simple "what's at this location?" questions, use query_address or identify_features_at_point instead — they're faster and return <5KB.`,
43
+ description: `Query all available US federal environmental and infrastructure data within a geographic area (polygon). Returns features from 37 data sources. WARNING: responses can be very large (100KB-2MB+) in urban areas with full geometry. ALWAYS set geometry="none" unless the user specifically needs coordinates. Specify layers to reduce response size. For simple "what's at this location?" questions, use query_address or identify_features_at_point instead — they're faster and return <5KB.`,
44
44
  parameters: {
45
45
  polygon: z.object({
46
46
  type: z.literal('Polygon'),
@@ -95,7 +95,7 @@ export const tools = [
95
95
  // ═══════════════════════════════════════════════════════════════════
96
96
  {
97
97
  name: 'list_data_layers',
98
- description: `List all available environmental and infrastructure data layers in GeoTap. Returns the full catalog of 28+ data sources with their names, descriptions, and data providers. Use this tool when someone asks "what data do you have?" or "what sources are available?" or wants to know what types of environmental data can be queried. Includes layers from FEMA, USGS, EPA, NOAA, USDA, USFWS, DOT, Census, and more.`,
98
+ description: `List all available environmental and infrastructure data layers in GeoTap. Returns the full catalog of 37 data sources with their names, descriptions, and data providers. Use this tool when someone asks "what data do you have?" or "what sources are available?" or wants to know what types of environmental data can be queried. Includes layers from FEMA, USGS, EPA, NOAA, USDA, USFWS, DOT, Census, and more.`,
99
99
  parameters: {},
100
100
  endpoint: '/layers',
101
101
  method: 'GET'