Koskamo

GeoSpark MCP

GeoSpark is a verifiable spatial reasoning MCP server that provides tools for computing geodesic distances, topology, isochrones, geocoding, elevation, weather, and site selection. It returns structured results with provenance, sources, and licenses, supporting both hosted and local deployment for AI agents.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

GeoSpark MCP logo, by TerrascoutCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Terrascout
MCP endpoint (Streamable HTTP)
https://geospark.terrascout.app/mcp
Vendor documentation

What you can do with it

  • Compute geodesic distances between coordinates or place names
  • Generate isochrones and travel time matrices for site selection
  • Geocode addresses and retrieve elevation or weather data
  • Check spatial relationships and perform geometric operations

Source and maintenance

Community listingRegistry 0.8.0
Maintenance checked

Protocol and capabilities

Server
geospark 0.10.0
MCP protocol
2025-06-18
Tools
21 advertised
Resources
0 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

GeoSpark computes spatial answers instead of guessing them. Use it for distances, containment and other topology, buffers and areas, geocoding, elevation, routing, weather, air quality, active fires, location reports, site selection, official datum and height conversions, sun position and shadows, and terrain horizons and lines of sight. - For datum shifts (GDA94/GDA2020, OSGB36, NAD27/NAD83) and heights (AHD, ODN, NZVD2016, NAVD88), call transform_coordinates / convert_height: they use the national grids. Don't estimate them. - For the Sun (elevation, azimuth, sunrise, shadow length) call sun_position / sun_times; for what hills block (horizon, solar access, can A see B, radio Fresnel clearance) call terrain_horizon / line_of_sight. They compute from the DEM; don't estimate from memory. - Coordinates are GeoJSON order: [longitude, latitude], WGS84. - For distances between named places, give calculate_distance the names (place_a, place_b): the server geocodes them. Never type coordinates for a place from memory. - Every result carries provenance (source, licence, attribution) and units; cite the attribution when you present data from OpenStreetMap, Copernicus, Open-Meteo etc. - Read `warnings` (e.g. an ambiguous place name) before answering. - A tool error means GeoSpark could not answer reliably (invalid geometry, unknown place, a data source down): tell the user why instead of estimating.

Tools

21 advertised

calculate_distance — Geodesic distance
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Exact geodesic distance between two places or geometries on the WGS84 ellipsoid. Use for any "how far" question instead of estimating. For NAMED places pass place_a and place_b; the server geocodes them, so never type coordinates for a place yourself. Use point_a/point_b only for coordinates the user gave or another tool returned. For lines and polygons the distance is between their nearest points. Returns metres and kilometres.

calculate_distance input schema
{
  "type": "object",
  "title": "calculate_distanceArguments",
  "properties": {
    "place_a": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "null"
        }
      ],
      "title": "Place A",
      "default": null,
      "description": "A place NAME, e.g. 'Adelaide Oval'; geocoded on the server (preferred)"
    },
    "place_b": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "null"
        }
      ],
      "title": "Place B",
      "default": null,
      "description": "A place NAME, e.g. 'Adelaide Oval'; geocoded on the server (preferred)"
    },
    "point_a": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ],
      "title": "Point A",
      "default": null,
      "description": "A GeoJSON geometry, e.g. {\"type\": \"Point\", \"coordinates\": [lon, lat]}; only for coordinates the user gave or a tool returned"
    },
    "point_b": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ],
      "title": "Point B",
      "default": null,
      "description": "A GeoJSON geometry, e.g. {\"type\": \"Point\", \"coordinates\": [lon, lat]}; only for coordinates the user gave or a tool returned"
    }
  }
}
calculate_distance output schema
{
  "type": "object",
  "title": "DistanceResult",
  "required": [
    "distance_m",
    "distance_km"
  ],
  "properties": {
    "units": {
      "type": "object",
      "title": "Units",
      "description": "Unit of each numeric field",
      "additionalProperties": {
        "type": "string"
      }
    },
    "places": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Places",
      "description": "Named places as geocoded on the server: query, display_name, coordinates [lon, lat]"
    },
    "status": {
      "enum": [
        "ok",
        "partial",
        "cannot_answer"
      ],
      "type": "string",
      "title": "Status",
      "default": "ok"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Warnings",
      "description": "Caveats to tell the user"
    },
    "distance_m": {
      "type": "number",
      "title": "Distance M",
      "description": "Geodesic distance in metres (WGS84 ellipsoid)"
    },
    "provenance": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Provenance",
      "description": "Source, licence, attribution, retrieval time and method"
    },
    "distance_km": {
      "type": "number",
      "title": "Distance Km"
    }
  }
}
calculate_distance annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
check_spatial_relationship — Topological relationship
Advertised by the server during the last successful anonymous check.
Advertised read-only

Ground-truth topology: does geometry_a <relationship> geometry_b? Use instead of guessing containment, overlap or adjacency. Invalid geometries (for example self-intersecting polygons) are refused with the reason.

