{"name":"io.github.Maz2580/geospark","slug":"maz2580-geospark","title":"GeoSpark","description":"Verifiable geospatial tools: distances, topology, isochrones, Overture Maps, with sources.","url":"https://mcp.market/server/maz2580-geospark","rating":null,"grade":"A","score":87,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":36,"stars":20,"forks":3,"downloads_week":null,"last_push_at":"2026-10-25T03:04:39.000Z","license":"Apache-2.0"},"uptime":{"percent":100,"checks":26,"ok":26,"last_checked_at":"2026-11-02T10:55:42.462Z","last_ok_at":"2026-11-02T10:55:42.462Z","latency_ms":737},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/Maz2580/geospark","website":"https://geospark.terrascout.app","version":"0.8.0","remotes":[{"type":"streamable-http","url":"https://geospark.terrascout.app/mcp"}],"packages":[],"tools":[{"name":"calculate_distance","description":"Exact geodesic distance between two places or geometries on the WGS84 ellipsoid.\n\n        Use for any \"how far\" question instead of estimating. For NAMED places pass place_a and\n        place_b; the server geocodes them, so never type coordinates for a place yourself. Use\n        point_a/point_b only for coordinates the user gave or another tool returned. For lines\n        and polygons the distance is between their nearest points. Returns metres and kilometres.\n        ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"place_a":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"A place NAME, e.g. 'Adelaide Oval'; geocoded on the server (preferred)","title":"Place A"},"place_b":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"A place NAME, e.g. 'Adelaide Oval'; geocoded on the server (preferred)","title":"Place B"},"point_a":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"A GeoJSON geometry, e.g. {\"type\": \"Point\", \"coordinates\": [lon, lat]}; only for coordinates the user gave or a tool returned","title":"Point A"},"point_b":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"A GeoJSON geometry, e.g. {\"type\": \"Point\", \"coordinates\": [lon, lat]}; only for coordinates the user gave or a tool returned","title":"Point B"}},"title":"calculate_distanceArguments"}},{"name":"check_spatial_relationship","description":"Ground-truth topology: does geometry_a <relationship> geometry_b?\n\n        Use instead of guessing containment, overlap or adjacency. Invalid geometries (for\n        example self-intersecting polygons) are refused with the reason.\n        ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"geometry_a":{"additionalProperties":true,"description":"A GeoJSON geometry, e.g. {\"type\": \"Point\", \"coordinates\": [lon, lat]}","title":"Geometry A","type":"object"},"geometry_b":{"additionalProperties":true,"description":"A GeoJSON geometry, e.g. {\"type\": \"Point\", \"coordinates\": [lon, lat]}","title":"Geometry B","type":"object"},"relationship":{"enum":["contains","intersects","within","touches","crosses","overlaps","disjoint"],"title":"Relationship","type":"string"}},"required":["geometry_a","geometry_b","relationship"],"title":"check_spatial_relationshipArguments"}},{"name":"convert_height","description":"Convert a height between the ellipsoid (GNSS, drones) and a national height datum with the\n        official geoid model: AHD (AUSGeoid2020), ODN (OSGM15), NZVD2016 (NZGeoid2016), NAVD88\n        (GEOID18), or global EGM2008. Never estimate a geoid separation from memory: it is often\n        tens of metres and varies by metres across a region.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"latitude":{"description":"Latitude in degrees (WGS84)","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in degrees (WGS84)","maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"height_m":{"description":"The height to convert, in metres","maximum":10000,"minimum":-1000,"title":"Height M","type":"number"},"from_reference":{"description":"'ellipsoidal', AHD, ODN, NZVD2016, NAVD88 or EGM2008","title":"From Reference","type":"string"},"to_reference":{"description":"'ellipsoidal', AHD, ODN, NZVD2016, NAVD88 or EGM2008","title":"To Reference","type":"string"}},"required":["latitude","longitude","height_m","from_reference","to_reference"],"title":"convert_heightArguments"}},{"name":"geocode","description":"Find coordinates for an address or place name (OpenStreetMap Nominatim).\n\n        Check `geospark.warnings` for ambiguous names (e.g. \"Springfield\") and ask the user\n        which one they mean, or add a region.\n        ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"description":"Address or place name","maxLength":500,"minLength":1,"title":"Query","type":"string"},"limit":{"default":5,"maximum":10,"minimum":1,"title":"Limit","type":"integer"}},"required":["query"],"title":"geocodeArguments"}},{"name":"get_active_fires","description":"Satellite active-fire detections near a point (NASA FIRMS; the server needs a FIRMS_MAP_KEY).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"latitude":{"description":"Latitude in degrees (WGS84)","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in degrees (WGS84)","maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"days":{"default":1,"maximum":2,"minimum":1,"title":"Days","type":"integer"}},"required":["latitude","longitude"],"title":"get_active_firesArguments"}},{"name":"get_air_quality","description":"Latest PM2.5, NO2, O3 from the nearest monitoring stations (OpenAQ; the server needs\n        an OPENAQ_API_KEY), with each station's data licence.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"latitude":{"description":"Latitude in degrees (WGS84)","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in degrees (WGS84)","maximum":180,"minimum":-180,"title":"Longitude","type":"number"}},"required":["latitude","longitude"],"title":"get_air_qualityArguments"}},{"name":"get_elevation","description":"Ground elevation in metres (Copernicus GLO-30, Open Elevation fallback), with its\n        vertical datum and accuracy.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"latitude":{"description":"Latitude in degrees (WGS84)","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in degrees (WGS84)","maximum":180,"minimum":-180,"title":"Longitude","type":"number"}},"required":["latitude","longitude"],"title":"get_elevationArguments"}},{"name":"get_weather","description":"Current weather and a daily forecast for a point (Open-Meteo, no key needed).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"latitude":{"description":"Latitude in degrees (WGS84)","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in degrees (WGS84)","maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"forecast_days":{"default":3,"maximum":16,"minimum":1,"title":"Forecast Days","type":"integer"}},"required":["latitude","longitude"],"title":"get_weatherArguments"}},{"name":"isochrone","description":"Where can you get to from a point within N minutes on foot, by bike or by car?\n        Returns one polygon per contour with its geodesic area (Valhalla over OpenStreetMap).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"latitude":{"description":"Latitude in degrees (WGS84)","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in degrees (WGS84)","maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"minutes":{"default":[10],"description":"Contour times, 1-60","items":{"type":"integer"},"maxItems":4,"minItems":1,"title":"Minutes","type":"array"},"mode":{"default":"walk","enum":["walk","bike","drive"],"title":"Mode","type":"string"}},"required":["latitude","longitude"],"title":"isochroneArguments"}},{"name":"line_of_sight","description":"Whether A and B can see each other over the terrain (Copernicus 30 m DEM, curvature and\n        refraction), the minimum clearance and where it occurs; with frequency_mhz, the first Fresnel\n        zone clearance of a radio link (60% clear is the usual rule).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"lat_a":{"description":"Latitude in degrees (WGS84)","maximum":90,"minimum":-90,"title":"Lat A","type":"number"},"lon_a":{"description":"Longitude in degrees (WGS84)","maximum":180,"minimum":-180,"title":"Lon A","type":"number"},"lat_b":{"description":"Latitude in degrees (WGS84)","maximum":90,"minimum":-90,"title":"Lat B","type":"number"},"lon_b":{"description":"Longitude in degrees (WGS84)","maximum":180,"minimum":-180,"title":"Lon B","type":"number"},"height_a_m":{"default":1.5,"description":"Height above ground at A (e.g. a mast)","maximum":1000,"minimum":0,"title":"Height A M","type":"number"},"height_b_m":{"default":1.5,"description":"Height above ground at B","maximum":1000,"minimum":0,"title":"Height B M","type":"number"},"frequency_mhz":{"anyOf":[{"maximum":300000,"minimum":1,"type":"number"},{"type":"null"}],"default":null,"description":"For a radio link: report first Fresnel zone clearance","title":"Frequency Mhz"}},"required":["lat_a","lon_a","lat_b","lon_b"],"title":"line_of_sightArguments"}},{"name":"location_report","description":"A dossier for a place: address, elevation, weather, and nearby amenities with exact\n        distances, as a GeoJSON map layer listing every data source used. Takes ~10-30 s.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"location":{"description":"Place to analyse","maxLength":500,"minLength":1,"title":"Location","type":"string"},"radius_m":{"default":1000,"exclusiveMinimum":0,"maximum":10000,"title":"Radius M","type":"number"}},"required":["location"],"title":"location_reportArguments"}},{"name":"overture_features","description":"Open global map data from Overture Maps, no API key: points of interest (with\n        categories), building footprints (height, floors, geodesic footprint area), road and path\n        segments (geodesic length), or `divisions`, the administrative areas containing the point\n        (country, region, city, neighbourhood). Results are nearest first, with distances in metres.\n        Can take 5-20 s on a cold cache.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"theme":{"enum":["places","buildings","transportation","divisions"],"title":"Theme","type":"string"},"latitude":{"description":"Latitude in degrees (WGS84)","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in degrees (WGS84)","maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"radius_m":{"default":300,"description":"Search radius in metres","exclusiveMinimum":0,"maximum":2000,"title":"Radius M","type":"number"},"category":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Places only, e.g. 'cafe'","title":"Category"},"limit":{"anyOf":[{"maximum":2000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"title":"Limit"}},"required":["theme","latitude","longitude"],"title":"overture_featuresArguments"}},{"name":"reverse_geocode","description":"Find the address or place at a coordinate (OpenStreetMap Nominatim).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"latitude":{"description":"Latitude in degrees (WGS84)","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in degrees (WGS84)","maximum":180,"minimum":-180,"title":"Longitude","type":"number"}},"required":["latitude","longitude"],"title":"reverse_geocodeArguments"}},{"name":"route","description":"Driving route between two points (OSRM over OpenStreetMap): line geometry, distance\n        in metres and duration in seconds.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"from_latitude":{"description":"Latitude in degrees (WGS84)","maximum":90,"minimum":-90,"title":"From Latitude","type":"number"},"from_longitude":{"description":"Longitude in degrees (WGS84)","maximum":180,"minimum":-180,"title":"From Longitude","type":"number"},"to_latitude":{"description":"Latitude in degrees (WGS84)","maximum":90,"minimum":-90,"title":"To Latitude","type":"number"},"to_longitude":{"description":"Longitude in degrees (WGS84)","maximum":180,"minimum":-180,"title":"To Longitude","type":"number"}},"required":["from_latitude","from_longitude","to_latitude","to_longitude"],"title":"routeArguments"}},{"name":"select_site","description":"Rank candidate sites in an area by geodesic distance to amenities you want nearby and\n        away from ones to avoid (OpenStreetMap data). Takes ~10-30 s.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"within":{"description":"City or neighbourhood","maxLength":500,"minLength":1,"title":"Within","type":"string"},"near":{"default":[],"description":"Amenity types to be close to","items":{"type":"string"},"maxItems":10,"title":"Near","type":"array"},"avoid":{"default":[],"description":"Amenity types to stay away from","items":{"type":"string"},"maxItems":10,"title":"Avoid","type":"array"},"facility_type":{"default":"restaurant","maxLength":100,"title":"Facility Type","type":"string"},"radius_m":{"default":3000,"exclusiveMinimum":0,"maximum":10000,"title":"Radius M","type":"number"}},"required":["within"],"title":"select_siteArguments"}},{"name":"spatial_operation","description":"Compute a buffer (shape-preserving, metres), geodesic area or length, centroid or convex hull.\n\n        Returns the resulting geometry as GeoJSON with its measurements and units.\n        ","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"operation":{"enum":["buffer","area","length","centroid","convex_hull"],"title":"Operation","type":"string"},"geometry":{"additionalProperties":true,"description":"A GeoJSON geometry, e.g. {\"type\": \"Point\", \"coordinates\": [lon, lat]}","title":"Geometry","type":"object"},"radius_m":{"anyOf":[{"maximum":100000,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Buffer radius in metres","title":"Radius M"}},"required":["operation","geometry"],"title":"spatial_operationArguments"}},{"name":"sun_position","description":"The Sun's apparent elevation and azimuth (from true north) at a place and time, and the\n        shadow a vertical object casts on level ground (NOAA solar position, refraction included).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"latitude":{"description":"Latitude in degrees (WGS84)","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in degrees (WGS84)","maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"time":{"description":"ISO 8601, with a UTC offset (2026-12-21T12:00:00+11:00) or local with tz","maxLength":40,"title":"Time","type":"string"},"tz":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"IANA time zone for a local time, e.g. Australia/Melbourne","title":"Tz"},"object_height_m":{"anyOf":[{"exclusiveMinimum":0,"maximum":10000,"type":"number"},{"type":"null"}],"default":null,"description":"Height of a vertical object, for its shadow","title":"Object Height M"}},"required":["latitude","longitude","time"],"title":"sun_positionArguments"}},{"name":"sun_times","description":"Sunrise, solar noon, sunset and day length on a date for a flat horizon; with terrain=True,\n        also the hours of direct sun once hills are taken into account.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"latitude":{"description":"Latitude in degrees (WGS84)","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in degrees (WGS84)","maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"date":{"description":"Local date, YYYY-MM-DD","maxLength":10,"title":"Date","type":"string"},"tz":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"IANA time zone, e.g. Australia/Melbourne; default UTC","title":"Tz"},"terrain":{"default":false,"description":"Also count hours of direct sun above the terrain horizon (reads the DEM; ~10-60 s)","title":"Terrain","type":"boolean"}},"required":["latitude","longitude","date"],"title":"sun_timesArguments"}},{"name":"terrain_horizon","description":"The skyline the terrain makes around a point: for each azimuth, the elevation angle of the\n        horizon and how far away the blocking terrain is (Copernicus 30 m DEM, Earth curvature and\n        refraction). Use for solar-panel shading, valley sunlight, or what hills hide. ~10-60 s.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"latitude":{"description":"Latitude in degrees (WGS84)","maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"description":"Longitude in degrees (WGS84)","maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"observer_height_m":{"default":1.5,"description":"Eye or sensor height above ground","maximum":500,"minimum":0,"title":"Observer Height M","type":"number"},"max_distance_m":{"default":20000,"maximum":50000,"minimum":500,"title":"Max Distance M","type":"number"},"step_deg":{"default":5,"description":"Azimuth spacing; must divide 360","maximum":10,"minimum":0.5,"title":"Step Deg","type":"number"}},"required":["latitude","longitude"],"title":"terrain_horizonArguments"}},{"name":"transform_coordinates","description":"Convert coordinates between CRSs as the official transformation does: GDA94 to GDA2020,\n        MGA zones, British National Grid (OSTN15), NAD27 to NAD83 (NADCON), ITRF at an epoch, and\n        any other EPSG pair. Uses national grids (downloaded once), refuses PROJ's ballpark\n        approximations, and returns the operation and its stated accuracy. Use this instead of\n        applying datum parameters yourself.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"source_crs":{"description":"CRS name or EPSG code, e.g. 'GDA94 / MGA zone 55' or EPSG:28355","maxLength":100,"title":"Source Crs","type":"string"},"target_crs":{"description":"CRS name or EPSG code, e.g. 'GDA2020 / MGA zone 55' or EPSG:7855","maxLength":100,"title":"Target Crs","type":"string"},"coordinates":{"description":"[x, y] or [x, y, z]: [lon, lat] or [easting, northing]","items":{"items":{"type":"number"},"type":"array"},"maxItems":1000,"minItems":1,"title":"Coordinates","type":"array"},"epoch":{"anyOf":[{"maximum":2100,"minimum":1900,"type":"number"},{"type":"null"}],"default":null,"description":"Decimal year, for ITRF/ATRF frames","title":"Epoch"}},"required":["source_crs","target_crs","coordinates"],"title":"transform_coordinatesArguments"}},{"name":"travel_time_matrix","description":"Network travel time (minutes) and distance (metres) from each origin to each destination.\n        Note: points here are [latitude, longitude] pairs.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"origins":{"description":"[[lat, lon], ...]","items":{"maxItems":2,"minItems":2,"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array"},"maxItems":5,"minItems":1,"title":"Origins","type":"array"},"destinations":{"description":"[[lat, lon], ...]","items":{"maxItems":2,"minItems":2,"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array"},"maxItems":5,"minItems":1,"title":"Destinations","type":"array"},"mode":{"default":"walk","enum":["walk","bike","drive"],"title":"Mode","type":"string"}},"required":["origins","destinations"],"title":"travel_time_matrixArguments"}}],"scan":{"score":87,"grade":"A","scanned_at":"2026-10-25T04:59:32.177Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-25T04:59:32.040Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":17,"max":20,"notes":["remote reachable in 2498ms"]},"poisoning":{"score":15,"max":15,"notes":["21 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"probes":[{"url":"https://geospark.terrascout.app/mcp","reachable":true,"authRequired":false,"latencyMs":2498,"serverInfo":{"name":"geospark","version":"0.10.0"}}],"packages":[],"repo":{"found":true,"owner":"Maz2580","repo":"geospark","archived":false,"pushedAt":"2026-10-25T03:04:39Z","stars":20,"forks":3,"openIssues":1,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/128564697?v=4","ownerCreatedAt":"2023-03-22T03:05:04Z","license":"Apache-2.0"},"icon":{"url":"https://geospark.terrascout.app/assets/logo.svg?v=36701d37d2f1","source":"site"},"presence":{"stars":20,"forks":3,"downloadsWeek":null,"license":"Apache-2.0","lastPushAt":"2026-10-25T03:04:39.000Z","score":36}}}},"grade_history":[],"reviews":[]}