City Air Quality, Pollutant Breakdown & Forecast
omnial/get-city-air-quality
Given a city, state, and country, returns the current air quality index for that location with a pollutant-by-pollutant breakdown (e.g. PM2.5, ozone), an hourly and multi-day forecast of AQI and weather conditions, seasonal pollen levels, and health recommendations (whether it's safe to exercise outdoors, wear a mask, use an air purifier, or open windows) for that location.
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 $0.50.
Data source
Data from IQAir.
Use it
Five steps: search, inspect, learn, run, settle. No per-tool setup; your agent reaches this tool through the meta-tools it already has.
Connect once and your AI can find and run this tool, and any other it needs.
// 1. search: find the tool
omnial_search({ query: "what you need" })
// 2. inspect: price and input schema
omnial_inspect({ tool: "omnial/get-city-air-quality" })
// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "omnial/get-city-air-quality" })
// 4. run: price the exact call first, then run it
omnial_execute({ tool: "omnial/get-city-air-quality", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "omnial/get-city-air-quality", input: { /* ... */ } })
// 5. settle: the call is charged when it finishes, nothing to doNot 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.
| Charge | Price |
|---|---|
Per call | $0.0137 |
- Updated
- Oct 25, 2026
Input and output schemas
Input schema
{
"type": "object",
"required": [
"country",
"city",
"state"
],
"properties": {
"city": {
"type": "string",
"description": "City URL slug (e.g. 'new-york-city', 'beijing', 'santiago'). Obtainable from the url field of get_live_city_ranking or get_world_air_quality results."
},
"state": {
"type": "string",
"description": "State/region URL slug (e.g. 'new-york', 'beijing', 'santiago-metropolitan')."
},
"country": {
"type": "string",
"description": "Country URL slug (e.g. 'usa', 'china', 'chile')."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": [
"object",
"null"
],
"properties": {
"details": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The resolved city's display name, e.g. 'New York'."
},
"state": {
"type": "string",
"description": "Display state/region name, e.g. 'New York'."
},
"country": {
"type": "string",
"description": "Display country name, e.g. 'USA'."
},
"current": {
"type": "object",
"properties": {
"ts": {
"type": "string",
"description": "ISO 8601 timestamp of the current reading."
},
"aqi": {
"type": "number",
"description": "Current overall air quality index."
},
"icon": {
"type": "string",
"description": "Weather icon code, not customer-meaningful without a lookup table."
},
"wind": {
"type": "object",
"properties": {
"speed": {
"type": "number"
},
"direction": {
"type": "number",
"description": "Degrees."
}
},
"additionalProperties": true
},
"pollen": {
"type": "object",
"properties": {
"pollens": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "e.g. 'grass', 'weed', 'tree'."
},
"level": {
"type": "number"
}
},
"additionalProperties": true
}
},
"globalIndexLevel": {
"type": "number",
"description": "0-3 on the one real call observed (low to high) -- the upstream ceiling isn't documented, treat as at least that range."
}
},
"additionalProperties": true
},
"humidity": {
"type": "number",
"description": "Percent."
},
"pressure": {
"type": "number",
"description": "Atmospheric pressure, hPa on the one real call."
},
"condition": {
"type": "string",
"description": "Weather condition text, e.g. 'Broken clouds'."
},
"estimated": {
"type": "boolean",
"description": "Whether this reading is measured from a real station or estimated/modeled -- observed as `false` on the one real call; the customer-facing meaning of `true` is inferred from the field name, not confirmed against a real estimated reading."
},
"pollutants": {
"type": "array",
"items": {
"type": "object",
"properties": {
"aqi": {
"type": "number"
},
"unit": {
"type": "string",
"description": "e.g. 'µg/m³'."
},
"description": {
"type": "string",
"description": "e.g. 'Fine particles (≤ 2.5 µm)'."
},
"concentration": {
"type": "number"
},
"pollutantName": {
"type": "string",
"description": "Short code, e.g. 'pm25', 'o3'."
}
},
"additionalProperties": true
},
"description": "Per-pollutant breakdown for the current reading, e.g. PM2.5 and ozone on the one real call observed."
},
"WHOExposure": {
"type": "object",
"properties": {
"WHOExposure": {
"type": "number",
"description": "0-1 exposure fraction against WHO guideline thresholds."
},
"WHOExposureColor": {
"type": "string",
"description": "Color-coded severity for the WHO exposure level, e.g. 'green'."
}
},
"description": "WHO guideline exposure, alongside the AQI figure above.",
"additionalProperties": true
},
"temperature": {
"type": "number",
"description": "Celsius on the one real call observed."
},
"concentration": {
"type": "number",
"description": "Concentration of the main pollutant, in the unit its own pollutants[] entry documents."
},
"mainPollutant": {
"type": "string",
"description": "Short code of the pollutant driving the current AQI, e.g. 'o3'."
},
"aqiDescription": {
"type": "string",
"description": "Observed as 'Air quality index' on the one real call -- likely a fixed label, not a per-city description."
}
},
"additionalProperties": true
},
"timezone": {
"type": "string",
"description": "IANA timezone, e.g. 'America/New_York'."
},
"forecasts": {
"type": "object",
"properties": {
"daily": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ts": {
"type": "string"
},
"aqi": {
"type": "number"
},
"icon": {
"type": "string"
},
"wind": {
"type": "object",
"properties": {
"speed": {
"type": "number"
},
"direction": {
"type": "number"
}
},
"additionalProperties": true
},
"pollen": {
"type": "object",
"properties": {
"pollens": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"level": {
"type": "number"
}
},
"additionalProperties": true
}
},
"globalIndexLevel": {
"type": "number"
}
},
"additionalProperties": true
},
"humidity": {
"type": "number"
},
"pressure": {
"type": "number"
},
"condition": {
"type": "string"
},
"temperature": {
"type": "object",
"properties": {
"max": {
"type": "number"
},
"min": {
"type": "number"
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"description": "7 entries on the one real call observed."
},
"hourly": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ts": {
"type": "string"
},
"aqi": {
"type": "number"
},
"icon": {
"type": "string"
},
"wind": {
"type": "object",
"properties": {
"speed": {
"type": "number"
},
"direction": {
"type": "number"
}
},
"additionalProperties": true
},
"humidity": {
"type": "number"
},
"pressure": {
"type": "number"
},
"condition": {
"type": "string"
},
"temperature": {
"type": "number"
},
"probabilityOfRain": {
"type": "number",
"description": "Percent -- present only on some hourly entries (e.g. one of 72, for an hour forecast as 'Rain'); absent on others, not a guaranteed field."
}
},
"additionalProperties": true
},
"description": "72 entries on the one real call observed (hourly, 3 days out)."
}
},
"additionalProperties": true
},
"coordinates": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"additionalProperties": true
},
"recommendations": {
"type": "object",
"properties": {
"pollution": {
"type": "object",
"properties": {
"mask": {
"type": "object",
"properties": {
"value": {
"type": "string",
"description": "Observed as 'hidden' on the one real call (recommendation not shown at this AQI level)."
}
},
"additionalProperties": true
},
"windows": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"value": {
"type": "string"
}
},
"additionalProperties": true
},
"exercise": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"value": {
"type": "string"
}
},
"additionalProperties": true
},
"airPurifier": {
"type": "object",
"properties": {
"value": {
"type": "string",
"description": "Same 'hidden'/shown pattern as `mask.value`."
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
},
"description": "Health guidance keyed by activity, each with a color-coded severity `value` ('green'/'hidden' on the one real call observed -- other severities are inferred from the pattern, not confirmed) and, for exercise/windows, a short human-readable `text`.",
"additionalProperties": true
},
"activeStationsCount": {
"type": "number",
"description": "Number of monitoring stations currently feeding this location's data."
}
},
"additionalProperties": true
}
},
"description": "null when the given city/state/country slug does not resolve to a known location.",
"additionalProperties": true
},
"status": {
"type": "string",
"description": "'success' on the one real found-city call observed."
}
},
"description": "The air-quality record. A city slug that does not resolve returns an empty/null result with none of the fields below present -- the bare literal `null`, not an object containing a null `data` -- so a caller must check for this before reading any nested field.",
"additionalProperties": true
}