check_spatial_relationship input schema
{
  "type": "object",
  "title": "check_spatial_relationshipArguments",
  "required": [
    "geometry_a",
    "geometry_b",
    "relationship"
  ],
  "properties": {
    "geometry_a": {
      "type": "object",
      "title": "Geometry A",
      "description": "A GeoJSON geometry, e.g. {\"type\": \"Point\", \"coordinates\": [lon, lat]}",
      "additionalProperties": true
    },
    "geometry_b": {
      "type": "object",
      "title": "Geometry B",
      "description": "A GeoJSON geometry, e.g. {\"type\": \"Point\", \"coordinates\": [lon, lat]}",
      "additionalProperties": true
    },
    "relationship": {
      "enum": [
        "contains",
        "intersects",
        "within",
        "touches",
        "crosses",
        "overlaps",
        "disjoint"
      ],
      "type": "string",
      "title": "Relationship"
    }
  }
}
check_spatial_relationship output schema
{
  "type": "object",
  "title": "RelationshipResult",
  "required": [
    "relationship",
    "holds"
  ],
  "properties": {
    "holds": {
      "type": "boolean",
      "title": "Holds",
      "description": "Whether geometry_a <relationship> geometry_b is true"
    },
    "units": {
      "type": "object",
      "title": "Units",
      "description": "Unit of each numeric field",
      "additionalProperties": {
        "type": "string"
      }
    },
    "status": {
      "enum": [
        "ok",
        "partial",
        "cannot_answer"
      ],
      "type": "string",
      "title": "Status",
      "default": "ok"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Warnings",
      "description": "Caveats to tell the user"
    },
    "provenance": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Provenance",
      "description": "Source, licence, attribution, retrieval time and method"
    },
    "relationship": {
      "type": "string",
      "title": "Relationship"
    }
  }
}
check_spatial_relationship annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
spatial_operation — Geometry operation
Advertised by the server during the last successful anonymous check.
Advertised read-only

Compute a buffer (shape-preserving, metres), geodesic area or length, centroid or convex hull. Returns the resulting geometry as GeoJSON with its measurements and units.

spatial_operation input schema
{
  "type": "object",
  "title": "spatial_operationArguments",
  "required": [
    "operation",
    "geometry"
  ],
  "properties": {
    "geometry": {
      "type": "object",
      "title": "Geometry",
      "description": "A GeoJSON geometry, e.g. {\"type\": \"Point\", \"coordinates\": [lon, lat]}",
      "additionalProperties": true
    },
    "radius_m": {
      "anyOf": [
        {
          "type": "number",
          "maximum": 100000,
          "minimum": 0
        },
        {
          "type": "null"
        }
      ],
      "title": "Radius M",
      "default": null,
      "description": "Buffer radius in metres"
    },
    "operation": {
      "enum": [
        "buffer",
        "area",
        "length",
        "centroid",
        "convex_hull"
      ],
      "type": "string",
      "title": "Operation"
    }
  }
}
spatial_operation output schema
{
  "type": "object",
  "title": "FeatureCollection",
  "required": [
    "features"
  ],
  "properties": {
    "bbox": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        {
          "type": "null"
        }
      ],
      "title": "Bbox",
      "default": null
    },
    "type": {
      "type": "string",
      "const": "FeatureCollection",
      "title": "Type",
      "default": "FeatureCollection"
    },
    "features": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Features"
    },
    "geospark": {
      "type": "object",
      "title": "Geospark",
      "additionalProperties": true
    }
  },
  "description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance."
}
spatial_operation annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
geocode — Geocode a place
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Find coordinates for an address or place name (OpenStreetMap Nominatim). Check `geospark.warnings` for ambiguous names (e.g. "Springfield") and ask the user which one they mean, or add a region.

geocode input schema
{
  "type": "object",
  "title": "geocodeArguments",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "title": "Limit",
      "default": 5,
      "maximum": 10,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "title": "Query",
      "maxLength": 500,
      "minLength": 1,
      "description": "Address or place name"
    }
  }
}
geocode output schema
{
  "type": "object",
  "title": "FeatureCollection",
  "required": [
    "features"
  ],
  "properties": {
    "bbox": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        {
          "type": "null"
        }
      ],
      "title": "Bbox",
      "default": null
    },
    "type": {
      "type": "string",
      "const": "FeatureCollection",
      "title": "Type",
      "default": "FeatureCollection"
    },
    "features": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Features"
    },
    "geospark": {
      "type": "object",
      "title": "Geospark",
      "additionalProperties": true
    }
  },
  "description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance."
}
geocode annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
reverse_geocode — Reverse geocode
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Find the address or place at a coordinate (OpenStreetMap Nominatim).

reverse_geocode input schema
{
  "type": "object",
  "title": "reverse_geocodeArguments",
  "required": [
    "latitude",
    "longitude"
  ],
  "properties": {
    "latitude": {
      "type": "number",
      "title": "Latitude",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in degrees (WGS84)"
    },
    "longitude": {
      "type": "number",
      "title": "Longitude",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in degrees (WGS84)"
    }
  }
}
reverse_geocode output schema
{
  "type": "object",
  "title": "FeatureCollection",
  "required": [
    "features"
  ],
  "properties": {
    "bbox": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        {
          "type": "null"
        }
      ],
      "title": "Bbox",
      "default": null
    },
    "type": {
      "type": "string",
      "const": "FeatureCollection",
      "title": "Type",
      "default": "FeatureCollection"
    },
    "features": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Features"
    },
    "geospark": {
      "type": "object",
      "title": "Geospark",
      "additionalProperties": true
    }
  },
  "description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance."
}
reverse_geocode annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_elevation — Elevation
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Ground elevation in metres (Copernicus GLO-30, Open Elevation fallback), with its vertical datum and accuracy.

