Skip to content
Eden Engine

Air Quality Map Clusters (by Bounding Box)

omnial/get-map-data

Given a geographic bounding box and a map zoom level, returns geographic clusters of air quality monitoring stations within that box -- each cluster's approximate coordinates, average AQI, and how many stations it groups. At high enough zoom a cluster resolves down to a single named monitoring station instead of an aggregate. Built for plotting an air quality heatmap or cluster overlay on a map, not for looking up one city's air quality.

activeper callv2

Price

Up to $0.0137 per call; you pay what the call used

You pay the price shown. If a call turns out to cost more than its quote, you pay the actual price, capped at twice the quote. No monthly minimum. Top-ups start at $5.00.

Data source

IQAir

Data from IQAir.

Use it

Your AI assistant does the work: it finds this tool, shows you the price first, runs it, and you are charged when the run finishes. There is nothing to set up for this tool in particular.

Connect once and your AI can find and run this tool, and any other it needs.

For developers: the calls your assistant makes
agent
// 1. search: find the tool
omnial_search({ query: "what you need" })

// 2. inspect: price and input schema
omnial_inspect({ tool: "omnial/get-map-data" })

// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "omnial/get-map-data" })

// 4. run: price the exact call first, then run it
omnial_execute({ tool: "omnial/get-map-data", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "omnial/get-map-data", input: { /* ... */ } })

// 5. settle: the call is charged when it finishes, nothing to do

Not connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.

Pricing

Every charge this tool can incur.

ChargePrice
Per call
$0.0137
Updated
Oct 27, 2026

Input and output schemas

Input schema
input_schema.json
{
  "type": "object",
  "required": [
    "bbox"
  ],
  "properties": {
    "bbox": {
      "type": "string",
      "description": "Bounding box as comma-separated string: minLng,minLat,maxLng,maxLat (e.g. '-122.5,37.0,-121.5,38.0'). Required -- identifies the geographic area to query."
    },
    "zoom": {
      "type": "integer",
      "description": "Map zoom level (1-20). Higher values return more granular clusters with fewer stations per cluster."
    }
  },
  "additionalProperties": false
}
Output schema
output_schema.json
{
  "type": "object",
  "required": [
    "status",
    "data"
  ],
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "markers"
      ],
      "properties": {
        "markers": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "type",
              "geohash",
              "stationsCount",
              "coordinates",
              "aqi"
            ],
            "properties": {
              "aqi": {
                "type": "number",
                "description": "Air quality index for this marker -- the cluster's average on a 'cluster' type marker, or that one station's own reading on a 'station' type marker."
              },
              "name": {
                "type": "string",
                "description": "The individual monitoring station's display name -- only present when `type` is 'station', never on a 'cluster' marker (e.g. in an SF Bay Area box at zoom 8, only 1 of 22 markers carries this field)."
              },
              "type": {
                "type": "string",
                "description": "Either 'cluster' (an aggregate of nearby stations) or 'station' (a single resolved monitoring station) -- both values observed on the same real call at zoom 8."
              },
              "geohash": {
                "type": "string",
                "description": "The geohash cell this marker was clustered into."
              },
              "coordinates": {
                "type": "object",
                "required": [
                  "latitude",
                  "longitude"
                ],
                "properties": {
                  "latitude": {
                    "type": "number"
                  },
                  "longitude": {
                    "type": "number"
                  }
                },
                "additionalProperties": false
              },
              "stationsCount": {
                "type": "integer",
                "description": "Number of monitoring stations grouped into this marker; 1 on every 'station' type marker observed."
              }
            },
            "additionalProperties": false
          },
          "description": "Empty when no monitoring stations fall inside the given bbox; otherwise one entry per cluster or, at high zoom over a sparse area, one entry per individual station."
        }
      },
      "additionalProperties": false
    },
    "status": {
      "type": "string",
      "description": "'success' on both real calls observed."
    }
  },
  "description": "The map-cluster record. A bounding box with no monitoring stations in it returns `data.markers` as an empty array rather than omitting the field (e.g. a box over the open Pacific Ocean).",
  "additionalProperties": false
}