PM2.5 now, daily history, forecast and country rankings for 300+ cities from citizen sensors.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
PM2.5 now in a city (mean of the latest reading of each eligible sensor, at most 60 minutes old) with its US EPA category and the weather now (temperature, humidity, pressure, wind, clouds, precipitation), plus the last completed day from the Atmy Data Hub with its weather. Pass city or lat/lon.
Latitude; with lon, the nearest city with an Atmy summary within 50 km.
Longitude.
City name in any of the site languages, a slug like "russia/krasnoyarsk", or the Atmy city id.
Language of city and country names and of the page link; default en.
Country name, to tell apart cities with the same name.
PM2.5 now in a city (mean of the latest reading of each eligible sensor, at most 60 minutes old) with its US EPA category and the weather now (temperature, humidity, pressure, wind, clouds, precipitation), plus the last completed day from the Atmy Data Hub with its weather. Pass city or lat/lon.
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude; with lon, the nearest city with an Atmy summary within 50 km. |
| lon | number | Longitude. |
| city | string | City name in any of the site languages, a slug like "russia/krasnoyarsk", or the Atmy city id. |
| lang | string | Language of city and country names and of the page link; default en. |
| country | string | Country name, to tell apart cities with the same name. |
{
"type": "object",
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude; with lon, the nearest city with an Atmy summary within 50 km."
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude."
},
"city": {
"type": "string",
"description": "City name in any of the site languages, a slug like \"russia/krasnoyarsk\", or the Atmy city id."
},
"lang": {
"enum": [
"en",
"ru",
"de",
"fr",
"es",
"it",
"pt-BR",
"pl",
"cs",
"hu",
"ro",
"bg",
"sr",
"id",
"hi",
"ja",
"zh",
"uz",
"kk",
"ky",
"tg",
"az",
"ka",
"hy",
"tr"
],
"type": "string",
"description": "Language of city and country names and of the page link; default en."
},
"country": {
"type": "string",
"description": "Country name, to tell apart cities with the same name."
}
},
"additionalProperties": false
}Daily PM2.5 of a city from the Atmy Data Hub (UTC days, sensors after the quality check) with the day's weather from 2026-01-19 (mean, lowest and highest temperature, humidity, pressure, wind, strongest gust, clouds): the last days, or any period since 2017 with from/to, at most 400 days per call. For the whole history or records use get_air_quality_monthly first.
| Argument | Type | Description |
|---|---|---|
| to | string | Last day YYYY-MM-DD; default the last completed day. |
| lat | number | Latitude; with lon, the nearest city with an Atmy summary within 50 km. |
| lon | number | Longitude. |
| city | string | City name in any of the site languages, a slug like "russia/krasnoyarsk", or the Atmy city id. |
| days | integer | How many days back from the last completed day; ignored with from/to. |
| from | string | First day YYYY-MM-DD (2017-01-01 or later). |
| lang | string | Language of city and country names and of the page link; default en. |
| country | string | Country name, to tell apart cities with the same name. |
The whole measurement history of a city from the Atmy Data Hub: PM2.5 per month with the month's weather from 2026-01, yearly means (complete years marked), the dirtiest and cleanest months and days. For questions like "how has the air changed" or "the most polluted month on record".
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude; with lon, the nearest city with an Atmy summary within 50 km. |
| lon | number | Longitude. |
| city | string | City name in any of the site languages, a slug like "russia/krasnoyarsk", or the Atmy city id. |
| lang | string | Language of city and country names and of the page link; default en. |
| country | string | Country name, to tell apart cities with the same name. |
{
"type": "object",
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude; with lon, the nearest city with an Atmy summary within 50 km."
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude."
},
"city": {
"type": "string",
"description": "City name in any of the site languages, a slug like \"russia/krasnoyarsk\", or the Atmy city id."
},
"lang": {
"enum": [
"en",
"ru",
"de",
"fr",
"es",
"it",
"pt-BR",
"pl",
"cs",
"hu",
"ro",
"bg",
"sr",
"id",
"hi",
"ja",
"zh",
"uz",
"kk",
"ky",
"tg",
"az",
"ka",
"hy",
"tr"
],
"type": "string",
"description": "Language of city and country names and of the page link; default en."
},
"country": {
"type": "string",
"description": "Country name, to tell apart cities with the same name."
}
},
"additionalProperties": false
}The next hours of a city: temperature, wind, humidity, precipitation and the pollution accumulation index 0–100 (how strongly the weather keeps particles near the ground). A weather estimate, not a PM2.5 forecast.
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude; with lon, the nearest city with an Atmy summary within 50 km. |
| lon | number | Longitude. |
| city | string | City name in any of the site languages, a slug like "russia/krasnoyarsk", or the Atmy city id. |
| lang | string | Language of city and country names and of the page link; default en. |
| hours | integer | |
| country | string | Country name, to tell apart cities with the same name. |
{
"type": "object",
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude; with lon, the nearest city with an Atmy summary within 50 km."
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude."
},
"city": {
"type": "string",
"description": "City name in any of the site languages, a slug like \"russia/krasnoyarsk\", or the Atmy city id."
},
"lang": {
"enum": [
"en",
"ru",
"de",
"fr",
"es",
"it",
"pt-BR",
"pl",
"cs",
"hu",
"ro",
"bg",
"sr",
"id",
"hi",
"ja",
"zh",
"uz",
"kk",
"ky",
"tg",
"az",
"ka",
"hy",
"tr"
],
"type": "string",
"description": "Language of city and country names and of the page link; default en."
},
"hours": {
"type": "integer",
"default": 24,
"maximum": 72,
"minimum": 1
},
"country": {
"type": "string",
"description": "Country name, to tell apart cities with the same name."
}
},
"additionalProperties": false
}Cities of a country ranked by daily PM2.5 for the last completed day (Atmy Data Hub), most polluted or cleanest first.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of city and country names and of the page link; default en. |
| limit | integer | |
| order | string | |
| country* | string | Country name in any site language or the ISO code, e.g. "Russia", "Сербия", "DE". |
| settlements | string | Large cities only, or every settlement with enough sensors. |
{
"type": "object",
"required": [
"country"
],
"properties": {
"lang": {
"enum": [
"en",
"ru",
"de",
"fr",
"es",
"it",
"pt-BR",
"pl",
"cs",
"hu",
"ro",
"bg",
"sr",
"id",
"hi",
"ja",
"zh",
"uz",
"kk",
"ky",
"tg",
"az",
"ka",
"hy",
"tr"
],
"type": "string",
"description": "Language of city and country names and of the page link; default en."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1
},
"order": {
"enum": [
"most_polluted",
"cleanest"
],
"type": "string",
"default": "most_polluted"
},
"country": {
"type": "string",
"description": "Country name in any site language or the ISO code, e.g. \"Russia\", \"Сербия\", \"DE\"."
},
"settlements": {
"enum": [
"cities",
"all"
],
"type": "string",
"default": "cities",
"description": "Large cities only, or every settlement with enough sensors."
}
},
"additionalProperties": false
}Find the cities with an Atmy air-quality summary by name (any language) or country. Returns slugs to pass to the other tools.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of city and country names and of the page link; default en. |
| limit | integer | |
| query | string | Part of the city name in any site language. |
| country | string | Country name or ISO code. |
{
"type": "object",
"properties": {
"lang": {
"enum": [
"en",
"ru",
"de",
"fr",
"es",
"it",
"pt-BR",
"pl",
"cs",
"hu",
"ro",
"bg",
"sr",
"id",
"hi",
"ja",
"zh",
"uz",
"kk",
"ky",
"tg",
"az",
"ka",
"hy",
"tr"
],
"type": "string",
"description": "Language of city and country names and of the page link; default en."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1
},
"query": {
"type": "string",
"description": "Part of the city name in any site language."
},
"country": {
"type": "string",
"description": "Country name or ISO code."
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"to": {
"type": "string",
"format": "date",
"description": "Last day YYYY-MM-DD; default the last completed day."
},
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude; with lon, the nearest city with an Atmy summary within 50 km."
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude."
},
"city": {
"type": "string",
"description": "City name in any of the site languages, a slug like \"russia/krasnoyarsk\", or the Atmy city id."
},
"days": {
"type": "integer",
"default": 30,
"maximum": 400,
"minimum": 1,
"description": "How many days back from the last completed day; ignored with from/to."
},
"from": {
"type": "string",
"format": "date",
"description": "First day YYYY-MM-DD (2017-01-01 or later)."
},
"lang": {
"enum": [
"en",
"ru",
"de",
"fr",
"es",
"it",
"pt-BR",
"pl",
"cs",
"hu",
"ro",
"bg",
"sr",
"id",
"hi",
"ja",
"zh",
"uz",
"kk",
"ky",
"tg",
"az",
"ka",
"hy",
"tr"
],
"type": "string",
"description": "Language of city and country names and of the page link; default en."
},
"country": {
"type": "string",
"description": "Country name, to tell apart cities with the same name."
}
},
"additionalProperties": false
}