get_elevation input schema
{
  "type": "object",
  "title": "get_elevationArguments",
  "required": [
    "latitude",
    "longitude"
  ],
  "properties": {
    "latitude": {
      "type": "number",
      "title": "Latitude",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in degrees (WGS84)"
    },
    "longitude": {
      "type": "number",
      "title": "Longitude",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in degrees (WGS84)"
    }
  }
}
get_elevation output schema
{
  "type": "object",
  "title": "ElevationResult",
  "required": [
    "latitude",
    "longitude",
    "elevation_m"
  ],
  "properties": {
    "units": {
      "type": "object",
      "title": "Units",
      "description": "Unit of each numeric field",
      "additionalProperties": {
        "type": "string"
      }
    },
    "status": {
      "enum": [
        "ok",
        "partial",
        "cannot_answer"
      ],
      "type": "string",
      "title": "Status",
      "default": "ok"
    },
    "quality": {
      "type": "object",
      "title": "Quality",
      "description": "e.g. vertical_accuracy_le90_m",
      "additionalProperties": true
    },
    "latitude": {
      "type": "number",
      "title": "Latitude"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Warnings",
      "description": "Caveats to tell the user"
    },
    "longitude": {
      "type": "number",
      "title": "Longitude"
    },
    "provenance": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Provenance",
      "description": "Source, licence, attribution, retrieval time and method"
    },
    "attribution": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Attribution",
      "default": null
    },
    "elevation_m": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Elevation M"
    },
    "vertical_datum": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Vertical Datum",
      "default": null
    }
  }
}
get_elevation annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
route — Driving route
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Driving route between two points (OSRM over OpenStreetMap): line geometry, distance in metres and duration in seconds.

route input schema
{
  "type": "object",
  "title": "routeArguments",
  "required": [
    "from_latitude",
    "from_longitude",
    "to_latitude",
    "to_longitude"
  ],
  "properties": {
    "to_latitude": {
      "type": "number",
      "title": "To Latitude",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in degrees (WGS84)"
    },
    "to_longitude": {
      "type": "number",
      "title": "To Longitude",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in degrees (WGS84)"
    },
    "from_latitude": {
      "type": "number",
      "title": "From Latitude",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in degrees (WGS84)"
    },
    "from_longitude": {
      "type": "number",
      "title": "From Longitude",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in degrees (WGS84)"
    }
  }
}
route output schema
{
  "type": "object",
  "title": "FeatureCollection",
  "required": [
    "features"
  ],
  "properties": {
    "bbox": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        {
          "type": "null"
        }
      ],
      "title": "Bbox",
      "default": null
    },
    "type": {
      "type": "string",
      "const": "FeatureCollection",
      "title": "Type",
      "default": "FeatureCollection"
    },
    "features": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Features"
    },
    "geospark": {
      "type": "object",
      "title": "Geospark",
      "additionalProperties": true
    }
  },
  "description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance."
}
route annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_weather — Weather
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Current weather and a daily forecast for a point (Open-Meteo, no key needed).

get_weather input schema
{
  "type": "object",
  "title": "get_weatherArguments",
  "required": [
    "latitude",
    "longitude"
  ],
  "properties": {
    "latitude": {
      "type": "number",
      "title": "Latitude",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in degrees (WGS84)"
    },
    "longitude": {
      "type": "number",
      "title": "Longitude",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in degrees (WGS84)"
    },
    "forecast_days": {
      "type": "integer",
      "title": "Forecast Days",
      "default": 3,
      "maximum": 16,
      "minimum": 1
    }
  }
}
get_weather output schema
{
  "type": "object",
  "title": "DataResult",
  "required": [
    "channel",
    "features"
  ],
  "properties": {
    "query": {
      "type": "object",
      "title": "Query",
      "additionalProperties": true
    },
    "units": {
      "type": "object",
      "title": "Units",
      "description": "Unit of each numeric field",
      "additionalProperties": {
        "type": "string"
      }
    },
    "status": {
      "enum": [
        "ok",
        "partial",
        "cannot_answer"
      ],
      "type": "string",
      "title": "Status",
      "default": "ok"
    },
    "channel": {
      "type": "string",
      "title": "Channel"
    },
    "features": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Features",
      "description": "Records from the data source"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Warnings",
      "description": "Caveats to tell the user"
    },
    "provenance": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Provenance",
      "description": "Source, licence, attribution, retrieval time and method"
    },
    "total_results": {
      "type": "integer",
      "title": "Total Results",
      "default": 0
    }
  }
}
get_weather annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_air_quality — Air quality
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Latest PM2.5, NO2, O3 from the nearest monitoring stations (OpenAQ; the server needs an OPENAQ_API_KEY), with each station's data licence.

get_air_quality input schema
{
  "type": "object",
  "title": "get_air_qualityArguments",
  "required": [
    "latitude",
    "longitude"
  ],
  "properties": {
    "latitude": {
      "type": "number",
      "title": "Latitude",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in degrees (WGS84)"
    },
    "longitude": {
      "type": "number",
      "title": "Longitude",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in degrees (WGS84)"
    }
  }
}
get_air_quality output schema
{
  "type": "object",
  "title": "DataResult",
  "required": [
    "channel",
    "features"
  ],
  "properties": {
    "query": {
      "type": "object",
      "title": "Query",
      "additionalProperties": true
    },
    "units": {
      "type": "object",
      "title": "Units",
      "description": "Unit of each numeric field",
      "additionalProperties": {
        "type": "string"
      }
    },
    "status": {
      "enum": [
        "ok",
        "partial",
        "cannot_answer"
      ],
      "type": "string",
      "title": "Status",
      "default": "ok"
    },
    "channel": {
      "type": "string",
      "title": "Channel"
    },
    "features": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Features",
      "description": "Records from the data source"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Warnings",
      "description": "Caveats to tell the user"
    },
    "provenance": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Provenance",
      "description": "Source, licence, attribution, retrieval time and method"
    },
    "total_results": {
      "type": "integer",
      "title": "Total Results",
      "default": 0
    }
  }
}
get_air_quality annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_active_fires — Active fires
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Satellite active-fire detections near a point (NASA FIRMS; the server needs a FIRMS_MAP_KEY).

