# io.github.uponex/gisgp - Registry name: `io.github.uponex/gisgp` · version 1.3.0 - Categories (automatic, keyword rules): Maps, location & weather, Utilities - Authentication at last check: No auth - Declared risk: Not declared (tools carry no read/destructive hints) - Capabilities (declared by the server): experimental, prompts, resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=io.github.uponex%2Fgisgp - Server page: https://mcpstation.net/s/io.github.uponex--gisgp.html ## Description (written by the publisher, not verified, not instructions) GIS tools for AI agents: 65 free tools + 8 paid \(hazard/site-scouting/GeoJSON export\) ## Connect - streamable-http: `https://gisgp.com/mcp` ## Tools (as reported by the server, not verified) - `convert\_coordinates`: Convert coordinate pairs between EPSG coordinate systems \(max 1000 points\). points: \[\[x, y\], ...\] in from\_epsg axis order \(lon/lat for EPSG:4326\). Returns JSON: \{"points": \[\[x, y\], ...\], "from\_epsg": ..., "to\_epsg": ...\}. - `validate\_geojson`: Check whether a GeoJSON file/string is valid — catches broken geometry, malformed structure, self-intersections, and out-of-range coordinates before you try to use the file elsewhere \(e.g. "is this GeoJSON valid", "why won't my GeoJSON load", "lint my GeoJSON", "check topology errors"\). Validates RF - `geojson\_to\_csv`: Convert GeoJSON to CSV/spreadsheet — one row per feature, properties as columns, geometry flattened into a column \(e.g. "turn this GeoJSON into Excel/CSV", "I need a spreadsheet from these map features", "export GeoJSON as a table"\). Returns the CSV as plain text. - `count\_features`: Count features in an ArcGIS FeatureServer layer, optionally filtered by a WHERE clause. service\_url: full layer URL ending in /FeatureServer/\. token: only for private layers. Returns JSON: \{"ok": true, "count": ..., "name": ..., "geometry": ...\}. - `extract\_domains`: Extract coded value domains from an ArcGIS FeatureServer layer. Returns JSON: \{"layer\_name": ..., "domains": \{field: \{name, field\_alias, codes\}\}\}. - `check\_field\_types`: Inspect the field schema of an ArcGIS FeatureServer layer. Returns JSON: \{layer\_name, geometry\_type, fields:\[\{name, alias, type, length, nullable, has\_domain\}\]\} — useful before importing/mapping data. - `check\_service\_health`: Check whether an ArcGIS FeatureServer layer is reachable and responsive. Returns JSON: \{ok, ms \(latency\), name, geometry\_type, field\_count, record\_count, capabilities, max\_record\_count\}. - `rest\_explore`: List the layers and tables of an ArcGIS FeatureServer/MapServer root. Point at a service root to enumerate its layers/tables, or at a single layer URL to describe it. Returns JSON: \{is\_server, layers:\[\{id, name, type\}\]\}. - `compare\_schemas`: Compare the field schemas of two ArcGIS FeatureServer layers. Returns JSON diff: \{added, removed, changed:\[\{field, diffs\}\], same, geometry\_match, identical\} — useful for QA before an import or migration. - `shapefile\_to\_geojson`: Convert a Shapefile ZIP \(base64-encoded .zip with .shp/.dbf/.shx\[/.prj\]\) to a GeoJSON FeatureCollection. Reprojects to WGS84 if a .prj says otherwise. Returns JSON: \{geojson: \{...\}, reprojection\_notice: str\|null\}. - `kml\_to\_geojson`: Convert Google Earth / Google My Maps KML \(2.0–2.2\) to GeoJSON — the common request when someone exported a map from Google Earth or Google My Maps and needs it in a format other GIS tools/APIs accept \(e.g. "convert my Google Earth file to GeoJSON", "KML to GeoJSON"\). Returns the GeoJSON FeatureColl - `gpx\_to\_geojson`: Convert a GPS track/route file \(GPX — from Garmin, Strava exports, hiking/cycling apps, waypoints\) to GeoJSON \(e.g. "convert my GPS track to GeoJSON", "GPX to GeoJSON", "import my Strava route"\). Returns the GeoJSON FeatureCollection as a JSON string. - `geojson\_to\_gpx`: Convert GeoJSON to a GPX file — e.g. "export this as a GPS track", "GeoJSON to GPX for my Garmin", "make waypoints from this GeoJSON". Points become GPX waypoints; lines and polygon rings become GPX tracks \(GPX has no native polygon type\). Non-name properties are dropped — GPX has no generic attribu - `flatgeobuf\_to\_geojson`: Convert a FlatGeobuf file \(base64-encoded .fgb\) to a GeoJSON FeatureCollection. FlatGeobuf is a cloud-native binary format with a built-in spatial index, used for fast HTTP-range-request streaming \(e.g. deck.gl, MapLibre, QGIS cloud layers\). Returns the GeoJSON FeatureCollection as a JSON string. - `geojson\_to\_flatgeobuf`: Convert GeoJSON to FlatGeobuf \(.fgb\) — the cloud-native binary format with a built-in spatial index. FlatGeobuf holds one geometry type per file, so mixed point/line/polygon input is automatically split into one .fgb per category and returned inside a zip. Returns JSON: \{flatgeobuf\_base64\|flatgeobuf - `mapinfo\_tab\_to\_geojson`: Convert a MapInfo TAB file set \(base64-encoded .zip containing .tab + its .dat/.map/.id sidecar files\) to a GeoJSON FeatureCollection. MapInfo TAB is the native format of MapInfo Pro — a multi-file format on disk, always uploaded as a zip. Returns the GeoJSON FeatureCollection as a JSON string. - `geojson\_to\_mapinfo\_tab`: Convert GeoJSON to a MapInfo TAB file set, ready for MapInfo Pro. TAB is a multi-sidecar-file format \(.tab/.dat/.id/.map\) and single geometry type per file, like Shapefile — always returned as a zip, mixed point/line/polygon input is split into one .tab set per category. Returns JSON: \{mapinfo\_tab\_z - `query\_features`: Fetch actual feature records \(attributes + geometry\) from a FeatureServer layer. Free preview capped at 50 records \(WHERE filter + chosen fields\). Returns JSON: \{returned, total, truncated, geojson, note\}. Full unlimited export is a paid operation. - `query\_statistics`: Server-side aggregate stats on a numeric field of a FeatureServer layer. No records fetched — AGOL computes sum/avg/min/max/count \(also stddev/var\). Optional WHERE filter and group\_by field. Returns JSON: \{field, results:\[...\]\}. Cheap way to answer "what's the average/total of field X" without an ex - `geometry\_stats`: Compute area \(m²/km²\), length \(m/km\), vertex count, centroid and bbox of GeoJSON. Metric measurements use an equal-area projection so area/length are real metres. - `reproject\_geojson`: Change a GeoJSON's coordinate reference system \(CRS/projection\) — e.g. "reproject to Web Mercator", "convert WGS84 to UTM", "my coordinates are in the wrong CRS", "EPSG:4326 to EPSG:3857". Reprojects every geometry type between any two EPSG codes. - `simplify\_geometry`: Reduce the number of vertices in GeoJSON geometry \(Douglas-Peucker algorithm\) — e.g. "simplify this polygon", "this shape has too many points", "reduce vertex count for faster rendering". Tolerance in degrees; lower = more detail kept. - `reduce\_precision`: Round every coordinate to N decimal places to shrink a GeoJSON file's size — e.g. "my GeoJSON file is too big", "reduce coordinate precision", "strip excess decimal places". 6 decimals ≈ 11cm precision, plenty for most mapping use cases. - `csv\_to\_geojson`: Convert a CSV/spreadsheet with lat/lon \(or X/Y\) columns to GeoJSON — auto-detects the coordinate columns \(e.g. "map this spreadsheet", "CSV with lat/lon to GeoJSON", "turn my Excel export into map points"\). Returns a GeoJSON FeatureCollection as a JSON string. - `geojson\_to\_kml`: Convert GeoJSON to KML for Google Earth / Google My Maps \(e.g. "open this in Google Earth", "GeoJSON to KML", "make this viewable in Google My Maps"\). Returns the KML as plain text. - `geojson\_to\_shapefile`: Convert GeoJSON to an Esri Shapefile ZIP — the format ArcGIS Desktop Pro/QGIS/most legacy GIS software still expects \(e.g. "I need a shapefile for ArcGIS Pro", "GeoJSON to SHP", "convert for QGIS import"\). Returns JSON: \{shapefile\_zip\_base64, warnings\}. - `gpx\_to\_kml`: Convert a GPS track file \(GPX\) directly to KML for Google Earth — e.g. "open my Garmin/Strava track in Google Earth", "GPX to KML". - `kml\_to\_shapefile`: Convert a Google Earth/My Maps KML file directly to an Esri Shapefile ZIP — e.g. "Google Earth file to shapefile for ArcGIS", "KML to SHP". Returns JSON: \{shapefile\_zip\_base64, warnings\}. - `kml\_to\_gpx`: Convert a Google Earth/My Maps KML file directly to GPX — waypoints from Points, tracks from Lines/Polygons — e.g. "KML to GPX for my Garmin", "load this map on my GPS" \(2026-09-03, completes the reverse of the existing gpx\_to\_kml\). - `shapefile\_to\_gpx`: Convert a Shapefile ZIP \(base64-encoded .zip with .shp/.dbf/.shx\[/.prj\]\) directly to GPX — points become waypoints, lines/polygons become tracks \(2026-09-03\). Returns GPX 1.1 XML as plain text. - `gpx\_to\_shapefile`: Convert a GPS track file \(GPX\) directly to an Esri Shapefile ZIP — waypoints become points, tracks/routes become lines \(2026-09-03\). Returns JSON: \{shapefile\_zip\_base64, warnings\}. - `csv\_to\_gpx`: Convert a CSV with latitude/longitude columns directly to GPX waypoints \(2026-09-03\) — e.g. "these coordinates to a GPX for my GPS". Column names are auto-detected \(lat/latitude/y, lon/lng/longitude/x\). - `gpx\_to\_csv`: Convert a GPS track file \(GPX\) directly to CSV \(2026-09-03\) — waypoints get LATITUDE/LONGITUDE columns, tracks/routes get a GEOMETRY\_WKT column instead. - `wkt\_to\_geojson`: Convert a WKT \(Well-Known Text\) geometry string — the format PostGIS/SQL geometry columns print by default — to GeoJSON \(e.g. "this came from a PostGIS query", "WKT to GeoJSON", "parse this POLYGON\(...\) string"\). - `geojson\_to\_wkt`: Convert a GeoJSON geometry \(or a Feature's geometry\) to WKT — the format needed to insert geometry into PostGIS/SQL \(e.g. "I need this for a PostGIS INSERT", "GeoJSON to WKT", "geometry as WKT string"\). - `dxf\_to\_geojson`: Convert an AutoCAD DXF file's contents to GeoJSON — e.g. "convert this DXF to GeoJSON", "AutoCAD drawing to GIS format", "DXF export from Civil 3D to GeoJSON", "extract only the UTILITIES layer from this DXF". POINT/LINE/LWPOLYLINE/POLYLINE/ARC/CIRCLE/ELLIPSE/SPLINE/HATCH convert \(curves tessellated - `geojson\_to\_dxf`: Convert GeoJSON to an AutoCAD DXF file — e.g. "export this GeoJSON to DXF for AutoCAD", "GIS data to CAD format", "convert to .dxf for Civil 3D". Points become DXF POINT entities; lines and polygon rings become LWPOLYLINE entities. A feature's properties.layer \(if present\) is written back as the DXF - `list\_dxf\_layers`: List the distinct DXF layer names used in a drawing — e.g. "what layers does this DXF have", "list layers before I extract one". Real CAD exports organize entities into named layers \(BOUNDARY, UTILITIES, TEXT, ...\); use the result with dxf\_to\_geojson's \`layer\` param to pull out just one. Returns a J - `georeference\_dxf`: Reproject a DXF drawn in a local/arbitrary CAD coordinate system into real-world coordinates — e.g. "this DXF isn't in real coordinates, fix it", "georeference this site plan", "I know 2 points on this drawing's real location, convert the rest". Give exactly 2 control points as a JSON array: '\[\{"loc - `dxf\_to\_pdf\_report`: PAID \(150 credits\) — render a DXF drawing to a one-page PDF site-plan report \(vector plot + entity-type breakdown + layer list, base64- encoded PDF\) — e.g. "make a PDF of this site plan", "DXF to PDF report". No basemap \(DXF coordinates are usually local drawing units, not real lon/lat\) — use georef - `grade\_service`: Grade an ArcGIS FeatureServer layer A–F across 5 categories \(schema quality, data completeness, performance, maintenance, configuration\). Returns JSON: \{grade, score, categories:\[\{key, label, score, note\}\], archetype, insight, percentile, share\_url\} — share\_url is a public scorecard page you can sen - `audit\_service`: Full one-call QA report of an ArcGIS FeatureServer layer: health \(latency, record count, capabilities\) + field schema + coded domains + summary counts. One call replaces separate health/fields/domains lookups. Returns JSON: \{name, geometry\_type, health, fields, domains, summary\}. - `find\_layer\_issues`: Scan an ArcGIS FeatureServer layer for common problems: missing ObjectID, disabled query, stale data, all-null fields, features without geometry. Sample-based \(first 200 records\). Returns JSON: \{layer\_name, issues:\[\{severity, code, message\}\], issue\_count, sample\_size, note\}. - `share\_map`: Publish a GeoJSON FeatureCollection as a live, shareable map page on gisgp.com. Returns JSON: \{url, expires\_at\} — url is a public interactive map a human can open in a browser \(free links live 30 days\). Use it to hand off results of a GIS workflow visually instead of pasting raw GeoJSON. - `embed\_map\_snippet`: Ready-to-paste \ embed code for a live interactive map — thin wrapper around share\_map \(same live page, same 30-day TTL\), for embedding directly in a website/dashboard rather than sharing a link. Returns JSON: \{ok, embed\_html, url, expires\_at\}. - `buffer\_geojson`: Buffer every feature by a distance in METRES \(negative shrinks\). Geodesically accurate at any latitude \(each feature is buffered in a local equidistant projection\). Returns JSON \{ok, distance\_m, geojson\} where geojson is a FeatureCollection of buffer polygons. - `dissolve\_geojson`: Merge overlapping/adjacent geometries into one \(optionally grouped by a property field \`by\` → one dissolved feature per distinct value\). Returns JSON \{ok, by, group\_count, geojson\}. - `centroids\_geojson`: Get the center point of each polygon/line feature — e.g. "find the center of each parcel", "convert polygons to points for labeling", "centroid of each feature". Properties are kept. Returns JSON \{ok, geojson\} — a FeatureCollection of points. - `convex\_hull\_geojson`: Draw the smallest polygon that wraps around all input features \(a convex hull\) — e.g. "draw a boundary around these points", "find the outer perimeter of my data", "convex hull of these locations". Returns JSON \{ok, geojson\} — a single polygon. - `overlay\_geojson`: Combine two GeoJSON FeatureCollections with a boolean set operation. op: intersection \| difference \(a minus b\) \| symmetric\_difference \| union. Each side is unioned into one geometry first, then the operation is applied. Returns JSON \{ok, op, geojson\} — empty geojson means no overlap, not an error. - `spatial\_join\_geojson`: Attach properties from every B feature that satisfies a spatial predicate to each A feature \(as a \`\_matches\` list\). predicate: intersects \| within \| contains \| touches \| crosses \| overlaps. Returns JSON \{ok, predicate, match\_count, geojson\}. - `nearest\_features\_geojson`: For each feature in A, find the nearest feature in B by centroid-to- centroid geodesic distance. Attaches \`\_nearest\` properties and \`\_nearest\_distance\_m\`. Returns JSON \{ok, geojson\}. - `fix\_geometry`: Repair invalid geometries \(self-intersections, bad rings\) via GEOS make\_valid. Already-valid geometries are left untouched. Returns JSON \{ok, fixed\_count, feature\_count, geojson\}. - `geojson\_diff`: Compare two GeoJSON FeatureCollections — added/removed/changed features. Matched by an \`id\_field\` property if given, else by array position \(exact structural comparison, not topological equals\). Returns JSON \{ok, added, removed, changed, added\_count, removed\_count, changed\_count, unchanged\_count\}. - `epsg\_suggest`: Suggest the correct UTM EPSG code to project a WGS84 lon/lat into for accurate metric measurements \(buffer/area/distance\). Returns JSON \{ok, epsg, utm\_zone, hemisphere, name, warning\}. - `tile\_math`: Convert a WGS84 lon/lat + zoom level to Slippy Map \(XYZ\) tile x/y, that tile's lon/lat bbox, and its Bing quadkey. Returns JSON \{ok, zoom, x, y, tile\_bbox, quadkey\}. - `envelope\_geojson`: Get the bounding box \(min/max rectangle\) around each feature — e.g. "get the bounding box of this shape", "bbox for each feature", "rectangular extent of my geometry". Properties are kept. Returns JSON \{ok, geojson\}. - `minimum\_rotated\_rectangle`: Smallest-area rectangle wrapping all input features combined — can be tilted to fit tighter than a straight bounding box \(e.g. "tightest rectangle around this data", "minimum bounding rectangle", "oriented bounding box"\). Returns JSON \{ok, geojson\}. - `voronoi\_geojson`: Divide space into regions closest to each input point \(Voronoi diagram\) — e.g. "find the service area for each location", "which points are closest to which store", "Voronoi/Thiessen polygons". Non-point features use their centroid. Needs at least 2 points. Returns JSON \{ok, cell\_count, geojson\}. - `full\_service\_audit`: Complete one-call QA report: A-F grade + full audit \(health/fields/ domains/summary\) + issue scan, merged into one response — replaces 3 separate calls \(grade\_service + audit\_service + find\_layer\_issues\). Returns JSON: \{ok, grade, score, categories, archetype, insight, percentile, share\_url, audit: - `geometry\_health\_report`: Complete one-call GeoJSON health check: validate + auto-repair invalid geometry + stats \(area/length/vertices\) + bbox envelope, merged — replaces 4 separate calls \(validate\_geojson + fix\_geometry + geometry\_stats + envelope\_geojson\). Returns JSON: \{ok, valid, errors, warnings, fixed\_count, stats, en - `get\_terrain\_profile`: Get the ground elevation \(metres above sea level\) at a coordinate — e.g. "what's the elevation here", "is this point in a flood-risk lowland", "elevation at this address". Via Open-Meteo \(Copernicus DEM GLO-90, no key, free, \~90m resolution\). Returns JSON: \{ok, lon, lat, elevation\_m, source\}. - `get\_climate\_history`: Daily historical weather for a point/date range via Open-Meteo's ERA5-based archive \(no key, free, data back to 1940\). Dates are YYYY-MM-DD. Returns JSON: \{ok, daily: \{time, \...\}, source\}. - `classify\_land\_cover`: Land cover class at a WGS84 point via ESA CCI Land Cover 2018 \(ArcGIS Living Atlas ImageServer, no key, 300m resolution\). Returns JSON: \{ok, class\_code, class\_label, source\}. NOTE 2026-07-26: gated separately \(mcp\_layer1\_landcover, Off pending live smoke-check\) — swapped from the earlier ESA WorldCo - `analyze\_location`: Reverse-geocode a WGS84 point to country/region/locality via OSM Nominatim \(no key, free — fair-use rate limited, best-effort\). Returns JSON: \{ok, display\_name, country, country\_code, region, locality, source\}. - `geocode\_address`: Forward-geocode a free-text address to lon/lat. Default: OSM Nominatim \(no key, free, fair-use rate limited\) — the complement to analyze\_location's reverse geocode. Optional agol\_token: route through Esri's own World Geocoding Service instead for more authoritative matches — uses YOUR OWN AGOL crede - `offset\_coordinates`: Move a WGS84 point by a geodesic distance \(metres\) along a compass bearing \(0=N, 90=E, 180=S, 270=W\). Pure computation, no external API. Returns JSON: \{ok, lon, lat, origin\_lon, origin\_lat, distance\_m, bearing\_deg, source\}. - `detect\_coordinate\_order`: Detect whether \[x, y\] pairs are \[lon, lat\] or \[lat, lon\] — resolves a genuinely common real-world confusion \(one of the most-viewed GIS StackExchange questions ever, 550k+ views\). Certain when any value exceeds ±90 \(only longitude can\); honestly reports 'inconclusive' otherwise, never a fabricated g - `guess\_crs\_from\_coordinates`: Best-guess candidate CRS for raw \[x, y\] coordinates with no metadata \(e.g. a shapefile with a missing .prj\) — real demand signal \(79k+ views on GIS StackExchange\). Genuinely ambiguous by nature — returns ranked candidates with an honest 'not a certain identification' caveat, never a single confident - `parse\_coordinate`: Parse ANY single coordinate string a human might paste into WGS84 lat/lon — decimal degrees with any separator or an EU decimal comma, DMS \(42°41'51.7"N 23°19'18.9"E\), DDM / GPS style \(N 42° 41.535'\), NMEA \(4241.535,N,02319.314,E\), UTM with a zone/band \(34T 583000 4727000\), MGRS \(34TFN8300027000\), B - `format\_coordinate`: Express one WGS84 point in every common notation at once: decimal degrees, DMS, DDM, UTM \(zone/band/easting/northing\), MGRS and USNG, British National Grid reference \(inside GB only\), Geohash, Plus Code, Web Mercator metres, the ArcGIS Online "lon, lat" form, the best local UTM EPSG code, plus ready - `generate\_static\_map\_image`: Render a GeoJSON FeatureCollection/Feature to a static PNG map image \(base64 data URL\) — for embedding in reports/emails/documents, unlike share\_map's interactive live page. basemap: 'topo', 'streets', or 'satellite'. Reuses the exact rendering path already used inside PDF map reports, no new map-re - `assess\_grid\_exposure`: Electric grid infrastructure proximity at a US point: nearby substations + transmission lines within 10 miles \(community ArcGIS mirror of HIFLD data — proximity indicator, not a certified survey\). No key needed. Returns JSON: \{ok, substations: \{count, nearest, source\}, transmission\_lines: \{count, vo - `assess\_renewable\_site`: One-call solar/wind site-scouting indicator: terrain + land cover + 1-year solar/wind climate averages + grid proximity, combined from GISGP's existing free primitives \(no new external source\). No key needed. Returns JSON: \{ok, terrain, land\_cover, solar\_wind, grid\_proximity\}. Not a substitute for a - `assess\_pipeline\_proximity`: Natural gas interstate/intrastate transmission pipeline proximity at a US point \(EIA/HIFLD, 32,892 segments\). Substitute for proprietary local-utility "call before you dig" data — covers major transmission pipelines only, NOT local distribution lines. Not a substitute for calling 811 before excavati - `assess\_protected\_area\_proximity`: US protected/conservation area proximity via USGS PAD-US \(public domain, commercial-use OK — unlike Protected Planet/WDPA, whose API explicitly forbids commercial-entity use\). Reports whether the point falls inside/near \(2 mile radius\) a federally-tracked protected area: name, managing agency, desig - `get\_river\_flow\_status`: Nearest USGS real-time stream/river gauge to a point \(US rivers and streams only\): live streamflow \(ft3/s\) and gauge height \(ft\), reported honestly as provisional USGS data — no derived flood-risk score, since USGS does not publish per-site flood-stage thresholds through this API. First real-time \(n - `discover\_open\_geodata`: Keyword search across ArcGIS Hub Open Data — real public FeatureServer/MapServer datasets from government/organization ArcGIS Online portals worldwide. Returns real service\_url values usable directly with query\_features/count\_features/rest\_explore/compare\_schemas. Free, no API key. Not a universal o - `assess\_ev\_charging\_site`: One-call EV charging site-scouting indicator: grid proximity \(power for fast-charging\) + land cover + locality context, combined from GISGP's existing free primitives. No key needed. Returns JSON: \{ok, grid\_proximity, land\_cover, location, physically\_unsuitable\}. - `assess\_telecom\_site`: One-call cell tower site-scouting indicator: grid proximity + terrain elevation \(line-of-sight proxy\) + land cover, combined from GISGP's existing free primitives. No key needed. Returns JSON: \{ok, grid\_proximity, terrain, land\_cover, physically\_unsuitable\}. - `rank\_renewable\_sites`: Bulk solar/wind site screener — evaluates up to 25 candidate points \(each \{"lon": ..., "lat": ...\}\) and returns only the top\_n, ranked by average daily solar radiation. Candidates with unsuitable land cover \(urban/water/snow\) or no substation nearby are filtered out, not silently scored low. No inve - `assess\_wildfire\_risk`: Real-time active wildfire proximity at a point via NASA FIRMS \(VIIRS satellite hotspot detections, last 2 days\) + electric grid exposure \(transmission lines are a documented wildfire-ignition- liability factor\). No key needed — GISGP holds its own free NASA FIRMS key server-side. Two separate honest - `calculate\_route`: Real driving distance + duration between two points. Default: OSRM \(public demo instance, no key — fair-use limited, not a production SLA\). Optional agol\_token: route through Esri's own World Route Service instead — uses YOUR OWN AGOL credentials/quota, not GISGP's \(no extra charge either way, no GI - `estimate\_cost`: FREE — quote a paid tool's cost WITHOUT executing it or charging the wallet \(call this before assess\_property\_hazard etc.\). \`units\` = candidate/item count for per-unit-priced tools \(currently only rank\_hazard\_safe\_sites — pass the number of candidates you intend to submit\); ignored \(treated as 1\) fo - `check\_wallet\_balance`: FREE — check your own MCP credits wallet balance \(the same account paid tools like assess\_property\_hazard charge against\). Requires Authorization: Bearer \ — an agent can call this on its own, no browser/dashboard needed. Returns JSON: \{ok, balance, eur\_equivalent\} or \{ok: false, error\} if n - `assess\_property\_hazard`: PAID \(200 credits\) — multi-source US property hazard indicator: USGS seismic risk \(required\), plus best-effort FEMA disaster declaration history \(state, last 10 years\) and NOAA real-time active severe weather alerts at the point. Requires Authorization: Bearer \ and a sufficient credits bala - `rank\_hazard\_safe\_sites`: PAID \(200 credits PER CANDIDATE, max 25 candidates/call\) — bulk seismic- risk screener. Runs assess\_property\_hazard's seismic check under the hood for each \[lon, lat\] candidate and returns only the top\_n ranked by lowest real seismic risk \(PGA\). Not a full multi-hazard ranking — ranked by ONE real, - `assess\_portfolio\_climate\_disclosure`: PAID \(200 credits PER PROPERTY, max 25 properties/call\) — bulk physical climate-risk disclosure input for a real-estate/asset portfolio \(SEC climate disclosure rule / EU CSRD physical-risk reporting\). Runs assess\_property\_hazard for each \[lon, lat\] property and returns honest aggregate counts \(prope - `assess\_supply\_chain\_redundancy`: PAID \(400 credits\) — checks whether two supposedly-redundant sites \(e.g. two "backup" suppliers/warehouses/data centers\) are actually independent: real geodesic distance between them + each site's own multi-source hazard profile \(seismic + FEMA + NOAA\) side by side, plus any FEMA disaster incident t - `assess\_energy\_community\_credit`: PAID \(100 credits\) — US Inflation Reduction Act "energy community" bonus tax credit qualification lookup for a renewable energy project site. Checks both DOE/NETL-published qualifying pathways \(coal-mine- closure/coal-plant-retirement adjoining tracts, and MSA/non-MSA fossil- fuel-employment + above - `assess\_datacenter\_site`: PAID \(300 credits\) — data center site-scouting composite: grid proximity \(power availability\), multi-source hazard \(seismic + FEMA + NOAA, required — same contract as assess\_property\_hazard\), land cover, and a year of temperature history \(cooling-load proxy\). No invented overall suitability score — - `assess\_reforestation\_site`: PAID \(100 credits\) — reforestation/afforestation site-scouting composite: terrain, land cover \(flags already-forested/urban/water/snow as unsuitable\), and a year of precipitation history \(tree-viability proxy\). All-free-primitive composite, priced for the bulk-screening convenience \(carbon-offset/la - `get\_elevation\_profile`: PAID \(50 credits\) — elevation PROFILE along a line, not a single point: pass points=\[\[lon,lat\],…\] \(up to 100\) or start=\[lon,lat\] + end=\[lon,lat\] with samples \(2-100, evenly spaced\). Returns every point's elevation and distance plus min/max, total gain/loss, net change, mean and max segment slope. Fo - `discover\_open\_geodata\_pro`: PAID \(30 credits\) — open-data discovery with the metadata an agent needs BEFORE querying: up to 50 ArcGIS Hub results \(free tool: 10\) and, for the top 25, each layer's geometry type, field list, record count and query capability — so you can pick the right layer in one call instead of probing each s - `assess\_airspace\_obstruction\_proximity`: PAID \(100 credits\) — nearby FAA-registered vertical obstructions \(towers, stacks, wind turbines\) at a US point, for telecom/tower-siting due diligence \(e.g. "is there anything tall already near this proposed tower site", "does a 250ft tower here need FAA notification"\). Source: official FAA Digital - `assess\_site\_due\_diligence`: PAID \(300 credits\) — master due-diligence report for a point: wraps assess\_property\_hazard \(seismic + FEMA + NOAA, required\) plus grid proximity, land cover, and reverse-geocoded locality — all in one call. No invented overall "site score" across sources. Requires Authorization: Bearer \ and - `export\_geojson\_to\_pdf`: PAID \(150 credits\) — render an ad-hoc GeoJSON FeatureCollection to a one-page PDF report \(static map + property table, base64-encoded PDF\). Separate from the web app's own PDF Builder \(AGOL-service-tied, quota- gated there\) — this is for GeoJSON an agent already has in hand. Requires Authorization: - `export\_geojson\_to\_excel`: PAID \(80 credits\) — convert a GeoJSON FeatureCollection to an Excel workbook \(.xlsx, base64-encoded\). Point geometries get LATITUDE/LONGITUDE columns; other geometry types get a GEOMETRY\_WKT column. Separate from the web app's own Excel export \(AGOL-service-tied, quota-gated there\). Requires Authori - `bundle\_migrate\_convert`: PAID \(40 credits\) — one-call file migration: convert a raw file to GeoJSON, then optionally reproject and simplify, then round coordinates. Replaces 2-4 separate free tool calls \(convert + reproject + simplify + round\) an agent would otherwise chain by hand — see estimate\_cost's "replaces" field. Re - `bundle\_export\_fixed`: PAID \(150 credits\) — fetch ALL records from a live FeatureServer layer \(no 50-record preview cap\), auto-repair invalid geometries \(GEOS make\_valid\), and scan for common problems, in one call. Replaces an uncapped query\_features call \(itself a paid-only capability\) plus fix\_geometry plus find\_layer\_i Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html