{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_9chbzmkh65dv","handle":"gisgp","url":"https://wellknown.network/agents/gisgp","links":{"self":"https://wellknown.network/agents/gisgp/record.json","html":"https://wellknown.network/agents/gisgp","markdown":"https://wellknown.network/agents/gisgp/record.md","api":"https://wellknown.network/api/v1/agents/gisgp","status":"https://wellknown.network/api/v1/agents/gisgp/status","claim":"https://wellknown.network/agents/gisgp/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/gisgp/claim.json","badge":"https://wellknown.network/agents/gisgp/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/gisgp/history","tools":"https://wellknown.network/api/v1/agents/gisgp/tools"},"ard":{"identifier":"urn:air:gisgp.com:server:gisgp","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"gisgp","summary":"GIS tools for AI agents: 65 free tools + 8 paid (hazard/site-scouting/GeoJSON export)","description":"GIS tools for AI agents: 65 free tools + 8 paid (hazard/site-scouting/GeoJSON export)","publisher":{"name":"uponex","url":null},"homepage":null,"repository":"https://github.com/uponex/gisgp-mcp","version":"1.3.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://gisgp.com/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-07-29T14:18:02.671902Z","publishedAt":"2026-07-29T14:18:02.671902Z","registryName":"io.github.uponex/gisgp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"documents.spreadsheets","name":"Spreadsheets","confidence":1,"provenance":"derived"},{"slug":"data.weather","name":"Weather","confidence":1,"provenance":"derived"},{"slug":"commerce.pricing","name":"Pricing & Quotes","confidence":1,"provenance":"derived"},{"slug":"geo.maps","name":"Maps & Places","confidence":0.992,"provenance":"derived"},{"slug":"data.database","name":"Databases","confidence":0.933,"provenance":"derived"},{"slug":"media.3d","name":"3D & Design","confidence":0.89,"provenance":"derived"},{"slug":"security.identity","name":"Identity & Access","confidence":0.583,"provenance":"derived"},{"slug":"productivity.hr","name":"HR & Recruiting","confidence":0.554,"provenance":"derived"}],"categories":["commerce","data","documents","geo","media","productivity","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 12m ago.","lastOkAt":"2026-10-10T16:32:43.575Z","lastProbedAt":"2026-10-10T16:32:43.575Z","statusComputedAt":"2026-10-10T16:33:51.121Z","reliability30d":{"probes":110,"successRate":1,"p50Ms":122,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":108,"ok":108,"authBoundaryOk":0,"serviceOk":108,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-10T16:32:43.575Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":116,"error":null,"detail":{"tools":[{"name":"convert_coordinates","description":"Convert coordinate pairs between EPSG coordinate systems (max 1000 points).\n\n    points: [[x, y], ...] in from_epsg axis order (lon/lat for EPSG:4326).\n    Retu"},{"name":"validate_geojson","description":"Check whether a GeoJSON file/string is valid — catches broken geometry,\n    malformed structure, self-intersections, and out-of-range coordinates\n    before you"},{"name":"geojson_to_csv","description":"Convert GeoJSON to CSV/spreadsheet — one row per feature, properties\n    as columns, geometry flattened into a column (e.g. \"turn this GeoJSON\n    into Excel/CS"},{"name":"count_features","description":"Count features in an ArcGIS FeatureServer layer, optionally filtered by a WHERE clause.\n\n    service_url: full layer URL ending in /FeatureServer/<n>. token: on"},{"name":"extract_domains","description":"Extract coded value domains from an ArcGIS FeatureServer layer.\n\n    Returns JSON: {\"layer_name\": ..., \"domains\": {field: {name, field_alias, codes}}}.\n    "},{"name":"check_field_types","description":"Inspect the field schema of an ArcGIS FeatureServer layer.\n\n    Returns JSON: {layer_name, geometry_type, fields:[{name, alias, type,\n    length, nullable, has_"},{"name":"check_service_health","description":"Check whether an ArcGIS FeatureServer layer is reachable and responsive.\n\n    Returns JSON: {ok, ms (latency), name, geometry_type, field_count,\n    record_coun"},{"name":"rest_explore","description":"List the layers and tables of an ArcGIS FeatureServer/MapServer root.\n\n    Point at a service root to enumerate its layers/tables, or at a single\n    layer URL "},{"name":"compare_schemas","description":"Compare the field schemas of two ArcGIS FeatureServer layers.\n\n    Returns JSON diff: {added, removed, changed:[{field, diffs}], same,\n    geometry_match, ident"},{"name":"shapefile_to_geojson","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    to a GeoJSON FeatureCollection. Reprojects to WGS84 if a .prj says otherwise.\n\n    "},{"name":"kml_to_geojson","description":"Convert Google Earth / Google My Maps KML (2.0–2.2) to GeoJSON — the\n    common request when someone exported a map from Google Earth or Google\n    My Maps and "},{"name":"gpx_to_geojson","description":"Convert a GPS track/route file (GPX — from Garmin, Strava exports,\n    hiking/cycling apps, waypoints) to GeoJSON (e.g. \"convert my GPS track\n    to GeoJSON\", \""},{"name":"geojson_to_gpx","description":"Convert GeoJSON to a GPX file — e.g. \"export this as a GPS track\",\n    \"GeoJSON to GPX for my Garmin\", \"make waypoints from this GeoJSON\".\n    Points become GPX"},{"name":"flatgeobuf_to_geojson","description":"Convert a FlatGeobuf file (base64-encoded .fgb) to a GeoJSON\n    FeatureCollection. FlatGeobuf is a cloud-native binary format with a\n    built-in spatial index"},{"name":"geojson_to_flatgeobuf","description":"Convert GeoJSON to FlatGeobuf (.fgb) — the cloud-native binary\n    format with a built-in spatial index. FlatGeobuf holds one geometry\n    type per file, so mix"},{"name":"mapinfo_tab_to_geojson","description":"Convert a MapInfo TAB file set (base64-encoded .zip containing\n    .tab + its .dat/.map/.id sidecar files) to a GeoJSON FeatureCollection.\n    MapInfo TAB is th"},{"name":"geojson_to_mapinfo_tab","description":"Convert GeoJSON to a MapInfo TAB file set, ready for MapInfo Pro.\n    TAB is a multi-sidecar-file format (.tab/.dat/.id/.map) and single\n    geometry type per f"},{"name":"query_features","description":"Fetch actual feature records (attributes + geometry) from a FeatureServer layer.\n\n    Free preview capped at 50 records (WHERE filter + chosen fields). Returns "},{"name":"query_statistics","description":"Server-side aggregate stats on a numeric field of a FeatureServer layer.\n\n    No records fetched — AGOL computes sum/avg/min/max/count (also stddev/var).\n    Op"},{"name":"geometry_stats","description":"Compute area (m²/km²), length (m/km), vertex count, centroid and bbox of GeoJSON.\n\n    Metric measurements use an equal-area projection so area/length are real "},{"name":"reproject_geojson","description":"Change a GeoJSON's coordinate reference system (CRS/projection) —\n    e.g. \"reproject to Web Mercator\", \"convert WGS84 to UTM\", \"my\n    coordinates are in the w"},{"name":"simplify_geometry","description":"Reduce the number of vertices in GeoJSON geometry (Douglas-Peucker\n    algorithm) — e.g. \"simplify this polygon\", \"this shape has too many\n    points\", \"reduce "},{"name":"reduce_precision","description":"Round every coordinate to N decimal places to shrink a GeoJSON file's\n    size — e.g. \"my GeoJSON file is too big\", \"reduce coordinate precision\",\n    \"strip ex"},{"name":"csv_to_geojson","description":"Convert a CSV/spreadsheet with lat/lon (or X/Y) columns to GeoJSON —\n    auto-detects the coordinate columns (e.g. \"map this spreadsheet\",\n    \"CSV with lat/lon"},{"name":"geojson_to_kml","description":"Convert GeoJSON to KML for Google Earth / Google My Maps (e.g. \"open\n    this in Google Earth\", \"GeoJSON to KML\", \"make this viewable in Google\n    My Maps\"). R"},{"name":"geojson_to_shapefile","description":"Convert GeoJSON to an Esri Shapefile ZIP — the format ArcGIS Desktop\n    Pro/QGIS/most legacy GIS software still expects (e.g. \"I need a\n    shapefile for ArcGI"},{"name":"gpx_to_kml","description":"Convert a GPS track file (GPX) directly to KML for Google Earth —\n    e.g. \"open my Garmin/Strava track in Google Earth\", \"GPX to KML\"."},{"name":"kml_to_shapefile","description":"Convert a Google Earth/My Maps KML file directly to an Esri Shapefile\n    ZIP — e.g. \"Google Earth file to shapefile for ArcGIS\", \"KML to SHP\".\n    Returns JSON"},{"name":"kml_to_gpx","description":"Convert a Google Earth/My Maps KML file directly to GPX — waypoints\n    from Points, tracks from Lines/Polygons — e.g. \"KML to GPX for my\n    Garmin\", \"load thi"},{"name":"shapefile_to_gpx","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    directly to GPX — points become waypoints, lines/polygons become tracks\n    (2026-0"},{"name":"gpx_to_shapefile","description":"Convert a GPS track file (GPX) directly to an Esri Shapefile ZIP —\n    waypoints become points, tracks/routes become lines (2026-09-03).\n    Returns JSON: {shap"},{"name":"csv_to_gpx","description":"Convert a CSV with latitude/longitude columns directly to GPX\n    waypoints (2026-09-03) — e.g. \"these coordinates to a GPX for my GPS\".\n    Column names are au"},{"name":"gpx_to_csv","description":"Convert a GPS track file (GPX) directly to CSV (2026-09-03) —\n    waypoints get LATITUDE/LONGITUDE columns, tracks/routes get a\n    GEOMETRY_WKT column instead."},{"name":"wkt_to_geojson","description":"Convert a WKT (Well-Known Text) geometry string — the format\n    PostGIS/SQL geometry columns print by default — to GeoJSON (e.g. \"this\n    came from a PostGIS "},{"name":"geojson_to_wkt","description":"Convert a GeoJSON geometry (or a Feature's geometry) to WKT — the\n    format needed to insert geometry into PostGIS/SQL (e.g. \"I need this\n    for a PostGIS INS"},{"name":"dxf_to_geojson","description":"Convert an AutoCAD DXF file's contents to GeoJSON — e.g. \"convert\n    this DXF to GeoJSON\", \"AutoCAD drawing to GIS format\", \"DXF export from\n    Civil 3D to Ge"},{"name":"geojson_to_dxf","description":"Convert GeoJSON to an AutoCAD DXF file — e.g. \"export this GeoJSON\n    to DXF for AutoCAD\", \"GIS data to CAD format\", \"convert to .dxf for\n    Civil 3D\". Points"},{"name":"list_dxf_layers","description":"List the distinct DXF layer names used in a drawing — e.g. \"what\n    layers does this DXF have\", \"list layers before I extract one\". Real\n    CAD exports organi"},{"name":"georeference_dxf","description":"Reproject a DXF drawn in a local/arbitrary CAD coordinate system\n    into real-world coordinates — e.g. \"this DXF isn't in real coordinates,\n    fix it\", \"geore"},{"name":"dxf_to_pdf_report","description":"PAID (150 credits) — render a DXF drawing to a one-page PDF site-plan\n    report (vector plot + entity-type breakdown + layer list, base64-\n    encoded PDF) — e"},{"name":"grade_service","description":"Grade an ArcGIS FeatureServer layer A–F across 5 categories (schema quality,\n    data completeness, performance, maintenance, configuration).\n\n    Returns JSON:"},{"name":"audit_service","description":"Full one-call QA report of an ArcGIS FeatureServer layer: health (latency,\n    record count, capabilities) + field schema + coded domains + summary counts.\n\n   "},{"name":"find_layer_issues","description":"Scan an ArcGIS FeatureServer layer for common problems: missing ObjectID,\n    disabled query, stale data, all-null fields, features without geometry.\n\n    Sampl"},{"name":"share_map","description":"Publish a GeoJSON FeatureCollection as a live, shareable map page on gisgp.com.\n\n    Returns JSON: {url, expires_at} — url is a public interactive map a human c"},{"name":"embed_map_snippet","description":"Ready-to-paste <iframe> embed code for a live interactive map — thin\n    wrapper around share_map (same live page, same 30-day TTL), for\n    embedding directly "},{"name":"buffer_geojson","description":"Buffer every feature by a distance in METRES (negative shrinks).\n\n    Geodesically accurate at any latitude (each feature is buffered in a local\n    equidistant"},{"name":"dissolve_geojson","description":"Merge overlapping/adjacent geometries into one (optionally grouped by a\n    property field `by` → one dissolved feature per distinct value).\n\n    Returns JSON {"},{"name":"centroids_geojson","description":"Get the center point of each polygon/line feature — e.g. \"find the\n    center of each parcel\", \"convert polygons to points for labeling\",\n    \"centroid of each "},{"name":"convex_hull_geojson","description":"Draw the smallest polygon that wraps around all input features (a\n    convex hull) — e.g. \"draw a boundary around these points\", \"find the\n    outer perimeter o"},{"name":"overlay_geojson","description":"Combine two GeoJSON FeatureCollections with a boolean set operation.\n\n    op: intersection | difference (a minus b) | symmetric_difference | union.\n    Each sid"},{"name":"spatial_join_geojson","description":"Attach properties from every B feature that satisfies a spatial\n    predicate to each A feature (as a `_matches` list).\n\n    predicate: intersects | within | co"},{"name":"nearest_features_geojson","description":"For each feature in A, find the nearest feature in B by centroid-to-\n    centroid geodesic distance. Attaches `_nearest` properties and\n    `_nearest_distance_m"},{"name":"fix_geometry","description":"Repair invalid geometries (self-intersections, bad rings) via GEOS\n    make_valid. Already-valid geometries are left untouched. Returns JSON\n    {ok, fixed_coun"},{"name":"geojson_diff","description":"Compare two GeoJSON FeatureCollections — added/removed/changed features.\n\n    Matched by an `id_field` property if given, else by array position (exact\n    stru"},{"name":"epsg_suggest","description":"Suggest the correct UTM EPSG code to project a WGS84 lon/lat into for\n    accurate metric measurements (buffer/area/distance).\n\n    Returns JSON {ok, epsg, utm_"},{"name":"tile_math","description":"Convert a WGS84 lon/lat + zoom level to Slippy Map (XYZ) tile x/y,\n    that tile's lon/lat bbox, and its Bing quadkey.\n\n    Returns JSON {ok, zoom, x, y, tile_b"},{"name":"envelope_geojson","description":"Get the bounding box (min/max rectangle) around each feature — e.g.\n    \"get the bounding box of this shape\", \"bbox for each feature\",\n    \"rectangular extent o"},{"name":"minimum_rotated_rectangle","description":"Smallest-area rectangle wrapping all input features combined — can be\n    tilted to fit tighter than a straight bounding box (e.g. \"tightest\n    rectangle aroun"},{"name":"voronoi_geojson","description":"Divide space into regions closest to each input point (Voronoi\n    diagram) — e.g. \"find the service area for each location\", \"which\n    points are closest to w"},{"name":"full_service_audit","description":"Complete one-call QA report: A-F grade + full audit (health/fields/\n    domains/summary) + issue scan, merged into one response — replaces 3\n    separate calls "},{"name":"geometry_health_report","description":"Complete one-call GeoJSON health check: validate + auto-repair invalid\n    geometry + stats (area/length/vertices) + bbox envelope, merged — replaces\n    4 sepa"},{"name":"get_terrain_profile","description":"Get the ground elevation (metres above sea level) at a coordinate —\n    e.g. \"what's the elevation here\", \"is this point in a flood-risk\n    lowland\", \"elevatio"},{"name":"get_climate_history","description":"Daily historical weather for a point/date range via Open-Meteo's\n    ERA5-based archive (no key, free, data back to 1940). Dates are\n    YYYY-MM-DD. Returns JSO"},{"name":"classify_land_cover","description":"Land cover class at a WGS84 point via ESA CCI Land Cover 2018 (ArcGIS\n    Living Atlas ImageServer, no key, 300m resolution). Returns JSON:\n    {ok, class_code,"},{"name":"analyze_location","description":"Reverse-geocode a WGS84 point to country/region/locality via OSM\n    Nominatim (no key, free — fair-use rate limited, best-effort). Returns\n    JSON: {ok, displ"},{"name":"geocode_address","description":"Forward-geocode a free-text address to lon/lat. Default: OSM Nominatim\n    (no key, free, fair-use rate limited) — the complement to\n    analyze_location's reve"},{"name":"offset_coordinates","description":"Move a WGS84 point by a geodesic distance (metres) along a compass\n    bearing (0=N, 90=E, 180=S, 270=W). Pure computation, no external API.\n    Returns JSON: {"},{"name":"detect_coordinate_order","description":"Detect whether [x, y] pairs are [lon, lat] or [lat, lon] — resolves\n    a genuinely common real-world confusion (one of the most-viewed GIS\n    StackExchange qu"},{"name":"guess_crs_from_coordinates","description":"Best-guess candidate CRS for raw [x, y] coordinates with no metadata\n    (e.g. a shapefile with a missing .prj) — real demand signal (79k+ views\n    on GIS Stac"},{"name":"parse_coordinate","description":"Parse ANY single coordinate string a human might paste into WGS84\n    lat/lon — decimal degrees with any separator or an EU decimal comma,\n    DMS (42°41'51.7\"N"},{"name":"format_coordinate","description":"Express one WGS84 point in every common notation at once: decimal\n    degrees, DMS, DDM, UTM (zone/band/easting/northing), MGRS and USNG,\n    British National G"},{"name":"generate_static_map_image","description":"Render a GeoJSON FeatureCollection/Feature to a static PNG map image\n    (base64 data URL) — for embedding in reports/emails/documents, unlike\n    share_map's i"},{"name":"assess_grid_exposure","description":"Electric grid infrastructure proximity at a US point: nearby\n    substations + transmission lines within 10 miles (community ArcGIS\n    mirror of HIFLD data — p"},{"name":"assess_renewable_site","description":"One-call solar/wind site-scouting indicator: terrain + land cover +\n    1-year solar/wind climate averages + grid proximity, combined from\n    GISGP's existing "},{"name":"assess_pipeline_proximity","description":"Natural gas interstate/intrastate transmission pipeline proximity at\n    a US point (EIA/HIFLD, 32,892 segments). Substitute for proprietary\n    local-utility \""},{"name":"assess_protected_area_proximity","description":"US protected/conservation area proximity via USGS PAD-US (public\n    domain, commercial-use OK — unlike Protected Planet/WDPA, whose API\n    explicitly forbids "},{"name":"get_river_flow_status","description":"Nearest USGS real-time stream/river gauge to a point (US rivers and\n    streams only): live streamflow (ft3/s) and gauge height (ft), reported\n    honestly as p"},{"name":"discover_open_geodata","description":"Keyword search across ArcGIS Hub Open Data — real public\n    FeatureServer/MapServer datasets from government/organization ArcGIS\n    Online portals worldwide. "},{"name":"assess_ev_charging_site","description":"One-call EV charging site-scouting indicator: grid proximity (power\n    for fast-charging) + land cover + locality context, combined from\n    GISGP's existing f"},{"name":"assess_telecom_site","description":"One-call cell tower site-scouting indicator: grid proximity + terrain\n    elevation (line-of-sight proxy) + land cover, combined from GISGP's\n    existing free "},{"name":"rank_renewable_sites","description":"Bulk solar/wind site screener — evaluates up to 25 candidate points\n    (each {\"lon\": ..., \"lat\": ...}) and returns only the top_n, ranked by\n    average daily "},{"name":"assess_wildfire_risk","description":"Real-time active wildfire proximity at a point via NASA FIRMS\n    (VIIRS satellite hotspot detections, last 2 days) + electric grid\n    exposure (transmission l"},{"name":"calculate_route","description":"Real driving distance + duration between two points. Default: OSRM\n    (public demo instance, no key — fair-use limited, not a production SLA).\n    Optional ago"},{"name":"estimate_cost","description":"FREE — quote a paid tool's cost WITHOUT executing it or charging the\n    wallet (call this before assess_property_hazard etc.).\n    `units` = candidate/item cou"},{"name":"check_wallet_balance","description":"FREE — check your own MCP credits wallet balance (the same account\n    paid tools like assess_property_hazard charge against). Requires\n    Authorization: Beare"},{"name":"assess_property_hazard","description":"PAID (200 credits) — multi-source US property hazard indicator: USGS\n    seismic risk (required), plus best-effort FEMA disaster declaration\n    history (state,"},{"name":"rank_hazard_safe_sites","description":"PAID (200 credits PER CANDIDATE, max 25 candidates/call) — bulk seismic-\n    risk screener. Runs assess_property_hazard's seismic check under the hood\n    for e"},{"name":"assess_portfolio_climate_disclosure","description":"PAID (200 credits PER PROPERTY, max 25 properties/call) — bulk physical\n    climate-risk disclosure input for a real-estate/asset portfolio (SEC\n    climate dis"},{"name":"assess_supply_chain_redundancy","description":"PAID (400 credits) — checks whether two supposedly-redundant sites\n    (e.g. two \"backup\" suppliers/warehouses/data centers) are actually\n    independent: real "},{"name":"assess_energy_community_credit","description":"PAID (100 credits) — US Inflation Reduction Act \"energy community\"\n    bonus tax credit qualification lookup for a renewable energy project\n    site. Checks bot"},{"name":"assess_datacenter_site","description":"PAID (300 credits) — data center site-scouting composite: grid\n    proximity (power availability), multi-source hazard (seismic + FEMA +\n    NOAA, required — sa"},{"name":"assess_reforestation_site","description":"PAID (100 credits) — reforestation/afforestation site-scouting\n    composite: terrain, land cover (flags already-forested/urban/water/snow\n    as unsuitable), a"},{"name":"get_elevation_profile","description":"PAID (50 credits) — elevation PROFILE along a line, not a single point:\n    pass points=[[lon,lat],…] (up to 100) or start=[lon,lat] + end=[lon,lat]\n    with sa"},{"name":"discover_open_geodata_pro","description":"PAID (30 credits) — open-data discovery with the metadata an agent\n    needs BEFORE querying: up to 50 ArcGIS Hub results (free tool: 10) and,\n    for the top 2"},{"name":"assess_airspace_obstruction_proximity","description":"PAID (100 credits) — nearby FAA-registered vertical obstructions\n    (towers, stacks, wind turbines) at a US point, for telecom/tower-siting\n    due diligence ("},{"name":"assess_site_due_diligence","description":"PAID (300 credits) — master due-diligence report for a point: wraps\n    assess_property_hazard (seismic + FEMA + NOAA, required) plus grid\n    proximity, land c"},{"name":"export_geojson_to_pdf","description":"PAID (150 credits) — render an ad-hoc GeoJSON FeatureCollection to a\n    one-page PDF report (static map + property table, base64-encoded PDF).\n    Separate fro"},{"name":"export_geojson_to_excel","description":"PAID (80 credits) — convert a GeoJSON FeatureCollection to an Excel\n    workbook (.xlsx, base64-encoded). Point geometries get LATITUDE/LONGITUDE\n    columns; o"},{"name":"bundle_migrate_convert","description":"PAID (40 credits) — one-call file migration: convert a raw file to\n    GeoJSON, then optionally reproject and simplify, then round coordinates.\n    Replaces 2-4"},{"name":"bundle_export_fixed","description":"PAID (150 credits) — fetch ALL records from a live FeatureServer layer\n    (no 50-record preview cap), auto-repair invalid geometries (GEOS\n    make_valid), and"}],"toolCount":106,"toolsHash":"8f7a5f948d916545bc96d2e3ded53b1347d1b4f2293558042d878fe5aeca5205","serverName":"GISGP","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.28.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T10:28:37.542Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":91,"error":null,"detail":{"tools":[{"name":"convert_coordinates","description":"Convert coordinate pairs between EPSG coordinate systems (max 1000 points).\n\n    points: [[x, y], ...] in from_epsg axis order (lon/lat for EPSG:4326).\n    Retu"},{"name":"validate_geojson","description":"Check whether a GeoJSON file/string is valid — catches broken geometry,\n    malformed structure, self-intersections, and out-of-range coordinates\n    before you"},{"name":"geojson_to_csv","description":"Convert GeoJSON to CSV/spreadsheet — one row per feature, properties\n    as columns, geometry flattened into a column (e.g. \"turn this GeoJSON\n    into Excel/CS"},{"name":"count_features","description":"Count features in an ArcGIS FeatureServer layer, optionally filtered by a WHERE clause.\n\n    service_url: full layer URL ending in /FeatureServer/<n>. token: on"},{"name":"extract_domains","description":"Extract coded value domains from an ArcGIS FeatureServer layer.\n\n    Returns JSON: {\"layer_name\": ..., \"domains\": {field: {name, field_alias, codes}}}.\n    "},{"name":"check_field_types","description":"Inspect the field schema of an ArcGIS FeatureServer layer.\n\n    Returns JSON: {layer_name, geometry_type, fields:[{name, alias, type,\n    length, nullable, has_"},{"name":"check_service_health","description":"Check whether an ArcGIS FeatureServer layer is reachable and responsive.\n\n    Returns JSON: {ok, ms (latency), name, geometry_type, field_count,\n    record_coun"},{"name":"rest_explore","description":"List the layers and tables of an ArcGIS FeatureServer/MapServer root.\n\n    Point at a service root to enumerate its layers/tables, or at a single\n    layer URL "},{"name":"compare_schemas","description":"Compare the field schemas of two ArcGIS FeatureServer layers.\n\n    Returns JSON diff: {added, removed, changed:[{field, diffs}], same,\n    geometry_match, ident"},{"name":"shapefile_to_geojson","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    to a GeoJSON FeatureCollection. Reprojects to WGS84 if a .prj says otherwise.\n\n    "},{"name":"kml_to_geojson","description":"Convert Google Earth / Google My Maps KML (2.0–2.2) to GeoJSON — the\n    common request when someone exported a map from Google Earth or Google\n    My Maps and "},{"name":"gpx_to_geojson","description":"Convert a GPS track/route file (GPX — from Garmin, Strava exports,\n    hiking/cycling apps, waypoints) to GeoJSON (e.g. \"convert my GPS track\n    to GeoJSON\", \""},{"name":"geojson_to_gpx","description":"Convert GeoJSON to a GPX file — e.g. \"export this as a GPS track\",\n    \"GeoJSON to GPX for my Garmin\", \"make waypoints from this GeoJSON\".\n    Points become GPX"},{"name":"flatgeobuf_to_geojson","description":"Convert a FlatGeobuf file (base64-encoded .fgb) to a GeoJSON\n    FeatureCollection. FlatGeobuf is a cloud-native binary format with a\n    built-in spatial index"},{"name":"geojson_to_flatgeobuf","description":"Convert GeoJSON to FlatGeobuf (.fgb) — the cloud-native binary\n    format with a built-in spatial index. FlatGeobuf holds one geometry\n    type per file, so mix"},{"name":"mapinfo_tab_to_geojson","description":"Convert a MapInfo TAB file set (base64-encoded .zip containing\n    .tab + its .dat/.map/.id sidecar files) to a GeoJSON FeatureCollection.\n    MapInfo TAB is th"},{"name":"geojson_to_mapinfo_tab","description":"Convert GeoJSON to a MapInfo TAB file set, ready for MapInfo Pro.\n    TAB is a multi-sidecar-file format (.tab/.dat/.id/.map) and single\n    geometry type per f"},{"name":"query_features","description":"Fetch actual feature records (attributes + geometry) from a FeatureServer layer.\n\n    Free preview capped at 50 records (WHERE filter + chosen fields). Returns "},{"name":"query_statistics","description":"Server-side aggregate stats on a numeric field of a FeatureServer layer.\n\n    No records fetched — AGOL computes sum/avg/min/max/count (also stddev/var).\n    Op"},{"name":"geometry_stats","description":"Compute area (m²/km²), length (m/km), vertex count, centroid and bbox of GeoJSON.\n\n    Metric measurements use an equal-area projection so area/length are real "},{"name":"reproject_geojson","description":"Change a GeoJSON's coordinate reference system (CRS/projection) —\n    e.g. \"reproject to Web Mercator\", \"convert WGS84 to UTM\", \"my\n    coordinates are in the w"},{"name":"simplify_geometry","description":"Reduce the number of vertices in GeoJSON geometry (Douglas-Peucker\n    algorithm) — e.g. \"simplify this polygon\", \"this shape has too many\n    points\", \"reduce "},{"name":"reduce_precision","description":"Round every coordinate to N decimal places to shrink a GeoJSON file's\n    size — e.g. \"my GeoJSON file is too big\", \"reduce coordinate precision\",\n    \"strip ex"},{"name":"csv_to_geojson","description":"Convert a CSV/spreadsheet with lat/lon (or X/Y) columns to GeoJSON —\n    auto-detects the coordinate columns (e.g. \"map this spreadsheet\",\n    \"CSV with lat/lon"},{"name":"geojson_to_kml","description":"Convert GeoJSON to KML for Google Earth / Google My Maps (e.g. \"open\n    this in Google Earth\", \"GeoJSON to KML\", \"make this viewable in Google\n    My Maps\"). R"},{"name":"geojson_to_shapefile","description":"Convert GeoJSON to an Esri Shapefile ZIP — the format ArcGIS Desktop\n    Pro/QGIS/most legacy GIS software still expects (e.g. \"I need a\n    shapefile for ArcGI"},{"name":"gpx_to_kml","description":"Convert a GPS track file (GPX) directly to KML for Google Earth —\n    e.g. \"open my Garmin/Strava track in Google Earth\", \"GPX to KML\"."},{"name":"kml_to_shapefile","description":"Convert a Google Earth/My Maps KML file directly to an Esri Shapefile\n    ZIP — e.g. \"Google Earth file to shapefile for ArcGIS\", \"KML to SHP\".\n    Returns JSON"},{"name":"kml_to_gpx","description":"Convert a Google Earth/My Maps KML file directly to GPX — waypoints\n    from Points, tracks from Lines/Polygons — e.g. \"KML to GPX for my\n    Garmin\", \"load thi"},{"name":"shapefile_to_gpx","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    directly to GPX — points become waypoints, lines/polygons become tracks\n    (2026-0"},{"name":"gpx_to_shapefile","description":"Convert a GPS track file (GPX) directly to an Esri Shapefile ZIP —\n    waypoints become points, tracks/routes become lines (2026-09-03).\n    Returns JSON: {shap"},{"name":"csv_to_gpx","description":"Convert a CSV with latitude/longitude columns directly to GPX\n    waypoints (2026-09-03) — e.g. \"these coordinates to a GPX for my GPS\".\n    Column names are au"},{"name":"gpx_to_csv","description":"Convert a GPS track file (GPX) directly to CSV (2026-09-03) —\n    waypoints get LATITUDE/LONGITUDE columns, tracks/routes get a\n    GEOMETRY_WKT column instead."},{"name":"wkt_to_geojson","description":"Convert a WKT (Well-Known Text) geometry string — the format\n    PostGIS/SQL geometry columns print by default — to GeoJSON (e.g. \"this\n    came from a PostGIS "},{"name":"geojson_to_wkt","description":"Convert a GeoJSON geometry (or a Feature's geometry) to WKT — the\n    format needed to insert geometry into PostGIS/SQL (e.g. \"I need this\n    for a PostGIS INS"},{"name":"dxf_to_geojson","description":"Convert an AutoCAD DXF file's contents to GeoJSON — e.g. \"convert\n    this DXF to GeoJSON\", \"AutoCAD drawing to GIS format\", \"DXF export from\n    Civil 3D to Ge"},{"name":"geojson_to_dxf","description":"Convert GeoJSON to an AutoCAD DXF file — e.g. \"export this GeoJSON\n    to DXF for AutoCAD\", \"GIS data to CAD format\", \"convert to .dxf for\n    Civil 3D\". Points"},{"name":"list_dxf_layers","description":"List the distinct DXF layer names used in a drawing — e.g. \"what\n    layers does this DXF have\", \"list layers before I extract one\". Real\n    CAD exports organi"},{"name":"georeference_dxf","description":"Reproject a DXF drawn in a local/arbitrary CAD coordinate system\n    into real-world coordinates — e.g. \"this DXF isn't in real coordinates,\n    fix it\", \"geore"},{"name":"dxf_to_pdf_report","description":"PAID (150 credits) — render a DXF drawing to a one-page PDF site-plan\n    report (vector plot + entity-type breakdown + layer list, base64-\n    encoded PDF) — e"},{"name":"grade_service","description":"Grade an ArcGIS FeatureServer layer A–F across 5 categories (schema quality,\n    data completeness, performance, maintenance, configuration).\n\n    Returns JSON:"},{"name":"audit_service","description":"Full one-call QA report of an ArcGIS FeatureServer layer: health (latency,\n    record count, capabilities) + field schema + coded domains + summary counts.\n\n   "},{"name":"find_layer_issues","description":"Scan an ArcGIS FeatureServer layer for common problems: missing ObjectID,\n    disabled query, stale data, all-null fields, features without geometry.\n\n    Sampl"},{"name":"share_map","description":"Publish a GeoJSON FeatureCollection as a live, shareable map page on gisgp.com.\n\n    Returns JSON: {url, expires_at} — url is a public interactive map a human c"},{"name":"embed_map_snippet","description":"Ready-to-paste <iframe> embed code for a live interactive map — thin\n    wrapper around share_map (same live page, same 30-day TTL), for\n    embedding directly "},{"name":"buffer_geojson","description":"Buffer every feature by a distance in METRES (negative shrinks).\n\n    Geodesically accurate at any latitude (each feature is buffered in a local\n    equidistant"},{"name":"dissolve_geojson","description":"Merge overlapping/adjacent geometries into one (optionally grouped by a\n    property field `by` → one dissolved feature per distinct value).\n\n    Returns JSON {"},{"name":"centroids_geojson","description":"Get the center point of each polygon/line feature — e.g. \"find the\n    center of each parcel\", \"convert polygons to points for labeling\",\n    \"centroid of each "},{"name":"convex_hull_geojson","description":"Draw the smallest polygon that wraps around all input features (a\n    convex hull) — e.g. \"draw a boundary around these points\", \"find the\n    outer perimeter o"},{"name":"overlay_geojson","description":"Combine two GeoJSON FeatureCollections with a boolean set operation.\n\n    op: intersection | difference (a minus b) | symmetric_difference | union.\n    Each sid"},{"name":"spatial_join_geojson","description":"Attach properties from every B feature that satisfies a spatial\n    predicate to each A feature (as a `_matches` list).\n\n    predicate: intersects | within | co"},{"name":"nearest_features_geojson","description":"For each feature in A, find the nearest feature in B by centroid-to-\n    centroid geodesic distance. Attaches `_nearest` properties and\n    `_nearest_distance_m"},{"name":"fix_geometry","description":"Repair invalid geometries (self-intersections, bad rings) via GEOS\n    make_valid. Already-valid geometries are left untouched. Returns JSON\n    {ok, fixed_coun"},{"name":"geojson_diff","description":"Compare two GeoJSON FeatureCollections — added/removed/changed features.\n\n    Matched by an `id_field` property if given, else by array position (exact\n    stru"},{"name":"epsg_suggest","description":"Suggest the correct UTM EPSG code to project a WGS84 lon/lat into for\n    accurate metric measurements (buffer/area/distance).\n\n    Returns JSON {ok, epsg, utm_"},{"name":"tile_math","description":"Convert a WGS84 lon/lat + zoom level to Slippy Map (XYZ) tile x/y,\n    that tile's lon/lat bbox, and its Bing quadkey.\n\n    Returns JSON {ok, zoom, x, y, tile_b"},{"name":"envelope_geojson","description":"Get the bounding box (min/max rectangle) around each feature — e.g.\n    \"get the bounding box of this shape\", \"bbox for each feature\",\n    \"rectangular extent o"},{"name":"minimum_rotated_rectangle","description":"Smallest-area rectangle wrapping all input features combined — can be\n    tilted to fit tighter than a straight bounding box (e.g. \"tightest\n    rectangle aroun"},{"name":"voronoi_geojson","description":"Divide space into regions closest to each input point (Voronoi\n    diagram) — e.g. \"find the service area for each location\", \"which\n    points are closest to w"},{"name":"full_service_audit","description":"Complete one-call QA report: A-F grade + full audit (health/fields/\n    domains/summary) + issue scan, merged into one response — replaces 3\n    separate calls "},{"name":"geometry_health_report","description":"Complete one-call GeoJSON health check: validate + auto-repair invalid\n    geometry + stats (area/length/vertices) + bbox envelope, merged — replaces\n    4 sepa"},{"name":"get_terrain_profile","description":"Get the ground elevation (metres above sea level) at a coordinate —\n    e.g. \"what's the elevation here\", \"is this point in a flood-risk\n    lowland\", \"elevatio"},{"name":"get_climate_history","description":"Daily historical weather for a point/date range via Open-Meteo's\n    ERA5-based archive (no key, free, data back to 1940). Dates are\n    YYYY-MM-DD. Returns JSO"},{"name":"classify_land_cover","description":"Land cover class at a WGS84 point via ESA CCI Land Cover 2018 (ArcGIS\n    Living Atlas ImageServer, no key, 300m resolution). Returns JSON:\n    {ok, class_code,"},{"name":"analyze_location","description":"Reverse-geocode a WGS84 point to country/region/locality via OSM\n    Nominatim (no key, free — fair-use rate limited, best-effort). Returns\n    JSON: {ok, displ"},{"name":"geocode_address","description":"Forward-geocode a free-text address to lon/lat. Default: OSM Nominatim\n    (no key, free, fair-use rate limited) — the complement to\n    analyze_location's reve"},{"name":"offset_coordinates","description":"Move a WGS84 point by a geodesic distance (metres) along a compass\n    bearing (0=N, 90=E, 180=S, 270=W). Pure computation, no external API.\n    Returns JSON: {"},{"name":"detect_coordinate_order","description":"Detect whether [x, y] pairs are [lon, lat] or [lat, lon] — resolves\n    a genuinely common real-world confusion (one of the most-viewed GIS\n    StackExchange qu"},{"name":"guess_crs_from_coordinates","description":"Best-guess candidate CRS for raw [x, y] coordinates with no metadata\n    (e.g. a shapefile with a missing .prj) — real demand signal (79k+ views\n    on GIS Stac"},{"name":"parse_coordinate","description":"Parse ANY single coordinate string a human might paste into WGS84\n    lat/lon — decimal degrees with any separator or an EU decimal comma,\n    DMS (42°41'51.7\"N"},{"name":"format_coordinate","description":"Express one WGS84 point in every common notation at once: decimal\n    degrees, DMS, DDM, UTM (zone/band/easting/northing), MGRS and USNG,\n    British National G"},{"name":"generate_static_map_image","description":"Render a GeoJSON FeatureCollection/Feature to a static PNG map image\n    (base64 data URL) — for embedding in reports/emails/documents, unlike\n    share_map's i"},{"name":"assess_grid_exposure","description":"Electric grid infrastructure proximity at a US point: nearby\n    substations + transmission lines within 10 miles (community ArcGIS\n    mirror of HIFLD data — p"},{"name":"assess_renewable_site","description":"One-call solar/wind site-scouting indicator: terrain + land cover +\n    1-year solar/wind climate averages + grid proximity, combined from\n    GISGP's existing "},{"name":"assess_pipeline_proximity","description":"Natural gas interstate/intrastate transmission pipeline proximity at\n    a US point (EIA/HIFLD, 32,892 segments). Substitute for proprietary\n    local-utility \""},{"name":"assess_protected_area_proximity","description":"US protected/conservation area proximity via USGS PAD-US (public\n    domain, commercial-use OK — unlike Protected Planet/WDPA, whose API\n    explicitly forbids "},{"name":"get_river_flow_status","description":"Nearest USGS real-time stream/river gauge to a point (US rivers and\n    streams only): live streamflow (ft3/s) and gauge height (ft), reported\n    honestly as p"},{"name":"discover_open_geodata","description":"Keyword search across ArcGIS Hub Open Data — real public\n    FeatureServer/MapServer datasets from government/organization ArcGIS\n    Online portals worldwide. "},{"name":"assess_ev_charging_site","description":"One-call EV charging site-scouting indicator: grid proximity (power\n    for fast-charging) + land cover + locality context, combined from\n    GISGP's existing f"},{"name":"assess_telecom_site","description":"One-call cell tower site-scouting indicator: grid proximity + terrain\n    elevation (line-of-sight proxy) + land cover, combined from GISGP's\n    existing free "},{"name":"rank_renewable_sites","description":"Bulk solar/wind site screener — evaluates up to 25 candidate points\n    (each {\"lon\": ..., \"lat\": ...}) and returns only the top_n, ranked by\n    average daily "},{"name":"assess_wildfire_risk","description":"Real-time active wildfire proximity at a point via NASA FIRMS\n    (VIIRS satellite hotspot detections, last 2 days) + electric grid\n    exposure (transmission l"},{"name":"calculate_route","description":"Real driving distance + duration between two points. Default: OSRM\n    (public demo instance, no key — fair-use limited, not a production SLA).\n    Optional ago"},{"name":"estimate_cost","description":"FREE — quote a paid tool's cost WITHOUT executing it or charging the\n    wallet (call this before assess_property_hazard etc.).\n    `units` = candidate/item cou"},{"name":"check_wallet_balance","description":"FREE — check your own MCP credits wallet balance (the same account\n    paid tools like assess_property_hazard charge against). Requires\n    Authorization: Beare"},{"name":"assess_property_hazard","description":"PAID (200 credits) — multi-source US property hazard indicator: USGS\n    seismic risk (required), plus best-effort FEMA disaster declaration\n    history (state,"},{"name":"rank_hazard_safe_sites","description":"PAID (200 credits PER CANDIDATE, max 25 candidates/call) — bulk seismic-\n    risk screener. Runs assess_property_hazard's seismic check under the hood\n    for e"},{"name":"assess_portfolio_climate_disclosure","description":"PAID (200 credits PER PROPERTY, max 25 properties/call) — bulk physical\n    climate-risk disclosure input for a real-estate/asset portfolio (SEC\n    climate dis"},{"name":"assess_supply_chain_redundancy","description":"PAID (400 credits) — checks whether two supposedly-redundant sites\n    (e.g. two \"backup\" suppliers/warehouses/data centers) are actually\n    independent: real "},{"name":"assess_energy_community_credit","description":"PAID (100 credits) — US Inflation Reduction Act \"energy community\"\n    bonus tax credit qualification lookup for a renewable energy project\n    site. Checks bot"},{"name":"assess_datacenter_site","description":"PAID (300 credits) — data center site-scouting composite: grid\n    proximity (power availability), multi-source hazard (seismic + FEMA +\n    NOAA, required — sa"},{"name":"assess_reforestation_site","description":"PAID (100 credits) — reforestation/afforestation site-scouting\n    composite: terrain, land cover (flags already-forested/urban/water/snow\n    as unsuitable), a"},{"name":"get_elevation_profile","description":"PAID (50 credits) — elevation PROFILE along a line, not a single point:\n    pass points=[[lon,lat],…] (up to 100) or start=[lon,lat] + end=[lon,lat]\n    with sa"},{"name":"discover_open_geodata_pro","description":"PAID (30 credits) — open-data discovery with the metadata an agent\n    needs BEFORE querying: up to 50 ArcGIS Hub results (free tool: 10) and,\n    for the top 2"},{"name":"assess_airspace_obstruction_proximity","description":"PAID (100 credits) — nearby FAA-registered vertical obstructions\n    (towers, stacks, wind turbines) at a US point, for telecom/tower-siting\n    due diligence ("},{"name":"assess_site_due_diligence","description":"PAID (300 credits) — master due-diligence report for a point: wraps\n    assess_property_hazard (seismic + FEMA + NOAA, required) plus grid\n    proximity, land c"},{"name":"export_geojson_to_pdf","description":"PAID (150 credits) — render an ad-hoc GeoJSON FeatureCollection to a\n    one-page PDF report (static map + property table, base64-encoded PDF).\n    Separate fro"},{"name":"export_geojson_to_excel","description":"PAID (80 credits) — convert a GeoJSON FeatureCollection to an Excel\n    workbook (.xlsx, base64-encoded). Point geometries get LATITUDE/LONGITUDE\n    columns; o"},{"name":"bundle_migrate_convert","description":"PAID (40 credits) — one-call file migration: convert a raw file to\n    GeoJSON, then optionally reproject and simplify, then round coordinates.\n    Replaces 2-4"},{"name":"bundle_export_fixed","description":"PAID (150 credits) — fetch ALL records from a live FeatureServer layer\n    (no 50-record preview cap), auto-repair invalid geometries (GEOS\n    make_valid), and"}],"toolCount":106,"toolsHash":"8f7a5f948d916545bc96d2e3ded53b1347d1b4f2293558042d878fe5aeca5205","serverName":"GISGP","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.28.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T03:25:12.843Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":101,"error":null,"detail":{"tools":[{"name":"convert_coordinates","description":"Convert coordinate pairs between EPSG coordinate systems (max 1000 points).\n\n    points: [[x, y], ...] in from_epsg axis order (lon/lat for EPSG:4326).\n    Retu"},{"name":"validate_geojson","description":"Check whether a GeoJSON file/string is valid — catches broken geometry,\n    malformed structure, self-intersections, and out-of-range coordinates\n    before you"},{"name":"geojson_to_csv","description":"Convert GeoJSON to CSV/spreadsheet — one row per feature, properties\n    as columns, geometry flattened into a column (e.g. \"turn this GeoJSON\n    into Excel/CS"},{"name":"count_features","description":"Count features in an ArcGIS FeatureServer layer, optionally filtered by a WHERE clause.\n\n    service_url: full layer URL ending in /FeatureServer/<n>. token: on"},{"name":"extract_domains","description":"Extract coded value domains from an ArcGIS FeatureServer layer.\n\n    Returns JSON: {\"layer_name\": ..., \"domains\": {field: {name, field_alias, codes}}}.\n    "},{"name":"check_field_types","description":"Inspect the field schema of an ArcGIS FeatureServer layer.\n\n    Returns JSON: {layer_name, geometry_type, fields:[{name, alias, type,\n    length, nullable, has_"},{"name":"check_service_health","description":"Check whether an ArcGIS FeatureServer layer is reachable and responsive.\n\n    Returns JSON: {ok, ms (latency), name, geometry_type, field_count,\n    record_coun"},{"name":"rest_explore","description":"List the layers and tables of an ArcGIS FeatureServer/MapServer root.\n\n    Point at a service root to enumerate its layers/tables, or at a single\n    layer URL "},{"name":"compare_schemas","description":"Compare the field schemas of two ArcGIS FeatureServer layers.\n\n    Returns JSON diff: {added, removed, changed:[{field, diffs}], same,\n    geometry_match, ident"},{"name":"shapefile_to_geojson","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    to a GeoJSON FeatureCollection. Reprojects to WGS84 if a .prj says otherwise.\n\n    "},{"name":"kml_to_geojson","description":"Convert Google Earth / Google My Maps KML (2.0–2.2) to GeoJSON — the\n    common request when someone exported a map from Google Earth or Google\n    My Maps and "},{"name":"gpx_to_geojson","description":"Convert a GPS track/route file (GPX — from Garmin, Strava exports,\n    hiking/cycling apps, waypoints) to GeoJSON (e.g. \"convert my GPS track\n    to GeoJSON\", \""},{"name":"geojson_to_gpx","description":"Convert GeoJSON to a GPX file — e.g. \"export this as a GPS track\",\n    \"GeoJSON to GPX for my Garmin\", \"make waypoints from this GeoJSON\".\n    Points become GPX"},{"name":"flatgeobuf_to_geojson","description":"Convert a FlatGeobuf file (base64-encoded .fgb) to a GeoJSON\n    FeatureCollection. FlatGeobuf is a cloud-native binary format with a\n    built-in spatial index"},{"name":"geojson_to_flatgeobuf","description":"Convert GeoJSON to FlatGeobuf (.fgb) — the cloud-native binary\n    format with a built-in spatial index. FlatGeobuf holds one geometry\n    type per file, so mix"},{"name":"mapinfo_tab_to_geojson","description":"Convert a MapInfo TAB file set (base64-encoded .zip containing\n    .tab + its .dat/.map/.id sidecar files) to a GeoJSON FeatureCollection.\n    MapInfo TAB is th"},{"name":"geojson_to_mapinfo_tab","description":"Convert GeoJSON to a MapInfo TAB file set, ready for MapInfo Pro.\n    TAB is a multi-sidecar-file format (.tab/.dat/.id/.map) and single\n    geometry type per f"},{"name":"query_features","description":"Fetch actual feature records (attributes + geometry) from a FeatureServer layer.\n\n    Free preview capped at 50 records (WHERE filter + chosen fields). Returns "},{"name":"query_statistics","description":"Server-side aggregate stats on a numeric field of a FeatureServer layer.\n\n    No records fetched — AGOL computes sum/avg/min/max/count (also stddev/var).\n    Op"},{"name":"geometry_stats","description":"Compute area (m²/km²), length (m/km), vertex count, centroid and bbox of GeoJSON.\n\n    Metric measurements use an equal-area projection so area/length are real "},{"name":"reproject_geojson","description":"Change a GeoJSON's coordinate reference system (CRS/projection) —\n    e.g. \"reproject to Web Mercator\", \"convert WGS84 to UTM\", \"my\n    coordinates are in the w"},{"name":"simplify_geometry","description":"Reduce the number of vertices in GeoJSON geometry (Douglas-Peucker\n    algorithm) — e.g. \"simplify this polygon\", \"this shape has too many\n    points\", \"reduce "},{"name":"reduce_precision","description":"Round every coordinate to N decimal places to shrink a GeoJSON file's\n    size — e.g. \"my GeoJSON file is too big\", \"reduce coordinate precision\",\n    \"strip ex"},{"name":"csv_to_geojson","description":"Convert a CSV/spreadsheet with lat/lon (or X/Y) columns to GeoJSON —\n    auto-detects the coordinate columns (e.g. \"map this spreadsheet\",\n    \"CSV with lat/lon"},{"name":"geojson_to_kml","description":"Convert GeoJSON to KML for Google Earth / Google My Maps (e.g. \"open\n    this in Google Earth\", \"GeoJSON to KML\", \"make this viewable in Google\n    My Maps\"). R"},{"name":"geojson_to_shapefile","description":"Convert GeoJSON to an Esri Shapefile ZIP — the format ArcGIS Desktop\n    Pro/QGIS/most legacy GIS software still expects (e.g. \"I need a\n    shapefile for ArcGI"},{"name":"gpx_to_kml","description":"Convert a GPS track file (GPX) directly to KML for Google Earth —\n    e.g. \"open my Garmin/Strava track in Google Earth\", \"GPX to KML\"."},{"name":"kml_to_shapefile","description":"Convert a Google Earth/My Maps KML file directly to an Esri Shapefile\n    ZIP — e.g. \"Google Earth file to shapefile for ArcGIS\", \"KML to SHP\".\n    Returns JSON"},{"name":"kml_to_gpx","description":"Convert a Google Earth/My Maps KML file directly to GPX — waypoints\n    from Points, tracks from Lines/Polygons — e.g. \"KML to GPX for my\n    Garmin\", \"load thi"},{"name":"shapefile_to_gpx","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    directly to GPX — points become waypoints, lines/polygons become tracks\n    (2026-0"},{"name":"gpx_to_shapefile","description":"Convert a GPS track file (GPX) directly to an Esri Shapefile ZIP —\n    waypoints become points, tracks/routes become lines (2026-09-03).\n    Returns JSON: {shap"},{"name":"csv_to_gpx","description":"Convert a CSV with latitude/longitude columns directly to GPX\n    waypoints (2026-09-03) — e.g. \"these coordinates to a GPX for my GPS\".\n    Column names are au"},{"name":"gpx_to_csv","description":"Convert a GPS track file (GPX) directly to CSV (2026-09-03) —\n    waypoints get LATITUDE/LONGITUDE columns, tracks/routes get a\n    GEOMETRY_WKT column instead."},{"name":"wkt_to_geojson","description":"Convert a WKT (Well-Known Text) geometry string — the format\n    PostGIS/SQL geometry columns print by default — to GeoJSON (e.g. \"this\n    came from a PostGIS "},{"name":"geojson_to_wkt","description":"Convert a GeoJSON geometry (or a Feature's geometry) to WKT — the\n    format needed to insert geometry into PostGIS/SQL (e.g. \"I need this\n    for a PostGIS INS"},{"name":"dxf_to_geojson","description":"Convert an AutoCAD DXF file's contents to GeoJSON — e.g. \"convert\n    this DXF to GeoJSON\", \"AutoCAD drawing to GIS format\", \"DXF export from\n    Civil 3D to Ge"},{"name":"geojson_to_dxf","description":"Convert GeoJSON to an AutoCAD DXF file — e.g. \"export this GeoJSON\n    to DXF for AutoCAD\", \"GIS data to CAD format\", \"convert to .dxf for\n    Civil 3D\". Points"},{"name":"list_dxf_layers","description":"List the distinct DXF layer names used in a drawing — e.g. \"what\n    layers does this DXF have\", \"list layers before I extract one\". Real\n    CAD exports organi"},{"name":"georeference_dxf","description":"Reproject a DXF drawn in a local/arbitrary CAD coordinate system\n    into real-world coordinates — e.g. \"this DXF isn't in real coordinates,\n    fix it\", \"geore"},{"name":"dxf_to_pdf_report","description":"PAID (150 credits) — render a DXF drawing to a one-page PDF site-plan\n    report (vector plot + entity-type breakdown + layer list, base64-\n    encoded PDF) — e"},{"name":"grade_service","description":"Grade an ArcGIS FeatureServer layer A–F across 5 categories (schema quality,\n    data completeness, performance, maintenance, configuration).\n\n    Returns JSON:"},{"name":"audit_service","description":"Full one-call QA report of an ArcGIS FeatureServer layer: health (latency,\n    record count, capabilities) + field schema + coded domains + summary counts.\n\n   "},{"name":"find_layer_issues","description":"Scan an ArcGIS FeatureServer layer for common problems: missing ObjectID,\n    disabled query, stale data, all-null fields, features without geometry.\n\n    Sampl"},{"name":"share_map","description":"Publish a GeoJSON FeatureCollection as a live, shareable map page on gisgp.com.\n\n    Returns JSON: {url, expires_at} — url is a public interactive map a human c"},{"name":"embed_map_snippet","description":"Ready-to-paste <iframe> embed code for a live interactive map — thin\n    wrapper around share_map (same live page, same 30-day TTL), for\n    embedding directly "},{"name":"buffer_geojson","description":"Buffer every feature by a distance in METRES (negative shrinks).\n\n    Geodesically accurate at any latitude (each feature is buffered in a local\n    equidistant"},{"name":"dissolve_geojson","description":"Merge overlapping/adjacent geometries into one (optionally grouped by a\n    property field `by` → one dissolved feature per distinct value).\n\n    Returns JSON {"},{"name":"centroids_geojson","description":"Get the center point of each polygon/line feature — e.g. \"find the\n    center of each parcel\", \"convert polygons to points for labeling\",\n    \"centroid of each "},{"name":"convex_hull_geojson","description":"Draw the smallest polygon that wraps around all input features (a\n    convex hull) — e.g. \"draw a boundary around these points\", \"find the\n    outer perimeter o"},{"name":"overlay_geojson","description":"Combine two GeoJSON FeatureCollections with a boolean set operation.\n\n    op: intersection | difference (a minus b) | symmetric_difference | union.\n    Each sid"},{"name":"spatial_join_geojson","description":"Attach properties from every B feature that satisfies a spatial\n    predicate to each A feature (as a `_matches` list).\n\n    predicate: intersects | within | co"},{"name":"nearest_features_geojson","description":"For each feature in A, find the nearest feature in B by centroid-to-\n    centroid geodesic distance. Attaches `_nearest` properties and\n    `_nearest_distance_m"},{"name":"fix_geometry","description":"Repair invalid geometries (self-intersections, bad rings) via GEOS\n    make_valid. Already-valid geometries are left untouched. Returns JSON\n    {ok, fixed_coun"},{"name":"geojson_diff","description":"Compare two GeoJSON FeatureCollections — added/removed/changed features.\n\n    Matched by an `id_field` property if given, else by array position (exact\n    stru"},{"name":"epsg_suggest","description":"Suggest the correct UTM EPSG code to project a WGS84 lon/lat into for\n    accurate metric measurements (buffer/area/distance).\n\n    Returns JSON {ok, epsg, utm_"},{"name":"tile_math","description":"Convert a WGS84 lon/lat + zoom level to Slippy Map (XYZ) tile x/y,\n    that tile's lon/lat bbox, and its Bing quadkey.\n\n    Returns JSON {ok, zoom, x, y, tile_b"},{"name":"envelope_geojson","description":"Get the bounding box (min/max rectangle) around each feature — e.g.\n    \"get the bounding box of this shape\", \"bbox for each feature\",\n    \"rectangular extent o"},{"name":"minimum_rotated_rectangle","description":"Smallest-area rectangle wrapping all input features combined — can be\n    tilted to fit tighter than a straight bounding box (e.g. \"tightest\n    rectangle aroun"},{"name":"voronoi_geojson","description":"Divide space into regions closest to each input point (Voronoi\n    diagram) — e.g. \"find the service area for each location\", \"which\n    points are closest to w"},{"name":"full_service_audit","description":"Complete one-call QA report: A-F grade + full audit (health/fields/\n    domains/summary) + issue scan, merged into one response — replaces 3\n    separate calls "},{"name":"geometry_health_report","description":"Complete one-call GeoJSON health check: validate + auto-repair invalid\n    geometry + stats (area/length/vertices) + bbox envelope, merged — replaces\n    4 sepa"},{"name":"get_terrain_profile","description":"Get the ground elevation (metres above sea level) at a coordinate —\n    e.g. \"what's the elevation here\", \"is this point in a flood-risk\n    lowland\", \"elevatio"},{"name":"get_climate_history","description":"Daily historical weather for a point/date range via Open-Meteo's\n    ERA5-based archive (no key, free, data back to 1940). Dates are\n    YYYY-MM-DD. Returns JSO"},{"name":"classify_land_cover","description":"Land cover class at a WGS84 point via ESA CCI Land Cover 2018 (ArcGIS\n    Living Atlas ImageServer, no key, 300m resolution). Returns JSON:\n    {ok, class_code,"},{"name":"analyze_location","description":"Reverse-geocode a WGS84 point to country/region/locality via OSM\n    Nominatim (no key, free — fair-use rate limited, best-effort). Returns\n    JSON: {ok, displ"},{"name":"geocode_address","description":"Forward-geocode a free-text address to lon/lat. Default: OSM Nominatim\n    (no key, free, fair-use rate limited) — the complement to\n    analyze_location's reve"},{"name":"offset_coordinates","description":"Move a WGS84 point by a geodesic distance (metres) along a compass\n    bearing (0=N, 90=E, 180=S, 270=W). Pure computation, no external API.\n    Returns JSON: {"},{"name":"detect_coordinate_order","description":"Detect whether [x, y] pairs are [lon, lat] or [lat, lon] — resolves\n    a genuinely common real-world confusion (one of the most-viewed GIS\n    StackExchange qu"},{"name":"guess_crs_from_coordinates","description":"Best-guess candidate CRS for raw [x, y] coordinates with no metadata\n    (e.g. a shapefile with a missing .prj) — real demand signal (79k+ views\n    on GIS Stac"},{"name":"parse_coordinate","description":"Parse ANY single coordinate string a human might paste into WGS84\n    lat/lon — decimal degrees with any separator or an EU decimal comma,\n    DMS (42°41'51.7\"N"},{"name":"format_coordinate","description":"Express one WGS84 point in every common notation at once: decimal\n    degrees, DMS, DDM, UTM (zone/band/easting/northing), MGRS and USNG,\n    British National G"},{"name":"generate_static_map_image","description":"Render a GeoJSON FeatureCollection/Feature to a static PNG map image\n    (base64 data URL) — for embedding in reports/emails/documents, unlike\n    share_map's i"},{"name":"assess_grid_exposure","description":"Electric grid infrastructure proximity at a US point: nearby\n    substations + transmission lines within 10 miles (community ArcGIS\n    mirror of HIFLD data — p"},{"name":"assess_renewable_site","description":"One-call solar/wind site-scouting indicator: terrain + land cover +\n    1-year solar/wind climate averages + grid proximity, combined from\n    GISGP's existing "},{"name":"assess_pipeline_proximity","description":"Natural gas interstate/intrastate transmission pipeline proximity at\n    a US point (EIA/HIFLD, 32,892 segments). Substitute for proprietary\n    local-utility \""},{"name":"assess_protected_area_proximity","description":"US protected/conservation area proximity via USGS PAD-US (public\n    domain, commercial-use OK — unlike Protected Planet/WDPA, whose API\n    explicitly forbids "},{"name":"get_river_flow_status","description":"Nearest USGS real-time stream/river gauge to a point (US rivers and\n    streams only): live streamflow (ft3/s) and gauge height (ft), reported\n    honestly as p"},{"name":"discover_open_geodata","description":"Keyword search across ArcGIS Hub Open Data — real public\n    FeatureServer/MapServer datasets from government/organization ArcGIS\n    Online portals worldwide. "},{"name":"assess_ev_charging_site","description":"One-call EV charging site-scouting indicator: grid proximity (power\n    for fast-charging) + land cover + locality context, combined from\n    GISGP's existing f"},{"name":"assess_telecom_site","description":"One-call cell tower site-scouting indicator: grid proximity + terrain\n    elevation (line-of-sight proxy) + land cover, combined from GISGP's\n    existing free "},{"name":"rank_renewable_sites","description":"Bulk solar/wind site screener — evaluates up to 25 candidate points\n    (each {\"lon\": ..., \"lat\": ...}) and returns only the top_n, ranked by\n    average daily "},{"name":"assess_wildfire_risk","description":"Real-time active wildfire proximity at a point via NASA FIRMS\n    (VIIRS satellite hotspot detections, last 2 days) + electric grid\n    exposure (transmission l"},{"name":"calculate_route","description":"Real driving distance + duration between two points. Default: OSRM\n    (public demo instance, no key — fair-use limited, not a production SLA).\n    Optional ago"},{"name":"estimate_cost","description":"FREE — quote a paid tool's cost WITHOUT executing it or charging the\n    wallet (call this before assess_property_hazard etc.).\n    `units` = candidate/item cou"},{"name":"check_wallet_balance","description":"FREE — check your own MCP credits wallet balance (the same account\n    paid tools like assess_property_hazard charge against). Requires\n    Authorization: Beare"},{"name":"assess_property_hazard","description":"PAID (200 credits) — multi-source US property hazard indicator: USGS\n    seismic risk (required), plus best-effort FEMA disaster declaration\n    history (state,"},{"name":"rank_hazard_safe_sites","description":"PAID (200 credits PER CANDIDATE, max 25 candidates/call) — bulk seismic-\n    risk screener. Runs assess_property_hazard's seismic check under the hood\n    for e"},{"name":"assess_portfolio_climate_disclosure","description":"PAID (200 credits PER PROPERTY, max 25 properties/call) — bulk physical\n    climate-risk disclosure input for a real-estate/asset portfolio (SEC\n    climate dis"},{"name":"assess_supply_chain_redundancy","description":"PAID (400 credits) — checks whether two supposedly-redundant sites\n    (e.g. two \"backup\" suppliers/warehouses/data centers) are actually\n    independent: real "},{"name":"assess_energy_community_credit","description":"PAID (100 credits) — US Inflation Reduction Act \"energy community\"\n    bonus tax credit qualification lookup for a renewable energy project\n    site. Checks bot"},{"name":"assess_datacenter_site","description":"PAID (300 credits) — data center site-scouting composite: grid\n    proximity (power availability), multi-source hazard (seismic + FEMA +\n    NOAA, required — sa"},{"name":"assess_reforestation_site","description":"PAID (100 credits) — reforestation/afforestation site-scouting\n    composite: terrain, land cover (flags already-forested/urban/water/snow\n    as unsuitable), a"},{"name":"get_elevation_profile","description":"PAID (50 credits) — elevation PROFILE along a line, not a single point:\n    pass points=[[lon,lat],…] (up to 100) or start=[lon,lat] + end=[lon,lat]\n    with sa"},{"name":"discover_open_geodata_pro","description":"PAID (30 credits) — open-data discovery with the metadata an agent\n    needs BEFORE querying: up to 50 ArcGIS Hub results (free tool: 10) and,\n    for the top 2"},{"name":"assess_airspace_obstruction_proximity","description":"PAID (100 credits) — nearby FAA-registered vertical obstructions\n    (towers, stacks, wind turbines) at a US point, for telecom/tower-siting\n    due diligence ("},{"name":"assess_site_due_diligence","description":"PAID (300 credits) — master due-diligence report for a point: wraps\n    assess_property_hazard (seismic + FEMA + NOAA, required) plus grid\n    proximity, land c"},{"name":"export_geojson_to_pdf","description":"PAID (150 credits) — render an ad-hoc GeoJSON FeatureCollection to a\n    one-page PDF report (static map + property table, base64-encoded PDF).\n    Separate fro"},{"name":"export_geojson_to_excel","description":"PAID (80 credits) — convert a GeoJSON FeatureCollection to an Excel\n    workbook (.xlsx, base64-encoded). Point geometries get LATITUDE/LONGITUDE\n    columns; o"},{"name":"bundle_migrate_convert","description":"PAID (40 credits) — one-call file migration: convert a raw file to\n    GeoJSON, then optionally reproject and simplify, then round coordinates.\n    Replaces 2-4"},{"name":"bundle_export_fixed","description":"PAID (150 credits) — fetch ALL records from a live FeatureServer layer\n    (no 50-record preview cap), auto-repair invalid geometries (GEOS\n    make_valid), and"}],"toolCount":106,"toolsHash":"8f7a5f948d916545bc96d2e3ded53b1347d1b4f2293558042d878fe5aeca5205","serverName":"GISGP","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.28.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T20:28:58.612Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":109,"error":null,"detail":{"tools":[{"name":"convert_coordinates","description":"Convert coordinate pairs between EPSG coordinate systems (max 1000 points).\n\n    points: [[x, y], ...] in from_epsg axis order (lon/lat for EPSG:4326).\n    Retu"},{"name":"validate_geojson","description":"Check whether a GeoJSON file/string is valid — catches broken geometry,\n    malformed structure, self-intersections, and out-of-range coordinates\n    before you"},{"name":"geojson_to_csv","description":"Convert GeoJSON to CSV/spreadsheet — one row per feature, properties\n    as columns, geometry flattened into a column (e.g. \"turn this GeoJSON\n    into Excel/CS"},{"name":"count_features","description":"Count features in an ArcGIS FeatureServer layer, optionally filtered by a WHERE clause.\n\n    service_url: full layer URL ending in /FeatureServer/<n>. token: on"},{"name":"extract_domains","description":"Extract coded value domains from an ArcGIS FeatureServer layer.\n\n    Returns JSON: {\"layer_name\": ..., \"domains\": {field: {name, field_alias, codes}}}.\n    "},{"name":"check_field_types","description":"Inspect the field schema of an ArcGIS FeatureServer layer.\n\n    Returns JSON: {layer_name, geometry_type, fields:[{name, alias, type,\n    length, nullable, has_"},{"name":"check_service_health","description":"Check whether an ArcGIS FeatureServer layer is reachable and responsive.\n\n    Returns JSON: {ok, ms (latency), name, geometry_type, field_count,\n    record_coun"},{"name":"rest_explore","description":"List the layers and tables of an ArcGIS FeatureServer/MapServer root.\n\n    Point at a service root to enumerate its layers/tables, or at a single\n    layer URL "},{"name":"compare_schemas","description":"Compare the field schemas of two ArcGIS FeatureServer layers.\n\n    Returns JSON diff: {added, removed, changed:[{field, diffs}], same,\n    geometry_match, ident"},{"name":"shapefile_to_geojson","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    to a GeoJSON FeatureCollection. Reprojects to WGS84 if a .prj says otherwise.\n\n    "},{"name":"kml_to_geojson","description":"Convert Google Earth / Google My Maps KML (2.0–2.2) to GeoJSON — the\n    common request when someone exported a map from Google Earth or Google\n    My Maps and "},{"name":"gpx_to_geojson","description":"Convert a GPS track/route file (GPX — from Garmin, Strava exports,\n    hiking/cycling apps, waypoints) to GeoJSON (e.g. \"convert my GPS track\n    to GeoJSON\", \""},{"name":"geojson_to_gpx","description":"Convert GeoJSON to a GPX file — e.g. \"export this as a GPS track\",\n    \"GeoJSON to GPX for my Garmin\", \"make waypoints from this GeoJSON\".\n    Points become GPX"},{"name":"flatgeobuf_to_geojson","description":"Convert a FlatGeobuf file (base64-encoded .fgb) to a GeoJSON\n    FeatureCollection. FlatGeobuf is a cloud-native binary format with a\n    built-in spatial index"},{"name":"geojson_to_flatgeobuf","description":"Convert GeoJSON to FlatGeobuf (.fgb) — the cloud-native binary\n    format with a built-in spatial index. FlatGeobuf holds one geometry\n    type per file, so mix"},{"name":"mapinfo_tab_to_geojson","description":"Convert a MapInfo TAB file set (base64-encoded .zip containing\n    .tab + its .dat/.map/.id sidecar files) to a GeoJSON FeatureCollection.\n    MapInfo TAB is th"},{"name":"geojson_to_mapinfo_tab","description":"Convert GeoJSON to a MapInfo TAB file set, ready for MapInfo Pro.\n    TAB is a multi-sidecar-file format (.tab/.dat/.id/.map) and single\n    geometry type per f"},{"name":"query_features","description":"Fetch actual feature records (attributes + geometry) from a FeatureServer layer.\n\n    Free preview capped at 50 records (WHERE filter + chosen fields). Returns "},{"name":"query_statistics","description":"Server-side aggregate stats on a numeric field of a FeatureServer layer.\n\n    No records fetched — AGOL computes sum/avg/min/max/count (also stddev/var).\n    Op"},{"name":"geometry_stats","description":"Compute area (m²/km²), length (m/km), vertex count, centroid and bbox of GeoJSON.\n\n    Metric measurements use an equal-area projection so area/length are real "},{"name":"reproject_geojson","description":"Change a GeoJSON's coordinate reference system (CRS/projection) —\n    e.g. \"reproject to Web Mercator\", \"convert WGS84 to UTM\", \"my\n    coordinates are in the w"},{"name":"simplify_geometry","description":"Reduce the number of vertices in GeoJSON geometry (Douglas-Peucker\n    algorithm) — e.g. \"simplify this polygon\", \"this shape has too many\n    points\", \"reduce "},{"name":"reduce_precision","description":"Round every coordinate to N decimal places to shrink a GeoJSON file's\n    size — e.g. \"my GeoJSON file is too big\", \"reduce coordinate precision\",\n    \"strip ex"},{"name":"csv_to_geojson","description":"Convert a CSV/spreadsheet with lat/lon (or X/Y) columns to GeoJSON —\n    auto-detects the coordinate columns (e.g. \"map this spreadsheet\",\n    \"CSV with lat/lon"},{"name":"geojson_to_kml","description":"Convert GeoJSON to KML for Google Earth / Google My Maps (e.g. \"open\n    this in Google Earth\", \"GeoJSON to KML\", \"make this viewable in Google\n    My Maps\"). R"},{"name":"geojson_to_shapefile","description":"Convert GeoJSON to an Esri Shapefile ZIP — the format ArcGIS Desktop\n    Pro/QGIS/most legacy GIS software still expects (e.g. \"I need a\n    shapefile for ArcGI"},{"name":"gpx_to_kml","description":"Convert a GPS track file (GPX) directly to KML for Google Earth —\n    e.g. \"open my Garmin/Strava track in Google Earth\", \"GPX to KML\"."},{"name":"kml_to_shapefile","description":"Convert a Google Earth/My Maps KML file directly to an Esri Shapefile\n    ZIP — e.g. \"Google Earth file to shapefile for ArcGIS\", \"KML to SHP\".\n    Returns JSON"},{"name":"kml_to_gpx","description":"Convert a Google Earth/My Maps KML file directly to GPX — waypoints\n    from Points, tracks from Lines/Polygons — e.g. \"KML to GPX for my\n    Garmin\", \"load thi"},{"name":"shapefile_to_gpx","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    directly to GPX — points become waypoints, lines/polygons become tracks\n    (2026-0"},{"name":"gpx_to_shapefile","description":"Convert a GPS track file (GPX) directly to an Esri Shapefile ZIP —\n    waypoints become points, tracks/routes become lines (2026-09-03).\n    Returns JSON: {shap"},{"name":"csv_to_gpx","description":"Convert a CSV with latitude/longitude columns directly to GPX\n    waypoints (2026-09-03) — e.g. \"these coordinates to a GPX for my GPS\".\n    Column names are au"},{"name":"gpx_to_csv","description":"Convert a GPS track file (GPX) directly to CSV (2026-09-03) —\n    waypoints get LATITUDE/LONGITUDE columns, tracks/routes get a\n    GEOMETRY_WKT column instead."},{"name":"wkt_to_geojson","description":"Convert a WKT (Well-Known Text) geometry string — the format\n    PostGIS/SQL geometry columns print by default — to GeoJSON (e.g. \"this\n    came from a PostGIS "},{"name":"geojson_to_wkt","description":"Convert a GeoJSON geometry (or a Feature's geometry) to WKT — the\n    format needed to insert geometry into PostGIS/SQL (e.g. \"I need this\n    for a PostGIS INS"},{"name":"dxf_to_geojson","description":"Convert an AutoCAD DXF file's contents to GeoJSON — e.g. \"convert\n    this DXF to GeoJSON\", \"AutoCAD drawing to GIS format\", \"DXF export from\n    Civil 3D to Ge"},{"name":"geojson_to_dxf","description":"Convert GeoJSON to an AutoCAD DXF file — e.g. \"export this GeoJSON\n    to DXF for AutoCAD\", \"GIS data to CAD format\", \"convert to .dxf for\n    Civil 3D\". Points"},{"name":"list_dxf_layers","description":"List the distinct DXF layer names used in a drawing — e.g. \"what\n    layers does this DXF have\", \"list layers before I extract one\". Real\n    CAD exports organi"},{"name":"georeference_dxf","description":"Reproject a DXF drawn in a local/arbitrary CAD coordinate system\n    into real-world coordinates — e.g. \"this DXF isn't in real coordinates,\n    fix it\", \"geore"},{"name":"dxf_to_pdf_report","description":"PAID (150 credits) — render a DXF drawing to a one-page PDF site-plan\n    report (vector plot + entity-type breakdown + layer list, base64-\n    encoded PDF) — e"},{"name":"grade_service","description":"Grade an ArcGIS FeatureServer layer A–F across 5 categories (schema quality,\n    data completeness, performance, maintenance, configuration).\n\n    Returns JSON:"},{"name":"audit_service","description":"Full one-call QA report of an ArcGIS FeatureServer layer: health (latency,\n    record count, capabilities) + field schema + coded domains + summary counts.\n\n   "},{"name":"find_layer_issues","description":"Scan an ArcGIS FeatureServer layer for common problems: missing ObjectID,\n    disabled query, stale data, all-null fields, features without geometry.\n\n    Sampl"},{"name":"share_map","description":"Publish a GeoJSON FeatureCollection as a live, shareable map page on gisgp.com.\n\n    Returns JSON: {url, expires_at} — url is a public interactive map a human c"},{"name":"embed_map_snippet","description":"Ready-to-paste <iframe> embed code for a live interactive map — thin\n    wrapper around share_map (same live page, same 30-day TTL), for\n    embedding directly "},{"name":"buffer_geojson","description":"Buffer every feature by a distance in METRES (negative shrinks).\n\n    Geodesically accurate at any latitude (each feature is buffered in a local\n    equidistant"},{"name":"dissolve_geojson","description":"Merge overlapping/adjacent geometries into one (optionally grouped by a\n    property field `by` → one dissolved feature per distinct value).\n\n    Returns JSON {"},{"name":"centroids_geojson","description":"Get the center point of each polygon/line feature — e.g. \"find the\n    center of each parcel\", \"convert polygons to points for labeling\",\n    \"centroid of each "},{"name":"convex_hull_geojson","description":"Draw the smallest polygon that wraps around all input features (a\n    convex hull) — e.g. \"draw a boundary around these points\", \"find the\n    outer perimeter o"},{"name":"overlay_geojson","description":"Combine two GeoJSON FeatureCollections with a boolean set operation.\n\n    op: intersection | difference (a minus b) | symmetric_difference | union.\n    Each sid"},{"name":"spatial_join_geojson","description":"Attach properties from every B feature that satisfies a spatial\n    predicate to each A feature (as a `_matches` list).\n\n    predicate: intersects | within | co"},{"name":"nearest_features_geojson","description":"For each feature in A, find the nearest feature in B by centroid-to-\n    centroid geodesic distance. Attaches `_nearest` properties and\n    `_nearest_distance_m"},{"name":"fix_geometry","description":"Repair invalid geometries (self-intersections, bad rings) via GEOS\n    make_valid. Already-valid geometries are left untouched. Returns JSON\n    {ok, fixed_coun"},{"name":"geojson_diff","description":"Compare two GeoJSON FeatureCollections — added/removed/changed features.\n\n    Matched by an `id_field` property if given, else by array position (exact\n    stru"},{"name":"epsg_suggest","description":"Suggest the correct UTM EPSG code to project a WGS84 lon/lat into for\n    accurate metric measurements (buffer/area/distance).\n\n    Returns JSON {ok, epsg, utm_"},{"name":"tile_math","description":"Convert a WGS84 lon/lat + zoom level to Slippy Map (XYZ) tile x/y,\n    that tile's lon/lat bbox, and its Bing quadkey.\n\n    Returns JSON {ok, zoom, x, y, tile_b"},{"name":"envelope_geojson","description":"Get the bounding box (min/max rectangle) around each feature — e.g.\n    \"get the bounding box of this shape\", \"bbox for each feature\",\n    \"rectangular extent o"},{"name":"minimum_rotated_rectangle","description":"Smallest-area rectangle wrapping all input features combined — can be\n    tilted to fit tighter than a straight bounding box (e.g. \"tightest\n    rectangle aroun"},{"name":"voronoi_geojson","description":"Divide space into regions closest to each input point (Voronoi\n    diagram) — e.g. \"find the service area for each location\", \"which\n    points are closest to w"},{"name":"full_service_audit","description":"Complete one-call QA report: A-F grade + full audit (health/fields/\n    domains/summary) + issue scan, merged into one response — replaces 3\n    separate calls "},{"name":"geometry_health_report","description":"Complete one-call GeoJSON health check: validate + auto-repair invalid\n    geometry + stats (area/length/vertices) + bbox envelope, merged — replaces\n    4 sepa"},{"name":"get_terrain_profile","description":"Get the ground elevation (metres above sea level) at a coordinate —\n    e.g. \"what's the elevation here\", \"is this point in a flood-risk\n    lowland\", \"elevatio"},{"name":"get_climate_history","description":"Daily historical weather for a point/date range via Open-Meteo's\n    ERA5-based archive (no key, free, data back to 1940). Dates are\n    YYYY-MM-DD. Returns JSO"},{"name":"classify_land_cover","description":"Land cover class at a WGS84 point via ESA CCI Land Cover 2018 (ArcGIS\n    Living Atlas ImageServer, no key, 300m resolution). Returns JSON:\n    {ok, class_code,"},{"name":"analyze_location","description":"Reverse-geocode a WGS84 point to country/region/locality via OSM\n    Nominatim (no key, free — fair-use rate limited, best-effort). Returns\n    JSON: {ok, displ"},{"name":"geocode_address","description":"Forward-geocode a free-text address to lon/lat. Default: OSM Nominatim\n    (no key, free, fair-use rate limited) — the complement to\n    analyze_location's reve"},{"name":"offset_coordinates","description":"Move a WGS84 point by a geodesic distance (metres) along a compass\n    bearing (0=N, 90=E, 180=S, 270=W). Pure computation, no external API.\n    Returns JSON: {"},{"name":"detect_coordinate_order","description":"Detect whether [x, y] pairs are [lon, lat] or [lat, lon] — resolves\n    a genuinely common real-world confusion (one of the most-viewed GIS\n    StackExchange qu"},{"name":"guess_crs_from_coordinates","description":"Best-guess candidate CRS for raw [x, y] coordinates with no metadata\n    (e.g. a shapefile with a missing .prj) — real demand signal (79k+ views\n    on GIS Stac"},{"name":"parse_coordinate","description":"Parse ANY single coordinate string a human might paste into WGS84\n    lat/lon — decimal degrees with any separator or an EU decimal comma,\n    DMS (42°41'51.7\"N"},{"name":"format_coordinate","description":"Express one WGS84 point in every common notation at once: decimal\n    degrees, DMS, DDM, UTM (zone/band/easting/northing), MGRS and USNG,\n    British National G"},{"name":"generate_static_map_image","description":"Render a GeoJSON FeatureCollection/Feature to a static PNG map image\n    (base64 data URL) — for embedding in reports/emails/documents, unlike\n    share_map's i"},{"name":"assess_grid_exposure","description":"Electric grid infrastructure proximity at a US point: nearby\n    substations + transmission lines within 10 miles (community ArcGIS\n    mirror of HIFLD data — p"},{"name":"assess_renewable_site","description":"One-call solar/wind site-scouting indicator: terrain + land cover +\n    1-year solar/wind climate averages + grid proximity, combined from\n    GISGP's existing "},{"name":"assess_pipeline_proximity","description":"Natural gas interstate/intrastate transmission pipeline proximity at\n    a US point (EIA/HIFLD, 32,892 segments). Substitute for proprietary\n    local-utility \""},{"name":"assess_protected_area_proximity","description":"US protected/conservation area proximity via USGS PAD-US (public\n    domain, commercial-use OK — unlike Protected Planet/WDPA, whose API\n    explicitly forbids "},{"name":"get_river_flow_status","description":"Nearest USGS real-time stream/river gauge to a point (US rivers and\n    streams only): live streamflow (ft3/s) and gauge height (ft), reported\n    honestly as p"},{"name":"discover_open_geodata","description":"Keyword search across ArcGIS Hub Open Data — real public\n    FeatureServer/MapServer datasets from government/organization ArcGIS\n    Online portals worldwide. "},{"name":"assess_ev_charging_site","description":"One-call EV charging site-scouting indicator: grid proximity (power\n    for fast-charging) + land cover + locality context, combined from\n    GISGP's existing f"},{"name":"assess_telecom_site","description":"One-call cell tower site-scouting indicator: grid proximity + terrain\n    elevation (line-of-sight proxy) + land cover, combined from GISGP's\n    existing free "},{"name":"rank_renewable_sites","description":"Bulk solar/wind site screener — evaluates up to 25 candidate points\n    (each {\"lon\": ..., \"lat\": ...}) and returns only the top_n, ranked by\n    average daily "},{"name":"assess_wildfire_risk","description":"Real-time active wildfire proximity at a point via NASA FIRMS\n    (VIIRS satellite hotspot detections, last 2 days) + electric grid\n    exposure (transmission l"},{"name":"calculate_route","description":"Real driving distance + duration between two points. Default: OSRM\n    (public demo instance, no key — fair-use limited, not a production SLA).\n    Optional ago"},{"name":"estimate_cost","description":"FREE — quote a paid tool's cost WITHOUT executing it or charging the\n    wallet (call this before assess_property_hazard etc.).\n    `units` = candidate/item cou"},{"name":"check_wallet_balance","description":"FREE — check your own MCP credits wallet balance (the same account\n    paid tools like assess_property_hazard charge against). Requires\n    Authorization: Beare"},{"name":"assess_property_hazard","description":"PAID (200 credits) — multi-source US property hazard indicator: USGS\n    seismic risk (required), plus best-effort FEMA disaster declaration\n    history (state,"},{"name":"rank_hazard_safe_sites","description":"PAID (200 credits PER CANDIDATE, max 25 candidates/call) — bulk seismic-\n    risk screener. Runs assess_property_hazard's seismic check under the hood\n    for e"},{"name":"assess_portfolio_climate_disclosure","description":"PAID (200 credits PER PROPERTY, max 25 properties/call) — bulk physical\n    climate-risk disclosure input for a real-estate/asset portfolio (SEC\n    climate dis"},{"name":"assess_supply_chain_redundancy","description":"PAID (400 credits) — checks whether two supposedly-redundant sites\n    (e.g. two \"backup\" suppliers/warehouses/data centers) are actually\n    independent: real "},{"name":"assess_energy_community_credit","description":"PAID (100 credits) — US Inflation Reduction Act \"energy community\"\n    bonus tax credit qualification lookup for a renewable energy project\n    site. Checks bot"},{"name":"assess_datacenter_site","description":"PAID (300 credits) — data center site-scouting composite: grid\n    proximity (power availability), multi-source hazard (seismic + FEMA +\n    NOAA, required — sa"},{"name":"assess_reforestation_site","description":"PAID (100 credits) — reforestation/afforestation site-scouting\n    composite: terrain, land cover (flags already-forested/urban/water/snow\n    as unsuitable), a"},{"name":"get_elevation_profile","description":"PAID (50 credits) — elevation PROFILE along a line, not a single point:\n    pass points=[[lon,lat],…] (up to 100) or start=[lon,lat] + end=[lon,lat]\n    with sa"},{"name":"discover_open_geodata_pro","description":"PAID (30 credits) — open-data discovery with the metadata an agent\n    needs BEFORE querying: up to 50 ArcGIS Hub results (free tool: 10) and,\n    for the top 2"},{"name":"assess_airspace_obstruction_proximity","description":"PAID (100 credits) — nearby FAA-registered vertical obstructions\n    (towers, stacks, wind turbines) at a US point, for telecom/tower-siting\n    due diligence ("},{"name":"assess_site_due_diligence","description":"PAID (300 credits) — master due-diligence report for a point: wraps\n    assess_property_hazard (seismic + FEMA + NOAA, required) plus grid\n    proximity, land c"},{"name":"export_geojson_to_pdf","description":"PAID (150 credits) — render an ad-hoc GeoJSON FeatureCollection to a\n    one-page PDF report (static map + property table, base64-encoded PDF).\n    Separate fro"},{"name":"export_geojson_to_excel","description":"PAID (80 credits) — convert a GeoJSON FeatureCollection to an Excel\n    workbook (.xlsx, base64-encoded). Point geometries get LATITUDE/LONGITUDE\n    columns; o"},{"name":"bundle_migrate_convert","description":"PAID (40 credits) — one-call file migration: convert a raw file to\n    GeoJSON, then optionally reproject and simplify, then round coordinates.\n    Replaces 2-4"},{"name":"bundle_export_fixed","description":"PAID (150 credits) — fetch ALL records from a live FeatureServer layer\n    (no 50-record preview cap), auto-repair invalid geometries (GEOS\n    make_valid), and"}],"toolCount":106,"toolsHash":"8f7a5f948d916545bc96d2e3ded53b1347d1b4f2293558042d878fe5aeca5205","serverName":"GISGP","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.28.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T13:29:40.074Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":4928,"error":null,"detail":{"tools":[{"name":"convert_coordinates","description":"Convert coordinate pairs between EPSG coordinate systems (max 1000 points).\n\n    points: [[x, y], ...] in from_epsg axis order (lon/lat for EPSG:4326).\n    Retu"},{"name":"validate_geojson","description":"Check whether a GeoJSON file/string is valid — catches broken geometry,\n    malformed structure, self-intersections, and out-of-range coordinates\n    before you"},{"name":"geojson_to_csv","description":"Convert GeoJSON to CSV/spreadsheet — one row per feature, properties\n    as columns, geometry flattened into a column (e.g. \"turn this GeoJSON\n    into Excel/CS"},{"name":"count_features","description":"Count features in an ArcGIS FeatureServer layer, optionally filtered by a WHERE clause.\n\n    service_url: full layer URL ending in /FeatureServer/<n>. token: on"},{"name":"extract_domains","description":"Extract coded value domains from an ArcGIS FeatureServer layer.\n\n    Returns JSON: {\"layer_name\": ..., \"domains\": {field: {name, field_alias, codes}}}.\n    "},{"name":"check_field_types","description":"Inspect the field schema of an ArcGIS FeatureServer layer.\n\n    Returns JSON: {layer_name, geometry_type, fields:[{name, alias, type,\n    length, nullable, has_"},{"name":"check_service_health","description":"Check whether an ArcGIS FeatureServer layer is reachable and responsive.\n\n    Returns JSON: {ok, ms (latency), name, geometry_type, field_count,\n    record_coun"},{"name":"rest_explore","description":"List the layers and tables of an ArcGIS FeatureServer/MapServer root.\n\n    Point at a service root to enumerate its layers/tables, or at a single\n    layer URL "},{"name":"compare_schemas","description":"Compare the field schemas of two ArcGIS FeatureServer layers.\n\n    Returns JSON diff: {added, removed, changed:[{field, diffs}], same,\n    geometry_match, ident"},{"name":"shapefile_to_geojson","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    to a GeoJSON FeatureCollection. Reprojects to WGS84 if a .prj says otherwise.\n\n    "},{"name":"kml_to_geojson","description":"Convert Google Earth / Google My Maps KML (2.0–2.2) to GeoJSON — the\n    common request when someone exported a map from Google Earth or Google\n    My Maps and "},{"name":"gpx_to_geojson","description":"Convert a GPS track/route file (GPX — from Garmin, Strava exports,\n    hiking/cycling apps, waypoints) to GeoJSON (e.g. \"convert my GPS track\n    to GeoJSON\", \""},{"name":"geojson_to_gpx","description":"Convert GeoJSON to a GPX file — e.g. \"export this as a GPS track\",\n    \"GeoJSON to GPX for my Garmin\", \"make waypoints from this GeoJSON\".\n    Points become GPX"},{"name":"flatgeobuf_to_geojson","description":"Convert a FlatGeobuf file (base64-encoded .fgb) to a GeoJSON\n    FeatureCollection. FlatGeobuf is a cloud-native binary format with a\n    built-in spatial index"},{"name":"geojson_to_flatgeobuf","description":"Convert GeoJSON to FlatGeobuf (.fgb) — the cloud-native binary\n    format with a built-in spatial index. FlatGeobuf holds one geometry\n    type per file, so mix"},{"name":"mapinfo_tab_to_geojson","description":"Convert a MapInfo TAB file set (base64-encoded .zip containing\n    .tab + its .dat/.map/.id sidecar files) to a GeoJSON FeatureCollection.\n    MapInfo TAB is th"},{"name":"geojson_to_mapinfo_tab","description":"Convert GeoJSON to a MapInfo TAB file set, ready for MapInfo Pro.\n    TAB is a multi-sidecar-file format (.tab/.dat/.id/.map) and single\n    geometry type per f"},{"name":"query_features","description":"Fetch actual feature records (attributes + geometry) from a FeatureServer layer.\n\n    Free preview capped at 50 records (WHERE filter + chosen fields). Returns "},{"name":"query_statistics","description":"Server-side aggregate stats on a numeric field of a FeatureServer layer.\n\n    No records fetched — AGOL computes sum/avg/min/max/count (also stddev/var).\n    Op"},{"name":"geometry_stats","description":"Compute area (m²/km²), length (m/km), vertex count, centroid and bbox of GeoJSON.\n\n    Metric measurements use an equal-area projection so area/length are real "},{"name":"reproject_geojson","description":"Change a GeoJSON's coordinate reference system (CRS/projection) —\n    e.g. \"reproject to Web Mercator\", \"convert WGS84 to UTM\", \"my\n    coordinates are in the w"},{"name":"simplify_geometry","description":"Reduce the number of vertices in GeoJSON geometry (Douglas-Peucker\n    algorithm) — e.g. \"simplify this polygon\", \"this shape has too many\n    points\", \"reduce "},{"name":"reduce_precision","description":"Round every coordinate to N decimal places to shrink a GeoJSON file's\n    size — e.g. \"my GeoJSON file is too big\", \"reduce coordinate precision\",\n    \"strip ex"},{"name":"csv_to_geojson","description":"Convert a CSV/spreadsheet with lat/lon (or X/Y) columns to GeoJSON —\n    auto-detects the coordinate columns (e.g. \"map this spreadsheet\",\n    \"CSV with lat/lon"},{"name":"geojson_to_kml","description":"Convert GeoJSON to KML for Google Earth / Google My Maps (e.g. \"open\n    this in Google Earth\", \"GeoJSON to KML\", \"make this viewable in Google\n    My Maps\"). R"},{"name":"geojson_to_shapefile","description":"Convert GeoJSON to an Esri Shapefile ZIP — the format ArcGIS Desktop\n    Pro/QGIS/most legacy GIS software still expects (e.g. \"I need a\n    shapefile for ArcGI"},{"name":"gpx_to_kml","description":"Convert a GPS track file (GPX) directly to KML for Google Earth —\n    e.g. \"open my Garmin/Strava track in Google Earth\", \"GPX to KML\"."},{"name":"kml_to_shapefile","description":"Convert a Google Earth/My Maps KML file directly to an Esri Shapefile\n    ZIP — e.g. \"Google Earth file to shapefile for ArcGIS\", \"KML to SHP\".\n    Returns JSON"},{"name":"kml_to_gpx","description":"Convert a Google Earth/My Maps KML file directly to GPX — waypoints\n    from Points, tracks from Lines/Polygons — e.g. \"KML to GPX for my\n    Garmin\", \"load thi"},{"name":"shapefile_to_gpx","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    directly to GPX — points become waypoints, lines/polygons become tracks\n    (2026-0"},{"name":"gpx_to_shapefile","description":"Convert a GPS track file (GPX) directly to an Esri Shapefile ZIP —\n    waypoints become points, tracks/routes become lines (2026-09-03).\n    Returns JSON: {shap"},{"name":"csv_to_gpx","description":"Convert a CSV with latitude/longitude columns directly to GPX\n    waypoints (2026-09-03) — e.g. \"these coordinates to a GPX for my GPS\".\n    Column names are au"},{"name":"gpx_to_csv","description":"Convert a GPS track file (GPX) directly to CSV (2026-09-03) —\n    waypoints get LATITUDE/LONGITUDE columns, tracks/routes get a\n    GEOMETRY_WKT column instead."},{"name":"wkt_to_geojson","description":"Convert a WKT (Well-Known Text) geometry string — the format\n    PostGIS/SQL geometry columns print by default — to GeoJSON (e.g. \"this\n    came from a PostGIS "},{"name":"geojson_to_wkt","description":"Convert a GeoJSON geometry (or a Feature's geometry) to WKT — the\n    format needed to insert geometry into PostGIS/SQL (e.g. \"I need this\n    for a PostGIS INS"},{"name":"dxf_to_geojson","description":"Convert an AutoCAD DXF file's contents to GeoJSON — e.g. \"convert\n    this DXF to GeoJSON\", \"AutoCAD drawing to GIS format\", \"DXF export from\n    Civil 3D to Ge"},{"name":"geojson_to_dxf","description":"Convert GeoJSON to an AutoCAD DXF file — e.g. \"export this GeoJSON\n    to DXF for AutoCAD\", \"GIS data to CAD format\", \"convert to .dxf for\n    Civil 3D\". Points"},{"name":"list_dxf_layers","description":"List the distinct DXF layer names used in a drawing — e.g. \"what\n    layers does this DXF have\", \"list layers before I extract one\". Real\n    CAD exports organi"},{"name":"georeference_dxf","description":"Reproject a DXF drawn in a local/arbitrary CAD coordinate system\n    into real-world coordinates — e.g. \"this DXF isn't in real coordinates,\n    fix it\", \"geore"},{"name":"dxf_to_pdf_report","description":"PAID (150 credits) — render a DXF drawing to a one-page PDF site-plan\n    report (vector plot + entity-type breakdown + layer list, base64-\n    encoded PDF) — e"},{"name":"grade_service","description":"Grade an ArcGIS FeatureServer layer A–F across 5 categories (schema quality,\n    data completeness, performance, maintenance, configuration).\n\n    Returns JSON:"},{"name":"audit_service","description":"Full one-call QA report of an ArcGIS FeatureServer layer: health (latency,\n    record count, capabilities) + field schema + coded domains + summary counts.\n\n   "},{"name":"find_layer_issues","description":"Scan an ArcGIS FeatureServer layer for common problems: missing ObjectID,\n    disabled query, stale data, all-null fields, features without geometry.\n\n    Sampl"},{"name":"share_map","description":"Publish a GeoJSON FeatureCollection as a live, shareable map page on gisgp.com.\n\n    Returns JSON: {url, expires_at} — url is a public interactive map a human c"},{"name":"embed_map_snippet","description":"Ready-to-paste <iframe> embed code for a live interactive map — thin\n    wrapper around share_map (same live page, same 30-day TTL), for\n    embedding directly "},{"name":"buffer_geojson","description":"Buffer every feature by a distance in METRES (negative shrinks).\n\n    Geodesically accurate at any latitude (each feature is buffered in a local\n    equidistant"},{"name":"dissolve_geojson","description":"Merge overlapping/adjacent geometries into one (optionally grouped by a\n    property field `by` → one dissolved feature per distinct value).\n\n    Returns JSON {"},{"name":"centroids_geojson","description":"Get the center point of each polygon/line feature — e.g. \"find the\n    center of each parcel\", \"convert polygons to points for labeling\",\n    \"centroid of each "},{"name":"convex_hull_geojson","description":"Draw the smallest polygon that wraps around all input features (a\n    convex hull) — e.g. \"draw a boundary around these points\", \"find the\n    outer perimeter o"},{"name":"overlay_geojson","description":"Combine two GeoJSON FeatureCollections with a boolean set operation.\n\n    op: intersection | difference (a minus b) | symmetric_difference | union.\n    Each sid"},{"name":"spatial_join_geojson","description":"Attach properties from every B feature that satisfies a spatial\n    predicate to each A feature (as a `_matches` list).\n\n    predicate: intersects | within | co"},{"name":"nearest_features_geojson","description":"For each feature in A, find the nearest feature in B by centroid-to-\n    centroid geodesic distance. Attaches `_nearest` properties and\n    `_nearest_distance_m"},{"name":"fix_geometry","description":"Repair invalid geometries (self-intersections, bad rings) via GEOS\n    make_valid. Already-valid geometries are left untouched. Returns JSON\n    {ok, fixed_coun"},{"name":"geojson_diff","description":"Compare two GeoJSON FeatureCollections — added/removed/changed features.\n\n    Matched by an `id_field` property if given, else by array position (exact\n    stru"},{"name":"epsg_suggest","description":"Suggest the correct UTM EPSG code to project a WGS84 lon/lat into for\n    accurate metric measurements (buffer/area/distance).\n\n    Returns JSON {ok, epsg, utm_"},{"name":"tile_math","description":"Convert a WGS84 lon/lat + zoom level to Slippy Map (XYZ) tile x/y,\n    that tile's lon/lat bbox, and its Bing quadkey.\n\n    Returns JSON {ok, zoom, x, y, tile_b"},{"name":"envelope_geojson","description":"Get the bounding box (min/max rectangle) around each feature — e.g.\n    \"get the bounding box of this shape\", \"bbox for each feature\",\n    \"rectangular extent o"},{"name":"minimum_rotated_rectangle","description":"Smallest-area rectangle wrapping all input features combined — can be\n    tilted to fit tighter than a straight bounding box (e.g. \"tightest\n    rectangle aroun"},{"name":"voronoi_geojson","description":"Divide space into regions closest to each input point (Voronoi\n    diagram) — e.g. \"find the service area for each location\", \"which\n    points are closest to w"},{"name":"full_service_audit","description":"Complete one-call QA report: A-F grade + full audit (health/fields/\n    domains/summary) + issue scan, merged into one response — replaces 3\n    separate calls "},{"name":"geometry_health_report","description":"Complete one-call GeoJSON health check: validate + auto-repair invalid\n    geometry + stats (area/length/vertices) + bbox envelope, merged — replaces\n    4 sepa"},{"name":"get_terrain_profile","description":"Get the ground elevation (metres above sea level) at a coordinate —\n    e.g. \"what's the elevation here\", \"is this point in a flood-risk\n    lowland\", \"elevatio"},{"name":"get_climate_history","description":"Daily historical weather for a point/date range via Open-Meteo's\n    ERA5-based archive (no key, free, data back to 1940). Dates are\n    YYYY-MM-DD. Returns JSO"},{"name":"classify_land_cover","description":"Land cover class at a WGS84 point via ESA CCI Land Cover 2018 (ArcGIS\n    Living Atlas ImageServer, no key, 300m resolution). Returns JSON:\n    {ok, class_code,"},{"name":"analyze_location","description":"Reverse-geocode a WGS84 point to country/region/locality via OSM\n    Nominatim (no key, free — fair-use rate limited, best-effort). Returns\n    JSON: {ok, displ"},{"name":"geocode_address","description":"Forward-geocode a free-text address to lon/lat. Default: OSM Nominatim\n    (no key, free, fair-use rate limited) — the complement to\n    analyze_location's reve"},{"name":"offset_coordinates","description":"Move a WGS84 point by a geodesic distance (metres) along a compass\n    bearing (0=N, 90=E, 180=S, 270=W). Pure computation, no external API.\n    Returns JSON: {"},{"name":"detect_coordinate_order","description":"Detect whether [x, y] pairs are [lon, lat] or [lat, lon] — resolves\n    a genuinely common real-world confusion (one of the most-viewed GIS\n    StackExchange qu"},{"name":"guess_crs_from_coordinates","description":"Best-guess candidate CRS for raw [x, y] coordinates with no metadata\n    (e.g. a shapefile with a missing .prj) — real demand signal (79k+ views\n    on GIS Stac"},{"name":"parse_coordinate","description":"Parse ANY single coordinate string a human might paste into WGS84\n    lat/lon — decimal degrees with any separator or an EU decimal comma,\n    DMS (42°41'51.7\"N"},{"name":"format_coordinate","description":"Express one WGS84 point in every common notation at once: decimal\n    degrees, DMS, DDM, UTM (zone/band/easting/northing), MGRS and USNG,\n    British National G"},{"name":"generate_static_map_image","description":"Render a GeoJSON FeatureCollection/Feature to a static PNG map image\n    (base64 data URL) — for embedding in reports/emails/documents, unlike\n    share_map's i"},{"name":"assess_grid_exposure","description":"Electric grid infrastructure proximity at a US point: nearby\n    substations + transmission lines within 10 miles (community ArcGIS\n    mirror of HIFLD data — p"},{"name":"assess_renewable_site","description":"One-call solar/wind site-scouting indicator: terrain + land cover +\n    1-year solar/wind climate averages + grid proximity, combined from\n    GISGP's existing "},{"name":"assess_pipeline_proximity","description":"Natural gas interstate/intrastate transmission pipeline proximity at\n    a US point (EIA/HIFLD, 32,892 segments). Substitute for proprietary\n    local-utility \""},{"name":"assess_protected_area_proximity","description":"US protected/conservation area proximity via USGS PAD-US (public\n    domain, commercial-use OK — unlike Protected Planet/WDPA, whose API\n    explicitly forbids "},{"name":"get_river_flow_status","description":"Nearest USGS real-time stream/river gauge to a point (US rivers and\n    streams only): live streamflow (ft3/s) and gauge height (ft), reported\n    honestly as p"},{"name":"discover_open_geodata","description":"Keyword search across ArcGIS Hub Open Data — real public\n    FeatureServer/MapServer datasets from government/organization ArcGIS\n    Online portals worldwide. "},{"name":"assess_ev_charging_site","description":"One-call EV charging site-scouting indicator: grid proximity (power\n    for fast-charging) + land cover + locality context, combined from\n    GISGP's existing f"},{"name":"assess_telecom_site","description":"One-call cell tower site-scouting indicator: grid proximity + terrain\n    elevation (line-of-sight proxy) + land cover, combined from GISGP's\n    existing free "},{"name":"rank_renewable_sites","description":"Bulk solar/wind site screener — evaluates up to 25 candidate points\n    (each {\"lon\": ..., \"lat\": ...}) and returns only the top_n, ranked by\n    average daily "},{"name":"assess_wildfire_risk","description":"Real-time active wildfire proximity at a point via NASA FIRMS\n    (VIIRS satellite hotspot detections, last 2 days) + electric grid\n    exposure (transmission l"},{"name":"calculate_route","description":"Real driving distance + duration between two points. Default: OSRM\n    (public demo instance, no key — fair-use limited, not a production SLA).\n    Optional ago"},{"name":"estimate_cost","description":"FREE — quote a paid tool's cost WITHOUT executing it or charging the\n    wallet (call this before assess_property_hazard etc.).\n    `units` = candidate/item cou"},{"name":"check_wallet_balance","description":"FREE — check your own MCP credits wallet balance (the same account\n    paid tools like assess_property_hazard charge against). Requires\n    Authorization: Beare"},{"name":"assess_property_hazard","description":"PAID (200 credits) — multi-source US property hazard indicator: USGS\n    seismic risk (required), plus best-effort FEMA disaster declaration\n    history (state,"},{"name":"rank_hazard_safe_sites","description":"PAID (200 credits PER CANDIDATE, max 25 candidates/call) — bulk seismic-\n    risk screener. Runs assess_property_hazard's seismic check under the hood\n    for e"},{"name":"assess_portfolio_climate_disclosure","description":"PAID (200 credits PER PROPERTY, max 25 properties/call) — bulk physical\n    climate-risk disclosure input for a real-estate/asset portfolio (SEC\n    climate dis"},{"name":"assess_supply_chain_redundancy","description":"PAID (400 credits) — checks whether two supposedly-redundant sites\n    (e.g. two \"backup\" suppliers/warehouses/data centers) are actually\n    independent: real "},{"name":"assess_energy_community_credit","description":"PAID (100 credits) — US Inflation Reduction Act \"energy community\"\n    bonus tax credit qualification lookup for a renewable energy project\n    site. Checks bot"},{"name":"assess_datacenter_site","description":"PAID (300 credits) — data center site-scouting composite: grid\n    proximity (power availability), multi-source hazard (seismic + FEMA +\n    NOAA, required — sa"},{"name":"assess_reforestation_site","description":"PAID (100 credits) — reforestation/afforestation site-scouting\n    composite: terrain, land cover (flags already-forested/urban/water/snow\n    as unsuitable), a"},{"name":"get_elevation_profile","description":"PAID (50 credits) — elevation PROFILE along a line, not a single point:\n    pass points=[[lon,lat],…] (up to 100) or start=[lon,lat] + end=[lon,lat]\n    with sa"},{"name":"discover_open_geodata_pro","description":"PAID (30 credits) — open-data discovery with the metadata an agent\n    needs BEFORE querying: up to 50 ArcGIS Hub results (free tool: 10) and,\n    for the top 2"},{"name":"assess_airspace_obstruction_proximity","description":"PAID (100 credits) — nearby FAA-registered vertical obstructions\n    (towers, stacks, wind turbines) at a US point, for telecom/tower-siting\n    due diligence ("},{"name":"assess_site_due_diligence","description":"PAID (300 credits) — master due-diligence report for a point: wraps\n    assess_property_hazard (seismic + FEMA + NOAA, required) plus grid\n    proximity, land c"},{"name":"export_geojson_to_pdf","description":"PAID (150 credits) — render an ad-hoc GeoJSON FeatureCollection to a\n    one-page PDF report (static map + property table, base64-encoded PDF).\n    Separate fro"},{"name":"export_geojson_to_excel","description":"PAID (80 credits) — convert a GeoJSON FeatureCollection to an Excel\n    workbook (.xlsx, base64-encoded). Point geometries get LATITUDE/LONGITUDE\n    columns; o"},{"name":"bundle_migrate_convert","description":"PAID (40 credits) — one-call file migration: convert a raw file to\n    GeoJSON, then optionally reproject and simplify, then round coordinates.\n    Replaces 2-4"},{"name":"bundle_export_fixed","description":"PAID (150 credits) — fetch ALL records from a live FeatureServer layer\n    (no 50-record preview cap), auto-repair invalid geometries (GEOS\n    make_valid), and"}],"toolCount":106,"toolsHash":"8f7a5f948d916545bc96d2e3ded53b1347d1b4f2293558042d878fe5aeca5205","serverName":"GISGP","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.28.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T06:22:25.087Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":174,"error":null,"detail":{"tools":[{"name":"convert_coordinates","description":"Convert coordinate pairs between EPSG coordinate systems (max 1000 points).\n\n    points: [[x, y], ...] in from_epsg axis order (lon/lat for EPSG:4326).\n    Retu"},{"name":"validate_geojson","description":"Check whether a GeoJSON file/string is valid — catches broken geometry,\n    malformed structure, self-intersections, and out-of-range coordinates\n    before you"},{"name":"geojson_to_csv","description":"Convert GeoJSON to CSV/spreadsheet — one row per feature, properties\n    as columns, geometry flattened into a column (e.g. \"turn this GeoJSON\n    into Excel/CS"},{"name":"count_features","description":"Count features in an ArcGIS FeatureServer layer, optionally filtered by a WHERE clause.\n\n    service_url: full layer URL ending in /FeatureServer/<n>. token: on"},{"name":"extract_domains","description":"Extract coded value domains from an ArcGIS FeatureServer layer.\n\n    Returns JSON: {\"layer_name\": ..., \"domains\": {field: {name, field_alias, codes}}}.\n    "},{"name":"check_field_types","description":"Inspect the field schema of an ArcGIS FeatureServer layer.\n\n    Returns JSON: {layer_name, geometry_type, fields:[{name, alias, type,\n    length, nullable, has_"},{"name":"check_service_health","description":"Check whether an ArcGIS FeatureServer layer is reachable and responsive.\n\n    Returns JSON: {ok, ms (latency), name, geometry_type, field_count,\n    record_coun"},{"name":"rest_explore","description":"List the layers and tables of an ArcGIS FeatureServer/MapServer root.\n\n    Point at a service root to enumerate its layers/tables, or at a single\n    layer URL "},{"name":"compare_schemas","description":"Compare the field schemas of two ArcGIS FeatureServer layers.\n\n    Returns JSON diff: {added, removed, changed:[{field, diffs}], same,\n    geometry_match, ident"},{"name":"shapefile_to_geojson","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    to a GeoJSON FeatureCollection. Reprojects to WGS84 if a .prj says otherwise.\n\n    "},{"name":"kml_to_geojson","description":"Convert Google Earth / Google My Maps KML (2.0–2.2) to GeoJSON — the\n    common request when someone exported a map from Google Earth or Google\n    My Maps and "},{"name":"gpx_to_geojson","description":"Convert a GPS track/route file (GPX — from Garmin, Strava exports,\n    hiking/cycling apps, waypoints) to GeoJSON (e.g. \"convert my GPS track\n    to GeoJSON\", \""},{"name":"geojson_to_gpx","description":"Convert GeoJSON to a GPX file — e.g. \"export this as a GPS track\",\n    \"GeoJSON to GPX for my Garmin\", \"make waypoints from this GeoJSON\".\n    Points become GPX"},{"name":"flatgeobuf_to_geojson","description":"Convert a FlatGeobuf file (base64-encoded .fgb) to a GeoJSON\n    FeatureCollection. FlatGeobuf is a cloud-native binary format with a\n    built-in spatial index"},{"name":"geojson_to_flatgeobuf","description":"Convert GeoJSON to FlatGeobuf (.fgb) — the cloud-native binary\n    format with a built-in spatial index. FlatGeobuf holds one geometry\n    type per file, so mix"},{"name":"mapinfo_tab_to_geojson","description":"Convert a MapInfo TAB file set (base64-encoded .zip containing\n    .tab + its .dat/.map/.id sidecar files) to a GeoJSON FeatureCollection.\n    MapInfo TAB is th"},{"name":"geojson_to_mapinfo_tab","description":"Convert GeoJSON to a MapInfo TAB file set, ready for MapInfo Pro.\n    TAB is a multi-sidecar-file format (.tab/.dat/.id/.map) and single\n    geometry type per f"},{"name":"query_features","description":"Fetch actual feature records (attributes + geometry) from a FeatureServer layer.\n\n    Free preview capped at 50 records (WHERE filter + chosen fields). Returns "},{"name":"query_statistics","description":"Server-side aggregate stats on a numeric field of a FeatureServer layer.\n\n    No records fetched — AGOL computes sum/avg/min/max/count (also stddev/var).\n    Op"},{"name":"geometry_stats","description":"Compute area (m²/km²), length (m/km), vertex count, centroid and bbox of GeoJSON.\n\n    Metric measurements use an equal-area projection so area/length are real "},{"name":"reproject_geojson","description":"Change a GeoJSON's coordinate reference system (CRS/projection) —\n    e.g. \"reproject to Web Mercator\", \"convert WGS84 to UTM\", \"my\n    coordinates are in the w"},{"name":"simplify_geometry","description":"Reduce the number of vertices in GeoJSON geometry (Douglas-Peucker\n    algorithm) — e.g. \"simplify this polygon\", \"this shape has too many\n    points\", \"reduce "},{"name":"reduce_precision","description":"Round every coordinate to N decimal places to shrink a GeoJSON file's\n    size — e.g. \"my GeoJSON file is too big\", \"reduce coordinate precision\",\n    \"strip ex"},{"name":"csv_to_geojson","description":"Convert a CSV/spreadsheet with lat/lon (or X/Y) columns to GeoJSON —\n    auto-detects the coordinate columns (e.g. \"map this spreadsheet\",\n    \"CSV with lat/lon"},{"name":"geojson_to_kml","description":"Convert GeoJSON to KML for Google Earth / Google My Maps (e.g. \"open\n    this in Google Earth\", \"GeoJSON to KML\", \"make this viewable in Google\n    My Maps\"). R"},{"name":"geojson_to_shapefile","description":"Convert GeoJSON to an Esri Shapefile ZIP — the format ArcGIS Desktop\n    Pro/QGIS/most legacy GIS software still expects (e.g. \"I need a\n    shapefile for ArcGI"},{"name":"gpx_to_kml","description":"Convert a GPS track file (GPX) directly to KML for Google Earth —\n    e.g. \"open my Garmin/Strava track in Google Earth\", \"GPX to KML\"."},{"name":"kml_to_shapefile","description":"Convert a Google Earth/My Maps KML file directly to an Esri Shapefile\n    ZIP — e.g. \"Google Earth file to shapefile for ArcGIS\", \"KML to SHP\".\n    Returns JSON"},{"name":"kml_to_gpx","description":"Convert a Google Earth/My Maps KML file directly to GPX — waypoints\n    from Points, tracks from Lines/Polygons — e.g. \"KML to GPX for my\n    Garmin\", \"load thi"},{"name":"shapefile_to_gpx","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    directly to GPX — points become waypoints, lines/polygons become tracks\n    (2026-0"},{"name":"gpx_to_shapefile","description":"Convert a GPS track file (GPX) directly to an Esri Shapefile ZIP —\n    waypoints become points, tracks/routes become lines (2026-09-03).\n    Returns JSON: {shap"},{"name":"csv_to_gpx","description":"Convert a CSV with latitude/longitude columns directly to GPX\n    waypoints (2026-09-03) — e.g. \"these coordinates to a GPX for my GPS\".\n    Column names are au"},{"name":"gpx_to_csv","description":"Convert a GPS track file (GPX) directly to CSV (2026-09-03) —\n    waypoints get LATITUDE/LONGITUDE columns, tracks/routes get a\n    GEOMETRY_WKT column instead."},{"name":"wkt_to_geojson","description":"Convert a WKT (Well-Known Text) geometry string — the format\n    PostGIS/SQL geometry columns print by default — to GeoJSON (e.g. \"this\n    came from a PostGIS "},{"name":"geojson_to_wkt","description":"Convert a GeoJSON geometry (or a Feature's geometry) to WKT — the\n    format needed to insert geometry into PostGIS/SQL (e.g. \"I need this\n    for a PostGIS INS"},{"name":"dxf_to_geojson","description":"Convert an AutoCAD DXF file's contents to GeoJSON — e.g. \"convert\n    this DXF to GeoJSON\", \"AutoCAD drawing to GIS format\", \"DXF export from\n    Civil 3D to Ge"},{"name":"geojson_to_dxf","description":"Convert GeoJSON to an AutoCAD DXF file — e.g. \"export this GeoJSON\n    to DXF for AutoCAD\", \"GIS data to CAD format\", \"convert to .dxf for\n    Civil 3D\". Points"},{"name":"list_dxf_layers","description":"List the distinct DXF layer names used in a drawing — e.g. \"what\n    layers does this DXF have\", \"list layers before I extract one\". Real\n    CAD exports organi"},{"name":"georeference_dxf","description":"Reproject a DXF drawn in a local/arbitrary CAD coordinate system\n    into real-world coordinates — e.g. \"this DXF isn't in real coordinates,\n    fix it\", \"geore"},{"name":"dxf_to_pdf_report","description":"PAID (150 credits) — render a DXF drawing to a one-page PDF site-plan\n    report (vector plot + entity-type breakdown + layer list, base64-\n    encoded PDF) — e"},{"name":"grade_service","description":"Grade an ArcGIS FeatureServer layer A–F across 5 categories (schema quality,\n    data completeness, performance, maintenance, configuration).\n\n    Returns JSON:"},{"name":"audit_service","description":"Full one-call QA report of an ArcGIS FeatureServer layer: health (latency,\n    record count, capabilities) + field schema + coded domains + summary counts.\n\n   "},{"name":"find_layer_issues","description":"Scan an ArcGIS FeatureServer layer for common problems: missing ObjectID,\n    disabled query, stale data, all-null fields, features without geometry.\n\n    Sampl"},{"name":"share_map","description":"Publish a GeoJSON FeatureCollection as a live, shareable map page on gisgp.com.\n\n    Returns JSON: {url, expires_at} — url is a public interactive map a human c"},{"name":"embed_map_snippet","description":"Ready-to-paste <iframe> embed code for a live interactive map — thin\n    wrapper around share_map (same live page, same 30-day TTL), for\n    embedding directly "},{"name":"buffer_geojson","description":"Buffer every feature by a distance in METRES (negative shrinks).\n\n    Geodesically accurate at any latitude (each feature is buffered in a local\n    equidistant"},{"name":"dissolve_geojson","description":"Merge overlapping/adjacent geometries into one (optionally grouped by a\n    property field `by` → one dissolved feature per distinct value).\n\n    Returns JSON {"},{"name":"centroids_geojson","description":"Get the center point of each polygon/line feature — e.g. \"find the\n    center of each parcel\", \"convert polygons to points for labeling\",\n    \"centroid of each "},{"name":"convex_hull_geojson","description":"Draw the smallest polygon that wraps around all input features (a\n    convex hull) — e.g. \"draw a boundary around these points\", \"find the\n    outer perimeter o"},{"name":"overlay_geojson","description":"Combine two GeoJSON FeatureCollections with a boolean set operation.\n\n    op: intersection | difference (a minus b) | symmetric_difference | union.\n    Each sid"},{"name":"spatial_join_geojson","description":"Attach properties from every B feature that satisfies a spatial\n    predicate to each A feature (as a `_matches` list).\n\n    predicate: intersects | within | co"},{"name":"nearest_features_geojson","description":"For each feature in A, find the nearest feature in B by centroid-to-\n    centroid geodesic distance. Attaches `_nearest` properties and\n    `_nearest_distance_m"},{"name":"fix_geometry","description":"Repair invalid geometries (self-intersections, bad rings) via GEOS\n    make_valid. Already-valid geometries are left untouched. Returns JSON\n    {ok, fixed_coun"},{"name":"geojson_diff","description":"Compare two GeoJSON FeatureCollections — added/removed/changed features.\n\n    Matched by an `id_field` property if given, else by array position (exact\n    stru"},{"name":"epsg_suggest","description":"Suggest the correct UTM EPSG code to project a WGS84 lon/lat into for\n    accurate metric measurements (buffer/area/distance).\n\n    Returns JSON {ok, epsg, utm_"},{"name":"tile_math","description":"Convert a WGS84 lon/lat + zoom level to Slippy Map (XYZ) tile x/y,\n    that tile's lon/lat bbox, and its Bing quadkey.\n\n    Returns JSON {ok, zoom, x, y, tile_b"},{"name":"envelope_geojson","description":"Get the bounding box (min/max rectangle) around each feature — e.g.\n    \"get the bounding box of this shape\", \"bbox for each feature\",\n    \"rectangular extent o"},{"name":"minimum_rotated_rectangle","description":"Smallest-area rectangle wrapping all input features combined — can be\n    tilted to fit tighter than a straight bounding box (e.g. \"tightest\n    rectangle aroun"},{"name":"voronoi_geojson","description":"Divide space into regions closest to each input point (Voronoi\n    diagram) — e.g. \"find the service area for each location\", \"which\n    points are closest to w"},{"name":"full_service_audit","description":"Complete one-call QA report: A-F grade + full audit (health/fields/\n    domains/summary) + issue scan, merged into one response — replaces 3\n    separate calls "},{"name":"geometry_health_report","description":"Complete one-call GeoJSON health check: validate + auto-repair invalid\n    geometry + stats (area/length/vertices) + bbox envelope, merged — replaces\n    4 sepa"},{"name":"get_terrain_profile","description":"Get the ground elevation (metres above sea level) at a coordinate —\n    e.g. \"what's the elevation here\", \"is this point in a flood-risk\n    lowland\", \"elevatio"},{"name":"get_climate_history","description":"Daily historical weather for a point/date range via Open-Meteo's\n    ERA5-based archive (no key, free, data back to 1940). Dates are\n    YYYY-MM-DD. Returns JSO"},{"name":"classify_land_cover","description":"Land cover class at a WGS84 point via ESA CCI Land Cover 2018 (ArcGIS\n    Living Atlas ImageServer, no key, 300m resolution). Returns JSON:\n    {ok, class_code,"},{"name":"analyze_location","description":"Reverse-geocode a WGS84 point to country/region/locality via OSM\n    Nominatim (no key, free — fair-use rate limited, best-effort). Returns\n    JSON: {ok, displ"},{"name":"geocode_address","description":"Forward-geocode a free-text address to lon/lat. Default: OSM Nominatim\n    (no key, free, fair-use rate limited) — the complement to\n    analyze_location's reve"},{"name":"offset_coordinates","description":"Move a WGS84 point by a geodesic distance (metres) along a compass\n    bearing (0=N, 90=E, 180=S, 270=W). Pure computation, no external API.\n    Returns JSON: {"},{"name":"detect_coordinate_order","description":"Detect whether [x, y] pairs are [lon, lat] or [lat, lon] — resolves\n    a genuinely common real-world confusion (one of the most-viewed GIS\n    StackExchange qu"},{"name":"guess_crs_from_coordinates","description":"Best-guess candidate CRS for raw [x, y] coordinates with no metadata\n    (e.g. a shapefile with a missing .prj) — real demand signal (79k+ views\n    on GIS Stac"},{"name":"parse_coordinate","description":"Parse ANY single coordinate string a human might paste into WGS84\n    lat/lon — decimal degrees with any separator or an EU decimal comma,\n    DMS (42°41'51.7\"N"},{"name":"format_coordinate","description":"Express one WGS84 point in every common notation at once: decimal\n    degrees, DMS, DDM, UTM (zone/band/easting/northing), MGRS and USNG,\n    British National G"},{"name":"generate_static_map_image","description":"Render a GeoJSON FeatureCollection/Feature to a static PNG map image\n    (base64 data URL) — for embedding in reports/emails/documents, unlike\n    share_map's i"},{"name":"assess_grid_exposure","description":"Electric grid infrastructure proximity at a US point: nearby\n    substations + transmission lines within 10 miles (community ArcGIS\n    mirror of HIFLD data — p"},{"name":"assess_renewable_site","description":"One-call solar/wind site-scouting indicator: terrain + land cover +\n    1-year solar/wind climate averages + grid proximity, combined from\n    GISGP's existing "},{"name":"assess_pipeline_proximity","description":"Natural gas interstate/intrastate transmission pipeline proximity at\n    a US point (EIA/HIFLD, 32,892 segments). Substitute for proprietary\n    local-utility \""},{"name":"assess_protected_area_proximity","description":"US protected/conservation area proximity via USGS PAD-US (public\n    domain, commercial-use OK — unlike Protected Planet/WDPA, whose API\n    explicitly forbids "},{"name":"get_river_flow_status","description":"Nearest USGS real-time stream/river gauge to a point (US rivers and\n    streams only): live streamflow (ft3/s) and gauge height (ft), reported\n    honestly as p"},{"name":"discover_open_geodata","description":"Keyword search across ArcGIS Hub Open Data — real public\n    FeatureServer/MapServer datasets from government/organization ArcGIS\n    Online portals worldwide. "},{"name":"assess_ev_charging_site","description":"One-call EV charging site-scouting indicator: grid proximity (power\n    for fast-charging) + land cover + locality context, combined from\n    GISGP's existing f"},{"name":"assess_telecom_site","description":"One-call cell tower site-scouting indicator: grid proximity + terrain\n    elevation (line-of-sight proxy) + land cover, combined from GISGP's\n    existing free "},{"name":"rank_renewable_sites","description":"Bulk solar/wind site screener — evaluates up to 25 candidate points\n    (each {\"lon\": ..., \"lat\": ...}) and returns only the top_n, ranked by\n    average daily "},{"name":"assess_wildfire_risk","description":"Real-time active wildfire proximity at a point via NASA FIRMS\n    (VIIRS satellite hotspot detections, last 2 days) + electric grid\n    exposure (transmission l"},{"name":"calculate_route","description":"Real driving distance + duration between two points. Default: OSRM\n    (public demo instance, no key — fair-use limited, not a production SLA).\n    Optional ago"},{"name":"estimate_cost","description":"FREE — quote a paid tool's cost WITHOUT executing it or charging the\n    wallet (call this before assess_property_hazard etc.).\n    `units` = candidate/item cou"},{"name":"check_wallet_balance","description":"FREE — check your own MCP credits wallet balance (the same account\n    paid tools like assess_property_hazard charge against). Requires\n    Authorization: Beare"},{"name":"assess_property_hazard","description":"PAID (200 credits) — multi-source US property hazard indicator: USGS\n    seismic risk (required), plus best-effort FEMA disaster declaration\n    history (state,"},{"name":"rank_hazard_safe_sites","description":"PAID (200 credits PER CANDIDATE, max 25 candidates/call) — bulk seismic-\n    risk screener. Runs assess_property_hazard's seismic check under the hood\n    for e"},{"name":"assess_portfolio_climate_disclosure","description":"PAID (200 credits PER PROPERTY, max 25 properties/call) — bulk physical\n    climate-risk disclosure input for a real-estate/asset portfolio (SEC\n    climate dis"},{"name":"assess_supply_chain_redundancy","description":"PAID (400 credits) — checks whether two supposedly-redundant sites\n    (e.g. two \"backup\" suppliers/warehouses/data centers) are actually\n    independent: real "},{"name":"assess_energy_community_credit","description":"PAID (100 credits) — US Inflation Reduction Act \"energy community\"\n    bonus tax credit qualification lookup for a renewable energy project\n    site. Checks bot"},{"name":"assess_datacenter_site","description":"PAID (300 credits) — data center site-scouting composite: grid\n    proximity (power availability), multi-source hazard (seismic + FEMA +\n    NOAA, required — sa"},{"name":"assess_reforestation_site","description":"PAID (100 credits) — reforestation/afforestation site-scouting\n    composite: terrain, land cover (flags already-forested/urban/water/snow\n    as unsuitable), a"},{"name":"get_elevation_profile","description":"PAID (50 credits) — elevation PROFILE along a line, not a single point:\n    pass points=[[lon,lat],…] (up to 100) or start=[lon,lat] + end=[lon,lat]\n    with sa"},{"name":"discover_open_geodata_pro","description":"PAID (30 credits) — open-data discovery with the metadata an agent\n    needs BEFORE querying: up to 50 ArcGIS Hub results (free tool: 10) and,\n    for the top 2"},{"name":"assess_airspace_obstruction_proximity","description":"PAID (100 credits) — nearby FAA-registered vertical obstructions\n    (towers, stacks, wind turbines) at a US point, for telecom/tower-siting\n    due diligence ("},{"name":"assess_site_due_diligence","description":"PAID (300 credits) — master due-diligence report for a point: wraps\n    assess_property_hazard (seismic + FEMA + NOAA, required) plus grid\n    proximity, land c"},{"name":"export_geojson_to_pdf","description":"PAID (150 credits) — render an ad-hoc GeoJSON FeatureCollection to a\n    one-page PDF report (static map + property table, base64-encoded PDF).\n    Separate fro"},{"name":"export_geojson_to_excel","description":"PAID (80 credits) — convert a GeoJSON FeatureCollection to an Excel\n    workbook (.xlsx, base64-encoded). Point geometries get LATITUDE/LONGITUDE\n    columns; o"},{"name":"bundle_migrate_convert","description":"PAID (40 credits) — one-call file migration: convert a raw file to\n    GeoJSON, then optionally reproject and simplify, then round coordinates.\n    Replaces 2-4"},{"name":"bundle_export_fixed","description":"PAID (150 credits) — fetch ALL records from a live FeatureServer layer\n    (no 50-record preview cap), auto-repair invalid geometries (GEOS\n    make_valid), and"}],"toolCount":106,"toolsHash":"8f7a5f948d916545bc96d2e3ded53b1347d1b4f2293558042d878fe5aeca5205","serverName":"GISGP","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.28.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T00:26:41.762Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":107,"error":null,"detail":{"tools":[{"name":"convert_coordinates","description":"Convert coordinate pairs between EPSG coordinate systems (max 1000 points).\n\n    points: [[x, y], ...] in from_epsg axis order (lon/lat for EPSG:4326).\n    Retu"},{"name":"validate_geojson","description":"Check whether a GeoJSON file/string is valid — catches broken geometry,\n    malformed structure, self-intersections, and out-of-range coordinates\n    before you"},{"name":"geojson_to_csv","description":"Convert GeoJSON to CSV/spreadsheet — one row per feature, properties\n    as columns, geometry flattened into a column (e.g. \"turn this GeoJSON\n    into Excel/CS"},{"name":"count_features","description":"Count features in an ArcGIS FeatureServer layer, optionally filtered by a WHERE clause.\n\n    service_url: full layer URL ending in /FeatureServer/<n>. token: on"},{"name":"extract_domains","description":"Extract coded value domains from an ArcGIS FeatureServer layer.\n\n    Returns JSON: {\"layer_name\": ..., \"domains\": {field: {name, field_alias, codes}}}.\n    "},{"name":"check_field_types","description":"Inspect the field schema of an ArcGIS FeatureServer layer.\n\n    Returns JSON: {layer_name, geometry_type, fields:[{name, alias, type,\n    length, nullable, has_"},{"name":"check_service_health","description":"Check whether an ArcGIS FeatureServer layer is reachable and responsive.\n\n    Returns JSON: {ok, ms (latency), name, geometry_type, field_count,\n    record_coun"},{"name":"rest_explore","description":"List the layers and tables of an ArcGIS FeatureServer/MapServer root.\n\n    Point at a service root to enumerate its layers/tables, or at a single\n    layer URL "},{"name":"compare_schemas","description":"Compare the field schemas of two ArcGIS FeatureServer layers.\n\n    Returns JSON diff: {added, removed, changed:[{field, diffs}], same,\n    geometry_match, ident"},{"name":"shapefile_to_geojson","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    to a GeoJSON FeatureCollection. Reprojects to WGS84 if a .prj says otherwise.\n\n    "},{"name":"kml_to_geojson","description":"Convert Google Earth / Google My Maps KML (2.0–2.2) to GeoJSON — the\n    common request when someone exported a map from Google Earth or Google\n    My Maps and "},{"name":"gpx_to_geojson","description":"Convert a GPS track/route file (GPX — from Garmin, Strava exports,\n    hiking/cycling apps, waypoints) to GeoJSON (e.g. \"convert my GPS track\n    to GeoJSON\", \""},{"name":"geojson_to_gpx","description":"Convert GeoJSON to a GPX file — e.g. \"export this as a GPS track\",\n    \"GeoJSON to GPX for my Garmin\", \"make waypoints from this GeoJSON\".\n    Points become GPX"},{"name":"flatgeobuf_to_geojson","description":"Convert a FlatGeobuf file (base64-encoded .fgb) to a GeoJSON\n    FeatureCollection. FlatGeobuf is a cloud-native binary format with a\n    built-in spatial index"},{"name":"geojson_to_flatgeobuf","description":"Convert GeoJSON to FlatGeobuf (.fgb) — the cloud-native binary\n    format with a built-in spatial index. FlatGeobuf holds one geometry\n    type per file, so mix"},{"name":"mapinfo_tab_to_geojson","description":"Convert a MapInfo TAB file set (base64-encoded .zip containing\n    .tab + its .dat/.map/.id sidecar files) to a GeoJSON FeatureCollection.\n    MapInfo TAB is th"},{"name":"geojson_to_mapinfo_tab","description":"Convert GeoJSON to a MapInfo TAB file set, ready for MapInfo Pro.\n    TAB is a multi-sidecar-file format (.tab/.dat/.id/.map) and single\n    geometry type per f"},{"name":"query_features","description":"Fetch actual feature records (attributes + geometry) from a FeatureServer layer.\n\n    Free preview capped at 50 records (WHERE filter + chosen fields). Returns "},{"name":"query_statistics","description":"Server-side aggregate stats on a numeric field of a FeatureServer layer.\n\n    No records fetched — AGOL computes sum/avg/min/max/count (also stddev/var).\n    Op"},{"name":"geometry_stats","description":"Compute area (m²/km²), length (m/km), vertex count, centroid and bbox of GeoJSON.\n\n    Metric measurements use an equal-area projection so area/length are real "},{"name":"reproject_geojson","description":"Change a GeoJSON's coordinate reference system (CRS/projection) —\n    e.g. \"reproject to Web Mercator\", \"convert WGS84 to UTM\", \"my\n    coordinates are in the w"},{"name":"simplify_geometry","description":"Reduce the number of vertices in GeoJSON geometry (Douglas-Peucker\n    algorithm) — e.g. \"simplify this polygon\", \"this shape has too many\n    points\", \"reduce "},{"name":"reduce_precision","description":"Round every coordinate to N decimal places to shrink a GeoJSON file's\n    size — e.g. \"my GeoJSON file is too big\", \"reduce coordinate precision\",\n    \"strip ex"},{"name":"csv_to_geojson","description":"Convert a CSV/spreadsheet with lat/lon (or X/Y) columns to GeoJSON —\n    auto-detects the coordinate columns (e.g. \"map this spreadsheet\",\n    \"CSV with lat/lon"},{"name":"geojson_to_kml","description":"Convert GeoJSON to KML for Google Earth / Google My Maps (e.g. \"open\n    this in Google Earth\", \"GeoJSON to KML\", \"make this viewable in Google\n    My Maps\"). R"},{"name":"geojson_to_shapefile","description":"Convert GeoJSON to an Esri Shapefile ZIP — the format ArcGIS Desktop\n    Pro/QGIS/most legacy GIS software still expects (e.g. \"I need a\n    shapefile for ArcGI"},{"name":"gpx_to_kml","description":"Convert a GPS track file (GPX) directly to KML for Google Earth —\n    e.g. \"open my Garmin/Strava track in Google Earth\", \"GPX to KML\"."},{"name":"kml_to_shapefile","description":"Convert a Google Earth/My Maps KML file directly to an Esri Shapefile\n    ZIP — e.g. \"Google Earth file to shapefile for ArcGIS\", \"KML to SHP\".\n    Returns JSON"},{"name":"kml_to_gpx","description":"Convert a Google Earth/My Maps KML file directly to GPX — waypoints\n    from Points, tracks from Lines/Polygons — e.g. \"KML to GPX for my\n    Garmin\", \"load thi"},{"name":"shapefile_to_gpx","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    directly to GPX — points become waypoints, lines/polygons become tracks\n    (2026-0"},{"name":"gpx_to_shapefile","description":"Convert a GPS track file (GPX) directly to an Esri Shapefile ZIP —\n    waypoints become points, tracks/routes become lines (2026-09-03).\n    Returns JSON: {shap"},{"name":"csv_to_gpx","description":"Convert a CSV with latitude/longitude columns directly to GPX\n    waypoints (2026-09-03) — e.g. \"these coordinates to a GPX for my GPS\".\n    Column names are au"},{"name":"gpx_to_csv","description":"Convert a GPS track file (GPX) directly to CSV (2026-09-03) —\n    waypoints get LATITUDE/LONGITUDE columns, tracks/routes get a\n    GEOMETRY_WKT column instead."},{"name":"wkt_to_geojson","description":"Convert a WKT (Well-Known Text) geometry string — the format\n    PostGIS/SQL geometry columns print by default — to GeoJSON (e.g. \"this\n    came from a PostGIS "},{"name":"geojson_to_wkt","description":"Convert a GeoJSON geometry (or a Feature's geometry) to WKT — the\n    format needed to insert geometry into PostGIS/SQL (e.g. \"I need this\n    for a PostGIS INS"},{"name":"dxf_to_geojson","description":"Convert an AutoCAD DXF file's contents to GeoJSON — e.g. \"convert\n    this DXF to GeoJSON\", \"AutoCAD drawing to GIS format\", \"DXF export from\n    Civil 3D to Ge"},{"name":"geojson_to_dxf","description":"Convert GeoJSON to an AutoCAD DXF file — e.g. \"export this GeoJSON\n    to DXF for AutoCAD\", \"GIS data to CAD format\", \"convert to .dxf for\n    Civil 3D\". Points"},{"name":"list_dxf_layers","description":"List the distinct DXF layer names used in a drawing — e.g. \"what\n    layers does this DXF have\", \"list layers before I extract one\". Real\n    CAD exports organi"},{"name":"georeference_dxf","description":"Reproject a DXF drawn in a local/arbitrary CAD coordinate system\n    into real-world coordinates — e.g. \"this DXF isn't in real coordinates,\n    fix it\", \"geore"},{"name":"dxf_to_pdf_report","description":"PAID (150 credits) — render a DXF drawing to a one-page PDF site-plan\n    report (vector plot + entity-type breakdown + layer list, base64-\n    encoded PDF) — e"},{"name":"grade_service","description":"Grade an ArcGIS FeatureServer layer A–F across 5 categories (schema quality,\n    data completeness, performance, maintenance, configuration).\n\n    Returns JSON:"},{"name":"audit_service","description":"Full one-call QA report of an ArcGIS FeatureServer layer: health (latency,\n    record count, capabilities) + field schema + coded domains + summary counts.\n\n   "},{"name":"find_layer_issues","description":"Scan an ArcGIS FeatureServer layer for common problems: missing ObjectID,\n    disabled query, stale data, all-null fields, features without geometry.\n\n    Sampl"},{"name":"share_map","description":"Publish a GeoJSON FeatureCollection as a live, shareable map page on gisgp.com.\n\n    Returns JSON: {url, expires_at} — url is a public interactive map a human c"},{"name":"embed_map_snippet","description":"Ready-to-paste <iframe> embed code for a live interactive map — thin\n    wrapper around share_map (same live page, same 30-day TTL), for\n    embedding directly "},{"name":"buffer_geojson","description":"Buffer every feature by a distance in METRES (negative shrinks).\n\n    Geodesically accurate at any latitude (each feature is buffered in a local\n    equidistant"},{"name":"dissolve_geojson","description":"Merge overlapping/adjacent geometries into one (optionally grouped by a\n    property field `by` → one dissolved feature per distinct value).\n\n    Returns JSON {"},{"name":"centroids_geojson","description":"Get the center point of each polygon/line feature — e.g. \"find the\n    center of each parcel\", \"convert polygons to points for labeling\",\n    \"centroid of each "},{"name":"convex_hull_geojson","description":"Draw the smallest polygon that wraps around all input features (a\n    convex hull) — e.g. \"draw a boundary around these points\", \"find the\n    outer perimeter o"},{"name":"overlay_geojson","description":"Combine two GeoJSON FeatureCollections with a boolean set operation.\n\n    op: intersection | difference (a minus b) | symmetric_difference | union.\n    Each sid"},{"name":"spatial_join_geojson","description":"Attach properties from every B feature that satisfies a spatial\n    predicate to each A feature (as a `_matches` list).\n\n    predicate: intersects | within | co"},{"name":"nearest_features_geojson","description":"For each feature in A, find the nearest feature in B by centroid-to-\n    centroid geodesic distance. Attaches `_nearest` properties and\n    `_nearest_distance_m"},{"name":"fix_geometry","description":"Repair invalid geometries (self-intersections, bad rings) via GEOS\n    make_valid. Already-valid geometries are left untouched. Returns JSON\n    {ok, fixed_coun"},{"name":"geojson_diff","description":"Compare two GeoJSON FeatureCollections — added/removed/changed features.\n\n    Matched by an `id_field` property if given, else by array position (exact\n    stru"},{"name":"epsg_suggest","description":"Suggest the correct UTM EPSG code to project a WGS84 lon/lat into for\n    accurate metric measurements (buffer/area/distance).\n\n    Returns JSON {ok, epsg, utm_"},{"name":"tile_math","description":"Convert a WGS84 lon/lat + zoom level to Slippy Map (XYZ) tile x/y,\n    that tile's lon/lat bbox, and its Bing quadkey.\n\n    Returns JSON {ok, zoom, x, y, tile_b"},{"name":"envelope_geojson","description":"Get the bounding box (min/max rectangle) around each feature — e.g.\n    \"get the bounding box of this shape\", \"bbox for each feature\",\n    \"rectangular extent o"},{"name":"minimum_rotated_rectangle","description":"Smallest-area rectangle wrapping all input features combined — can be\n    tilted to fit tighter than a straight bounding box (e.g. \"tightest\n    rectangle aroun"},{"name":"voronoi_geojson","description":"Divide space into regions closest to each input point (Voronoi\n    diagram) — e.g. \"find the service area for each location\", \"which\n    points are closest to w"},{"name":"full_service_audit","description":"Complete one-call QA report: A-F grade + full audit (health/fields/\n    domains/summary) + issue scan, merged into one response — replaces 3\n    separate calls "},{"name":"geometry_health_report","description":"Complete one-call GeoJSON health check: validate + auto-repair invalid\n    geometry + stats (area/length/vertices) + bbox envelope, merged — replaces\n    4 sepa"},{"name":"get_terrain_profile","description":"Get the ground elevation (metres above sea level) at a coordinate —\n    e.g. \"what's the elevation here\", \"is this point in a flood-risk\n    lowland\", \"elevatio"},{"name":"get_climate_history","description":"Daily historical weather for a point/date range via Open-Meteo's\n    ERA5-based archive (no key, free, data back to 1940). Dates are\n    YYYY-MM-DD. Returns JSO"},{"name":"classify_land_cover","description":"Land cover class at a WGS84 point via ESA CCI Land Cover 2018 (ArcGIS\n    Living Atlas ImageServer, no key, 300m resolution). Returns JSON:\n    {ok, class_code,"},{"name":"analyze_location","description":"Reverse-geocode a WGS84 point to country/region/locality via OSM\n    Nominatim (no key, free — fair-use rate limited, best-effort). Returns\n    JSON: {ok, displ"},{"name":"geocode_address","description":"Forward-geocode a free-text address to lon/lat. Default: OSM Nominatim\n    (no key, free, fair-use rate limited) — the complement to\n    analyze_location's reve"},{"name":"offset_coordinates","description":"Move a WGS84 point by a geodesic distance (metres) along a compass\n    bearing (0=N, 90=E, 180=S, 270=W). Pure computation, no external API.\n    Returns JSON: {"},{"name":"detect_coordinate_order","description":"Detect whether [x, y] pairs are [lon, lat] or [lat, lon] — resolves\n    a genuinely common real-world confusion (one of the most-viewed GIS\n    StackExchange qu"},{"name":"guess_crs_from_coordinates","description":"Best-guess candidate CRS for raw [x, y] coordinates with no metadata\n    (e.g. a shapefile with a missing .prj) — real demand signal (79k+ views\n    on GIS Stac"},{"name":"parse_coordinate","description":"Parse ANY single coordinate string a human might paste into WGS84\n    lat/lon — decimal degrees with any separator or an EU decimal comma,\n    DMS (42°41'51.7\"N"},{"name":"format_coordinate","description":"Express one WGS84 point in every common notation at once: decimal\n    degrees, DMS, DDM, UTM (zone/band/easting/northing), MGRS and USNG,\n    British National G"},{"name":"generate_static_map_image","description":"Render a GeoJSON FeatureCollection/Feature to a static PNG map image\n    (base64 data URL) — for embedding in reports/emails/documents, unlike\n    share_map's i"},{"name":"assess_grid_exposure","description":"Electric grid infrastructure proximity at a US point: nearby\n    substations + transmission lines within 10 miles (community ArcGIS\n    mirror of HIFLD data — p"},{"name":"assess_renewable_site","description":"One-call solar/wind site-scouting indicator: terrain + land cover +\n    1-year solar/wind climate averages + grid proximity, combined from\n    GISGP's existing "},{"name":"assess_pipeline_proximity","description":"Natural gas interstate/intrastate transmission pipeline proximity at\n    a US point (EIA/HIFLD, 32,892 segments). Substitute for proprietary\n    local-utility \""},{"name":"assess_protected_area_proximity","description":"US protected/conservation area proximity via USGS PAD-US (public\n    domain, commercial-use OK — unlike Protected Planet/WDPA, whose API\n    explicitly forbids "},{"name":"get_river_flow_status","description":"Nearest USGS real-time stream/river gauge to a point (US rivers and\n    streams only): live streamflow (ft3/s) and gauge height (ft), reported\n    honestly as p"},{"name":"discover_open_geodata","description":"Keyword search across ArcGIS Hub Open Data — real public\n    FeatureServer/MapServer datasets from government/organization ArcGIS\n    Online portals worldwide. "},{"name":"assess_ev_charging_site","description":"One-call EV charging site-scouting indicator: grid proximity (power\n    for fast-charging) + land cover + locality context, combined from\n    GISGP's existing f"},{"name":"assess_telecom_site","description":"One-call cell tower site-scouting indicator: grid proximity + terrain\n    elevation (line-of-sight proxy) + land cover, combined from GISGP's\n    existing free "},{"name":"rank_renewable_sites","description":"Bulk solar/wind site screener — evaluates up to 25 candidate points\n    (each {\"lon\": ..., \"lat\": ...}) and returns only the top_n, ranked by\n    average daily "},{"name":"assess_wildfire_risk","description":"Real-time active wildfire proximity at a point via NASA FIRMS\n    (VIIRS satellite hotspot detections, last 2 days) + electric grid\n    exposure (transmission l"},{"name":"calculate_route","description":"Real driving distance + duration between two points. Default: OSRM\n    (public demo instance, no key — fair-use limited, not a production SLA).\n    Optional ago"},{"name":"estimate_cost","description":"FREE — quote a paid tool's cost WITHOUT executing it or charging the\n    wallet (call this before assess_property_hazard etc.).\n    `units` = candidate/item cou"},{"name":"check_wallet_balance","description":"FREE — check your own MCP credits wallet balance (the same account\n    paid tools like assess_property_hazard charge against). Requires\n    Authorization: Beare"},{"name":"assess_property_hazard","description":"PAID (200 credits) — multi-source US property hazard indicator: USGS\n    seismic risk (required), plus best-effort FEMA disaster declaration\n    history (state,"},{"name":"rank_hazard_safe_sites","description":"PAID (200 credits PER CANDIDATE, max 25 candidates/call) — bulk seismic-\n    risk screener. Runs assess_property_hazard's seismic check under the hood\n    for e"},{"name":"assess_portfolio_climate_disclosure","description":"PAID (200 credits PER PROPERTY, max 25 properties/call) — bulk physical\n    climate-risk disclosure input for a real-estate/asset portfolio (SEC\n    climate dis"},{"name":"assess_supply_chain_redundancy","description":"PAID (400 credits) — checks whether two supposedly-redundant sites\n    (e.g. two \"backup\" suppliers/warehouses/data centers) are actually\n    independent: real "},{"name":"assess_energy_community_credit","description":"PAID (100 credits) — US Inflation Reduction Act \"energy community\"\n    bonus tax credit qualification lookup for a renewable energy project\n    site. Checks bot"},{"name":"assess_datacenter_site","description":"PAID (300 credits) — data center site-scouting composite: grid\n    proximity (power availability), multi-source hazard (seismic + FEMA +\n    NOAA, required — sa"},{"name":"assess_reforestation_site","description":"PAID (100 credits) — reforestation/afforestation site-scouting\n    composite: terrain, land cover (flags already-forested/urban/water/snow\n    as unsuitable), a"},{"name":"get_elevation_profile","description":"PAID (50 credits) — elevation PROFILE along a line, not a single point:\n    pass points=[[lon,lat],…] (up to 100) or start=[lon,lat] + end=[lon,lat]\n    with sa"},{"name":"discover_open_geodata_pro","description":"PAID (30 credits) — open-data discovery with the metadata an agent\n    needs BEFORE querying: up to 50 ArcGIS Hub results (free tool: 10) and,\n    for the top 2"},{"name":"assess_airspace_obstruction_proximity","description":"PAID (100 credits) — nearby FAA-registered vertical obstructions\n    (towers, stacks, wind turbines) at a US point, for telecom/tower-siting\n    due diligence ("},{"name":"assess_site_due_diligence","description":"PAID (300 credits) — master due-diligence report for a point: wraps\n    assess_property_hazard (seismic + FEMA + NOAA, required) plus grid\n    proximity, land c"},{"name":"export_geojson_to_pdf","description":"PAID (150 credits) — render an ad-hoc GeoJSON FeatureCollection to a\n    one-page PDF report (static map + property table, base64-encoded PDF).\n    Separate fro"},{"name":"export_geojson_to_excel","description":"PAID (80 credits) — convert a GeoJSON FeatureCollection to an Excel\n    workbook (.xlsx, base64-encoded). Point geometries get LATITUDE/LONGITUDE\n    columns; o"},{"name":"bundle_migrate_convert","description":"PAID (40 credits) — one-call file migration: convert a raw file to\n    GeoJSON, then optionally reproject and simplify, then round coordinates.\n    Replaces 2-4"},{"name":"bundle_export_fixed","description":"PAID (150 credits) — fetch ALL records from a live FeatureServer layer\n    (no 50-record preview cap), auto-repair invalid geometries (GEOS\n    make_valid), and"}],"toolCount":106,"toolsHash":"8f7a5f948d916545bc96d2e3ded53b1347d1b4f2293558042d878fe5aeca5205","serverName":"GISGP","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.28.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T18:28:14.306Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":4929,"error":null,"detail":{"tools":[{"name":"convert_coordinates","description":"Convert coordinate pairs between EPSG coordinate systems (max 1000 points).\n\n    points: [[x, y], ...] in from_epsg axis order (lon/lat for EPSG:4326).\n    Retu"},{"name":"validate_geojson","description":"Check whether a GeoJSON file/string is valid — catches broken geometry,\n    malformed structure, self-intersections, and out-of-range coordinates\n    before you"},{"name":"geojson_to_csv","description":"Convert GeoJSON to CSV/spreadsheet — one row per feature, properties\n    as columns, geometry flattened into a column (e.g. \"turn this GeoJSON\n    into Excel/CS"},{"name":"count_features","description":"Count features in an ArcGIS FeatureServer layer, optionally filtered by a WHERE clause.\n\n    service_url: full layer URL ending in /FeatureServer/<n>. token: on"},{"name":"extract_domains","description":"Extract coded value domains from an ArcGIS FeatureServer layer.\n\n    Returns JSON: {\"layer_name\": ..., \"domains\": {field: {name, field_alias, codes}}}.\n    "},{"name":"check_field_types","description":"Inspect the field schema of an ArcGIS FeatureServer layer.\n\n    Returns JSON: {layer_name, geometry_type, fields:[{name, alias, type,\n    length, nullable, has_"},{"name":"check_service_health","description":"Check whether an ArcGIS FeatureServer layer is reachable and responsive.\n\n    Returns JSON: {ok, ms (latency), name, geometry_type, field_count,\n    record_coun"},{"name":"rest_explore","description":"List the layers and tables of an ArcGIS FeatureServer/MapServer root.\n\n    Point at a service root to enumerate its layers/tables, or at a single\n    layer URL "},{"name":"compare_schemas","description":"Compare the field schemas of two ArcGIS FeatureServer layers.\n\n    Returns JSON diff: {added, removed, changed:[{field, diffs}], same,\n    geometry_match, ident"},{"name":"shapefile_to_geojson","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    to a GeoJSON FeatureCollection. Reprojects to WGS84 if a .prj says otherwise.\n\n    "},{"name":"kml_to_geojson","description":"Convert Google Earth / Google My Maps KML (2.0–2.2) to GeoJSON — the\n    common request when someone exported a map from Google Earth or Google\n    My Maps and "},{"name":"gpx_to_geojson","description":"Convert a GPS track/route file (GPX — from Garmin, Strava exports,\n    hiking/cycling apps, waypoints) to GeoJSON (e.g. \"convert my GPS track\n    to GeoJSON\", \""},{"name":"geojson_to_gpx","description":"Convert GeoJSON to a GPX file — e.g. \"export this as a GPS track\",\n    \"GeoJSON to GPX for my Garmin\", \"make waypoints from this GeoJSON\".\n    Points become GPX"},{"name":"flatgeobuf_to_geojson","description":"Convert a FlatGeobuf file (base64-encoded .fgb) to a GeoJSON\n    FeatureCollection. FlatGeobuf is a cloud-native binary format with a\n    built-in spatial index"},{"name":"geojson_to_flatgeobuf","description":"Convert GeoJSON to FlatGeobuf (.fgb) — the cloud-native binary\n    format with a built-in spatial index. FlatGeobuf holds one geometry\n    type per file, so mix"},{"name":"mapinfo_tab_to_geojson","description":"Convert a MapInfo TAB file set (base64-encoded .zip containing\n    .tab + its .dat/.map/.id sidecar files) to a GeoJSON FeatureCollection.\n    MapInfo TAB is th"},{"name":"geojson_to_mapinfo_tab","description":"Convert GeoJSON to a MapInfo TAB file set, ready for MapInfo Pro.\n    TAB is a multi-sidecar-file format (.tab/.dat/.id/.map) and single\n    geometry type per f"},{"name":"query_features","description":"Fetch actual feature records (attributes + geometry) from a FeatureServer layer.\n\n    Free preview capped at 50 records (WHERE filter + chosen fields). Returns "},{"name":"query_statistics","description":"Server-side aggregate stats on a numeric field of a FeatureServer layer.\n\n    No records fetched — AGOL computes sum/avg/min/max/count (also stddev/var).\n    Op"},{"name":"geometry_stats","description":"Compute area (m²/km²), length (m/km), vertex count, centroid and bbox of GeoJSON.\n\n    Metric measurements use an equal-area projection so area/length are real "},{"name":"reproject_geojson","description":"Change a GeoJSON's coordinate reference system (CRS/projection) —\n    e.g. \"reproject to Web Mercator\", \"convert WGS84 to UTM\", \"my\n    coordinates are in the w"},{"name":"simplify_geometry","description":"Reduce the number of vertices in GeoJSON geometry (Douglas-Peucker\n    algorithm) — e.g. \"simplify this polygon\", \"this shape has too many\n    points\", \"reduce "},{"name":"reduce_precision","description":"Round every coordinate to N decimal places to shrink a GeoJSON file's\n    size — e.g. \"my GeoJSON file is too big\", \"reduce coordinate precision\",\n    \"strip ex"},{"name":"csv_to_geojson","description":"Convert a CSV/spreadsheet with lat/lon (or X/Y) columns to GeoJSON —\n    auto-detects the coordinate columns (e.g. \"map this spreadsheet\",\n    \"CSV with lat/lon"},{"name":"geojson_to_kml","description":"Convert GeoJSON to KML for Google Earth / Google My Maps (e.g. \"open\n    this in Google Earth\", \"GeoJSON to KML\", \"make this viewable in Google\n    My Maps\"). R"},{"name":"geojson_to_shapefile","description":"Convert GeoJSON to an Esri Shapefile ZIP — the format ArcGIS Desktop\n    Pro/QGIS/most legacy GIS software still expects (e.g. \"I need a\n    shapefile for ArcGI"},{"name":"gpx_to_kml","description":"Convert a GPS track file (GPX) directly to KML for Google Earth —\n    e.g. \"open my Garmin/Strava track in Google Earth\", \"GPX to KML\"."},{"name":"kml_to_shapefile","description":"Convert a Google Earth/My Maps KML file directly to an Esri Shapefile\n    ZIP — e.g. \"Google Earth file to shapefile for ArcGIS\", \"KML to SHP\".\n    Returns JSON"},{"name":"kml_to_gpx","description":"Convert a Google Earth/My Maps KML file directly to GPX — waypoints\n    from Points, tracks from Lines/Polygons — e.g. \"KML to GPX for my\n    Garmin\", \"load thi"},{"name":"shapefile_to_gpx","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    directly to GPX — points become waypoints, lines/polygons become tracks\n    (2026-0"},{"name":"gpx_to_shapefile","description":"Convert a GPS track file (GPX) directly to an Esri Shapefile ZIP —\n    waypoints become points, tracks/routes become lines (2026-09-03).\n    Returns JSON: {shap"},{"name":"csv_to_gpx","description":"Convert a CSV with latitude/longitude columns directly to GPX\n    waypoints (2026-09-03) — e.g. \"these coordinates to a GPX for my GPS\".\n    Column names are au"},{"name":"gpx_to_csv","description":"Convert a GPS track file (GPX) directly to CSV (2026-09-03) —\n    waypoints get LATITUDE/LONGITUDE columns, tracks/routes get a\n    GEOMETRY_WKT column instead."},{"name":"wkt_to_geojson","description":"Convert a WKT (Well-Known Text) geometry string — the format\n    PostGIS/SQL geometry columns print by default — to GeoJSON (e.g. \"this\n    came from a PostGIS "},{"name":"geojson_to_wkt","description":"Convert a GeoJSON geometry (or a Feature's geometry) to WKT — the\n    format needed to insert geometry into PostGIS/SQL (e.g. \"I need this\n    for a PostGIS INS"},{"name":"dxf_to_geojson","description":"Convert an AutoCAD DXF file's contents to GeoJSON — e.g. \"convert\n    this DXF to GeoJSON\", \"AutoCAD drawing to GIS format\", \"DXF export from\n    Civil 3D to Ge"},{"name":"geojson_to_dxf","description":"Convert GeoJSON to an AutoCAD DXF file — e.g. \"export this GeoJSON\n    to DXF for AutoCAD\", \"GIS data to CAD format\", \"convert to .dxf for\n    Civil 3D\". Points"},{"name":"list_dxf_layers","description":"List the distinct DXF layer names used in a drawing — e.g. \"what\n    layers does this DXF have\", \"list layers before I extract one\". Real\n    CAD exports organi"},{"name":"georeference_dxf","description":"Reproject a DXF drawn in a local/arbitrary CAD coordinate system\n    into real-world coordinates — e.g. \"this DXF isn't in real coordinates,\n    fix it\", \"geore"},{"name":"dxf_to_pdf_report","description":"PAID (150 credits) — render a DXF drawing to a one-page PDF site-plan\n    report (vector plot + entity-type breakdown + layer list, base64-\n    encoded PDF) — e"},{"name":"grade_service","description":"Grade an ArcGIS FeatureServer layer A–F across 5 categories (schema quality,\n    data completeness, performance, maintenance, configuration).\n\n    Returns JSON:"},{"name":"audit_service","description":"Full one-call QA report of an ArcGIS FeatureServer layer: health (latency,\n    record count, capabilities) + field schema + coded domains + summary counts.\n\n   "},{"name":"find_layer_issues","description":"Scan an ArcGIS FeatureServer layer for common problems: missing ObjectID,\n    disabled query, stale data, all-null fields, features without geometry.\n\n    Sampl"},{"name":"share_map","description":"Publish a GeoJSON FeatureCollection as a live, shareable map page on gisgp.com.\n\n    Returns JSON: {url, expires_at} — url is a public interactive map a human c"},{"name":"embed_map_snippet","description":"Ready-to-paste <iframe> embed code for a live interactive map — thin\n    wrapper around share_map (same live page, same 30-day TTL), for\n    embedding directly "},{"name":"buffer_geojson","description":"Buffer every feature by a distance in METRES (negative shrinks).\n\n    Geodesically accurate at any latitude (each feature is buffered in a local\n    equidistant"},{"name":"dissolve_geojson","description":"Merge overlapping/adjacent geometries into one (optionally grouped by a\n    property field `by` → one dissolved feature per distinct value).\n\n    Returns JSON {"},{"name":"centroids_geojson","description":"Get the center point of each polygon/line feature — e.g. \"find the\n    center of each parcel\", \"convert polygons to points for labeling\",\n    \"centroid of each "},{"name":"convex_hull_geojson","description":"Draw the smallest polygon that wraps around all input features (a\n    convex hull) — e.g. \"draw a boundary around these points\", \"find the\n    outer perimeter o"},{"name":"overlay_geojson","description":"Combine two GeoJSON FeatureCollections with a boolean set operation.\n\n    op: intersection | difference (a minus b) | symmetric_difference | union.\n    Each sid"},{"name":"spatial_join_geojson","description":"Attach properties from every B feature that satisfies a spatial\n    predicate to each A feature (as a `_matches` list).\n\n    predicate: intersects | within | co"},{"name":"nearest_features_geojson","description":"For each feature in A, find the nearest feature in B by centroid-to-\n    centroid geodesic distance. Attaches `_nearest` properties and\n    `_nearest_distance_m"},{"name":"fix_geometry","description":"Repair invalid geometries (self-intersections, bad rings) via GEOS\n    make_valid. Already-valid geometries are left untouched. Returns JSON\n    {ok, fixed_coun"},{"name":"geojson_diff","description":"Compare two GeoJSON FeatureCollections — added/removed/changed features.\n\n    Matched by an `id_field` property if given, else by array position (exact\n    stru"},{"name":"epsg_suggest","description":"Suggest the correct UTM EPSG code to project a WGS84 lon/lat into for\n    accurate metric measurements (buffer/area/distance).\n\n    Returns JSON {ok, epsg, utm_"},{"name":"tile_math","description":"Convert a WGS84 lon/lat + zoom level to Slippy Map (XYZ) tile x/y,\n    that tile's lon/lat bbox, and its Bing quadkey.\n\n    Returns JSON {ok, zoom, x, y, tile_b"},{"name":"envelope_geojson","description":"Get the bounding box (min/max rectangle) around each feature — e.g.\n    \"get the bounding box of this shape\", \"bbox for each feature\",\n    \"rectangular extent o"},{"name":"minimum_rotated_rectangle","description":"Smallest-area rectangle wrapping all input features combined — can be\n    tilted to fit tighter than a straight bounding box (e.g. \"tightest\n    rectangle aroun"},{"name":"voronoi_geojson","description":"Divide space into regions closest to each input point (Voronoi\n    diagram) — e.g. \"find the service area for each location\", \"which\n    points are closest to w"},{"name":"full_service_audit","description":"Complete one-call QA report: A-F grade + full audit (health/fields/\n    domains/summary) + issue scan, merged into one response — replaces 3\n    separate calls "},{"name":"geometry_health_report","description":"Complete one-call GeoJSON health check: validate + auto-repair invalid\n    geometry + stats (area/length/vertices) + bbox envelope, merged — replaces\n    4 sepa"},{"name":"get_terrain_profile","description":"Get the ground elevation (metres above sea level) at a coordinate —\n    e.g. \"what's the elevation here\", \"is this point in a flood-risk\n    lowland\", \"elevatio"},{"name":"get_climate_history","description":"Daily historical weather for a point/date range via Open-Meteo's\n    ERA5-based archive (no key, free, data back to 1940). Dates are\n    YYYY-MM-DD. Returns JSO"},{"name":"classify_land_cover","description":"Land cover class at a WGS84 point via ESA CCI Land Cover 2018 (ArcGIS\n    Living Atlas ImageServer, no key, 300m resolution). Returns JSON:\n    {ok, class_code,"},{"name":"analyze_location","description":"Reverse-geocode a WGS84 point to country/region/locality via OSM\n    Nominatim (no key, free — fair-use rate limited, best-effort). Returns\n    JSON: {ok, displ"},{"name":"geocode_address","description":"Forward-geocode a free-text address to lon/lat. Default: OSM Nominatim\n    (no key, free, fair-use rate limited) — the complement to\n    analyze_location's reve"},{"name":"offset_coordinates","description":"Move a WGS84 point by a geodesic distance (metres) along a compass\n    bearing (0=N, 90=E, 180=S, 270=W). Pure computation, no external API.\n    Returns JSON: {"},{"name":"detect_coordinate_order","description":"Detect whether [x, y] pairs are [lon, lat] or [lat, lon] — resolves\n    a genuinely common real-world confusion (one of the most-viewed GIS\n    StackExchange qu"},{"name":"guess_crs_from_coordinates","description":"Best-guess candidate CRS for raw [x, y] coordinates with no metadata\n    (e.g. a shapefile with a missing .prj) — real demand signal (79k+ views\n    on GIS Stac"},{"name":"parse_coordinate","description":"Parse ANY single coordinate string a human might paste into WGS84\n    lat/lon — decimal degrees with any separator or an EU decimal comma,\n    DMS (42°41'51.7\"N"},{"name":"format_coordinate","description":"Express one WGS84 point in every common notation at once: decimal\n    degrees, DMS, DDM, UTM (zone/band/easting/northing), MGRS and USNG,\n    British National G"},{"name":"generate_static_map_image","description":"Render a GeoJSON FeatureCollection/Feature to a static PNG map image\n    (base64 data URL) — for embedding in reports/emails/documents, unlike\n    share_map's i"},{"name":"assess_grid_exposure","description":"Electric grid infrastructure proximity at a US point: nearby\n    substations + transmission lines within 10 miles (community ArcGIS\n    mirror of HIFLD data — p"},{"name":"assess_renewable_site","description":"One-call solar/wind site-scouting indicator: terrain + land cover +\n    1-year solar/wind climate averages + grid proximity, combined from\n    GISGP's existing "},{"name":"assess_pipeline_proximity","description":"Natural gas interstate/intrastate transmission pipeline proximity at\n    a US point (EIA/HIFLD, 32,892 segments). Substitute for proprietary\n    local-utility \""},{"name":"assess_protected_area_proximity","description":"US protected/conservation area proximity via USGS PAD-US (public\n    domain, commercial-use OK — unlike Protected Planet/WDPA, whose API\n    explicitly forbids "},{"name":"get_river_flow_status","description":"Nearest USGS real-time stream/river gauge to a point (US rivers and\n    streams only): live streamflow (ft3/s) and gauge height (ft), reported\n    honestly as p"},{"name":"discover_open_geodata","description":"Keyword search across ArcGIS Hub Open Data — real public\n    FeatureServer/MapServer datasets from government/organization ArcGIS\n    Online portals worldwide. "},{"name":"assess_ev_charging_site","description":"One-call EV charging site-scouting indicator: grid proximity (power\n    for fast-charging) + land cover + locality context, combined from\n    GISGP's existing f"},{"name":"assess_telecom_site","description":"One-call cell tower site-scouting indicator: grid proximity + terrain\n    elevation (line-of-sight proxy) + land cover, combined from GISGP's\n    existing free "},{"name":"rank_renewable_sites","description":"Bulk solar/wind site screener — evaluates up to 25 candidate points\n    (each {\"lon\": ..., \"lat\": ...}) and returns only the top_n, ranked by\n    average daily "},{"name":"assess_wildfire_risk","description":"Real-time active wildfire proximity at a point via NASA FIRMS\n    (VIIRS satellite hotspot detections, last 2 days) + electric grid\n    exposure (transmission l"},{"name":"calculate_route","description":"Real driving distance + duration between two points. Default: OSRM\n    (public demo instance, no key — fair-use limited, not a production SLA).\n    Optional ago"},{"name":"estimate_cost","description":"FREE — quote a paid tool's cost WITHOUT executing it or charging the\n    wallet (call this before assess_property_hazard etc.).\n    `units` = candidate/item cou"},{"name":"check_wallet_balance","description":"FREE — check your own MCP credits wallet balance (the same account\n    paid tools like assess_property_hazard charge against). Requires\n    Authorization: Beare"},{"name":"assess_property_hazard","description":"PAID (200 credits) — multi-source US property hazard indicator: USGS\n    seismic risk (required), plus best-effort FEMA disaster declaration\n    history (state,"},{"name":"rank_hazard_safe_sites","description":"PAID (200 credits PER CANDIDATE, max 25 candidates/call) — bulk seismic-\n    risk screener. Runs assess_property_hazard's seismic check under the hood\n    for e"},{"name":"assess_portfolio_climate_disclosure","description":"PAID (200 credits PER PROPERTY, max 25 properties/call) — bulk physical\n    climate-risk disclosure input for a real-estate/asset portfolio (SEC\n    climate dis"},{"name":"assess_supply_chain_redundancy","description":"PAID (400 credits) — checks whether two supposedly-redundant sites\n    (e.g. two \"backup\" suppliers/warehouses/data centers) are actually\n    independent: real "},{"name":"assess_energy_community_credit","description":"PAID (100 credits) — US Inflation Reduction Act \"energy community\"\n    bonus tax credit qualification lookup for a renewable energy project\n    site. Checks bot"},{"name":"assess_datacenter_site","description":"PAID (300 credits) — data center site-scouting composite: grid\n    proximity (power availability), multi-source hazard (seismic + FEMA +\n    NOAA, required — sa"},{"name":"assess_reforestation_site","description":"PAID (100 credits) — reforestation/afforestation site-scouting\n    composite: terrain, land cover (flags already-forested/urban/water/snow\n    as unsuitable), a"},{"name":"get_elevation_profile","description":"PAID (50 credits) — elevation PROFILE along a line, not a single point:\n    pass points=[[lon,lat],…] (up to 100) or start=[lon,lat] + end=[lon,lat]\n    with sa"},{"name":"discover_open_geodata_pro","description":"PAID (30 credits) — open-data discovery with the metadata an agent\n    needs BEFORE querying: up to 50 ArcGIS Hub results (free tool: 10) and,\n    for the top 2"},{"name":"assess_airspace_obstruction_proximity","description":"PAID (100 credits) — nearby FAA-registered vertical obstructions\n    (towers, stacks, wind turbines) at a US point, for telecom/tower-siting\n    due diligence ("},{"name":"assess_site_due_diligence","description":"PAID (300 credits) — master due-diligence report for a point: wraps\n    assess_property_hazard (seismic + FEMA + NOAA, required) plus grid\n    proximity, land c"},{"name":"export_geojson_to_pdf","description":"PAID (150 credits) — render an ad-hoc GeoJSON FeatureCollection to a\n    one-page PDF report (static map + property table, base64-encoded PDF).\n    Separate fro"},{"name":"export_geojson_to_excel","description":"PAID (80 credits) — convert a GeoJSON FeatureCollection to an Excel\n    workbook (.xlsx, base64-encoded). Point geometries get LATITUDE/LONGITUDE\n    columns; o"},{"name":"bundle_migrate_convert","description":"PAID (40 credits) — one-call file migration: convert a raw file to\n    GeoJSON, then optionally reproject and simplify, then round coordinates.\n    Replaces 2-4"},{"name":"bundle_export_fixed","description":"PAID (150 credits) — fetch ALL records from a live FeatureServer layer\n    (no 50-record preview cap), auto-repair invalid geometries (GEOS\n    make_valid), and"}],"toolCount":106,"toolsHash":"8f7a5f948d916545bc96d2e3ded53b1347d1b4f2293558042d878fe5aeca5205","serverName":"GISGP","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.28.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T12:26:34.239Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":175,"error":null,"detail":{"tools":[{"name":"convert_coordinates","description":"Convert coordinate pairs between EPSG coordinate systems (max 1000 points).\n\n    points: [[x, y], ...] in from_epsg axis order (lon/lat for EPSG:4326).\n    Retu"},{"name":"validate_geojson","description":"Check whether a GeoJSON file/string is valid — catches broken geometry,\n    malformed structure, self-intersections, and out-of-range coordinates\n    before you"},{"name":"geojson_to_csv","description":"Convert GeoJSON to CSV/spreadsheet — one row per feature, properties\n    as columns, geometry flattened into a column (e.g. \"turn this GeoJSON\n    into Excel/CS"},{"name":"count_features","description":"Count features in an ArcGIS FeatureServer layer, optionally filtered by a WHERE clause.\n\n    service_url: full layer URL ending in /FeatureServer/<n>. token: on"},{"name":"extract_domains","description":"Extract coded value domains from an ArcGIS FeatureServer layer.\n\n    Returns JSON: {\"layer_name\": ..., \"domains\": {field: {name, field_alias, codes}}}.\n    "},{"name":"check_field_types","description":"Inspect the field schema of an ArcGIS FeatureServer layer.\n\n    Returns JSON: {layer_name, geometry_type, fields:[{name, alias, type,\n    length, nullable, has_"},{"name":"check_service_health","description":"Check whether an ArcGIS FeatureServer layer is reachable and responsive.\n\n    Returns JSON: {ok, ms (latency), name, geometry_type, field_count,\n    record_coun"},{"name":"rest_explore","description":"List the layers and tables of an ArcGIS FeatureServer/MapServer root.\n\n    Point at a service root to enumerate its layers/tables, or at a single\n    layer URL "},{"name":"compare_schemas","description":"Compare the field schemas of two ArcGIS FeatureServer layers.\n\n    Returns JSON diff: {added, removed, changed:[{field, diffs}], same,\n    geometry_match, ident"},{"name":"shapefile_to_geojson","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    to a GeoJSON FeatureCollection. Reprojects to WGS84 if a .prj says otherwise.\n\n    "},{"name":"kml_to_geojson","description":"Convert Google Earth / Google My Maps KML (2.0–2.2) to GeoJSON — the\n    common request when someone exported a map from Google Earth or Google\n    My Maps and "},{"name":"gpx_to_geojson","description":"Convert a GPS track/route file (GPX — from Garmin, Strava exports,\n    hiking/cycling apps, waypoints) to GeoJSON (e.g. \"convert my GPS track\n    to GeoJSON\", \""},{"name":"geojson_to_gpx","description":"Convert GeoJSON to a GPX file — e.g. \"export this as a GPS track\",\n    \"GeoJSON to GPX for my Garmin\", \"make waypoints from this GeoJSON\".\n    Points become GPX"},{"name":"flatgeobuf_to_geojson","description":"Convert a FlatGeobuf file (base64-encoded .fgb) to a GeoJSON\n    FeatureCollection. FlatGeobuf is a cloud-native binary format with a\n    built-in spatial index"},{"name":"geojson_to_flatgeobuf","description":"Convert GeoJSON to FlatGeobuf (.fgb) — the cloud-native binary\n    format with a built-in spatial index. FlatGeobuf holds one geometry\n    type per file, so mix"},{"name":"mapinfo_tab_to_geojson","description":"Convert a MapInfo TAB file set (base64-encoded .zip containing\n    .tab + its .dat/.map/.id sidecar files) to a GeoJSON FeatureCollection.\n    MapInfo TAB is th"},{"name":"geojson_to_mapinfo_tab","description":"Convert GeoJSON to a MapInfo TAB file set, ready for MapInfo Pro.\n    TAB is a multi-sidecar-file format (.tab/.dat/.id/.map) and single\n    geometry type per f"},{"name":"query_features","description":"Fetch actual feature records (attributes + geometry) from a FeatureServer layer.\n\n    Free preview capped at 50 records (WHERE filter + chosen fields). Returns "},{"name":"query_statistics","description":"Server-side aggregate stats on a numeric field of a FeatureServer layer.\n\n    No records fetched — AGOL computes sum/avg/min/max/count (also stddev/var).\n    Op"},{"name":"geometry_stats","description":"Compute area (m²/km²), length (m/km), vertex count, centroid and bbox of GeoJSON.\n\n    Metric measurements use an equal-area projection so area/length are real "},{"name":"reproject_geojson","description":"Change a GeoJSON's coordinate reference system (CRS/projection) —\n    e.g. \"reproject to Web Mercator\", \"convert WGS84 to UTM\", \"my\n    coordinates are in the w"},{"name":"simplify_geometry","description":"Reduce the number of vertices in GeoJSON geometry (Douglas-Peucker\n    algorithm) — e.g. \"simplify this polygon\", \"this shape has too many\n    points\", \"reduce "},{"name":"reduce_precision","description":"Round every coordinate to N decimal places to shrink a GeoJSON file's\n    size — e.g. \"my GeoJSON file is too big\", \"reduce coordinate precision\",\n    \"strip ex"},{"name":"csv_to_geojson","description":"Convert a CSV/spreadsheet with lat/lon (or X/Y) columns to GeoJSON —\n    auto-detects the coordinate columns (e.g. \"map this spreadsheet\",\n    \"CSV with lat/lon"},{"name":"geojson_to_kml","description":"Convert GeoJSON to KML for Google Earth / Google My Maps (e.g. \"open\n    this in Google Earth\", \"GeoJSON to KML\", \"make this viewable in Google\n    My Maps\"). R"},{"name":"geojson_to_shapefile","description":"Convert GeoJSON to an Esri Shapefile ZIP — the format ArcGIS Desktop\n    Pro/QGIS/most legacy GIS software still expects (e.g. \"I need a\n    shapefile for ArcGI"},{"name":"gpx_to_kml","description":"Convert a GPS track file (GPX) directly to KML for Google Earth —\n    e.g. \"open my Garmin/Strava track in Google Earth\", \"GPX to KML\"."},{"name":"kml_to_shapefile","description":"Convert a Google Earth/My Maps KML file directly to an Esri Shapefile\n    ZIP — e.g. \"Google Earth file to shapefile for ArcGIS\", \"KML to SHP\".\n    Returns JSON"},{"name":"kml_to_gpx","description":"Convert a Google Earth/My Maps KML file directly to GPX — waypoints\n    from Points, tracks from Lines/Polygons — e.g. \"KML to GPX for my\n    Garmin\", \"load thi"},{"name":"shapefile_to_gpx","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    directly to GPX — points become waypoints, lines/polygons become tracks\n    (2026-0"},{"name":"gpx_to_shapefile","description":"Convert a GPS track file (GPX) directly to an Esri Shapefile ZIP —\n    waypoints become points, tracks/routes become lines (2026-09-03).\n    Returns JSON: {shap"},{"name":"csv_to_gpx","description":"Convert a CSV with latitude/longitude columns directly to GPX\n    waypoints (2026-09-03) — e.g. \"these coordinates to a GPX for my GPS\".\n    Column names are au"},{"name":"gpx_to_csv","description":"Convert a GPS track file (GPX) directly to CSV (2026-09-03) —\n    waypoints get LATITUDE/LONGITUDE columns, tracks/routes get a\n    GEOMETRY_WKT column instead."},{"name":"wkt_to_geojson","description":"Convert a WKT (Well-Known Text) geometry string — the format\n    PostGIS/SQL geometry columns print by default — to GeoJSON (e.g. \"this\n    came from a PostGIS "},{"name":"geojson_to_wkt","description":"Convert a GeoJSON geometry (or a Feature's geometry) to WKT — the\n    format needed to insert geometry into PostGIS/SQL (e.g. \"I need this\n    for a PostGIS INS"},{"name":"dxf_to_geojson","description":"Convert an AutoCAD DXF file's contents to GeoJSON — e.g. \"convert\n    this DXF to GeoJSON\", \"AutoCAD drawing to GIS format\", \"DXF export from\n    Civil 3D to Ge"},{"name":"geojson_to_dxf","description":"Convert GeoJSON to an AutoCAD DXF file — e.g. \"export this GeoJSON\n    to DXF for AutoCAD\", \"GIS data to CAD format\", \"convert to .dxf for\n    Civil 3D\". Points"},{"name":"list_dxf_layers","description":"List the distinct DXF layer names used in a drawing — e.g. \"what\n    layers does this DXF have\", \"list layers before I extract one\". Real\n    CAD exports organi"},{"name":"georeference_dxf","description":"Reproject a DXF drawn in a local/arbitrary CAD coordinate system\n    into real-world coordinates — e.g. \"this DXF isn't in real coordinates,\n    fix it\", \"geore"},{"name":"dxf_to_pdf_report","description":"PAID (150 credits) — render a DXF drawing to a one-page PDF site-plan\n    report (vector plot + entity-type breakdown + layer list, base64-\n    encoded PDF) — e"},{"name":"grade_service","description":"Grade an ArcGIS FeatureServer layer A–F across 5 categories (schema quality,\n    data completeness, performance, maintenance, configuration).\n\n    Returns JSON:"},{"name":"audit_service","description":"Full one-call QA report of an ArcGIS FeatureServer layer: health (latency,\n    record count, capabilities) + field schema + coded domains + summary counts.\n\n   "},{"name":"find_layer_issues","description":"Scan an ArcGIS FeatureServer layer for common problems: missing ObjectID,\n    disabled query, stale data, all-null fields, features without geometry.\n\n    Sampl"},{"name":"share_map","description":"Publish a GeoJSON FeatureCollection as a live, shareable map page on gisgp.com.\n\n    Returns JSON: {url, expires_at} — url is a public interactive map a human c"},{"name":"embed_map_snippet","description":"Ready-to-paste <iframe> embed code for a live interactive map — thin\n    wrapper around share_map (same live page, same 30-day TTL), for\n    embedding directly "},{"name":"buffer_geojson","description":"Buffer every feature by a distance in METRES (negative shrinks).\n\n    Geodesically accurate at any latitude (each feature is buffered in a local\n    equidistant"},{"name":"dissolve_geojson","description":"Merge overlapping/adjacent geometries into one (optionally grouped by a\n    property field `by` → one dissolved feature per distinct value).\n\n    Returns JSON {"},{"name":"centroids_geojson","description":"Get the center point of each polygon/line feature — e.g. \"find the\n    center of each parcel\", \"convert polygons to points for labeling\",\n    \"centroid of each "},{"name":"convex_hull_geojson","description":"Draw the smallest polygon that wraps around all input features (a\n    convex hull) — e.g. \"draw a boundary around these points\", \"find the\n    outer perimeter o"},{"name":"overlay_geojson","description":"Combine two GeoJSON FeatureCollections with a boolean set operation.\n\n    op: intersection | difference (a minus b) | symmetric_difference | union.\n    Each sid"},{"name":"spatial_join_geojson","description":"Attach properties from every B feature that satisfies a spatial\n    predicate to each A feature (as a `_matches` list).\n\n    predicate: intersects | within | co"},{"name":"nearest_features_geojson","description":"For each feature in A, find the nearest feature in B by centroid-to-\n    centroid geodesic distance. Attaches `_nearest` properties and\n    `_nearest_distance_m"},{"name":"fix_geometry","description":"Repair invalid geometries (self-intersections, bad rings) via GEOS\n    make_valid. Already-valid geometries are left untouched. Returns JSON\n    {ok, fixed_coun"},{"name":"geojson_diff","description":"Compare two GeoJSON FeatureCollections — added/removed/changed features.\n\n    Matched by an `id_field` property if given, else by array position (exact\n    stru"},{"name":"epsg_suggest","description":"Suggest the correct UTM EPSG code to project a WGS84 lon/lat into for\n    accurate metric measurements (buffer/area/distance).\n\n    Returns JSON {ok, epsg, utm_"},{"name":"tile_math","description":"Convert a WGS84 lon/lat + zoom level to Slippy Map (XYZ) tile x/y,\n    that tile's lon/lat bbox, and its Bing quadkey.\n\n    Returns JSON {ok, zoom, x, y, tile_b"},{"name":"envelope_geojson","description":"Get the bounding box (min/max rectangle) around each feature — e.g.\n    \"get the bounding box of this shape\", \"bbox for each feature\",\n    \"rectangular extent o"},{"name":"minimum_rotated_rectangle","description":"Smallest-area rectangle wrapping all input features combined — can be\n    tilted to fit tighter than a straight bounding box (e.g. \"tightest\n    rectangle aroun"},{"name":"voronoi_geojson","description":"Divide space into regions closest to each input point (Voronoi\n    diagram) — e.g. \"find the service area for each location\", \"which\n    points are closest to w"},{"name":"full_service_audit","description":"Complete one-call QA report: A-F grade + full audit (health/fields/\n    domains/summary) + issue scan, merged into one response — replaces 3\n    separate calls "},{"name":"geometry_health_report","description":"Complete one-call GeoJSON health check: validate + auto-repair invalid\n    geometry + stats (area/length/vertices) + bbox envelope, merged — replaces\n    4 sepa"},{"name":"get_terrain_profile","description":"Get the ground elevation (metres above sea level) at a coordinate —\n    e.g. \"what's the elevation here\", \"is this point in a flood-risk\n    lowland\", \"elevatio"},{"name":"get_climate_history","description":"Daily historical weather for a point/date range via Open-Meteo's\n    ERA5-based archive (no key, free, data back to 1940). Dates are\n    YYYY-MM-DD. Returns JSO"},{"name":"classify_land_cover","description":"Land cover class at a WGS84 point via ESA CCI Land Cover 2018 (ArcGIS\n    Living Atlas ImageServer, no key, 300m resolution). Returns JSON:\n    {ok, class_code,"},{"name":"analyze_location","description":"Reverse-geocode a WGS84 point to country/region/locality via OSM\n    Nominatim (no key, free — fair-use rate limited, best-effort). Returns\n    JSON: {ok, displ"},{"name":"geocode_address","description":"Forward-geocode a free-text address to lon/lat. Default: OSM Nominatim\n    (no key, free, fair-use rate limited) — the complement to\n    analyze_location's reve"},{"name":"offset_coordinates","description":"Move a WGS84 point by a geodesic distance (metres) along a compass\n    bearing (0=N, 90=E, 180=S, 270=W). Pure computation, no external API.\n    Returns JSON: {"},{"name":"detect_coordinate_order","description":"Detect whether [x, y] pairs are [lon, lat] or [lat, lon] — resolves\n    a genuinely common real-world confusion (one of the most-viewed GIS\n    StackExchange qu"},{"name":"guess_crs_from_coordinates","description":"Best-guess candidate CRS for raw [x, y] coordinates with no metadata\n    (e.g. a shapefile with a missing .prj) — real demand signal (79k+ views\n    on GIS Stac"},{"name":"parse_coordinate","description":"Parse ANY single coordinate string a human might paste into WGS84\n    lat/lon — decimal degrees with any separator or an EU decimal comma,\n    DMS (42°41'51.7\"N"},{"name":"format_coordinate","description":"Express one WGS84 point in every common notation at once: decimal\n    degrees, DMS, DDM, UTM (zone/band/easting/northing), MGRS and USNG,\n    British National G"},{"name":"generate_static_map_image","description":"Render a GeoJSON FeatureCollection/Feature to a static PNG map image\n    (base64 data URL) — for embedding in reports/emails/documents, unlike\n    share_map's i"},{"name":"assess_grid_exposure","description":"Electric grid infrastructure proximity at a US point: nearby\n    substations + transmission lines within 10 miles (community ArcGIS\n    mirror of HIFLD data — p"},{"name":"assess_renewable_site","description":"One-call solar/wind site-scouting indicator: terrain + land cover +\n    1-year solar/wind climate averages + grid proximity, combined from\n    GISGP's existing "},{"name":"assess_pipeline_proximity","description":"Natural gas interstate/intrastate transmission pipeline proximity at\n    a US point (EIA/HIFLD, 32,892 segments). Substitute for proprietary\n    local-utility \""},{"name":"assess_protected_area_proximity","description":"US protected/conservation area proximity via USGS PAD-US (public\n    domain, commercial-use OK — unlike Protected Planet/WDPA, whose API\n    explicitly forbids "},{"name":"get_river_flow_status","description":"Nearest USGS real-time stream/river gauge to a point (US rivers and\n    streams only): live streamflow (ft3/s) and gauge height (ft), reported\n    honestly as p"},{"name":"discover_open_geodata","description":"Keyword search across ArcGIS Hub Open Data — real public\n    FeatureServer/MapServer datasets from government/organization ArcGIS\n    Online portals worldwide. "},{"name":"assess_ev_charging_site","description":"One-call EV charging site-scouting indicator: grid proximity (power\n    for fast-charging) + land cover + locality context, combined from\n    GISGP's existing f"},{"name":"assess_telecom_site","description":"One-call cell tower site-scouting indicator: grid proximity + terrain\n    elevation (line-of-sight proxy) + land cover, combined from GISGP's\n    existing free "},{"name":"rank_renewable_sites","description":"Bulk solar/wind site screener — evaluates up to 25 candidate points\n    (each {\"lon\": ..., \"lat\": ...}) and returns only the top_n, ranked by\n    average daily "},{"name":"assess_wildfire_risk","description":"Real-time active wildfire proximity at a point via NASA FIRMS\n    (VIIRS satellite hotspot detections, last 2 days) + electric grid\n    exposure (transmission l"},{"name":"calculate_route","description":"Real driving distance + duration between two points. Default: OSRM\n    (public demo instance, no key — fair-use limited, not a production SLA).\n    Optional ago"},{"name":"estimate_cost","description":"FREE — quote a paid tool's cost WITHOUT executing it or charging the\n    wallet (call this before assess_property_hazard etc.).\n    `units` = candidate/item cou"},{"name":"check_wallet_balance","description":"FREE — check your own MCP credits wallet balance (the same account\n    paid tools like assess_property_hazard charge against). Requires\n    Authorization: Beare"},{"name":"assess_property_hazard","description":"PAID (200 credits) — multi-source US property hazard indicator: USGS\n    seismic risk (required), plus best-effort FEMA disaster declaration\n    history (state,"},{"name":"rank_hazard_safe_sites","description":"PAID (200 credits PER CANDIDATE, max 25 candidates/call) — bulk seismic-\n    risk screener. Runs assess_property_hazard's seismic check under the hood\n    for e"},{"name":"assess_portfolio_climate_disclosure","description":"PAID (200 credits PER PROPERTY, max 25 properties/call) — bulk physical\n    climate-risk disclosure input for a real-estate/asset portfolio (SEC\n    climate dis"},{"name":"assess_supply_chain_redundancy","description":"PAID (400 credits) — checks whether two supposedly-redundant sites\n    (e.g. two \"backup\" suppliers/warehouses/data centers) are actually\n    independent: real "},{"name":"assess_energy_community_credit","description":"PAID (100 credits) — US Inflation Reduction Act \"energy community\"\n    bonus tax credit qualification lookup for a renewable energy project\n    site. Checks bot"},{"name":"assess_datacenter_site","description":"PAID (300 credits) — data center site-scouting composite: grid\n    proximity (power availability), multi-source hazard (seismic + FEMA +\n    NOAA, required — sa"},{"name":"assess_reforestation_site","description":"PAID (100 credits) — reforestation/afforestation site-scouting\n    composite: terrain, land cover (flags already-forested/urban/water/snow\n    as unsuitable), a"},{"name":"get_elevation_profile","description":"PAID (50 credits) — elevation PROFILE along a line, not a single point:\n    pass points=[[lon,lat],…] (up to 100) or start=[lon,lat] + end=[lon,lat]\n    with sa"},{"name":"discover_open_geodata_pro","description":"PAID (30 credits) — open-data discovery with the metadata an agent\n    needs BEFORE querying: up to 50 ArcGIS Hub results (free tool: 10) and,\n    for the top 2"},{"name":"assess_airspace_obstruction_proximity","description":"PAID (100 credits) — nearby FAA-registered vertical obstructions\n    (towers, stacks, wind turbines) at a US point, for telecom/tower-siting\n    due diligence ("},{"name":"assess_site_due_diligence","description":"PAID (300 credits) — master due-diligence report for a point: wraps\n    assess_property_hazard (seismic + FEMA + NOAA, required) plus grid\n    proximity, land c"},{"name":"export_geojson_to_pdf","description":"PAID (150 credits) — render an ad-hoc GeoJSON FeatureCollection to a\n    one-page PDF report (static map + property table, base64-encoded PDF).\n    Separate fro"},{"name":"export_geojson_to_excel","description":"PAID (80 credits) — convert a GeoJSON FeatureCollection to an Excel\n    workbook (.xlsx, base64-encoded). Point geometries get LATITUDE/LONGITUDE\n    columns; o"},{"name":"bundle_migrate_convert","description":"PAID (40 credits) — one-call file migration: convert a raw file to\n    GeoJSON, then optionally reproject and simplify, then round coordinates.\n    Replaces 2-4"},{"name":"bundle_export_fixed","description":"PAID (150 credits) — fetch ALL records from a live FeatureServer layer\n    (no 50-record preview cap), auto-repair invalid geometries (GEOS\n    make_valid), and"}],"toolCount":106,"toolsHash":"8f7a5f948d916545bc96d2e3ded53b1347d1b4f2293558042d878fe5aeca5205","serverName":"GISGP","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.28.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T06:22:48.011Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":118,"error":null,"detail":{"tools":[{"name":"convert_coordinates","description":"Convert coordinate pairs between EPSG coordinate systems (max 1000 points).\n\n    points: [[x, y], ...] in from_epsg axis order (lon/lat for EPSG:4326).\n    Retu"},{"name":"validate_geojson","description":"Check whether a GeoJSON file/string is valid — catches broken geometry,\n    malformed structure, self-intersections, and out-of-range coordinates\n    before you"},{"name":"geojson_to_csv","description":"Convert GeoJSON to CSV/spreadsheet — one row per feature, properties\n    as columns, geometry flattened into a column (e.g. \"turn this GeoJSON\n    into Excel/CS"},{"name":"count_features","description":"Count features in an ArcGIS FeatureServer layer, optionally filtered by a WHERE clause.\n\n    service_url: full layer URL ending in /FeatureServer/<n>. token: on"},{"name":"extract_domains","description":"Extract coded value domains from an ArcGIS FeatureServer layer.\n\n    Returns JSON: {\"layer_name\": ..., \"domains\": {field: {name, field_alias, codes}}}.\n    "},{"name":"check_field_types","description":"Inspect the field schema of an ArcGIS FeatureServer layer.\n\n    Returns JSON: {layer_name, geometry_type, fields:[{name, alias, type,\n    length, nullable, has_"},{"name":"check_service_health","description":"Check whether an ArcGIS FeatureServer layer is reachable and responsive.\n\n    Returns JSON: {ok, ms (latency), name, geometry_type, field_count,\n    record_coun"},{"name":"rest_explore","description":"List the layers and tables of an ArcGIS FeatureServer/MapServer root.\n\n    Point at a service root to enumerate its layers/tables, or at a single\n    layer URL "},{"name":"compare_schemas","description":"Compare the field schemas of two ArcGIS FeatureServer layers.\n\n    Returns JSON diff: {added, removed, changed:[{field, diffs}], same,\n    geometry_match, ident"},{"name":"shapefile_to_geojson","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    to a GeoJSON FeatureCollection. Reprojects to WGS84 if a .prj says otherwise.\n\n    "},{"name":"kml_to_geojson","description":"Convert Google Earth / Google My Maps KML (2.0–2.2) to GeoJSON — the\n    common request when someone exported a map from Google Earth or Google\n    My Maps and "},{"name":"gpx_to_geojson","description":"Convert a GPS track/route file (GPX — from Garmin, Strava exports,\n    hiking/cycling apps, waypoints) to GeoJSON (e.g. \"convert my GPS track\n    to GeoJSON\", \""},{"name":"geojson_to_gpx","description":"Convert GeoJSON to a GPX file — e.g. \"export this as a GPS track\",\n    \"GeoJSON to GPX for my Garmin\", \"make waypoints from this GeoJSON\".\n    Points become GPX"},{"name":"flatgeobuf_to_geojson","description":"Convert a FlatGeobuf file (base64-encoded .fgb) to a GeoJSON\n    FeatureCollection. FlatGeobuf is a cloud-native binary format with a\n    built-in spatial index"},{"name":"geojson_to_flatgeobuf","description":"Convert GeoJSON to FlatGeobuf (.fgb) — the cloud-native binary\n    format with a built-in spatial index. FlatGeobuf holds one geometry\n    type per file, so mix"},{"name":"mapinfo_tab_to_geojson","description":"Convert a MapInfo TAB file set (base64-encoded .zip containing\n    .tab + its .dat/.map/.id sidecar files) to a GeoJSON FeatureCollection.\n    MapInfo TAB is th"},{"name":"geojson_to_mapinfo_tab","description":"Convert GeoJSON to a MapInfo TAB file set, ready for MapInfo Pro.\n    TAB is a multi-sidecar-file format (.tab/.dat/.id/.map) and single\n    geometry type per f"},{"name":"query_features","description":"Fetch actual feature records (attributes + geometry) from a FeatureServer layer.\n\n    Free preview capped at 50 records (WHERE filter + chosen fields). Returns "},{"name":"query_statistics","description":"Server-side aggregate stats on a numeric field of a FeatureServer layer.\n\n    No records fetched — AGOL computes sum/avg/min/max/count (also stddev/var).\n    Op"},{"name":"geometry_stats","description":"Compute area (m²/km²), length (m/km), vertex count, centroid and bbox of GeoJSON.\n\n    Metric measurements use an equal-area projection so area/length are real "},{"name":"reproject_geojson","description":"Change a GeoJSON's coordinate reference system (CRS/projection) —\n    e.g. \"reproject to Web Mercator\", \"convert WGS84 to UTM\", \"my\n    coordinates are in the w"},{"name":"simplify_geometry","description":"Reduce the number of vertices in GeoJSON geometry (Douglas-Peucker\n    algorithm) — e.g. \"simplify this polygon\", \"this shape has too many\n    points\", \"reduce "},{"name":"reduce_precision","description":"Round every coordinate to N decimal places to shrink a GeoJSON file's\n    size — e.g. \"my GeoJSON file is too big\", \"reduce coordinate precision\",\n    \"strip ex"},{"name":"csv_to_geojson","description":"Convert a CSV/spreadsheet with lat/lon (or X/Y) columns to GeoJSON —\n    auto-detects the coordinate columns (e.g. \"map this spreadsheet\",\n    \"CSV with lat/lon"},{"name":"geojson_to_kml","description":"Convert GeoJSON to KML for Google Earth / Google My Maps (e.g. \"open\n    this in Google Earth\", \"GeoJSON to KML\", \"make this viewable in Google\n    My Maps\"). R"},{"name":"geojson_to_shapefile","description":"Convert GeoJSON to an Esri Shapefile ZIP — the format ArcGIS Desktop\n    Pro/QGIS/most legacy GIS software still expects (e.g. \"I need a\n    shapefile for ArcGI"},{"name":"gpx_to_kml","description":"Convert a GPS track file (GPX) directly to KML for Google Earth —\n    e.g. \"open my Garmin/Strava track in Google Earth\", \"GPX to KML\"."},{"name":"kml_to_shapefile","description":"Convert a Google Earth/My Maps KML file directly to an Esri Shapefile\n    ZIP — e.g. \"Google Earth file to shapefile for ArcGIS\", \"KML to SHP\".\n    Returns JSON"},{"name":"kml_to_gpx","description":"Convert a Google Earth/My Maps KML file directly to GPX — waypoints\n    from Points, tracks from Lines/Polygons — e.g. \"KML to GPX for my\n    Garmin\", \"load thi"},{"name":"shapefile_to_gpx","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    directly to GPX — points become waypoints, lines/polygons become tracks\n    (2026-0"},{"name":"gpx_to_shapefile","description":"Convert a GPS track file (GPX) directly to an Esri Shapefile ZIP —\n    waypoints become points, tracks/routes become lines (2026-09-03).\n    Returns JSON: {shap"},{"name":"csv_to_gpx","description":"Convert a CSV with latitude/longitude columns directly to GPX\n    waypoints (2026-09-03) — e.g. \"these coordinates to a GPX for my GPS\".\n    Column names are au"},{"name":"gpx_to_csv","description":"Convert a GPS track file (GPX) directly to CSV (2026-09-03) —\n    waypoints get LATITUDE/LONGITUDE columns, tracks/routes get a\n    GEOMETRY_WKT column instead."},{"name":"wkt_to_geojson","description":"Convert a WKT (Well-Known Text) geometry string — the format\n    PostGIS/SQL geometry columns print by default — to GeoJSON (e.g. \"this\n    came from a PostGIS "},{"name":"geojson_to_wkt","description":"Convert a GeoJSON geometry (or a Feature's geometry) to WKT — the\n    format needed to insert geometry into PostGIS/SQL (e.g. \"I need this\n    for a PostGIS INS"},{"name":"dxf_to_geojson","description":"Convert an AutoCAD DXF file's contents to GeoJSON — e.g. \"convert\n    this DXF to GeoJSON\", \"AutoCAD drawing to GIS format\", \"DXF export from\n    Civil 3D to Ge"},{"name":"geojson_to_dxf","description":"Convert GeoJSON to an AutoCAD DXF file — e.g. \"export this GeoJSON\n    to DXF for AutoCAD\", \"GIS data to CAD format\", \"convert to .dxf for\n    Civil 3D\". Points"},{"name":"list_dxf_layers","description":"List the distinct DXF layer names used in a drawing — e.g. \"what\n    layers does this DXF have\", \"list layers before I extract one\". Real\n    CAD exports organi"},{"name":"georeference_dxf","description":"Reproject a DXF drawn in a local/arbitrary CAD coordinate system\n    into real-world coordinates — e.g. \"this DXF isn't in real coordinates,\n    fix it\", \"geore"},{"name":"dxf_to_pdf_report","description":"PAID (150 credits) — render a DXF drawing to a one-page PDF site-plan\n    report (vector plot + entity-type breakdown + layer list, base64-\n    encoded PDF) — e"},{"name":"grade_service","description":"Grade an ArcGIS FeatureServer layer A–F across 5 categories (schema quality,\n    data completeness, performance, maintenance, configuration).\n\n    Returns JSON:"},{"name":"audit_service","description":"Full one-call QA report of an ArcGIS FeatureServer layer: health (latency,\n    record count, capabilities) + field schema + coded domains + summary counts.\n\n   "},{"name":"find_layer_issues","description":"Scan an ArcGIS FeatureServer layer for common problems: missing ObjectID,\n    disabled query, stale data, all-null fields, features without geometry.\n\n    Sampl"},{"name":"share_map","description":"Publish a GeoJSON FeatureCollection as a live, shareable map page on gisgp.com.\n\n    Returns JSON: {url, expires_at} — url is a public interactive map a human c"},{"name":"embed_map_snippet","description":"Ready-to-paste <iframe> embed code for a live interactive map — thin\n    wrapper around share_map (same live page, same 30-day TTL), for\n    embedding directly "},{"name":"buffer_geojson","description":"Buffer every feature by a distance in METRES (negative shrinks).\n\n    Geodesically accurate at any latitude (each feature is buffered in a local\n    equidistant"},{"name":"dissolve_geojson","description":"Merge overlapping/adjacent geometries into one (optionally grouped by a\n    property field `by` → one dissolved feature per distinct value).\n\n    Returns JSON {"},{"name":"centroids_geojson","description":"Get the center point of each polygon/line feature — e.g. \"find the\n    center of each parcel\", \"convert polygons to points for labeling\",\n    \"centroid of each "},{"name":"convex_hull_geojson","description":"Draw the smallest polygon that wraps around all input features (a\n    convex hull) — e.g. \"draw a boundary around these points\", \"find the\n    outer perimeter o"},{"name":"overlay_geojson","description":"Combine two GeoJSON FeatureCollections with a boolean set operation.\n\n    op: intersection | difference (a minus b) | symmetric_difference | union.\n    Each sid"},{"name":"spatial_join_geojson","description":"Attach properties from every B feature that satisfies a spatial\n    predicate to each A feature (as a `_matches` list).\n\n    predicate: intersects | within | co"},{"name":"nearest_features_geojson","description":"For each feature in A, find the nearest feature in B by centroid-to-\n    centroid geodesic distance. Attaches `_nearest` properties and\n    `_nearest_distance_m"},{"name":"fix_geometry","description":"Repair invalid geometries (self-intersections, bad rings) via GEOS\n    make_valid. Already-valid geometries are left untouched. Returns JSON\n    {ok, fixed_coun"},{"name":"geojson_diff","description":"Compare two GeoJSON FeatureCollections — added/removed/changed features.\n\n    Matched by an `id_field` property if given, else by array position (exact\n    stru"},{"name":"epsg_suggest","description":"Suggest the correct UTM EPSG code to project a WGS84 lon/lat into for\n    accurate metric measurements (buffer/area/distance).\n\n    Returns JSON {ok, epsg, utm_"},{"name":"tile_math","description":"Convert a WGS84 lon/lat + zoom level to Slippy Map (XYZ) tile x/y,\n    that tile's lon/lat bbox, and its Bing quadkey.\n\n    Returns JSON {ok, zoom, x, y, tile_b"},{"name":"envelope_geojson","description":"Get the bounding box (min/max rectangle) around each feature — e.g.\n    \"get the bounding box of this shape\", \"bbox for each feature\",\n    \"rectangular extent o"},{"name":"minimum_rotated_rectangle","description":"Smallest-area rectangle wrapping all input features combined — can be\n    tilted to fit tighter than a straight bounding box (e.g. \"tightest\n    rectangle aroun"},{"name":"voronoi_geojson","description":"Divide space into regions closest to each input point (Voronoi\n    diagram) — e.g. \"find the service area for each location\", \"which\n    points are closest to w"},{"name":"full_service_audit","description":"Complete one-call QA report: A-F grade + full audit (health/fields/\n    domains/summary) + issue scan, merged into one response — replaces 3\n    separate calls "},{"name":"geometry_health_report","description":"Complete one-call GeoJSON health check: validate + auto-repair invalid\n    geometry + stats (area/length/vertices) + bbox envelope, merged — replaces\n    4 sepa"},{"name":"get_terrain_profile","description":"Get the ground elevation (metres above sea level) at a coordinate —\n    e.g. \"what's the elevation here\", \"is this point in a flood-risk\n    lowland\", \"elevatio"},{"name":"get_climate_history","description":"Daily historical weather for a point/date range via Open-Meteo's\n    ERA5-based archive (no key, free, data back to 1940). Dates are\n    YYYY-MM-DD. Returns JSO"},{"name":"classify_land_cover","description":"Land cover class at a WGS84 point via ESA CCI Land Cover 2018 (ArcGIS\n    Living Atlas ImageServer, no key, 300m resolution). Returns JSON:\n    {ok, class_code,"},{"name":"analyze_location","description":"Reverse-geocode a WGS84 point to country/region/locality via OSM\n    Nominatim (no key, free — fair-use rate limited, best-effort). Returns\n    JSON: {ok, displ"},{"name":"geocode_address","description":"Forward-geocode a free-text address to lon/lat. Default: OSM Nominatim\n    (no key, free, fair-use rate limited) — the complement to\n    analyze_location's reve"},{"name":"offset_coordinates","description":"Move a WGS84 point by a geodesic distance (metres) along a compass\n    bearing (0=N, 90=E, 180=S, 270=W). Pure computation, no external API.\n    Returns JSON: {"},{"name":"detect_coordinate_order","description":"Detect whether [x, y] pairs are [lon, lat] or [lat, lon] — resolves\n    a genuinely common real-world confusion (one of the most-viewed GIS\n    StackExchange qu"},{"name":"guess_crs_from_coordinates","description":"Best-guess candidate CRS for raw [x, y] coordinates with no metadata\n    (e.g. a shapefile with a missing .prj) — real demand signal (79k+ views\n    on GIS Stac"},{"name":"parse_coordinate","description":"Parse ANY single coordinate string a human might paste into WGS84\n    lat/lon — decimal degrees with any separator or an EU decimal comma,\n    DMS (42°41'51.7\"N"},{"name":"format_coordinate","description":"Express one WGS84 point in every common notation at once: decimal\n    degrees, DMS, DDM, UTM (zone/band/easting/northing), MGRS and USNG,\n    British National G"},{"name":"generate_static_map_image","description":"Render a GeoJSON FeatureCollection/Feature to a static PNG map image\n    (base64 data URL) — for embedding in reports/emails/documents, unlike\n    share_map's i"},{"name":"assess_grid_exposure","description":"Electric grid infrastructure proximity at a US point: nearby\n    substations + transmission lines within 10 miles (community ArcGIS\n    mirror of HIFLD data — p"},{"name":"assess_renewable_site","description":"One-call solar/wind site-scouting indicator: terrain + land cover +\n    1-year solar/wind climate averages + grid proximity, combined from\n    GISGP's existing "},{"name":"assess_pipeline_proximity","description":"Natural gas interstate/intrastate transmission pipeline proximity at\n    a US point (EIA/HIFLD, 32,892 segments). Substitute for proprietary\n    local-utility \""},{"name":"assess_protected_area_proximity","description":"US protected/conservation area proximity via USGS PAD-US (public\n    domain, commercial-use OK — unlike Protected Planet/WDPA, whose API\n    explicitly forbids "},{"name":"get_river_flow_status","description":"Nearest USGS real-time stream/river gauge to a point (US rivers and\n    streams only): live streamflow (ft3/s) and gauge height (ft), reported\n    honestly as p"},{"name":"discover_open_geodata","description":"Keyword search across ArcGIS Hub Open Data — real public\n    FeatureServer/MapServer datasets from government/organization ArcGIS\n    Online portals worldwide. "},{"name":"assess_ev_charging_site","description":"One-call EV charging site-scouting indicator: grid proximity (power\n    for fast-charging) + land cover + locality context, combined from\n    GISGP's existing f"},{"name":"assess_telecom_site","description":"One-call cell tower site-scouting indicator: grid proximity + terrain\n    elevation (line-of-sight proxy) + land cover, combined from GISGP's\n    existing free "},{"name":"rank_renewable_sites","description":"Bulk solar/wind site screener — evaluates up to 25 candidate points\n    (each {\"lon\": ..., \"lat\": ...}) and returns only the top_n, ranked by\n    average daily "},{"name":"assess_wildfire_risk","description":"Real-time active wildfire proximity at a point via NASA FIRMS\n    (VIIRS satellite hotspot detections, last 2 days) + electric grid\n    exposure (transmission l"},{"name":"calculate_route","description":"Real driving distance + duration between two points. Default: OSRM\n    (public demo instance, no key — fair-use limited, not a production SLA).\n    Optional ago"},{"name":"estimate_cost","description":"FREE — quote a paid tool's cost WITHOUT executing it or charging the\n    wallet (call this before assess_property_hazard etc.).\n    `units` = candidate/item cou"},{"name":"check_wallet_balance","description":"FREE — check your own MCP credits wallet balance (the same account\n    paid tools like assess_property_hazard charge against). Requires\n    Authorization: Beare"},{"name":"assess_property_hazard","description":"PAID (200 credits) — multi-source US property hazard indicator: USGS\n    seismic risk (required), plus best-effort FEMA disaster declaration\n    history (state,"},{"name":"rank_hazard_safe_sites","description":"PAID (200 credits PER CANDIDATE, max 25 candidates/call) — bulk seismic-\n    risk screener. Runs assess_property_hazard's seismic check under the hood\n    for e"},{"name":"assess_portfolio_climate_disclosure","description":"PAID (200 credits PER PROPERTY, max 25 properties/call) — bulk physical\n    climate-risk disclosure input for a real-estate/asset portfolio (SEC\n    climate dis"},{"name":"assess_supply_chain_redundancy","description":"PAID (400 credits) — checks whether two supposedly-redundant sites\n    (e.g. two \"backup\" suppliers/warehouses/data centers) are actually\n    independent: real "},{"name":"assess_energy_community_credit","description":"PAID (100 credits) — US Inflation Reduction Act \"energy community\"\n    bonus tax credit qualification lookup for a renewable energy project\n    site. Checks bot"},{"name":"assess_datacenter_site","description":"PAID (300 credits) — data center site-scouting composite: grid\n    proximity (power availability), multi-source hazard (seismic + FEMA +\n    NOAA, required — sa"},{"name":"assess_reforestation_site","description":"PAID (100 credits) — reforestation/afforestation site-scouting\n    composite: terrain, land cover (flags already-forested/urban/water/snow\n    as unsuitable), a"},{"name":"get_elevation_profile","description":"PAID (50 credits) — elevation PROFILE along a line, not a single point:\n    pass points=[[lon,lat],…] (up to 100) or start=[lon,lat] + end=[lon,lat]\n    with sa"},{"name":"discover_open_geodata_pro","description":"PAID (30 credits) — open-data discovery with the metadata an agent\n    needs BEFORE querying: up to 50 ArcGIS Hub results (free tool: 10) and,\n    for the top 2"},{"name":"assess_airspace_obstruction_proximity","description":"PAID (100 credits) — nearby FAA-registered vertical obstructions\n    (towers, stacks, wind turbines) at a US point, for telecom/tower-siting\n    due diligence ("},{"name":"assess_site_due_diligence","description":"PAID (300 credits) — master due-diligence report for a point: wraps\n    assess_property_hazard (seismic + FEMA + NOAA, required) plus grid\n    proximity, land c"},{"name":"export_geojson_to_pdf","description":"PAID (150 credits) — render an ad-hoc GeoJSON FeatureCollection to a\n    one-page PDF report (static map + property table, base64-encoded PDF).\n    Separate fro"},{"name":"export_geojson_to_excel","description":"PAID (80 credits) — convert a GeoJSON FeatureCollection to an Excel\n    workbook (.xlsx, base64-encoded). Point geometries get LATITUDE/LONGITUDE\n    columns; o"},{"name":"bundle_migrate_convert","description":"PAID (40 credits) — one-call file migration: convert a raw file to\n    GeoJSON, then optionally reproject and simplify, then round coordinates.\n    Replaces 2-4"},{"name":"bundle_export_fixed","description":"PAID (150 credits) — fetch ALL records from a live FeatureServer layer\n    (no 50-record preview cap), auto-repair invalid geometries (GEOS\n    make_valid), and"}],"toolCount":106,"toolsHash":"8f7a5f948d916545bc96d2e3ded53b1347d1b4f2293558042d878fe5aeca5205","serverName":"GISGP","capabilities":["experimental","prompts","resources","tools"],"serverVersion":"1.28.1","protocolVersion":"2025-06-18"}}],"tools":[{"name":"convert_coordinates","description":"Convert coordinate pairs between EPSG coordinate systems (max 1000 points).\n\n    points: [[x, y], ...] in from_epsg axis order (lon/lat for EPSG:4326).\n    Retu"},{"name":"validate_geojson","description":"Check whether a GeoJSON file/string is valid — catches broken geometry,\n    malformed structure, self-intersections, and out-of-range coordinates\n    before you"},{"name":"geojson_to_csv","description":"Convert GeoJSON to CSV/spreadsheet — one row per feature, properties\n    as columns, geometry flattened into a column (e.g. \"turn this GeoJSON\n    into Excel/CS"},{"name":"count_features","description":"Count features in an ArcGIS FeatureServer layer, optionally filtered by a WHERE clause.\n\n    service_url: full layer URL ending in /FeatureServer/<n>. token: on"},{"name":"extract_domains","description":"Extract coded value domains from an ArcGIS FeatureServer layer.\n\n    Returns JSON: {\"layer_name\": ..., \"domains\": {field: {name, field_alias, codes}}}.\n    "},{"name":"check_field_types","description":"Inspect the field schema of an ArcGIS FeatureServer layer.\n\n    Returns JSON: {layer_name, geometry_type, fields:[{name, alias, type,\n    length, nullable, has_"},{"name":"check_service_health","description":"Check whether an ArcGIS FeatureServer layer is reachable and responsive.\n\n    Returns JSON: {ok, ms (latency), name, geometry_type, field_count,\n    record_coun"},{"name":"rest_explore","description":"List the layers and tables of an ArcGIS FeatureServer/MapServer root.\n\n    Point at a service root to enumerate its layers/tables, or at a single\n    layer URL "},{"name":"compare_schemas","description":"Compare the field schemas of two ArcGIS FeatureServer layers.\n\n    Returns JSON diff: {added, removed, changed:[{field, diffs}], same,\n    geometry_match, ident"},{"name":"shapefile_to_geojson","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    to a GeoJSON FeatureCollection. Reprojects to WGS84 if a .prj says otherwise.\n\n    "},{"name":"kml_to_geojson","description":"Convert Google Earth / Google My Maps KML (2.0–2.2) to GeoJSON — the\n    common request when someone exported a map from Google Earth or Google\n    My Maps and "},{"name":"gpx_to_geojson","description":"Convert a GPS track/route file (GPX — from Garmin, Strava exports,\n    hiking/cycling apps, waypoints) to GeoJSON (e.g. \"convert my GPS track\n    to GeoJSON\", \""},{"name":"geojson_to_gpx","description":"Convert GeoJSON to a GPX file — e.g. \"export this as a GPS track\",\n    \"GeoJSON to GPX for my Garmin\", \"make waypoints from this GeoJSON\".\n    Points become GPX"},{"name":"flatgeobuf_to_geojson","description":"Convert a FlatGeobuf file (base64-encoded .fgb) to a GeoJSON\n    FeatureCollection. FlatGeobuf is a cloud-native binary format with a\n    built-in spatial index"},{"name":"geojson_to_flatgeobuf","description":"Convert GeoJSON to FlatGeobuf (.fgb) — the cloud-native binary\n    format with a built-in spatial index. FlatGeobuf holds one geometry\n    type per file, so mix"},{"name":"mapinfo_tab_to_geojson","description":"Convert a MapInfo TAB file set (base64-encoded .zip containing\n    .tab + its .dat/.map/.id sidecar files) to a GeoJSON FeatureCollection.\n    MapInfo TAB is th"},{"name":"geojson_to_mapinfo_tab","description":"Convert GeoJSON to a MapInfo TAB file set, ready for MapInfo Pro.\n    TAB is a multi-sidecar-file format (.tab/.dat/.id/.map) and single\n    geometry type per f"},{"name":"query_features","description":"Fetch actual feature records (attributes + geometry) from a FeatureServer layer.\n\n    Free preview capped at 50 records (WHERE filter + chosen fields). Returns "},{"name":"query_statistics","description":"Server-side aggregate stats on a numeric field of a FeatureServer layer.\n\n    No records fetched — AGOL computes sum/avg/min/max/count (also stddev/var).\n    Op"},{"name":"geometry_stats","description":"Compute area (m²/km²), length (m/km), vertex count, centroid and bbox of GeoJSON.\n\n    Metric measurements use an equal-area projection so area/length are real "},{"name":"reproject_geojson","description":"Change a GeoJSON's coordinate reference system (CRS/projection) —\n    e.g. \"reproject to Web Mercator\", \"convert WGS84 to UTM\", \"my\n    coordinates are in the w"},{"name":"simplify_geometry","description":"Reduce the number of vertices in GeoJSON geometry (Douglas-Peucker\n    algorithm) — e.g. \"simplify this polygon\", \"this shape has too many\n    points\", \"reduce "},{"name":"reduce_precision","description":"Round every coordinate to N decimal places to shrink a GeoJSON file's\n    size — e.g. \"my GeoJSON file is too big\", \"reduce coordinate precision\",\n    \"strip ex"},{"name":"csv_to_geojson","description":"Convert a CSV/spreadsheet with lat/lon (or X/Y) columns to GeoJSON —\n    auto-detects the coordinate columns (e.g. \"map this spreadsheet\",\n    \"CSV with lat/lon"},{"name":"geojson_to_kml","description":"Convert GeoJSON to KML for Google Earth / Google My Maps (e.g. \"open\n    this in Google Earth\", \"GeoJSON to KML\", \"make this viewable in Google\n    My Maps\"). R"},{"name":"geojson_to_shapefile","description":"Convert GeoJSON to an Esri Shapefile ZIP — the format ArcGIS Desktop\n    Pro/QGIS/most legacy GIS software still expects (e.g. \"I need a\n    shapefile for ArcGI"},{"name":"gpx_to_kml","description":"Convert a GPS track file (GPX) directly to KML for Google Earth —\n    e.g. \"open my Garmin/Strava track in Google Earth\", \"GPX to KML\"."},{"name":"kml_to_shapefile","description":"Convert a Google Earth/My Maps KML file directly to an Esri Shapefile\n    ZIP — e.g. \"Google Earth file to shapefile for ArcGIS\", \"KML to SHP\".\n    Returns JSON"},{"name":"kml_to_gpx","description":"Convert a Google Earth/My Maps KML file directly to GPX — waypoints\n    from Points, tracks from Lines/Polygons — e.g. \"KML to GPX for my\n    Garmin\", \"load thi"},{"name":"shapefile_to_gpx","description":"Convert a Shapefile ZIP (base64-encoded .zip with .shp/.dbf/.shx[/.prj])\n    directly to GPX — points become waypoints, lines/polygons become tracks\n    (2026-0"},{"name":"gpx_to_shapefile","description":"Convert a GPS track file (GPX) directly to an Esri Shapefile ZIP —\n    waypoints become points, tracks/routes become lines (2026-09-03).\n    Returns JSON: {shap"},{"name":"csv_to_gpx","description":"Convert a CSV with latitude/longitude columns directly to GPX\n    waypoints (2026-09-03) — e.g. \"these coordinates to a GPX for my GPS\".\n    Column names are au"},{"name":"gpx_to_csv","description":"Convert a GPS track file (GPX) directly to CSV (2026-09-03) —\n    waypoints get LATITUDE/LONGITUDE columns, tracks/routes get a\n    GEOMETRY_WKT column instead."},{"name":"wkt_to_geojson","description":"Convert a WKT (Well-Known Text) geometry string — the format\n    PostGIS/SQL geometry columns print by default — to GeoJSON (e.g. \"this\n    came from a PostGIS "},{"name":"geojson_to_wkt","description":"Convert a GeoJSON geometry (or a Feature's geometry) to WKT — the\n    format needed to insert geometry into PostGIS/SQL (e.g. \"I need this\n    for a PostGIS INS"},{"name":"dxf_to_geojson","description":"Convert an AutoCAD DXF file's contents to GeoJSON — e.g. \"convert\n    this DXF to GeoJSON\", \"AutoCAD drawing to GIS format\", \"DXF export from\n    Civil 3D to Ge"},{"name":"geojson_to_dxf","description":"Convert GeoJSON to an AutoCAD DXF file — e.g. \"export this GeoJSON\n    to DXF for AutoCAD\", \"GIS data to CAD format\", \"convert to .dxf for\n    Civil 3D\". Points"},{"name":"list_dxf_layers","description":"List the distinct DXF layer names used in a drawing — e.g. \"what\n    layers does this DXF have\", \"list layers before I extract one\". Real\n    CAD exports organi"},{"name":"georeference_dxf","description":"Reproject a DXF drawn in a local/arbitrary CAD coordinate system\n    into real-world coordinates — e.g. \"this DXF isn't in real coordinates,\n    fix it\", \"geore"},{"name":"dxf_to_pdf_report","description":"PAID (150 credits) — render a DXF drawing to a one-page PDF site-plan\n    report (vector plot + entity-type breakdown + layer list, base64-\n    encoded PDF) — e"},{"name":"grade_service","description":"Grade an ArcGIS FeatureServer layer A–F across 5 categories (schema quality,\n    data completeness, performance, maintenance, configuration).\n\n    Returns JSON:"},{"name":"audit_service","description":"Full one-call QA report of an ArcGIS FeatureServer layer: health (latency,\n    record count, capabilities) + field schema + coded domains + summary counts.\n\n   "},{"name":"find_layer_issues","description":"Scan an ArcGIS FeatureServer layer for common problems: missing ObjectID,\n    disabled query, stale data, all-null fields, features without geometry.\n\n    Sampl"},{"name":"share_map","description":"Publish a GeoJSON FeatureCollection as a live, shareable map page on gisgp.com.\n\n    Returns JSON: {url, expires_at} — url is a public interactive map a human c"},{"name":"embed_map_snippet","description":"Ready-to-paste <iframe> embed code for a live interactive map — thin\n    wrapper around share_map (same live page, same 30-day TTL), for\n    embedding directly "},{"name":"buffer_geojson","description":"Buffer every feature by a distance in METRES (negative shrinks).\n\n    Geodesically accurate at any latitude (each feature is buffered in a local\n    equidistant"},{"name":"dissolve_geojson","description":"Merge overlapping/adjacent geometries into one (optionally grouped by a\n    property field `by` → one dissolved feature per distinct value).\n\n    Returns JSON {"},{"name":"centroids_geojson","description":"Get the center point of each polygon/line feature — e.g. \"find the\n    center of each parcel\", \"convert polygons to points for labeling\",\n    \"centroid of each "},{"name":"convex_hull_geojson","description":"Draw the smallest polygon that wraps around all input features (a\n    convex hull) — e.g. \"draw a boundary around these points\", \"find the\n    outer perimeter o"},{"name":"overlay_geojson","description":"Combine two GeoJSON FeatureCollections with a boolean set operation.\n\n    op: intersection | difference (a minus b) | symmetric_difference | union.\n    Each sid"},{"name":"spatial_join_geojson","description":"Attach properties from every B feature that satisfies a spatial\n    predicate to each A feature (as a `_matches` list).\n\n    predicate: intersects | within | co"},{"name":"nearest_features_geojson","description":"For each feature in A, find the nearest feature in B by centroid-to-\n    centroid geodesic distance. Attaches `_nearest` properties and\n    `_nearest_distance_m"},{"name":"fix_geometry","description":"Repair invalid geometries (self-intersections, bad rings) via GEOS\n    make_valid. Already-valid geometries are left untouched. Returns JSON\n    {ok, fixed_coun"},{"name":"geojson_diff","description":"Compare two GeoJSON FeatureCollections — added/removed/changed features.\n\n    Matched by an `id_field` property if given, else by array position (exact\n    stru"},{"name":"epsg_suggest","description":"Suggest the correct UTM EPSG code to project a WGS84 lon/lat into for\n    accurate metric measurements (buffer/area/distance).\n\n    Returns JSON {ok, epsg, utm_"},{"name":"tile_math","description":"Convert a WGS84 lon/lat + zoom level to Slippy Map (XYZ) tile x/y,\n    that tile's lon/lat bbox, and its Bing quadkey.\n\n    Returns JSON {ok, zoom, x, y, tile_b"},{"name":"envelope_geojson","description":"Get the bounding box (min/max rectangle) around each feature — e.g.\n    \"get the bounding box of this shape\", \"bbox for each feature\",\n    \"rectangular extent o"},{"name":"minimum_rotated_rectangle","description":"Smallest-area rectangle wrapping all input features combined — can be\n    tilted to fit tighter than a straight bounding box (e.g. \"tightest\n    rectangle aroun"},{"name":"voronoi_geojson","description":"Divide space into regions closest to each input point (Voronoi\n    diagram) — e.g. \"find the service area for each location\", \"which\n    points are closest to w"},{"name":"full_service_audit","description":"Complete one-call QA report: A-F grade + full audit (health/fields/\n    domains/summary) + issue scan, merged into one response — replaces 3\n    separate calls "},{"name":"geometry_health_report","description":"Complete one-call GeoJSON health check: validate + auto-repair invalid\n    geometry + stats (area/length/vertices) + bbox envelope, merged — replaces\n    4 sepa"},{"name":"get_terrain_profile","description":"Get the ground elevation (metres above sea level) at a coordinate —\n    e.g. \"what's the elevation here\", \"is this point in a flood-risk\n    lowland\", \"elevatio"},{"name":"get_climate_history","description":"Daily historical weather for a point/date range via Open-Meteo's\n    ERA5-based archive (no key, free, data back to 1940). Dates are\n    YYYY-MM-DD. Returns JSO"},{"name":"classify_land_cover","description":"Land cover class at a WGS84 point via ESA CCI Land Cover 2018 (ArcGIS\n    Living Atlas ImageServer, no key, 300m resolution). Returns JSON:\n    {ok, class_code,"},{"name":"analyze_location","description":"Reverse-geocode a WGS84 point to country/region/locality via OSM\n    Nominatim (no key, free — fair-use rate limited, best-effort). Returns\n    JSON: {ok, displ"},{"name":"geocode_address","description":"Forward-geocode a free-text address to lon/lat. Default: OSM Nominatim\n    (no key, free, fair-use rate limited) — the complement to\n    analyze_location's reve"},{"name":"offset_coordinates","description":"Move a WGS84 point by a geodesic distance (metres) along a compass\n    bearing (0=N, 90=E, 180=S, 270=W). Pure computation, no external API.\n    Returns JSON: {"},{"name":"detect_coordinate_order","description":"Detect whether [x, y] pairs are [lon, lat] or [lat, lon] — resolves\n    a genuinely common real-world confusion (one of the most-viewed GIS\n    StackExchange qu"},{"name":"guess_crs_from_coordinates","description":"Best-guess candidate CRS for raw [x, y] coordinates with no metadata\n    (e.g. a shapefile with a missing .prj) — real demand signal (79k+ views\n    on GIS Stac"},{"name":"parse_coordinate","description":"Parse ANY single coordinate string a human might paste into WGS84\n    lat/lon — decimal degrees with any separator or an EU decimal comma,\n    DMS (42°41'51.7\"N"},{"name":"format_coordinate","description":"Express one WGS84 point in every common notation at once: decimal\n    degrees, DMS, DDM, UTM (zone/band/easting/northing), MGRS and USNG,\n    British National G"},{"name":"generate_static_map_image","description":"Render a GeoJSON FeatureCollection/Feature to a static PNG map image\n    (base64 data URL) — for embedding in reports/emails/documents, unlike\n    share_map's i"},{"name":"assess_grid_exposure","description":"Electric grid infrastructure proximity at a US point: nearby\n    substations + transmission lines within 10 miles (community ArcGIS\n    mirror of HIFLD data — p"},{"name":"assess_renewable_site","description":"One-call solar/wind site-scouting indicator: terrain + land cover +\n    1-year solar/wind climate averages + grid proximity, combined from\n    GISGP's existing "},{"name":"assess_pipeline_proximity","description":"Natural gas interstate/intrastate transmission pipeline proximity at\n    a US point (EIA/HIFLD, 32,892 segments). Substitute for proprietary\n    local-utility \""},{"name":"assess_protected_area_proximity","description":"US protected/conservation area proximity via USGS PAD-US (public\n    domain, commercial-use OK — unlike Protected Planet/WDPA, whose API\n    explicitly forbids "},{"name":"get_river_flow_status","description":"Nearest USGS real-time stream/river gauge to a point (US rivers and\n    streams only): live streamflow (ft3/s) and gauge height (ft), reported\n    honestly as p"},{"name":"discover_open_geodata","description":"Keyword search across ArcGIS Hub Open Data — real public\n    FeatureServer/MapServer datasets from government/organization ArcGIS\n    Online portals worldwide. "},{"name":"assess_ev_charging_site","description":"One-call EV charging site-scouting indicator: grid proximity (power\n    for fast-charging) + land cover + locality context, combined from\n    GISGP's existing f"},{"name":"assess_telecom_site","description":"One-call cell tower site-scouting indicator: grid proximity + terrain\n    elevation (line-of-sight proxy) + land cover, combined from GISGP's\n    existing free "},{"name":"rank_renewable_sites","description":"Bulk solar/wind site screener — evaluates up to 25 candidate points\n    (each {\"lon\": ..., \"lat\": ...}) and returns only the top_n, ranked by\n    average daily "},{"name":"assess_wildfire_risk","description":"Real-time active wildfire proximity at a point via NASA FIRMS\n    (VIIRS satellite hotspot detections, last 2 days) + electric grid\n    exposure (transmission l"},{"name":"calculate_route","description":"Real driving distance + duration between two points. Default: OSRM\n    (public demo instance, no key — fair-use limited, not a production SLA).\n    Optional ago"},{"name":"estimate_cost","description":"FREE — quote a paid tool's cost WITHOUT executing it or charging the\n    wallet (call this before assess_property_hazard etc.).\n    `units` = candidate/item cou"},{"name":"check_wallet_balance","description":"FREE — check your own MCP credits wallet balance (the same account\n    paid tools like assess_property_hazard charge against). Requires\n    Authorization: Beare"},{"name":"assess_property_hazard","description":"PAID (200 credits) — multi-source US property hazard indicator: USGS\n    seismic risk (required), plus best-effort FEMA disaster declaration\n    history (state,"},{"name":"rank_hazard_safe_sites","description":"PAID (200 credits PER CANDIDATE, max 25 candidates/call) — bulk seismic-\n    risk screener. Runs assess_property_hazard's seismic check under the hood\n    for e"},{"name":"assess_portfolio_climate_disclosure","description":"PAID (200 credits PER PROPERTY, max 25 properties/call) — bulk physical\n    climate-risk disclosure input for a real-estate/asset portfolio (SEC\n    climate dis"},{"name":"assess_supply_chain_redundancy","description":"PAID (400 credits) — checks whether two supposedly-redundant sites\n    (e.g. two \"backup\" suppliers/warehouses/data centers) are actually\n    independent: real "},{"name":"assess_energy_community_credit","description":"PAID (100 credits) — US Inflation Reduction Act \"energy community\"\n    bonus tax credit qualification lookup for a renewable energy project\n    site. Checks bot"},{"name":"assess_datacenter_site","description":"PAID (300 credits) — data center site-scouting composite: grid\n    proximity (power availability), multi-source hazard (seismic + FEMA +\n    NOAA, required — sa"},{"name":"assess_reforestation_site","description":"PAID (100 credits) — reforestation/afforestation site-scouting\n    composite: terrain, land cover (flags already-forested/urban/water/snow\n    as unsuitable), a"},{"name":"get_elevation_profile","description":"PAID (50 credits) — elevation PROFILE along a line, not a single point:\n    pass points=[[lon,lat],…] (up to 100) or start=[lon,lat] + end=[lon,lat]\n    with sa"},{"name":"discover_open_geodata_pro","description":"PAID (30 credits) — open-data discovery with the metadata an agent\n    needs BEFORE querying: up to 50 ArcGIS Hub results (free tool: 10) and,\n    for the top 2"},{"name":"assess_airspace_obstruction_proximity","description":"PAID (100 credits) — nearby FAA-registered vertical obstructions\n    (towers, stacks, wind turbines) at a US point, for telecom/tower-siting\n    due diligence ("},{"name":"assess_site_due_diligence","description":"PAID (300 credits) — master due-diligence report for a point: wraps\n    assess_property_hazard (seismic + FEMA + NOAA, required) plus grid\n    proximity, land c"},{"name":"export_geojson_to_pdf","description":"PAID (150 credits) — render an ad-hoc GeoJSON FeatureCollection to a\n    one-page PDF report (static map + property table, base64-encoded PDF).\n    Separate fro"},{"name":"export_geojson_to_excel","description":"PAID (80 credits) — convert a GeoJSON FeatureCollection to an Excel\n    workbook (.xlsx, base64-encoded). Point geometries get LATITUDE/LONGITUDE\n    columns; o"},{"name":"bundle_migrate_convert","description":"PAID (40 credits) — one-call file migration: convert a raw file to\n    GeoJSON, then optionally reproject and simplify, then round coordinates.\n    Replaces 2-4"},{"name":"bundle_export_fixed","description":"PAID (150 credits) — fetch ALL records from a live FeatureServer layer\n    (no 50-record preview cap), auto-repair invalid geometries (GEOS\n    make_valid), and"}],"package":null,"toolSurface":{"id":"ts_xzr7rezuu8t9","endpointId":"ep_pandpthrwqhj","hash":"8f7a5f948d916545bc96d2e3ded53b1347d1b4f2293558042d878fe5aeca5205","toolCount":106,"serverName":"GISGP","serverVersion":"1.28.1","protocolVersion":"2025-06-18","firstSeenAt":"2026-09-23T23:24:20.228Z","lastSeenAt":"2026-10-10T16:32:43.580Z","observations":62,"toolNames":["convert_coordinates","validate_geojson","geojson_to_csv","count_features","extract_domains","check_field_types","check_service_health","rest_explore","compare_schemas","shapefile_to_geojson","kml_to_geojson","gpx_to_geojson","geojson_to_gpx","flatgeobuf_to_geojson","geojson_to_flatgeobuf","mapinfo_tab_to_geojson","geojson_to_mapinfo_tab","query_features","query_statistics","geometry_stats","reproject_geojson","simplify_geometry","reduce_precision","csv_to_geojson","geojson_to_kml","geojson_to_shapefile","gpx_to_kml","kml_to_shapefile","kml_to_gpx","shapefile_to_gpx","gpx_to_shapefile","csv_to_gpx","gpx_to_csv","wkt_to_geojson","geojson_to_wkt","dxf_to_geojson","geojson_to_dxf","list_dxf_layers","georeference_dxf","dxf_to_pdf_report","grade_service","audit_service","find_layer_issues","share_map","embed_map_snippet","buffer_geojson","dissolve_geojson","centroids_geojson","convex_hull_geojson","overlay_geojson","spatial_join_geojson","nearest_features_geojson","fix_geometry","geojson_diff","epsg_suggest","tile_math","envelope_geojson","minimum_rotated_rectangle","voronoi_geojson","full_service_audit","geometry_health_report","get_terrain_profile","get_climate_history","classify_land_cover","analyze_location","geocode_address","offset_coordinates","detect_coordinate_order","guess_crs_from_coordinates","parse_coordinate","format_coordinate","generate_static_map_image","assess_grid_exposure","assess_renewable_site","assess_pipeline_proximity","assess_protected_area_proximity","get_river_flow_status","discover_open_geodata","assess_ev_charging_site","assess_telecom_site","rank_renewable_sites","assess_wildfire_risk","calculate_route","estimate_cost","check_wallet_balance","assess_property_hazard","rank_hazard_safe_sites","assess_portfolio_climate_disclosure","assess_supply_chain_redundancy","assess_energy_community_credit","assess_datacenter_site","assess_reforestation_site","get_elevation_profile","discover_open_geodata_pro","assess_airspace_obstruction_proximity","assess_site_due_diligence","export_geojson_to_pdf","export_geojson_to_excel","bundle_migrate_convert","bundle_export_fixed","bundle_export_multi_format","bundle_migration_readiness","bundle_geocode_enrich","bundle_create_export_schedule","cancel_export_schedule","assess_property_hazard_x402"],"distinctSurfaces":5},"endpointFacts":[{"id":"ep_pandpthrwqhj","url":"https://gisgp.com/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-09T13:29:40.088Z","auth":{"observedAt":"2026-10-09T13:29:40.175Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-09T13:29:40.198Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"gisgp.com","issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validFrom":"2026-09-26T19:22:04.000Z","validTo":"2026-12-25T20:21:49.000Z","daysToExpiry":76,"sanCount":2,"fingerprint256":"27:A7:12:0E:60:1E:67:4B:9B:A0:24:A8:2E:43:CA:1B:0D:1E:51:86:C8:28:DF:F6:BC:5A:92:1D:EC:E1:EC:4E"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.uponex/gisgp","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.uponex%2Fgisgp","firstSeenAt":"2026-09-07T05:18:18.661Z","fetchedAt":"2026-10-08T13:18:30.788Z","normalizedAt":"2026-10-08T13:18:30.788Z"}]},"firstSeenAt":"2026-09-07T05:18:18.661Z","updatedAt":"2026-10-10T16:34:53.622Z"}