get_active_fires input schema
{
  "type": "object",
  "title": "get_active_firesArguments",
  "required": [
    "latitude",
    "longitude"
  ],
  "properties": {
    "days": {
      "type": "integer",
      "title": "Days",
      "default": 1,
      "maximum": 2,
      "minimum": 1
    },
    "latitude": {
      "type": "number",
      "title": "Latitude",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in degrees (WGS84)"
    },
    "longitude": {
      "type": "number",
      "title": "Longitude",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in degrees (WGS84)"
    }
  }
}
get_active_fires output schema
{
  "type": "object",
  "title": "DataResult",
  "required": [
    "channel",
    "features"
  ],
  "properties": {
    "query": {
      "type": "object",
      "title": "Query",
      "additionalProperties": true
    },
    "units": {
      "type": "object",
      "title": "Units",
      "description": "Unit of each numeric field",
      "additionalProperties": {
        "type": "string"
      }
    },
    "status": {
      "enum": [
        "ok",
        "partial",
        "cannot_answer"
      ],
      "type": "string",
      "title": "Status",
      "default": "ok"
    },
    "channel": {
      "type": "string",
      "title": "Channel"
    },
    "features": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Features",
      "description": "Records from the data source"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Warnings",
      "description": "Caveats to tell the user"
    },
    "provenance": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Provenance",
      "description": "Source, licence, attribution, retrieval time and method"
    },
    "total_results": {
      "type": "integer",
      "title": "Total Results",
      "default": 0
    }
  }
}
get_active_fires annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
isochrone — Isochrone (reachable area)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Where can you get to from a point within N minutes on foot, by bike or by car? Returns one polygon per contour with its geodesic area (Valhalla over OpenStreetMap).

isochrone input schema
{
  "type": "object",
  "title": "isochroneArguments",
  "required": [
    "latitude",
    "longitude"
  ],
  "properties": {
    "mode": {
      "enum": [
        "walk",
        "bike",
        "drive"
      ],
      "type": "string",
      "title": "Mode",
      "default": "walk"
    },
    "minutes": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "title": "Minutes",
      "default": [
        10
      ],
      "maxItems": 4,
      "minItems": 1,
      "description": "Contour times, 1-60"
    },
    "latitude": {
      "type": "number",
      "title": "Latitude",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in degrees (WGS84)"
    },
    "longitude": {
      "type": "number",
      "title": "Longitude",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in degrees (WGS84)"
    }
  }
}
isochrone output schema
{
  "type": "object",
  "title": "FeatureCollection",
  "required": [
    "features"
  ],
  "properties": {
    "bbox": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        {
          "type": "null"
        }
      ],
      "title": "Bbox",
      "default": null
    },
    "type": {
      "type": "string",
      "const": "FeatureCollection",
      "title": "Type",
      "default": "FeatureCollection"
    },
    "features": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Features"
    },
    "geospark": {
      "type": "object",
      "title": "Geospark",
      "additionalProperties": true
    }
  },
  "description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance."
}
isochrone annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
travel_time_matrix — Travel-time matrix
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Network travel time (minutes) and distance (metres) from each origin to each destination. Note: points here are [latitude, longitude] pairs.

travel_time_matrix input schema
{
  "type": "object",
  "title": "travel_time_matrixArguments",
  "required": [
    "origins",
    "destinations"
  ],
  "properties": {
    "mode": {
      "enum": [
        "walk",
        "bike",
        "drive"
      ],
      "type": "string",
      "title": "Mode",
      "default": "walk"
    },
    "origins": {
      "type": "array",
      "items": {
        "type": "array",
        "maxItems": 2,
        "minItems": 2,
        "prefixItems": [
          {
            "type": "number"
          },
          {
            "type": "number"
          }
        ]
      },
      "title": "Origins",
      "maxItems": 5,
      "minItems": 1,
      "description": "[[lat, lon], ...]"
    },
    "destinations": {
      "type": "array",
      "items": {
        "type": "array",
        "maxItems": 2,
        "minItems": 2,
        "prefixItems": [
          {
            "type": "number"
          },
          {
            "type": "number"
          }
        ]
      },
      "title": "Destinations",
      "maxItems": 5,
      "minItems": 1,
      "description": "[[lat, lon], ...]"
    }
  }
}
travel_time_matrix output schema
{
  "type": "object",
  "title": "FeatureCollection",
  "required": [
    "features"
  ],
  "properties": {
    "bbox": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        {
          "type": "null"
        }
      ],
      "title": "Bbox",
      "default": null
    },
    "type": {
      "type": "string",
      "const": "FeatureCollection",
      "title": "Type",
      "default": "FeatureCollection"
    },
    "features": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Features"
    },
    "geospark": {
      "type": "object",
      "title": "Geospark",
      "additionalProperties": true
    }
  },
  "description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance."
}
travel_time_matrix annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
overture_features — Overture Maps features
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Open global map data from Overture Maps, no API key: points of interest (with categories), building footprints (height, floors, geodesic footprint area), road and path segments (geodesic length), or `divisions`, the administrative areas containing the point (country, region, city, neighbourhood). Results are nearest first, with distances in metres. Can take 5-20 s on a cold cache.

overture_features input schema
{
  "type": "object",
  "title": "overture_featuresArguments",
  "required": [
    "theme",
    "latitude",
    "longitude"
  ],
  "properties": {
    "limit": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 2000,
          "minimum": 1
        },
        {
          "type": "null"
        }
      ],
      "title": "Limit",
      "default": null
    },
    "theme": {
      "enum": [
        "places",
        "buildings",
        "transportation",
        "divisions"
      ],
      "type": "string",
      "title": "Theme"
    },
    "category": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 100
        },
        {
          "type": "null"
        }
      ],
      "title": "Category",
      "default": null,
      "description": "Places only, e.g. 'cafe'"
    },
    "latitude": {
      "type": "number",
      "title": "Latitude",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in degrees (WGS84)"
    },
    "radius_m": {
      "type": "number",
      "title": "Radius M",
      "default": 300,
      "maximum": 2000,
      "description": "Search radius in metres",
      "exclusiveMinimum": 0
    },
    "longitude": {
      "type": "number",
      "title": "Longitude",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in degrees (WGS84)"
    }
  }
}
overture_features output schema
{
  "type": "object",
  "title": "FeatureCollection",
  "required": [
    "features"
  ],
  "properties": {
    "bbox": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        {
          "type": "null"
        }
      ],
      "title": "Bbox",
      "default": null
    },
    "type": {
      "type": "string",
      "const": "FeatureCollection",
      "title": "Type",
      "default": "FeatureCollection"
    },
    "features": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Features"
    },
    "geospark": {
      "type": "object",
      "title": "Geospark",
      "additionalProperties": true
    }
  },
  "description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance."
}
overture_features annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
transform_coordinates — Transform coordinates (official datums)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Convert coordinates between CRSs as the official transformation does: GDA94 to GDA2020, MGA zones, British National Grid (OSTN15), NAD27 to NAD83 (NADCON), ITRF at an epoch, and any other EPSG pair. Uses national grids (downloaded once), refuses PROJ's ballpark approximations, and returns the operation and its stated accuracy. Use this instead of applying datum parameters yourself.

transform_coordinates input schema
{
  "type": "object",
  "title": "transform_coordinatesArguments",
  "required": [
    "source_crs",
    "target_crs",
    "coordinates"
  ],
  "properties": {
    "epoch": {
      "anyOf": [
        {
          "type": "number",
          "maximum": 2100,
          "minimum": 1900
        },
        {
          "type": "null"
        }
      ],
      "title": "Epoch",
      "default": null,
      "description": "Decimal year, for ITRF/ATRF frames"
    },
    "source_crs": {
      "type": "string",
      "title": "Source Crs",
      "maxLength": 100,
      "description": "CRS name or EPSG code, e.g. 'GDA94 / MGA zone 55' or EPSG:28355"
    },
    "target_crs": {
      "type": "string",
      "title": "Target Crs",
      "maxLength": 100,
      "description": "CRS name or EPSG code, e.g. 'GDA2020 / MGA zone 55' or EPSG:7855"
    },
    "coordinates": {
      "type": "array",
      "items": {
        "type": "array",
        "items": {
          "type": "number"
        }
      },
      "title": "Coordinates",
      "maxItems": 1000,
      "minItems": 1,
      "description": "[x, y] or [x, y, z]: [lon, lat] or [easting, northing]"
    }
  }
}
transform_coordinates output schema
{
  "type": "object",
  "title": "TransformResult",
  "required": [
    "coordinates",
    "source_crs",
    "target_crs",
    "method",
    "accuracy_m"
  ],
  "properties": {
    "grids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Grids",
      "description": "Official grid files the operation used"
    },
    "units": {
      "type": "object",
      "title": "Units",
      "description": "Unit of each numeric field",
      "additionalProperties": {
        "type": "string"
      }
    },
    "method": {
      "type": "string",
      "title": "Method",
      "description": "The EPSG operation used"
    },
    "status": {
      "enum": [
        "ok",
        "partial",
        "cannot_answer"
      ],
      "type": "string",
      "title": "Status",
      "default": "ok"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Warnings",
      "description": "Caveats to tell the user"
    },
    "accuracy_m": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Accuracy M",
      "description": "The operation's stated accuracy; null for an exact conversion"
    },
    "provenance": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Provenance",
      "description": "Source, licence, attribution, retrieval time and method"
    },
    "source_crs": {
      "type": "string",
      "title": "Source Crs"
    },
    "target_crs": {
      "type": "string",
      "title": "Target Crs"
    },
    "area_of_use": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Area Of Use",
      "default": null
    },
    "coordinates": {
      "type": "array",
      "items": {
        "type": "array",
        "items": {
          "type": "number"
        }
      },
      "title": "Coordinates",
      "description": "Transformed points, in the target CRS's x/y(/z) order"
    }
  }
}
transform_coordinates annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
convert_height — Convert height (geoid models)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Convert a height between the ellipsoid (GNSS, drones) and a national height datum with the official geoid model: AHD (AUSGeoid2020), ODN (OSGM15), NZVD2016 (NZGeoid2016), NAVD88 (GEOID18), or global EGM2008. Never estimate a geoid separation from memory: it is often tens of metres and varies by metres across a region.

convert_height input schema
{
  "type": "object",
  "title": "convert_heightArguments",
  "required": [
    "latitude",
    "longitude",
    "height_m",
    "from_reference",
    "to_reference"
  ],
  "properties": {
    "height_m": {
      "type": "number",
      "title": "Height M",
      "maximum": 10000,
      "minimum": -1000,
      "description": "The height to convert, in metres"
    },
    "latitude": {
      "type": "number",
      "title": "Latitude",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in degrees (WGS84)"
    },
    "longitude": {
      "type": "number",
      "title": "Longitude",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in degrees (WGS84)"
    },
    "to_reference": {
      "type": "string",
      "title": "To Reference",
      "description": "'ellipsoidal', AHD, ODN, NZVD2016, NAVD88 or EGM2008"
    },
    "from_reference": {
      "type": "string",
      "title": "From Reference",
      "description": "'ellipsoidal', AHD, ODN, NZVD2016, NAVD88 or EGM2008"
    }
  }
}
convert_height output schema
{
  "type": "object",
  "title": "HeightResult",
  "required": [
    "height_m",
    "from_reference",
    "to_reference",
    "geoid_model",
    "separation_m",
    "method",
    "accuracy_m"
  ],
  "properties": {
    "grids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Grids"
    },
    "units": {
      "type": "object",
      "title": "Units",
      "description": "Unit of each numeric field",
      "additionalProperties": {
        "type": "string"
      }
    },
    "method": {
      "type": "string",
      "title": "Method"
    },
    "status": {
      "enum": [
        "ok",
        "partial",
        "cannot_answer"
      ],
      "type": "string",
      "title": "Status",
      "default": "ok"
    },
    "height_m": {
      "type": "number",
      "title": "Height M"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Warnings",
      "description": "Caveats to tell the user"
    },
    "accuracy_m": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Accuracy M"
    },
    "provenance": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Provenance",
      "description": "Source, licence, attribution, retrieval time and method"
    },
    "geoid_model": {
      "type": "string",
      "title": "Geoid Model"
    },
    "separation_m": {
      "type": "number",
      "title": "Separation M",
      "description": "Ellipsoidal height minus the datum height at this point"
    },
    "to_reference": {
      "type": "string",
      "title": "To Reference"
    },
    "from_reference": {
      "type": "string",
      "title": "From Reference"
    }
  }
}
convert_height annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
sun_position — Sun position and shadow
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

The Sun's apparent elevation and azimuth (from true north) at a place and time, and the shadow a vertical object casts on level ground (NOAA solar position, refraction included).

sun_position input schema
{
  "type": "object",
  "title": "sun_positionArguments",
  "required": [
    "latitude",
    "longitude",
    "time"
  ],
  "properties": {
    "tz": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 60
        },
        {
          "type": "null"
        }
      ],
      "title": "Tz",
      "default": null,
      "description": "IANA time zone for a local time, e.g. Australia/Melbourne"
    },
    "time": {
      "type": "string",
      "title": "Time",
      "maxLength": 40,
      "description": "ISO 8601, with a UTC offset (2026-12-21T12:00:00+11:00) or local with tz"
    },
    "latitude": {
      "type": "number",
      "title": "Latitude",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in degrees (WGS84)"
    },
    "longitude": {
      "type": "number",
      "title": "Longitude",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in degrees (WGS84)"
    },
    "object_height_m": {
      "anyOf": [
        {
          "type": "number",
          "maximum": 10000,
          "exclusiveMinimum": 0
        },
        {
          "type": "null"
        }
      ],
      "title": "Object Height M",
      "default": null,
      "description": "Height of a vertical object, for its shadow"
    }
  }
}
sun_position output schema
{
  "type": "object",
  "title": "SunResult",
  "required": [
    "time",
    "elevation_deg",
    "azimuth_deg",
    "declination_deg",
    "equation_of_time_min",
    "above_horizon",
    "method"
  ],
  "properties": {
    "time": {
      "type": "string",
      "title": "Time"
    },
    "units": {
      "type": "object",
      "title": "Units",
      "description": "Unit of each numeric field",
      "additionalProperties": {
        "type": "string"
      }
    },
    "method": {
      "type": "string",
      "title": "Method"
    },
    "status": {
      "enum": [
        "ok",
        "partial",
        "cannot_answer"
      ],
      "type": "string",
      "title": "Status",
      "default": "ok"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Warnings",
      "description": "Caveats to tell the user"
    },
    "provenance": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Provenance",
      "description": "Source, licence, attribution, retrieval time and method"
    },
    "azimuth_deg": {
      "type": "number",
      "title": "Azimuth Deg",
      "description": "Clockwise from true north"
    },
    "above_horizon": {
      "type": "boolean",
      "title": "Above Horizon"
    },
    "elevation_deg": {
      "type": "number",
      "title": "Elevation Deg",
      "description": "Apparent elevation above a flat horizon, refraction included"
    },
    "declination_deg": {
      "type": "number",
      "title": "Declination Deg"
    },
    "shadow_length_m": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Shadow Length M",
      "default": null,
      "description": "On level ground, for object_height_m"
    },
    "equation_of_time_min": {
      "type": "number",
      "title": "Equation Of Time Min"
    },
    "shadow_direction_deg": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Shadow Direction Deg",
      "default": null,
      "description": "Direction the shadow points, from true north"
    }
  }
}
sun_position annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
sun_times — Sunrise, sunset and hours of sun
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Sunrise, solar noon, sunset and day length on a date for a flat horizon; with terrain=True, also the hours of direct sun once hills are taken into account.

sun_times input schema
{
  "type": "object",
  "title": "sun_timesArguments",
  "required": [
    "latitude",
    "longitude",
    "date"
  ],
  "properties": {
    "tz": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 60
        },
        {
          "type": "null"
        }
      ],
      "title": "Tz",
      "default": null,
      "description": "IANA time zone, e.g. Australia/Melbourne; default UTC"
    },
    "date": {
      "type": "string",
      "title": "Date",
      "maxLength": 10,
      "description": "Local date, YYYY-MM-DD"
    },
    "terrain": {
      "type": "boolean",
      "title": "Terrain",
      "default": false,
      "description": "Also count hours of direct sun above the terrain horizon (reads the DEM; ~10-60 s)"
    },
    "latitude": {
      "type": "number",
      "title": "Latitude",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in degrees (WGS84)"
    },
    "longitude": {
      "type": "number",
      "title": "Longitude",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in degrees (WGS84)"
    }
  }
}
sun_times output schema
{
  "type": "object",
  "title": "SunTimesResult",
  "required": [
    "date",
    "time_zone",
    "sunrise",
    "solar_noon",
    "sunset",
    "day_length_h",
    "solar_noon_elevation_deg",
    "method"
  ],
  "properties": {
    "date": {
      "type": "string",
      "title": "Date"
    },
    "units": {
      "type": "object",
      "title": "Units",
      "description": "Unit of each numeric field",
      "additionalProperties": {
        "type": "string"
      }
    },
    "method": {
      "type": "string",
      "title": "Method"
    },
    "status": {
      "enum": [
        "ok",
        "partial",
        "cannot_answer"
      ],
      "type": "string",
      "title": "Status",
      "default": "ok"
    },
    "sunset": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Sunset"
    },
    "sunrise": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Sunrise"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Warnings",
      "description": "Caveats to tell the user"
    },
    "time_zone": {
      "type": "string",
      "title": "Time Zone"
    },
    "provenance": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Provenance",
      "description": "Source, licence, attribution, retrieval time and method"
    },
    "solar_noon": {
      "type": "string",
      "title": "Solar Noon"
    },
    "day_length_h": {
      "type": "number",
      "title": "Day Length H"
    },
    "terrain_hours": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Terrain Hours",
      "default": null,
      "description": "Hours of direct sun above the terrain horizon"
    },
    "last_direct_sun": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Last Direct Sun",
      "default": null
    },
    "first_direct_sun": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "First Direct Sun",
      "default": null
    },
    "solar_noon_elevation_deg": {
      "type": "number",
      "title": "Solar Noon Elevation Deg"
    }
  }
}
sun_times annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
terrain_horizon — Terrain horizon
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

The skyline the terrain makes around a point: for each azimuth, the elevation angle of the horizon and how far away the blocking terrain is (Copernicus 30 m DEM, Earth curvature and refraction). Use for solar-panel shading, valley sunlight, or what hills hide. ~10-60 s.

terrain_horizon input schema
{
  "type": "object",
  "title": "terrain_horizonArguments",
  "required": [
    "latitude",
    "longitude"
  ],
  "properties": {
    "latitude": {
      "type": "number",
      "title": "Latitude",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in degrees (WGS84)"
    },
    "step_deg": {
      "type": "number",
      "title": "Step Deg",
      "default": 5,
      "maximum": 10,
      "minimum": 0.5,
      "description": "Azimuth spacing; must divide 360"
    },
    "longitude": {
      "type": "number",
      "title": "Longitude",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in degrees (WGS84)"
    },
    "max_distance_m": {
      "type": "number",
      "title": "Max Distance M",
      "default": 20000,
      "maximum": 50000,
      "minimum": 500
    },
    "observer_height_m": {
      "type": "number",
      "title": "Observer Height M",
      "default": 1.5,
      "maximum": 500,
      "minimum": 0,
      "description": "Eye or sensor height above ground"
    }
  }
}
terrain_horizon output schema
{
  "type": "object",
  "title": "HorizonResult",
  "required": [
    "latitude",
    "longitude",
    "ground_elevation_m",
    "observer_height_m",
    "max_distance_m",
    "azimuths_deg",
    "horizon_elevation_deg",
    "obstruction_distance_m",
    "highest",
    "method"
  ],
  "properties": {
    "units": {
      "type": "object",
      "title": "Units",
      "description": "Unit of each numeric field",
      "additionalProperties": {
        "type": "string"
      }
    },
    "method": {
      "type": "string",
      "title": "Method"
    },
    "status": {
      "enum": [
        "ok",
        "partial",
        "cannot_answer"
      ],
      "type": "string",
      "title": "Status",
      "default": "ok"
    },
    "highest": {
      "type": "object",
      "title": "Highest",
      "additionalProperties": {
        "type": "number"
      }
    },
    "latitude": {
      "type": "number",
      "title": "Latitude"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Warnings",
      "description": "Caveats to tell the user"
    },
    "longitude": {
      "type": "number",
      "title": "Longitude"
    },
    "provenance": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Provenance",
      "description": "Source, licence, attribution, retrieval time and method"
    },
    "azimuths_deg": {
      "type": "array",
      "items": {
        "type": "number"
      },
      "title": "Azimuths Deg"
    },
    "max_distance_m": {
      "type": "number",
      "title": "Max Distance M"
    },
    "observer_height_m": {
      "type": "number",
      "title": "Observer Height M"
    },
    "ground_elevation_m": {
      "type": "number",
      "title": "Ground Elevation M"
    },
    "horizon_elevation_deg": {
      "type": "array",
      "items": {
        "type": "number"
      },
      "title": "Horizon Elevation Deg",
      "description": "Skyline elevation angle at each azimuth"
    },
    "obstruction_distance_m": {
      "type": "array",
      "items": {
        "type": "number"
      },
      "title": "Obstruction Distance M"
    }
  }
}
terrain_horizon annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
line_of_sight — Line of sight
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Whether A and B can see each other over the terrain (Copernicus 30 m DEM, curvature and refraction), the minimum clearance and where it occurs; with frequency_mhz, the first Fresnel zone clearance of a radio link (60% clear is the usual rule).

line_of_sight input schema
{
  "type": "object",
  "title": "line_of_sightArguments",
  "required": [
    "lat_a",
    "lon_a",
    "lat_b",
    "lon_b"
  ],
  "properties": {
    "lat_a": {
      "type": "number",
      "title": "Lat A",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in degrees (WGS84)"
    },
    "lat_b": {
      "type": "number",
      "title": "Lat B",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in degrees (WGS84)"
    },
    "lon_a": {
      "type": "number",
      "title": "Lon A",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in degrees (WGS84)"
    },
    "lon_b": {
      "type": "number",
      "title": "Lon B",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in degrees (WGS84)"
    },
    "height_a_m": {
      "type": "number",
      "title": "Height A M",
      "default": 1.5,
      "maximum": 1000,
      "minimum": 0,
      "description": "Height above ground at A (e.g. a mast)"
    },
    "height_b_m": {
      "type": "number",
      "title": "Height B M",
      "default": 1.5,
      "maximum": 1000,
      "minimum": 0,
      "description": "Height above ground at B"
    },
    "frequency_mhz": {
      "anyOf": [
        {
          "type": "number",
          "maximum": 300000,
          "minimum": 1
        },
        {
          "type": "null"
        }
      ],
      "title": "Frequency Mhz",
      "default": null,
      "description": "For a radio link: report first Fresnel zone clearance"
    }
  }
}
line_of_sight output schema
{
  "type": "object",
  "title": "LineOfSightResult",
  "required": [
    "visible",
    "distance_m",
    "bearing_deg",
    "min_clearance_m",
    "min_clearance_at",
    "method"
  ],
  "properties": {
    "units": {
      "type": "object",
      "title": "Units",
      "description": "Unit of each numeric field",
      "additionalProperties": {
        "type": "string"
      }
    },
    "method": {
      "type": "string",
      "title": "Method"
    },
    "status": {
      "enum": [
        "ok",
        "partial",
        "cannot_answer"
      ],
      "type": "string",
      "title": "Status",
      "default": "ok"
    },
    "fresnel": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ],
      "title": "Fresnel",
      "default": null
    },
    "visible": {
      "type": "boolean",
      "title": "Visible"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Warnings",
      "description": "Caveats to tell the user"
    },
    "distance_m": {
      "type": "number",
      "title": "Distance M"
    },
    "provenance": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Provenance",
      "description": "Source, licence, attribution, retrieval time and method"
    },
    "bearing_deg": {
      "type": "number",
      "title": "Bearing Deg"
    },
    "min_clearance_m": {
      "type": "number",
      "title": "Min Clearance M",
      "description": "Smallest gap between the sight line and the terrain; negative = blocked"
    },
    "min_clearance_at": {
      "type": "object",
      "title": "Min Clearance At",
      "additionalProperties": {
        "type": "number"
      }
    }
  }
}
line_of_sight annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
location_report — Location report
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

A dossier for a place: address, elevation, weather, and nearby amenities with exact distances, as a GeoJSON map layer listing every data source used. Takes ~10-30 s.

location_report input schema
{
  "type": "object",
  "title": "location_reportArguments",
  "required": [
    "location"
  ],
  "properties": {
    "location": {
      "type": "string",
      "title": "Location",
      "maxLength": 500,
      "minLength": 1,
      "description": "Place to analyse"
    },
    "radius_m": {
      "type": "number",
      "title": "Radius M",
      "default": 1000,
      "maximum": 10000,
      "exclusiveMinimum": 0
    }
  }
}
location_report output schema
{
  "type": "object",
  "title": "FeatureCollection",
  "required": [
    "features"
  ],
  "properties": {
    "bbox": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        {
          "type": "null"
        }
      ],
      "title": "Bbox",
      "default": null
    },
    "type": {
      "type": "string",
      "const": "FeatureCollection",
      "title": "Type",
      "default": "FeatureCollection"
    },
    "features": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Features"
    },
    "geospark": {
      "type": "object",
      "title": "Geospark",
      "additionalProperties": true
    }
  },
  "description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance."
}
location_report annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
select_site — Site selection
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Rank candidate sites in an area by geodesic distance to amenities you want nearby and away from ones to avoid (OpenStreetMap data). Takes ~10-30 s.

select_site input schema
{
  "type": "object",
  "title": "select_siteArguments",
  "required": [
    "within"
  ],
  "properties": {
    "near": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Near",
      "default": [],
      "maxItems": 10,
      "description": "Amenity types to be close to"
    },
    "avoid": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Avoid",
      "default": [],
      "maxItems": 10,
      "description": "Amenity types to stay away from"
    },
    "within": {
      "type": "string",
      "title": "Within",
      "maxLength": 500,
      "minLength": 1,
      "description": "City or neighbourhood"
    },
    "radius_m": {
      "type": "number",
      "title": "Radius M",
      "default": 3000,
      "maximum": 10000,
      "exclusiveMinimum": 0
    },
    "facility_type": {
      "type": "string",
      "title": "Facility Type",
      "default": "restaurant",
      "maxLength": 100
    }
  }
}
select_site output schema
{
  "type": "object",
  "title": "FeatureCollection",
  "required": [
    "features"
  ],
  "properties": {
    "bbox": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        {
          "type": "null"
        }
      ],
      "title": "Bbox",
      "default": null
    },
    "type": {
      "type": "string",
      "const": "FeatureCollection",
      "title": "Type",
      "default": "FeatureCollection"
    },
    "features": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Features"
    },
    "geospark": {
      "type": "object",
      "title": "Geospark",
      "additionalProperties": true
    }
  },
  "description": "An RFC 7946 GeoJSON FeatureCollection; `geospark` holds status, units, warnings, provenance."
}
select_site annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1768 ms
95th percentile latency
1768 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1768 ms · metadata changed · 21 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http geospark-mcp https://geospark.terrascout.app/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add geospark-mcp --url https://geospark.terrascout.app/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable geospark-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "geospark-mcp": {
      "url": "https://geospark.terrascout.app/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "geospark-mcp": {
      "type": "streamableHttp",
      "url": "https://geospark.terrascout.app/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start geospark-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "geospark-mcp": {
      "type": "http",
      "url": "https://geospark.terrascout.app/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http geospark-mcp https://geospark.terrascout.app/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "geospark-mcp": {
      "url": "https://geospark.terrascout.app/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "geospark-mcp": {
      "serverUrl": "https://geospark.terrascout.app/mcp"
    }
  }
}

Let your agent find its tools

Find servers like GeoSpark MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.